From e33878ce7bdb45903a4d4bdac3863b60c338b958 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sun, 12 Jun 2022 08:31:28 +1000 Subject: [PATCH 01/64] Drop dependency-analysis plugin (#4946) This is blocking update to Kotlin 1.7.0 (#4821) --- build.gradle.kts | 11 ----------- gradle/libs.versions.toml | 1 - 2 files changed, 12 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 248a164a274..588ef8ee389 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,6 @@ plugins { id("io.gitlab.arturbosch.detekt") alias(libs.plugins.gradleVersions) alias(libs.plugins.sonarqube) - alias(libs.plugins.dependencyAnalysis) } allprojects { @@ -45,16 +44,6 @@ allprojects { } } -dependencyAnalysis { - issues { - all { - onUsedTransitiveDependencies { - severity("ignore") - } - } - } -} - val analysisDir = file(projectDir) val baselineFile = file("$rootDir/config/detekt/baseline.xml") val configFile = file("$rootDir/config/detekt/detekt.yml") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2a93f7292fb..329854cbd09 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,6 @@ contester-driver = { module = "io.github.davidburstrom.contester:contester-drive [plugins] binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.0" } -dependencyAnalysis = { id = "com.autonomousapps.dependency-analysis", version = "1.5.0" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradleVersions = { id = "com.github.ben-manes.versions", version = "0.42.0" } pluginPublishing = { id = "com.gradle.plugin-publish", version = "0.21.0" } From d06b109568fad705e86e53841c5617ee39066f53 Mon Sep 17 00:00:00 2001 From: Chao Zhang Date: Sun, 12 Jun 2022 14:21:22 -0700 Subject: [PATCH 02/64] Gradle Enterprise Trial (#4763) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor `JvmSpec` to avoid using test resources * Build a utility to copy resource files into temporary files * Fix deprecation warning on jacocoMergedReport * Add back `jvm` test fixtures * Enabled Remote Build cache * Change androidSdkInstalled to a boolean flag * Use consistent warningsAsErrors * Enable local build cache * Fix MaxLineLength violation * Update build-logic/src/main/kotlin/module.gradle.kts Co-authored-by: Brais Gabín * Add a separate job to enable `warningsAsErrors` Co-authored-by: Nicola Corti Co-authored-by: Brais Gabín --- .github/workflows/pre-merge.yaml | 18 ++++++++++++++++++ build-logic/src/main/kotlin/module.gradle.kts | 5 ++--- code-coverage-report/build.gradle.kts | 1 + detekt-gradle-plugin/build.gradle.kts | 19 +++++++++++-------- .../gitlab/arturbosch/detekt/DetektJvmSpec.kt | 5 ----- .../io/gitlab/arturbosch/detekt/JvmSpec.kt | 5 ++--- .../detekt/testkit/GradleRunnerExtensions.kt | 16 ++++++++++++++++ settings.gradle.kts | 19 +++++++++++++++++-- 8 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/GradleRunnerExtensions.kt diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index f581cf54aea..8a46716c519 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -10,6 +10,8 @@ on: env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + GRADLE_CACHE_USERNAME: ${{ secrets.GRADLE_CACHE_USERNAME }} + GRADLE_CACHE_PASSWORD: ${{ secrets.GRADLE_CACHE_USERNAME }} permissions: contents: read @@ -87,3 +89,19 @@ jobs: uses: gradle/gradle-build-action@v2 with: arguments: test -Pcompile-test-snippets=true + + warnings-as-errors: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + - name: Run with allWarningsAsErrors + uses: gradle/gradle-build-action@v2 + with: + arguments: build -x detekt -PwarningsAsErrors=true diff --git a/build-logic/src/main/kotlin/module.gradle.kts b/build-logic/src/main/kotlin/module.gradle.kts index 64c00360cd4..9b34d930814 100644 --- a/build-logic/src/main/kotlin/module.gradle.kts +++ b/build-logic/src/main/kotlin/module.gradle.kts @@ -57,12 +57,11 @@ tasks.withType().configureEach { "-Xsuppress-version-warnings", "-opt-in=kotlin.RequiresOptIn" ) - // Usage: ./gradlew build -PwarningsAsErrors=true. - // Note: currently there are warnings for detekt-gradle-plugin that seemingly can't be fixed + // Note: Currently there are warnings for detekt-gradle-plugin that seemingly can't be fixed // until Gradle releases an update (https://github.com/gradle/gradle/issues/16345) allWarningsAsErrors = when (project.name) { "detekt-gradle-plugin" -> false - else -> (project.findProperty("warningsAsErrors") == "true" || System.getenv("CI") == "true") + else -> project.findProperty("warningsAsErrors") == "true" } } } diff --git a/code-coverage-report/build.gradle.kts b/code-coverage-report/build.gradle.kts index 046a8cf777d..3b3ea8bb6fd 100644 --- a/code-coverage-report/build.gradle.kts +++ b/code-coverage-report/build.gradle.kts @@ -63,4 +63,5 @@ val customClassDirectories = configurations.allCodeCoverageReportClassDirectorie tasks.named("jacocoMergedReport", JacocoReport::class).configure { this.classDirectories.setFrom(customClassDirectories.files) + mustRunAfter(rootProject.project("detekt-generator").tasks.named("generateDocumentation")) } diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index 812f3bde8b8..b579eff7704 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -46,14 +46,6 @@ testing { ) ) } - targets { - all { - testTask.configure { - inputs.property("androidSdkRoot", System.getenv("ANDROID_SDK_ROOT")).optional(true) - inputs.property("androidHome", System.getenv("ANDROID_HOME")).optional(true) - } - } - } } register("functionalTest", JvmTestSuite::class) { useJUnitJupiter(libs.versions.junit.get()) @@ -61,6 +53,17 @@ testing { dependencies { implementation(libs.assertj) } + + targets { + all { + testTask.configure { + // If `androidSdkInstalled` is false, skip running DetektAndroidSpec + val isAndroidSdkInstalled = System.getenv("ANDROID_SDK_ROOT") != null || + System.getenv("ANDROID_HOME") != null + inputs.property("isAndroidSdkInstalled", isAndroidSdkInstalled).optional(true) + } + } + } } } } diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt index 0b4aea6d21b..e8416058421 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektJvmSpec.kt @@ -18,18 +18,15 @@ class DetektJvmSpec { kotlin("jvm") id("io.gitlab.arturbosch.detekt") } - repositories { mavenCentral() mavenLocal() } - detekt { reports { txt.destination = file("output-path.txt") } } - tasks.withType().configureEach { reports { txt.destination = file("output-path2.txt") @@ -58,12 +55,10 @@ class DetektJvmSpec { kotlin("jvm") id("io.gitlab.arturbosch.detekt") } - repositories { mavenCentral() mavenLocal() } - tasks.withType().configureEach { reports { txt.destination = file("output-path2.txt") diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt index 6b3afbbce6c..cc48081f178 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt @@ -1,16 +1,15 @@ package io.gitlab.arturbosch.detekt +import io.gitlab.arturbosch.detekt.testkit.withResourceDir import org.assertj.core.api.Assertions.assertThat import org.gradle.testkit.runner.GradleRunner import org.junit.jupiter.api.Test -import java.io.File class JvmSpec { @Test fun `Type resolution on JVM`() { - val projectDir = checkNotNull(javaClass.classLoader.getResource("jvm")?.file) val result = GradleRunner.create() - .withProjectDir(File(projectDir)) + .withResourceDir("jvm") .withPluginClasspath() .withArguments("detektMain") .buildAndFail() diff --git a/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/GradleRunnerExtensions.kt b/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/GradleRunnerExtensions.kt new file mode 100644 index 00000000000..5705f213828 --- /dev/null +++ b/detekt-gradle-plugin/src/testFixtures/kotlin/io/gitlab/arturbosch/detekt/testkit/GradleRunnerExtensions.kt @@ -0,0 +1,16 @@ +package io.gitlab.arturbosch.detekt.testkit + +import org.gradle.testkit.runner.GradleRunner +import java.io.File +import java.nio.file.Files + +/** + * Copy project files from `resources` to temporary directories for isolation. + * This helps with the incremental build (up-to-date checks). + */ +fun GradleRunner.withResourceDir(resourcePath: String) = apply { + val resourceDir = File(javaClass.classLoader.getResource(resourcePath).file) + val projectDir = Files.createTempDirectory(resourcePath).toFile() + resourceDir.copyRecursively(projectDir) + withProjectDir(projectDir) +} diff --git a/settings.gradle.kts b/settings.gradle.kts index cc67af45dee..9f05f57fc5d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,9 +45,9 @@ plugins { id("com.gradle.common-custom-user-data-gradle-plugin") version "1.7.2" } -gradleEnterprise { - val isCiBuild = System.getenv("CI") != null +val isCiBuild = System.getenv("CI") != null +gradleEnterprise { buildScan { publishAlways() @@ -66,6 +66,21 @@ gradleEnterprise { } } +buildCache { + local { + isEnabled = true + } + remote { + isPush = isCiBuild + isEnabled = true + url = uri("https://ge.detekt.dev/cache/") + credentials { + username = System.getenv("GRADLE_CACHE_USERNAME") + password = System.getenv("GRADLE_CACHE_PASSWORD") + } + } +} + dependencyResolutionManagement { repositories { mavenCentral() From 44d0e81a80b2a89d8f27e72b5b4710538ee7e64a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Jun 2022 01:21:49 +0100 Subject: [PATCH 03/64] Pin Github Actions SHAs (#4938) Co-authored-by: Renovate Bot --- .github/workflows/codecoverage.yaml | 8 ++--- .github/workflows/deploy-snapshot.yaml | 8 ++--- .../detekt-with-type-resolution.yaml | 14 ++++---- .github/workflows/fossascan.yaml | 4 +-- .../workflows/gradle-wrapper-validation.yml | 4 +-- .github/workflows/labeler.yml | 2 +- .github/workflows/pre-merge.yaml | 32 +++++++++---------- .github/workflows/stale.yaml | 2 +- .github/workflows/website.yaml | 10 +++--- 9 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.github/workflows/codecoverage.yaml b/.github/workflows/codecoverage.yaml index 54fe075fefc..ba18ca21304 100644 --- a/.github/workflows/codecoverage.yaml +++ b/.github/workflows/codecoverage.yaml @@ -17,19 +17,19 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Generate Coverage Report - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: jacocoMergedReport - name: Publish Coverage if: success() - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # tag=v3 diff --git a/.github/workflows/deploy-snapshot.yaml b/.github/workflows/deploy-snapshot.yaml index 207a3584fa9..4965f02005f 100644 --- a/.github/workflows/deploy-snapshot.yaml +++ b/.github/workflows/deploy-snapshot.yaml @@ -14,21 +14,21 @@ jobs: if: github.repository == 'detekt/detekt' && !contains(github.event.head_commit.message, 'ci skip') steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Build detekt - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: build - name: Deploy Snapshot - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 env: ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index d27a2975839..57faba063ec 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -23,21 +23,21 @@ jobs: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Run detekt-cli with argsfile - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: :detekt-cli:runWithArgsFile - name: Upload SARIF to Github using the upload-sarif action - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@27ea8f8fe5977c00f5b37e076ab846c5bd783b96 # tag=v2 if: ${{ always() }} with: sarif_file: build/detekt-report.sarif @@ -48,14 +48,14 @@ jobs: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Run analysis - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: detektMain detektTest diff --git a/.github/workflows/fossascan.yaml b/.github/workflows/fossascan.yaml index b63a4cce5ac..a7290c2eb7a 100644 --- a/.github/workflows/fossascan.yaml +++ b/.github/workflows/fossascan.yaml @@ -14,9 +14,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Run FOSSA Scan - uses: fossas/fossa-action@v1 + uses: fossas/fossa-action@30055fd3dbc35d6ca57da934b5d8ac213a7871b4 # tag=v1 with: api-key: ${{ secrets.FOSSA_API_KEY }} diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index b6f0bdc1e23..54db918ea77 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -16,6 +16,6 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout latest code - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b # tag=v1 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index ddd2131467c..6f3ccec791e 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -9,6 +9,6 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v4 + - uses: actions/labeler@9fd24f1f9d6ceb64ba34d181b329ee72f99978a0 # tag=v4 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index 8a46716c519..40f53b0a2cc 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -30,31 +30,31 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: ${{ matrix.jdk }} distribution: 'temurin' - name: Build detekt - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: build -x detekt - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3 with: name: heap-dump path: '**.hprof' if-no-files-found: ignore - name: Run detekt-cli --help - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: :detekt-cli:runWithHelpFlag - name: Run detekt-cli with argsfile - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: :detekt-cli:runWithArgsFile - name: Try to publish to Maven Local - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: publishToMavenLocal @@ -63,14 +63,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Verify Generated Detekt Config File - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: verifyGeneratorOutput @@ -79,14 +79,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Build and compile test snippets - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: test -Pcompile-test-snippets=true @@ -95,13 +95,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Run with allWarningsAsErrors - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: build -x detekt -PwarningsAsErrors=true diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index d6fc2f89b25..0d7864b61f3 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -10,7 +10,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@v5 + - uses: actions/stale@3cc123766321e9f15a6676375c154ccffb12a358 # tag=v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 90 diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index fc13a507681..0f0ea6921eb 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -17,23 +17,23 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v3 + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 with: java-version: 17 distribution: 'temurin' - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@eeb10cff27034e7acf239c5d29f62154018672fd # tag=v3 with: node-version: '16' cache: 'yarn' cache-dependency-path: 'website/yarn.lock' - name: Build Detekt Documentation - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 with: arguments: :detekt-generator:generateDocumentation @@ -46,7 +46,7 @@ jobs: run: yarn build - name: Deploy Github Pages (only on main) - uses: JamesIves/github-pages-deploy-action@v4 + uses: JamesIves/github-pages-deploy-action@8817a56e5bfec6e2b08345c81f4d422db53a2cdc # tag=v4 if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} with: branch: gh-pages From d3cdbb6da6222d566baff1301817352dcf35e1e5 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 13 Jun 2022 11:29:39 +1000 Subject: [PATCH 04/64] Enable GE build scan publishing for all workflows (#4947) --- .github/workflows/codecoverage.yaml | 3 +++ .github/workflows/deploy-snapshot.yaml | 3 +++ .github/workflows/website.yaml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/.github/workflows/codecoverage.yaml b/.github/workflows/codecoverage.yaml index ba18ca21304..8f80d30a962 100644 --- a/.github/workflows/codecoverage.yaml +++ b/.github/workflows/codecoverage.yaml @@ -8,6 +8,9 @@ on: branches: - '**' +env: + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + permissions: contents: read diff --git a/.github/workflows/deploy-snapshot.yaml b/.github/workflows/deploy-snapshot.yaml index 4965f02005f..f11a464bb9a 100644 --- a/.github/workflows/deploy-snapshot.yaml +++ b/.github/workflows/deploy-snapshot.yaml @@ -5,6 +5,9 @@ on: branches: - main +env: + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + permissions: contents: read diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 0f0ea6921eb..c19494636d1 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -8,6 +8,9 @@ on: branches: - '**' +env: + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + permissions: contents: write # for JamesIves/github-pages-deploy-action to push changes in repo From 43e0a4adc411acc3391267847cd81d8ce5459109 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 13 Jun 2022 07:38:06 +0200 Subject: [PATCH 05/64] Remove Sonarqube Gradle Plugin (#4950) --- build.gradle.kts | 1 - gradle.properties | 1 - gradle/libs.versions.toml | 1 - 3 files changed, 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 588ef8ee389..24858abb49f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,6 @@ plugins { id("releasing") id("io.gitlab.arturbosch.detekt") alias(libs.plugins.gradleVersions) - alias(libs.plugins.sonarqube) } allprojects { diff --git a/gradle.properties b/gradle.properties index 2ed1bffb5f8..7ca0715b49e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,4 @@ kotlin.code.style=official -systemProp.sonar.host.url=http://localhost:9000 systemProp.dependency.analysis.test.analysis=false org.gradle.parallel=true org.gradle.caching=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 329854cbd09..97374fc5f32 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,4 +47,3 @@ dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradleVersions = { id = "com.github.ben-manes.versions", version = "0.42.0" } pluginPublishing = { id = "com.gradle.plugin-publish", version = "0.21.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "7.1.2" } -sonarqube = { id = "org.sonarqube", version = "3.3" } From 1d47fd3673a4e8b506a11198c7bf3c0a011adfdf Mon Sep 17 00:00:00 2001 From: Artur Bosch Date: Mon, 13 Jun 2022 07:42:26 +0200 Subject: [PATCH 06/64] Support disabling config validation via tooling spec (#4937) --- .../io/gitlab/arturbosch/detekt/cli/Spec.kt | 2 +- .../detekt/core/config/ConfigValidators.kt | 8 ++++--- .../core/config/CheckConfigurationSpec.kt | 22 +++++++++++++++++++ detekt-tooling/api/detekt-tooling.api | 6 ++--- .../detekt/tooling/api/spec/ConfigSpec.kt | 2 +- .../detekt/tooling/dsl/ConfigSpecBuilder.kt | 4 ++-- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Spec.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Spec.kt index a3347e86f13..cc920fdd848 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Spec.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Spec.kt @@ -41,7 +41,7 @@ internal fun CliArgs.createSpec(output: Appendable, error: Appendable): Processi config { useDefaultConfig = args.buildUponDefaultConfig - shouldValidateBeforeAnalysis = false + shouldValidateBeforeAnalysis = null knownPatterns = emptyList() // ^^ cli does not have these properties yet; specified in yaml config for now configPaths = config?.let { MultipleExistingPathConverter().convert(it) }.orEmpty() diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/config/ConfigValidators.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/config/ConfigValidators.kt index 8934b8234d4..bd00be46dc2 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/config/ConfigValidators.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/config/ConfigValidators.kt @@ -11,9 +11,11 @@ import io.gitlab.arturbosch.detekt.core.reporting.red import io.gitlab.arturbosch.detekt.core.reporting.yellow internal fun checkConfiguration(settings: ProcessingSettings, baseline: Config) { - val props = settings.config.subConfig("config") - val shouldValidate = props.valueOrDefault("validation", true) - + var shouldValidate = settings.spec.configSpec.shouldValidateBeforeAnalysis + if (shouldValidate == null) { + val props = settings.config.subConfig("config") + shouldValidate = props.valueOrDefault("validation", true) + } if (shouldValidate) { val validators = loadExtensions(settings) + DefaultPropertiesConfigValidator(settings, baseline) diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/config/CheckConfigurationSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/config/CheckConfigurationSpec.kt index b5830937bcd..9a0d468063c 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/config/CheckConfigurationSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/config/CheckConfigurationSpec.kt @@ -20,6 +20,28 @@ class SupportConfigValidationSpec { private val testDir = createTempDirectoryForTest("detekt-sample") private val spec = createNullLoggingSpec {} + @Test + fun `passes because config validation is disabled by tooling spec`() { + val config = yamlConfigFromContent( + """ + unknown_property: + unknown_var: "" + """ + ) + createProcessingSettings( + testDir, + config, + spec = createNullLoggingSpec { + config { + shouldValidateBeforeAnalysis = false + } + } + ).use { + assertThatCode { checkConfiguration(it, spec.getDefaultConfiguration()) } + .doesNotThrowAnyException() + } + } + @Test fun `fails when unknown properties are found`() { val config = yamlConfigFromContent( diff --git a/detekt-tooling/api/detekt-tooling.api b/detekt-tooling/api/detekt-tooling.api index 942a05e44b7..fbabfcc9532 100644 --- a/detekt-tooling/api/detekt-tooling.api +++ b/detekt-tooling/api/detekt-tooling.api @@ -105,7 +105,7 @@ public abstract interface class io/github/detekt/tooling/api/spec/ConfigSpec { public abstract fun getConfigPaths ()Ljava/util/Collection; public abstract fun getKnownPatterns ()Ljava/util/Collection; public abstract fun getResources ()Ljava/util/Collection; - public abstract fun getShouldValidateBeforeAnalysis ()Z + public abstract fun getShouldValidateBeforeAnalysis ()Ljava/lang/Boolean; public abstract fun getUseDefaultConfig ()Z } @@ -238,12 +238,12 @@ public final class io/github/detekt/tooling/dsl/ConfigSpecBuilder : io/github/de public final fun getConfigPaths ()Ljava/util/Collection; public final fun getKnownPatterns ()Ljava/util/Collection; public final fun getResources ()Ljava/util/Collection; - public final fun getShouldValidateBeforeAnalysis ()Z + public final fun getShouldValidateBeforeAnalysis ()Ljava/lang/Boolean; public final fun getUseDefaultConfig ()Z public final fun setConfigPaths (Ljava/util/Collection;)V public final fun setKnownPatterns (Ljava/util/Collection;)V public final fun setResources (Ljava/util/Collection;)V - public final fun setShouldValidateBeforeAnalysis (Z)V + public final fun setShouldValidateBeforeAnalysis (Ljava/lang/Boolean;)V public final fun setUseDefaultConfig (Z)V } diff --git a/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/api/spec/ConfigSpec.kt b/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/api/spec/ConfigSpec.kt index 0b0c08da369..beb0cfa0d95 100644 --- a/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/api/spec/ConfigSpec.kt +++ b/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/api/spec/ConfigSpec.kt @@ -10,7 +10,7 @@ interface ConfigSpec { * * Unknown properties to detekt will get reported as errors. */ - val shouldValidateBeforeAnalysis: Boolean + val shouldValidateBeforeAnalysis: Boolean? /** * Property patterns which should be excluded from validation. diff --git a/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/dsl/ConfigSpecBuilder.kt b/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/dsl/ConfigSpecBuilder.kt index eab3f0dc475..0f72fe18159 100644 --- a/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/dsl/ConfigSpecBuilder.kt +++ b/detekt-tooling/src/main/kotlin/io/github/detekt/tooling/dsl/ConfigSpecBuilder.kt @@ -7,7 +7,7 @@ import java.nio.file.Path @ProcessingModelDsl class ConfigSpecBuilder : Builder { - var shouldValidateBeforeAnalysis: Boolean = true + var shouldValidateBeforeAnalysis: Boolean? = null var knownPatterns: Collection = emptyList() var useDefaultConfig: Boolean = false // false to be backwards compatible in 1.X @@ -24,7 +24,7 @@ class ConfigSpecBuilder : Builder { } private data class ConfigModel( - override val shouldValidateBeforeAnalysis: Boolean, + override val shouldValidateBeforeAnalysis: Boolean?, override val knownPatterns: Collection, override val useDefaultConfig: Boolean, override val resources: Collection, From 43ea42ca517fc2045a15e5fee98962577633bca2 Mon Sep 17 00:00:00 2001 From: Chao Zhang Date: Mon, 13 Jun 2022 08:40:17 -0700 Subject: [PATCH 07/64] Fix a typo in GRADLE_CACHE_PASSWORD credentials and enable remote cache write for two workflows (#4951) --- .github/workflows/detekt-with-type-resolution.yaml | 2 ++ .github/workflows/pre-merge.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index 57faba063ec..b6202e67711 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -10,6 +10,8 @@ on: env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + GRADLE_CACHE_USERNAME: ${{ secrets.GRADLE_CACHE_USERNAME }} + GRADLE_CACHE_PASSWORD: ${{ secrets.GRADLE_CACHE_PASSWORD }} permissions: contents: read diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index 40f53b0a2cc..dcfcb3faa33 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -11,7 +11,7 @@ on: env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} GRADLE_CACHE_USERNAME: ${{ secrets.GRADLE_CACHE_USERNAME }} - GRADLE_CACHE_PASSWORD: ${{ secrets.GRADLE_CACHE_USERNAME }} + GRADLE_CACHE_PASSWORD: ${{ secrets.GRADLE_CACHE_PASSWORD }} permissions: contents: read From 5d494098142cadb8d10fc156f1234da7beee6bc1 Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Tue, 14 Jun 2022 08:06:05 +0300 Subject: [PATCH 08/64] Add Markdown report (#4858) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Brais Gabín --- detekt-core/build.gradle.kts | 1 + .../detekt/core/reporting/Reporting.kt | 2 + .../main/resources/default-detekt-config.yml | 1 + .../detekt/core/reporting/OutputFacadeSpec.kt | 6 +- .../core/reporting/OutputReportsSpec.kt | 11 +- detekt-generator/build.gradle.kts | 1 + .../detekt/generator/DetektPrinter.kt | 2 +- .../generator/collection/DefaultValue.kt | 8 +- .../printer/RuleConfigurationPrinter.kt | 16 +- .../detekt/generator/printer/RulePrinter.kt | 14 +- .../generator/printer/RuleSetPagePrinter.kt | 4 +- .../printer/defaultconfig/ConfigPrinter.kt | 3 +- .../defaultconfig/RuleSetConfigPrinter.kt | 6 +- .../defaultconfig/RuleSetConfigPrinterTest.kt | 2 +- detekt-report-md/build.gradle.kts | 13 + .../github/detekt/report/md/MdOutputReport.kt | 173 ++++++++++++++ ....gitlab.arturbosch.detekt.api.OutputReport | 1 + .../detekt/report/md/MdOutputReportSpec.kt | 224 ++++++++++++++++++ detekt-utils/build.gradle.kts | 4 + .../io/github/detekt/utils}/Markdown.kt | 2 +- .../kotlin/io/github/detekt/utils}/Yaml.kt | 2 +- .../io/github/detekt/utils}/YamlSpec.kt | 2 +- settings.gradle.kts | 1 + 23 files changed, 467 insertions(+), 32 deletions(-) create mode 100644 detekt-report-md/build.gradle.kts create mode 100644 detekt-report-md/src/main/kotlin/io/github/detekt/report/md/MdOutputReport.kt create mode 100644 detekt-report-md/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport create mode 100644 detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt rename {detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out => detekt-utils/src/main/kotlin/io/github/detekt/utils}/Markdown.kt (97%) rename {detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out => detekt-utils/src/main/kotlin/io/github/detekt/utils}/Yaml.kt (98%) rename {detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/out => detekt-utils/src/test/kotlin/io/github/detekt/utils}/YamlSpec.kt (99%) diff --git a/detekt-core/build.gradle.kts b/detekt-core/build.gradle.kts index 0d92502f418..19e1355f421 100644 --- a/detekt-core/build.gradle.kts +++ b/detekt-core/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { implementation(projects.detektMetrics) implementation(projects.detektPsiUtils) implementation(projects.detektReportHtml) + implementation(projects.detektReportMd) implementation(projects.detektReportTxt) implementation(projects.detektReportXml) implementation(projects.detektReportSarif) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt index f353256ce58..9be5d9d9cc0 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.detekt.core.reporting import io.github.detekt.report.html.HtmlOutputReport +import io.github.detekt.report.md.MdOutputReport import io.github.detekt.report.sarif.SarifOutputReport import io.github.detekt.report.txt.TxtOutputReport import io.github.detekt.report.xml.XmlOutputReport @@ -18,6 +19,7 @@ internal fun defaultReportMapping(reportId: String) = when (reportId) { XmlOutputReport::class.java.simpleName -> "xml" HtmlOutputReport::class.java.simpleName -> "html" SarifOutputReport::class.java.simpleName -> "sarif" + MdOutputReport::class.java.simpleName -> "md" else -> reportId } diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index a5647513d66..f7da171eeb3 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -46,6 +46,7 @@ output-reports: # - 'TxtOutputReport' # - 'XmlOutputReport' # - 'HtmlOutputReport' + # - 'MdOutputReport' comments: active: true diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputFacadeSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputFacadeSpec.kt index 0562b374dc6..2ca6dbad183 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputFacadeSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputFacadeSpec.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.detekt.core.reporting import io.github.detekt.report.html.HtmlOutputReport +import io.github.detekt.report.md.MdOutputReport import io.github.detekt.report.txt.TxtOutputReport import io.github.detekt.report.xml.XmlOutputReport import io.github.detekt.test.utils.StringPrintStream @@ -24,6 +25,7 @@ class OutputFacadeSpec { val plainOutputPath = createTempFileForTest("detekt", ".txt") val htmlOutputPath = createTempFileForTest("detekt", ".html") val xmlOutputPath = createTempFileForTest("detekt", ".xml") + val mdOutputPath = createTempFileForTest("detekt", ".md") val spec = createNullLoggingSpec { project { @@ -33,6 +35,7 @@ class OutputFacadeSpec { report { "html" to htmlOutputPath } report { "txt" to plainOutputPath } report { "xml" to xmlOutputPath } + report { "md" to mdOutputPath } } logging { outputChannel = printStream @@ -44,7 +47,8 @@ class OutputFacadeSpec { assertThat(printStream.toString()).contains( "Successfully generated ${TxtOutputReport().name} at $plainOutputPath", "Successfully generated ${XmlOutputReport().name} at $xmlOutputPath", - "Successfully generated ${HtmlOutputReport().name} at $htmlOutputPath" + "Successfully generated ${HtmlOutputReport().name} at $htmlOutputPath", + "Successfully generated ${MdOutputReport().name} at $mdOutputPath" ) } } diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputReportsSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputReportsSpec.kt index 4f8aace147f..7fdbbf25f20 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputReportsSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/reporting/OutputReportsSpec.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.detekt.core.reporting import io.github.detekt.report.html.HtmlOutputReport +import io.github.detekt.report.md.MdOutputReport import io.github.detekt.report.txt.TxtOutputReport import io.github.detekt.report.xml.XmlOutputReport import io.github.detekt.test.utils.resourceAsPath @@ -28,11 +29,12 @@ class OutputReportsSpec { report { "txt" to Paths.get("/tmp/path2") } report { reportUnderTest to Paths.get("/tmp/path3") } report { "html" to Paths.get("D:_Gradle\\xxx\\xxx\\build\\reports\\detekt\\detekt.html") } + report { "md" to Paths.get("/tmp/path4") } }.build().reports.toList() @Test fun `should parse multiple report entries`() { - assertThat(reports).hasSize(4) + assertThat(reports).hasSize(5) } @Test @@ -66,6 +68,13 @@ class OutputReportsSpec { ) } + @Test + fun `it should properly parse MD report entry`() { + val mdRepot = reports[4] + assertThat(mdRepot.type).isEqualTo(defaultReportMapping(MdOutputReport::class.java.simpleName)) + assertThat(mdRepot.path).isEqualTo(Paths.get("/tmp/path4")) + } + @Nested inner class `default report ids` { diff --git a/detekt-generator/build.gradle.kts b/detekt-generator/build.gradle.kts index ed37935d573..e1a96393dcb 100644 --- a/detekt-generator/build.gradle.kts +++ b/detekt-generator/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { implementation(projects.detektRulesEmpty) implementation(projects.detektFormatting) implementation(projects.detektCli) + implementation(projects.detektUtils) implementation(libs.jcommander) testImplementation(projects.detektCore) diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt index 2db46a6beb6..a9dbb1e11f8 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt @@ -1,10 +1,10 @@ package io.gitlab.arturbosch.detekt.generator +import io.github.detekt.utils.yaml import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage import io.gitlab.arturbosch.detekt.generator.out.MarkdownWriter import io.gitlab.arturbosch.detekt.generator.out.PropertiesWriter import io.gitlab.arturbosch.detekt.generator.out.YamlWriter -import io.gitlab.arturbosch.detekt.generator.out.yaml import io.gitlab.arturbosch.detekt.generator.printer.DeprecatedPrinter import io.gitlab.arturbosch.detekt.generator.printer.RuleSetPagePrinter import io.gitlab.arturbosch.detekt.generator.printer.defaultconfig.ConfigPrinter diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/DefaultValue.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/DefaultValue.kt index f3b481b2371..1fb9be76beb 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/DefaultValue.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/DefaultValue.kt @@ -1,10 +1,10 @@ package io.gitlab.arturbosch.detekt.generator.collection +import io.github.detekt.utils.YamlNode +import io.github.detekt.utils.keyValue +import io.github.detekt.utils.list +import io.github.detekt.utils.listOfMaps import io.gitlab.arturbosch.detekt.api.ValuesWithReason -import io.gitlab.arturbosch.detekt.generator.out.YamlNode -import io.gitlab.arturbosch.detekt.generator.out.keyValue -import io.gitlab.arturbosch.detekt.generator.out.list -import io.gitlab.arturbosch.detekt.generator.out.listOfMaps sealed interface DefaultValue { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleConfigurationPrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleConfigurationPrinter.kt index 558ab6b62b4..6ac43d2411e 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleConfigurationPrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleConfigurationPrinter.kt @@ -1,14 +1,14 @@ package io.gitlab.arturbosch.detekt.generator.printer +import io.github.detekt.utils.bold +import io.github.detekt.utils.code +import io.github.detekt.utils.crossOut +import io.github.detekt.utils.description +import io.github.detekt.utils.h4 +import io.github.detekt.utils.item +import io.github.detekt.utils.list +import io.github.detekt.utils.markdown import io.gitlab.arturbosch.detekt.generator.collection.Configuration -import io.gitlab.arturbosch.detekt.generator.out.bold -import io.gitlab.arturbosch.detekt.generator.out.code -import io.gitlab.arturbosch.detekt.generator.out.crossOut -import io.gitlab.arturbosch.detekt.generator.out.description -import io.gitlab.arturbosch.detekt.generator.out.h4 -import io.gitlab.arturbosch.detekt.generator.out.item -import io.gitlab.arturbosch.detekt.generator.out.list -import io.gitlab.arturbosch.detekt.generator.out.markdown internal object RuleConfigurationPrinter : DocumentationPrinter> { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RulePrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RulePrinter.kt index 318ae70af2d..9c171d7f8e0 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RulePrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RulePrinter.kt @@ -1,14 +1,14 @@ package io.gitlab.arturbosch.detekt.generator.printer +import io.github.detekt.utils.MarkdownContent +import io.github.detekt.utils.bold +import io.github.detekt.utils.codeBlock +import io.github.detekt.utils.h3 +import io.github.detekt.utils.h4 +import io.github.detekt.utils.markdown +import io.github.detekt.utils.paragraph import io.gitlab.arturbosch.detekt.generator.collection.Active import io.gitlab.arturbosch.detekt.generator.collection.Rule -import io.gitlab.arturbosch.detekt.generator.out.MarkdownContent -import io.gitlab.arturbosch.detekt.generator.out.bold -import io.gitlab.arturbosch.detekt.generator.out.codeBlock -import io.gitlab.arturbosch.detekt.generator.out.h3 -import io.gitlab.arturbosch.detekt.generator.out.h4 -import io.gitlab.arturbosch.detekt.generator.out.markdown -import io.gitlab.arturbosch.detekt.generator.out.paragraph internal object RulePrinter : DocumentationPrinter { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleSetPagePrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleSetPagePrinter.kt index db88a74c223..46d0f003e5b 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleSetPagePrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/RuleSetPagePrinter.kt @@ -1,8 +1,8 @@ package io.gitlab.arturbosch.detekt.generator.printer +import io.github.detekt.utils.markdown +import io.github.detekt.utils.paragraph import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage -import io.gitlab.arturbosch.detekt.generator.out.markdown -import io.gitlab.arturbosch.detekt.generator.out.paragraph object RuleSetPagePrinter : DocumentationPrinter { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/ConfigPrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/ConfigPrinter.kt index 486e36b94bd..9131be47088 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/ConfigPrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/ConfigPrinter.kt @@ -1,7 +1,7 @@ package io.gitlab.arturbosch.detekt.generator.printer.defaultconfig +import io.github.detekt.utils.yaml import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage -import io.gitlab.arturbosch.detekt.generator.out.yaml import io.gitlab.arturbosch.detekt.generator.printer.DocumentationPrinter object ConfigPrinter : DocumentationPrinter> { @@ -81,5 +81,6 @@ object ConfigPrinter : DocumentationPrinter> { # - 'TxtOutputReport' # - 'XmlOutputReport' # - 'HtmlOutputReport' + # - 'MdOutputReport' """.trimIndent() } diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinter.kt index 3034cd417a1..e412afc64d9 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinter.kt @@ -1,13 +1,13 @@ package io.gitlab.arturbosch.detekt.generator.printer.defaultconfig +import io.github.detekt.utils.YamlNode +import io.github.detekt.utils.keyValue +import io.github.detekt.utils.node import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.generator.collection.Configuration import io.gitlab.arturbosch.detekt.generator.collection.Rule import io.gitlab.arturbosch.detekt.generator.collection.RuleSetPage import io.gitlab.arturbosch.detekt.generator.collection.RuleSetProvider -import io.gitlab.arturbosch.detekt.generator.out.YamlNode -import io.gitlab.arturbosch.detekt.generator.out.keyValue -import io.gitlab.arturbosch.detekt.generator.out.node internal fun YamlNode.printRuleSetPage(ruleSetPage: RuleSetPage) { printRuleSet(ruleSetPage.ruleSet, ruleSetPage.rules) diff --git a/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinterTest.kt b/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinterTest.kt index 35532232259..ee016a857d5 100644 --- a/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinterTest.kt +++ b/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/RuleSetConfigPrinterTest.kt @@ -1,5 +1,6 @@ package io.gitlab.arturbosch.detekt.generator.printer.defaultconfig +import io.github.detekt.utils.yaml import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.valuesWithReason import io.gitlab.arturbosch.detekt.generator.collection.Active @@ -8,7 +9,6 @@ import io.gitlab.arturbosch.detekt.generator.collection.DefaultValue import io.gitlab.arturbosch.detekt.generator.collection.Inactive import io.gitlab.arturbosch.detekt.generator.collection.Rule import io.gitlab.arturbosch.detekt.generator.collection.RuleSetProvider -import io.gitlab.arturbosch.detekt.generator.out.yaml import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test diff --git a/detekt-report-md/build.gradle.kts b/detekt-report-md/build.gradle.kts new file mode 100644 index 00000000000..1f7df0f6ae6 --- /dev/null +++ b/detekt-report-md/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id("module") +} + +dependencies { + implementation(projects.detektMetrics) + implementation(projects.detektApi) + implementation(projects.detektUtils) + + testImplementation(testFixtures(projects.detektApi)) + testImplementation(libs.mockk) + testImplementation(libs.assertj) +} diff --git a/detekt-report-md/src/main/kotlin/io/github/detekt/report/md/MdOutputReport.kt b/detekt-report-md/src/main/kotlin/io/github/detekt/report/md/MdOutputReport.kt new file mode 100644 index 00000000000..45fed53e3c0 --- /dev/null +++ b/detekt-report-md/src/main/kotlin/io/github/detekt/report/md/MdOutputReport.kt @@ -0,0 +1,173 @@ +package io.github.detekt.report.md + +import io.github.detekt.metrics.ComplexityReportGenerator +import io.github.detekt.psi.toUnifiedString +import io.github.detekt.utils.MarkdownContent +import io.github.detekt.utils.codeBlock +import io.github.detekt.utils.emptyLine +import io.github.detekt.utils.h1 +import io.github.detekt.utils.h2 +import io.github.detekt.utils.h3 +import io.github.detekt.utils.item +import io.github.detekt.utils.list +import io.github.detekt.utils.markdown +import io.github.detekt.utils.paragraph +import io.gitlab.arturbosch.detekt.api.Detektion +import io.gitlab.arturbosch.detekt.api.Finding +import io.gitlab.arturbosch.detekt.api.OutputReport +import io.gitlab.arturbosch.detekt.api.ProjectMetric +import io.gitlab.arturbosch.detekt.api.SourceLocation +import io.gitlab.arturbosch.detekt.api.internal.whichDetekt +import java.time.OffsetDateTime +import java.time.ZoneOffset +import java.time.format.DateTimeFormatter +import java.util.Locale +import kotlin.math.max +import kotlin.math.min + +private const val DETEKT_WEBSITE_BASE_URL = "https://detekt.dev" + +private const val EXTRA_LINES_IN_SNIPPET = 3 + +/** + * Contains rule violations in Markdown format report. + * [See](https://detekt.dev/docs/introduction/configurations/#output-reports) + */ +class MdOutputReport : OutputReport() { + override val ending: String = "md" + + override val name = "Markdown report" + + override fun render(detektion: Detektion) = markdown { + h1 { "detekt" } + + h2 { "Metrics" } + renderMetrics(detektion.metrics) + + h2 { "Complexity Report" } + renderComplexity(getComplexityMetrics(detektion)) + + renderFindings(detektion.findings) + emptyLine() + + paragraph { + val detektLink = link("detekt version ${renderVersion()}", "$DETEKT_WEBSITE_BASE_URL/") + "generated with $detektLink on ${renderDate()}" + } + } + + private fun renderVersion(): String = whichDetekt() ?: "unknown" + + private fun renderDate(): String { + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + return "${OffsetDateTime.now(ZoneOffset.UTC).format(formatter)} UTC" + } + + private fun getComplexityMetrics(detektion: Detektion): List { + return ComplexityReportGenerator.create(detektion).generate().orEmpty() + } +} + +private fun MarkdownContent.renderMetrics(metrics: Collection) { + list { + metrics.forEach { item { "%,d ${it.type}".format(Locale.US, it.value) } } + } +} + +private fun MarkdownContent.renderComplexity(complexityReport: List) { + list { + complexityReport.forEach { item { it.trim() } } + } +} + +private fun MarkdownContent.renderGroup(group: String, findings: List) { + findings + .groupBy { it.id } + .toList() + .sortedBy { (rule, _) -> rule } + .forEach { (rule, ruleFindings) -> + renderRule(rule, group, ruleFindings) + } +} + +private fun MarkdownContent.renderRule(rule: String, group: String, findings: List) { + h3 { "$group, $rule (%,d)".format(Locale.US, findings.size) } + paragraph { (findings.first().issue.description) } + + paragraph { + link( + "Documentation", + "$DETEKT_WEBSITE_BASE_URL/docs/rules/${group.toLowerCase(Locale.US)}#${rule.toLowerCase(Locale.US)}" + ) + } + + list { + findings + .sortedWith(compareBy({ it.file }, { it.location.source.line }, { it.location.source.column })) + .forEach { + item { renderFinding(it) } + } + } +} + +private fun MarkdownContent.renderFindings(findings: Map>) { + val total = findings.values + .asSequence() + .map { it.size } + .fold(0) { a, b -> a + b } + + h2 { "Findings (%,d)".format(Locale.US, total) } + + findings + .filter { it.value.isNotEmpty() } + .toList() + .sortedBy { (group, _) -> group } + .forEach { (group, groupFindings) -> + renderGroup(group, groupFindings) + } +} + +private fun MarkdownContent.renderFinding(finding: Finding): String { + val filePath = finding.location.filePath.relativePath ?: finding.location.filePath.absolutePath + val location = "${filePath.toUnifiedString()}:${finding.location.source.line}:${finding.location.source.column}" + + val message = if (finding.message.isNotEmpty()) { + codeBlock("") { finding.message } + } else { "" } + + val psiFile = finding.entity.ktElement?.containingFile + val snippet = if (psiFile != null) { + val lineSequence = psiFile.text.splitToSequence('\n') + snippetCode(lineSequence, finding.startPosition) + } else { "" } + + return "$location\n$message\n$snippet" +} + +private fun MarkdownContent.snippetCode(lines: Sequence, location: SourceLocation): String { + val dropLineCount = max(location.line - 1 - EXTRA_LINES_IN_SNIPPET, 0) + val takeLineCount = EXTRA_LINES_IN_SNIPPET + 1 + min(location.line - 1, EXTRA_LINES_IN_SNIPPET) + var currentLineNumber = dropLineCount + 1 + var text = "" + + val lineNoSpace = (currentLineNumber + takeLineCount).toString().length + + lines + .drop(dropLineCount) + .take(takeLineCount) + .forEach { line -> + val lineNo = ("$currentLineNumber ").take(lineNoSpace) + text += "$lineNo $line\n" + + if (currentLineNumber == location.line) { + val positions = currentLineNumber.toString().length + val lineErr = "!".repeat(positions) + " ".repeat(location.column + lineNoSpace - positions) + text += "$lineErr^ error\n" + } + currentLineNumber++ + } + + return codeBlock("kotlin") { text } +} + +internal fun MarkdownContent.link(text: String, url: String) = "[$text]($url)" diff --git a/detekt-report-md/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport b/detekt-report-md/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport new file mode 100644 index 00000000000..83fe5d76a71 --- /dev/null +++ b/detekt-report-md/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.OutputReport @@ -0,0 +1 @@ +io.github.detekt.report.md.MdOutputReport diff --git a/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt b/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt new file mode 100644 index 00000000000..378d6643605 --- /dev/null +++ b/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt @@ -0,0 +1,224 @@ +package io.github.detekt.report.md + +import io.github.detekt.metrics.CognitiveComplexity +import io.github.detekt.metrics.processors.commentLinesKey +import io.github.detekt.metrics.processors.complexityKey +import io.github.detekt.metrics.processors.linesKey +import io.github.detekt.metrics.processors.logicalLinesKey +import io.github.detekt.metrics.processors.sourceLinesKey +import io.gitlab.arturbosch.detekt.api.Detektion +import io.gitlab.arturbosch.detekt.api.Finding +import io.gitlab.arturbosch.detekt.api.ProjectMetric +import io.gitlab.arturbosch.detekt.api.internal.whichDetekt +import io.gitlab.arturbosch.detekt.test.TestDetektion +import io.gitlab.arturbosch.detekt.test.createEntity +import io.gitlab.arturbosch.detekt.test.createFinding +import io.gitlab.arturbosch.detekt.test.createIssue +import io.mockk.every +import io.mockk.mockk +import org.assertj.core.api.Assertions.assertThat +import org.jetbrains.kotlin.com.intellij.psi.PsiFile +import org.jetbrains.kotlin.psi.KtElement +import org.junit.jupiter.api.Test + +class MdOutputReportSpec { + private val mdReport = MdOutputReport() + private val detektion = createTestDetektionWithMultipleSmells() + private val result = mdReport.render(detektion) + + @Test + fun `renders Markdown structure correctly`() { + assertThat(result).contains("Metrics") + assertThat(result).contains("Complexity Report") + assertThat(result).contains("Findings") + } + + @Test + fun `contains zero findings`() { + val result = mdReport.render(TestDetektion()) + + assertThat(result).contains("Findings (0)") + } + + @Test + fun `contains the total number of findings`() { + assertThat(result).contains("Findings (3)") + } + + @Test + fun `renders the 'generated with' text correctly`() { + val header = "generated with [detekt version ${whichDetekt()}](https://detekt.dev/) on " + + assertThat(result).contains(header) + } + + @Test + fun `renders the right file locations`() { + assertThat(result).contains("src/main/com/sample/Sample1.kt:9:17") + assertThat(result).contains("src/main/com/sample/Sample2.kt:13:17") + assertThat(result).contains("src/main/com/sample/Sample3.kt:14:16") + } + + @Test + fun `renders the right number of issues per rule`() { + assertThat(result).contains("id_a (2)") + assertThat(result).contains("id_b (1)") + } + + @Test + fun `renders the right violation messages for the rules`() { + assertThat(result).contains("Message finding 1") + assertThat(result).contains("Message finding 2") + } + + @Test + fun `renders the right violation description for the rules`() { + assertThat(result).contains("Description id_a") + assertThat(result).contains("Description id_b") + } + + @Test + fun `renders the right documentation links for the rules`() { + val detektion = object : TestDetektion() { + override val findings: Map> = mapOf( + "Style" to listOf( + createFinding(createIssue("ValCouldBeVar"), createEntity("")) + ), + "empty" to listOf( + createFinding(createIssue("EmptyBody"), createEntity("")), + createFinding(createIssue("EmptyIf"), createEntity("")) + ) + ) + } + + val result = mdReport.render(detektion) + assertThat(result).contains("[Documentation](https://detekt.dev/docs/rules/style#valcouldbevar)") + assertThat(result).contains("[Documentation](https://detekt.dev/docs/rules/empty#emptybody)") + assertThat(result).contains("[Documentation](https://detekt.dev/docs/rules/empty#emptyif)") + } + + @Test + fun `asserts that the generated HTML is the same even if we change the order of the findings`() { + val findings = findings() + val reversedFindings = findings + .reversedArray() + .map { (section, findings) -> section to findings.asReversed() } + .toTypedArray() + + val firstDetektion = createMdDetektion(*findings) + val secondDetektion = createMdDetektion(*reversedFindings) + + val firstReport = mdReport.render(firstDetektion) + val secondReport = mdReport.render(secondDetektion) + + assertThat(firstReport).isEqualTo(secondReport) + } +} + +private fun mockKtElement(): KtElement { + val ktElementMock = mockk() + val psiFileMock = mockk() + val code = """ + package com.example.test + + import io.github.* + + class Test() { + val greeting: String = "Hello, World!" + + init { + println(greetings) + } + + fun foo() { + println(greetings) + return this + } + } + """.trimIndent() + + every { psiFileMock.text } returns code + every { ktElementMock.containingFile } returns psiFileMock + return ktElementMock +} + +private fun createTestDetektionWithMultipleSmells(): Detektion { + val entity1 = createEntity( + path = "src/main/com/sample/Sample1.kt", + position = 9 to 17, + text = 17..20, + ktElement = mockKtElement(), + basePath = "/Users/tester/detekt/" + ) + val entity2 = createEntity( + path = "src/main/com/sample/Sample2.kt", + ktElement = mockKtElement(), + position = 13 to 17, + basePath = "/Users/tester/detekt/" + ) + val entity3 = createEntity( + path = "src/main/com/sample/Sample3.kt", + position = 14 to 16, + ktElement = mockKtElement(), + basePath = "/Users/tester/detekt/" + ) + + val issueA = createIssue("id_a") + val issueB = createIssue("id_b") + + return createMdDetektion( + "Section-1" to listOf( + createFinding(issueA, entity1, "Message finding 1"), + createFinding(issueA, entity2, "Message finding 2") + ), + "Section-2" to listOf( + createFinding(issueB, entity3, "") + ) + ).also { + it.addData(complexityKey, 10) + it.addData(CognitiveComplexity.KEY, 10) + it.addData(sourceLinesKey, 20) + it.addData(logicalLinesKey, 10) + it.addData(commentLinesKey, 2) + it.addData(linesKey, 2222) + } +} + +private fun createMdDetektion(vararg findingPairs: Pair>): Detektion { + return object : TestDetektion() { + override val findings: Map> = findingPairs.toMap() + + override val metrics: Collection = listOf( + ProjectMetric("M1", 10_000), + ProjectMetric("M2", 2) + ) + } +} + +private fun findings(): Array>> { + val issueA = createIssue("id_a") + val issueB = createIssue("id_b") + val issueC = createIssue("id_c") + + val entity1 = createEntity("src/main/com/sample/Sample1.kt", 11 to 5) + val entity2 = createEntity("src/main/com/sample/Sample1.kt", 22 to 2) + val entity3 = createEntity("src/main/com/sample/Sample1.kt", 11 to 2) + val entity4 = createEntity("src/main/com/sample/Sample2.kt", 1 to 1) + + return arrayOf( + "Section 1" to listOf( + createFinding(issueA, entity1), + createFinding(issueA, entity2), + createFinding(issueA, entity3), + createFinding(issueA, entity4), + createFinding(issueB, entity2), + createFinding(issueB, entity1), + createFinding(issueB, entity4) + ), + "Section 2" to listOf( + createFinding(issueB, entity3), + createFinding(issueC, entity1), + createFinding(issueC, entity2) + ) + ) +} diff --git a/detekt-utils/build.gradle.kts b/detekt-utils/build.gradle.kts index ed0de36f81c..1598ef9274c 100644 --- a/detekt-utils/build.gradle.kts +++ b/detekt-utils/build.gradle.kts @@ -1,3 +1,7 @@ plugins { id("module") } + +dependencies { + testImplementation(libs.assertj) +} diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Markdown.kt b/detekt-utils/src/main/kotlin/io/github/detekt/utils/Markdown.kt similarity index 97% rename from detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Markdown.kt rename to detekt-utils/src/main/kotlin/io/github/detekt/utils/Markdown.kt index 5989a3ecd93..a6879f4f6cf 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Markdown.kt +++ b/detekt-utils/src/main/kotlin/io/github/detekt/utils/Markdown.kt @@ -1,6 +1,6 @@ @file:Suppress("detekt.TooManyFunctions") -package io.gitlab.arturbosch.detekt.generator.out +package io.github.detekt.utils sealed class Markdown(open var content: String = "") { fun append(value: String) { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Yaml.kt b/detekt-utils/src/main/kotlin/io/github/detekt/utils/Yaml.kt similarity index 98% rename from detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Yaml.kt rename to detekt-utils/src/main/kotlin/io/github/detekt/utils/Yaml.kt index 100f1cbf7ba..92d3ab2c200 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/out/Yaml.kt +++ b/detekt-utils/src/main/kotlin/io/github/detekt/utils/Yaml.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.generator.out +package io.github.detekt.utils sealed class YML(open val indent: Int = 0, open var content: String = "") { fun append(value: String) { diff --git a/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/out/YamlSpec.kt b/detekt-utils/src/test/kotlin/io/github/detekt/utils/YamlSpec.kt similarity index 99% rename from detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/out/YamlSpec.kt rename to detekt-utils/src/test/kotlin/io/github/detekt/utils/YamlSpec.kt index 7dd481ba9a6..fcae48f37e3 100644 --- a/detekt-generator/src/test/kotlin/io/gitlab/arturbosch/detekt/generator/out/YamlSpec.kt +++ b/detekt-utils/src/test/kotlin/io/github/detekt/utils/YamlSpec.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.generator.out +package io.github.detekt.utils import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Nested diff --git a/settings.gradle.kts b/settings.gradle.kts index 9f05f57fc5d..c465ee17564 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,6 +17,7 @@ include("detekt-metrics") include("detekt-parser") include("detekt-psi-utils") include("detekt-report-html") +include("detekt-report-md") include("detekt-report-sarif") include("detekt-report-txt") include("detekt-report-xml") From a10e957c3d9fe3c8ff1daf36e56c1525e62e306b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Tue, 14 Jun 2022 10:05:28 +0200 Subject: [PATCH 09/64] Improve readme (#4914) * Move integrations down * Remove old integration * Move more integrations down * More improvements * Improve the detekt features * Update link * Improve website/docs/intro.mdx * Add links to kotlin homepage * Update README.md Co-authored-by: schalkms <30376729+schalkms@users.noreply.github.com> * Add complexity reports back Co-authored-by: schalkms <30376729+schalkms@users.noreply.github.com> --- README.md | 39 ++++++++++++++++++--------------------- website/docs/intro.mdx | 22 ++++++++++------------ 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 380aed4feea..046ada92c2e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# __detekt__ +# detekt [![Join the chat at #detekt on KotlinLang](https://img.shields.io/badge/%23detekt-on_slack-red.svg?logo=slack)](https://kotlinlang.slack.com/archives/C88E12QH4) [![Visit the website at detekt.dev/](https://img.shields.io/badge/visit-website-red.svg?logo=firefox)](https://detekt.dev/) @@ -10,28 +10,22 @@ [![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B25591%2Fgithub.com%2Fdetekt%2Fdetekt.svg?type=small)](https://app.fossa.com/projects/custom%2B25591%2Fgithub.com%2Fdetekt%2Fdetekt?ref=badge_small) -Meet _detekt_, a static code analysis tool for the _Kotlin_ programming language. -It operates on the abstract syntax tree provided by the Kotlin compiler. +Meet _detekt_, a static code analysis tool for the [_Kotlin_ programming language](https://kotlinlang.org/). +Visit [the project website](https://detekt.dev/) for installation guides, rule descriptions, configuration options and more. ![detekt in action](website/static/img/tutorial/detekt_in_action.png "detekt in action") ### Features -- Code smell analysis for your Kotlin projects -- Complexity reports based on lines of code, cyclomatic complexity and amount of code smells -- Highly configurable rule sets -- Suppression of findings with Kotlin's `@Suppress` and Java's `@SuppressWarnings` annotations -- Specification of quality gates which will break your build -- Code Smell baseline and suppression for legacy projects -- [Gradle plugin](#with-gradle) for code analysis via Gradle builds -- [SonarQube integration](https://github.com/detekt/sonar-kotlin) -- Extensibility by enabling incorporation of personal rule sets, `FileProcessListener's` and `OutputReport's` -- [IntelliJ integration](https://github.com/detekt/detekt-intellij-plugin) -- Third party integrations for [Maven](https://github.com/Ozsie/detekt-maven-plugin), [Bazel](https://github.com/buildfoundation/bazel_rules_detekt/) and Github Actions ([Docker based](https://github.com/marketplace/actions/detekt-all) and [Javascript based](https://github.com/marketplace/actions/setup-detekt)) - -### Project Website - -Visit [the project website](https://detekt.dev/) for installation guides, release notes, migration guides, rule descriptions and configuration options. +- Code smell analysis for your [Kotlin projects](https://kotlinlang.org/). +- Highly configurable rule sets. +- Code Smell baseline and suppression for legacy projects. +- Suppression of findings with `@Suppress` annotations. +- Support for different report formats: html, markdown, [SARIF](https://sarifweb.azurewebsites.net/) and xml (checkstyle). Is it not enough? You can extend detekt and create your own reports. +- Extensibility by enabling incorporation of personal rule sets, `FileProcessListener's` and `OutputReport's`. +- Complexity reports based on lines of code, cyclomatic complexity and number of code smells. +- First party integration with Gradle with our [Gradle plugin](#with-gradle). +- A community of [third party plugins](https://github.com/topics/detekt-plugin) that adds more rules and features to detekt. #### Quick-Links @@ -120,7 +114,7 @@ The list of [recommended versions for previous detekt version is listed here](ht ### Adding more rule sets -detekt itself provides a wrapper over [ktlint](https://github.com/pinterest/ktlint) as a `formatting` rule set +detekt itself provides a wrapper over [ktlint](https://github.com/pinterest/ktlint) as the `formatting` rule set which can be easily added to the Gradle configuration: ```kotlin @@ -160,17 +154,19 @@ As mentioned in... Integrations: +- [IntelliJ integration](https://github.com/detekt/detekt-intellij-plugin) +- [SonarQube integration](https://github.com/detekt/sonar-kotlin) - [Codacy](https://www.codacy.com) - [Gradle plugin that configures Error Prone, Checkstyle, PMD, CPD, Lint, Detekt & Ktlint](https://github.com/vanniktech/gradle-code-quality-tools-plugin) - [Violations Lib](https://github.com/tomasbjerre/violations-lib) is a Java library for parsing report files like static code analysis. - [sputnik](https://github.com/TouK/sputnik) is a free tool for static code review and provides support for detekt -- [Novoda Gradle Static Analysis plugin](https://github.com/novoda/gradle-static-analysis-plugin) +- [Gradle Static Analysis plugin](https://github.com/GradleUp/static-analysis-plugin) - [Detekt Maven plugin](https://github.com/Ozsie/detekt-maven-plugin) that wraps the Detekt CLI - [Detekt Bazel plugin](https://github.com/buildfoundation/bazel_rules_detekt) that wraps the Detekt CLI - [Gradle plugin that helps facilitate GitHub PR checking and automatic commenting of violations](https://github.com/btkelly/gnag) - [Codefactor](http://codefactor.io/) - [GitHub Action: Detekt All](https://github.com/marketplace/actions/detekt-all) -- [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template) +- [GitHub Action: Setup detekt](https://github.com/marketplace/actions/setup-detekt) - [Sonatype Lift](https://github.com/marketplace/muse-dev) Custom rules and reports from 3rd parties: @@ -178,6 +174,7 @@ Custom rules and reports from 3rd parties: - [detekt-verify-implementation](https://github.com/cph-cachet/detekt-verify-implementation) by cph-cachet - [detekt-hint](https://github.com/mkohm/detekt-hint) by mkohm is a plugin to detekt that provides detection of design principle violations through integration with Danger - [GitLab report format](https://gitlab.com/cromefire_/detekt-gitlab-report) +- There are more third-party plugins out there. You can find some of them [in this list](https://github.com/topics/detekt-plugin). #### Credits diff --git a/website/docs/intro.mdx b/website/docs/intro.mdx index 19303703732..1bddd10ffed 100644 --- a/website/docs/intro.mdx +++ b/website/docs/intro.mdx @@ -12,17 +12,15 @@ import DetektVersionBanner from "./\_detekt-version-banner.mdx"; ### Features -- Code smell analysis for your Kotlin projects -- Complexity report based on logical lines of code, McCabe complexity and amount of code smells -- Highly configurable (rule set or rule level) -- Suppress findings with Kotlin's `@Suppress` and Java's `@SuppressWarnings` annotations -- Specify code smell thresholds to break your build or print a warning -- Code Smell baseline and ignore lists for legacy projects -- [Gradle plugin](/docs/gettingstarted/gradle) for code analysis via Gradle builds -- [SonarQube integration](https://github.com/detekt/sonar-kotlin) -- Extensible by own rule sets and `FileProcessListener's` -- [IntelliJ integration](https://github.com/detekt/detekt-intellij-plugin) -- Unofficial [Maven plugin](https://github.com/Ozsie/detekt-maven-plugin) by [Ozsie](https://github.com/Ozsie) +- Code smell analysis for your [Kotlin projects](https://kotlinlang.org/). +- Highly configurable rule sets. +- Code Smell baseline and suppression for legacy projects. +- Suppression of findings with `@Suppress` annotations. +- Support for different report formats: html, markdown, [SARIF](https://sarifweb.azurewebsites.net/) and xml (checkstyle). Is it not enough? You can extend detekt and create your own reports. +- Extensibility by enabling incorporation of personal rule sets, `FileProcessListener's` and `OutputReport's`. +- Complexity reports based on lines of code, cyclomatic complexity and number of code smells. +- First party integration with Gradle with our [Gradle plugin](#with-gradle). +- A community of [third party plugins](https://github.com/topics/detekt-plugin) that adds more rules and features to detekt. ### Quick Start with Gradle @@ -90,7 +88,7 @@ See [reporting](/docs/introduction/reporting) docs for more details on configuri ### Adding more rule sets -detekt itself provides a wrapper over [ktlint](https://github.com/pinterest/ktlint) as a `formatting` rule set +detekt itself provides a wrapper over [ktlint](https://github.com/pinterest/ktlint) as the `formatting` rule set which can be easily added to the gradle configuration: ```gradle From feec74c841dd7567acf5e2355f40b81fb83a7b7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Jun 2022 16:14:52 +0200 Subject: [PATCH 10/64] Update plugin binaryCompatibilityValidator to v0.10.1 (#4954) Co-authored-by: Renovate Bot --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 97374fc5f32..f49dd882541 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -42,7 +42,7 @@ contester-breakpoint = { module = "io.github.davidburstrom.contester:contester-b contester-driver = { module = "io.github.davidburstrom.contester:contester-driver", version.ref = "contester" } [plugins] -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.0" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.1" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradleVersions = { id = "com.github.ben-manes.versions", version = "0.42.0" } pluginPublishing = { id = "com.gradle.plugin-publish", version = "0.21.0" } From 195d15a04cc0de7cc1fd8aaf9d4a1998414426ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Jun 2022 00:22:08 +0200 Subject: [PATCH 11/64] Update react monorepo to v18.2.0 (#4958) Co-authored-by: Renovate Bot --- website/package.json | 4 ++-- website/yarn.lock | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/website/package.json b/website/package.json index 9230f6c2cf2..accecba259b 100644 --- a/website/package.json +++ b/website/package.json @@ -22,8 +22,8 @@ "@mdx-js/react": "1.6.22", "clsx": "1.1.1", "prism-react-renderer": "1.3.3", - "react": "18.1.0", - "react-dom": "18.1.0" + "react": "18.2.0", + "react-dom": "18.2.0" }, "browserslist": { "production": [ diff --git a/website/yarn.lock b/website/yarn.lock index bad96ccf2cd..671e93aa3b3 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6849,13 +6849,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" - integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.22.0" + scheduler "^0.23.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -6950,10 +6950,10 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.0.0" use-latest "^1.0.0" -react@18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" - integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -7270,10 +7270,10 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" From e8e1f35dfc303858651571624baa6df22ae0f8dc Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Wed, 15 Jun 2022 17:34:02 +1000 Subject: [PATCH 12/64] Set strict dependency on tested Kotlin compiler version (#4822) This effectively pins the Kotlin compiler version used by detekt-cli, minimising the chance of it being overridden and causing issues such as #4786 --- detekt-cli/build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/detekt-cli/build.gradle.kts b/detekt-cli/build.gradle.kts index edfd7cdd29a..d14b3203fe9 100644 --- a/detekt-cli/build.gradle.kts +++ b/detekt-cli/build.gradle.kts @@ -16,6 +16,11 @@ dependencies { implementation(libs.jcommander) implementation(projects.detektTooling) implementation(projects.detektParser) + implementation(libs.kotlin.compilerEmbeddable) { + version { + strictly(libs.versions.kotlin.get()) + } + } runtimeOnly(projects.detektCore) runtimeOnly(projects.detektRules) From 8b62ffc105618afe9ae8e818e6395a2d635b23f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 09:03:48 -0700 Subject: [PATCH 13/64] Update dependency com.github.breadmoirai:github-release to v2.4.1 (#4965) Co-authored-by: Renovate Bot --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f49dd882541..99631867343 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ junit = "5.8.2" contester = "0.2.0" [libraries] -githubRelease-gradle = "com.github.breadmoirai:github-release:2.3.7" +githubRelease-gradle = "com.github.breadmoirai:github-release:2.4.1" nexusStaging-gradle = "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0" semver4j-gradle = "com.vdurmont:semver4j:3.1.0" From b06276af54fb213d9c03f057a28b8dad14e3b5c1 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sun, 19 Jun 2022 10:05:29 +1000 Subject: [PATCH 14/64] Fix rule code samples to be valid Kotlin code (#4969) --- .../rules/style/ExplicitCollectionElementAccessMethod.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt index 9f8393b1c4b..f561cfd7ce3 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt @@ -26,13 +26,13 @@ import org.jetbrains.kotlin.types.typeUtil.supertypes * Prefer the usage of the indexed access operator `[]` for map or list element access or insert methods. * * - * val map = Map() + * val map = mutableMapOf() * map.put("key", "value") * val value = map.get("key") * * * - * val map = Map() + * val map = mutableMapOf() * map["key"] = "value" * val value = map["key"] * From 06ee2394410256a7143bb07cdcfac52f8d76c5c0 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sun, 19 Jun 2022 10:07:41 +1000 Subject: [PATCH 15/64] Use plain ASCII output in standard reports (#4968) --- .../io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt | 3 +-- .../src/test/resources/reporting/long-messages-report.txt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt index 9be5d9d9cc0..20ee87e95c6 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/reporting/Reporting.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.api.Detektion import io.gitlab.arturbosch.detekt.api.Finding import io.gitlab.arturbosch.detekt.api.RuleSetId import io.gitlab.arturbosch.detekt.api.ThresholdedCodeSmell -import kotlin.text.Typography.ellipsis internal fun defaultReportMapping(reportId: String) = when (reportId) { TxtOutputReport::class.java.simpleName -> "txt" @@ -81,7 +80,7 @@ private fun Finding.truncatedMessage(): String { .replace(messageReplacementRegex, " ") .trim() return when { - message.length > REPORT_MESSAGE_SIZE_LIMIT -> "${message.take(REPORT_MESSAGE_SIZE_LIMIT)}($ellipsis)" + message.length > REPORT_MESSAGE_SIZE_LIMIT -> "${message.take(REPORT_MESSAGE_SIZE_LIMIT)}(...)" else -> message } } diff --git a/detekt-core/src/test/resources/reporting/long-messages-report.txt b/detekt-core/src/test/resources/reporting/long-messages-report.txt index 23ab8780f8b..f5141676caf 100644 --- a/detekt-core/src/test/resources/reporting/long-messages-report.txt +++ b/detekt-core/src/test/resources/reporting/long-messages-report.txt @@ -1,5 +1,5 @@ Ruleset - 10min debt - LongRule - [This is just a long message that should be truncated after a given threshold is (…)] at File.kt:1:1 + LongRule - [This is just a long message that should be truncated after a given threshold is (...)] at File.kt:1:1 MultilineRule - [A multiline message.] at File.kt:1:1 Overall debt: 10min From ecd28cf1a3ba1df906f34dfc4d988b5b93ab1763 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:03:50 +1000 Subject: [PATCH 16/64] Simplify signing config (#4971) --- build-logic/src/main/kotlin/packaging.gradle.kts | 10 ++++++---- detekt-gradle-plugin/build.gradle.kts | 15 --------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/build-logic/src/main/kotlin/packaging.gradle.kts b/build-logic/src/main/kotlin/packaging.gradle.kts index a13ec760bfd..f70fb143a7c 100644 --- a/build-logic/src/main/kotlin/packaging.gradle.kts +++ b/build-logic/src/main/kotlin/packaging.gradle.kts @@ -66,10 +66,12 @@ if (signingKey.isNullOrBlank() || signingPwd.isNullOrBlank()) { logger.info("Signing disabled as the GPG key was not found") } else { logger.info("GPG Key found - Signing enabled") - signing { - useInMemoryPgpKeys(signingKey, signingPwd) - publishing.publications.forEach(::sign) - } +} + +signing { + useInMemoryPgpKeys(signingKey, signingPwd) + sign(publishing.publications) + isRequired = !(signingKey.isNullOrBlank() || signingPwd.isNullOrBlank()) } val String.byProperty: String? get() = findProperty(this) as? String diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index b579eff7704..dfda95d16f5 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -6,7 +6,6 @@ plugins { `java-gradle-plugin` `java-test-fixtures` idea - signing alias(libs.plugins.pluginPublishing) // We use this published version of the Detekt plugin to self analyse this project. id("io.gitlab.arturbosch.detekt") version "1.20.0" @@ -166,20 +165,6 @@ tasks.withType().configureEach { notCompatibleWithConfigurationCache("https://github.com/gradle/gradle/issues/13470") } -val signingKey = "SIGNING_KEY".byProperty -val signingPwd = "SIGNING_PWD".byProperty -if (signingKey.isNullOrBlank() || signingPwd.isNullOrBlank()) { - logger.info("Signing disabled as the GPG key was not found") -} else { - logger.info("GPG Key found - Signing enabled") - afterEvaluate { - signing { - useInMemoryPgpKeys(signingKey, signingPwd) - publishing.publications.forEach(::sign) - } - } -} - afterEvaluate { publishing { publications.filterIsInstance().forEach { From bd262c6fa58bf11a7f57ee69ea29c72192ccc742 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Tue, 21 Jun 2022 07:51:28 +1000 Subject: [PATCH 17/64] Update dependency com.gradle.plugin-publish to 1.0.0-rc-3 (#4970) --- detekt-gradle-plugin/build.gradle.kts | 12 +++--------- gradle/libs.versions.toml | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index dfda95d16f5..c0d36619006 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -89,9 +89,11 @@ dependencies { gradlePlugin { plugins { - register("detektPlugin") { + create("detektPlugin") { id = "io.gitlab.arturbosch.detekt" implementationClass = "io.gitlab.arturbosch.detekt.DetektPlugin" + displayName = "Static code analysis for Kotlin" + description = "Static code analysis for Kotlin" } } // Source sets that require the Gradle TestKit dependency @@ -119,15 +121,7 @@ tasks.validatePlugins { pluginBundle { website = "https://detekt.dev" vcsUrl = "https://github.com/detekt/detekt" - description = "Static code analysis for Kotlin" tags = listOf("kotlin", "detekt", "code-analysis", "linter", "codesmells", "android") - - (plugins) { - "detektPlugin" { - id = "io.gitlab.arturbosch.detekt" - displayName = "Static code analysis for Kotlin" - } - } } tasks { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99631867343..df6dc958cf1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -45,5 +45,5 @@ contester-driver = { module = "io.github.davidburstrom.contester:contester-drive binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.1" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradleVersions = { id = "com.github.ben-manes.versions", version = "0.42.0" } -pluginPublishing = { id = "com.gradle.plugin-publish", version = "0.21.0" } +pluginPublishing = { id = "com.gradle.plugin-publish", version = "1.0.0-rc-3" } shadow = { id = "com.github.johnrengelman.shadow", version = "7.1.2" } From bdec78d4c9a152002024b518a2cb8eaaac356467 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 08:34:28 +1000 Subject: [PATCH 18/64] Update gradle/gradle-build-action digest to 67421db (#4977) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codecoverage.yaml | 2 +- .github/workflows/deploy-snapshot.yaml | 4 ++-- .github/workflows/detekt-with-type-resolution.yaml | 4 ++-- .github/workflows/pre-merge.yaml | 14 +++++++------- .github/workflows/website.yaml | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/codecoverage.yaml b/.github/workflows/codecoverage.yaml index 8f80d30a962..d3a982bec2f 100644 --- a/.github/workflows/codecoverage.yaml +++ b/.github/workflows/codecoverage.yaml @@ -29,7 +29,7 @@ jobs: distribution: 'temurin' - name: Generate Coverage Report - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: jacocoMergedReport diff --git a/.github/workflows/deploy-snapshot.yaml b/.github/workflows/deploy-snapshot.yaml index f11a464bb9a..7e9526749c3 100644 --- a/.github/workflows/deploy-snapshot.yaml +++ b/.github/workflows/deploy-snapshot.yaml @@ -26,12 +26,12 @@ jobs: distribution: 'temurin' - name: Build detekt - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: build - name: Deploy Snapshot - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 env: ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }} ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }} diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index b6202e67711..e3ed8a2095a 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -34,7 +34,7 @@ jobs: distribution: 'temurin' - name: Run detekt-cli with argsfile - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: :detekt-cli:runWithArgsFile @@ -58,6 +58,6 @@ jobs: java-version: 17 distribution: 'temurin' - name: Run analysis - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: detektMain detektTest diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index dcfcb3faa33..6085863039f 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -37,7 +37,7 @@ jobs: java-version: ${{ matrix.jdk }} distribution: 'temurin' - name: Build detekt - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: build -x detekt - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3 @@ -46,15 +46,15 @@ jobs: path: '**.hprof' if-no-files-found: ignore - name: Run detekt-cli --help - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: :detekt-cli:runWithHelpFlag - name: Run detekt-cli with argsfile - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: :detekt-cli:runWithArgsFile - name: Try to publish to Maven Local - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: publishToMavenLocal @@ -70,7 +70,7 @@ jobs: java-version: 17 distribution: 'temurin' - name: Verify Generated Detekt Config File - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: verifyGeneratorOutput @@ -86,7 +86,7 @@ jobs: java-version: 17 distribution: 'temurin' - name: Build and compile test snippets - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: test -Pcompile-test-snippets=true @@ -102,6 +102,6 @@ jobs: java-version: 17 distribution: 'temurin' - name: Run with allWarningsAsErrors - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: build -x detekt -PwarningsAsErrors=true diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index c19494636d1..58bd23978fd 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -36,7 +36,7 @@ jobs: cache-dependency-path: 'website/yarn.lock' - name: Build Detekt Documentation - uses: gradle/gradle-build-action@e88ed3e650b26bd116cfee53cf198c1f6856682d # tag=v2 + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # tag=v2 with: arguments: :detekt-generator:generateDocumentation From 75f38dcc232727e50ceb7d88b35972f3c93da2d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 05:56:07 +0100 Subject: [PATCH 19/64] Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.3 (#4976) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index df6dc958cf1..5204958f0d1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ kotlin-scriptingCompilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-scr kotlin-stdlibJdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlinx-html = "org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.5" -kotlinx-coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2" +kotlinx-coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3" android-gradle = "com.android.tools.build:gradle:7.2.1" From 7832eeffe23f8b2e6c4d2b07609d4c55bdb02d49 Mon Sep 17 00:00:00 2001 From: Michael Bailey <1195562+yogurtearl@users.noreply.github.com> Date: Tue, 21 Jun 2022 22:02:09 -0700 Subject: [PATCH 20/64] Give a better error message for --jvm-target (#4978) --- .../arturbosch/detekt/core/settings/EnvironmentAware.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/settings/EnvironmentAware.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/settings/EnvironmentAware.kt index 1bb2041255d..89fa882894c 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/settings/EnvironmentAware.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/settings/EnvironmentAware.kt @@ -55,5 +55,8 @@ internal fun CompilerSpec.parseLanguageVersion(): LanguageVersion? { } internal fun CompilerSpec.parseJvmTarget(): JvmTarget { - return checkNotNull(JvmTarget.fromString(jvmTarget)) { "Invalid value passed to --jvm-target" } + return checkNotNull(JvmTarget.fromString(jvmTarget)) { + "Invalid value ($jvmTarget) passed to --jvm-target," + + " must be one of ${JvmTarget.values().map(JvmTarget::description)}" + } } From 0e67d142e55fcdf1663923c85738a8c92050ab0b Mon Sep 17 00:00:00 2001 From: Alex Stelmachonak <100310178+astelmachonak-nydig@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:04:05 -0400 Subject: [PATCH 21/64] Add instuctions for CLI installation using Scoop (#4984) --- website/docs/gettingstarted/cli.mdx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/website/docs/gettingstarted/cli.mdx b/website/docs/gettingstarted/cli.mdx index 03afbb985d3..a333d7e802c 100644 --- a/website/docs/gettingstarted/cli.mdx +++ b/website/docs/gettingstarted/cli.mdx @@ -22,6 +22,13 @@ brew install detekt detekt [options] ``` +### Windows, with [Scoop](https://scoop.sh/) + +```powershell +scoop install detekt +detekt [options] +``` + ### Any OS: From 89f6ec1586a2f93aaddb2e5165708dd55ec886bb Mon Sep 17 00:00:00 2001 From: Dominic Zirbel Date: Wed, 22 Jun 2022 09:18:52 -0700 Subject: [PATCH 22/64] Add CascadingCallWrapping style rule (#4979) Add a new rule CascadingCallWrapping which requires that if a chained call is placed on a newline then all subsequent calls must be as well, improving readability of long chains. --- config/detekt/detekt.yml | 2 + .../arturbosch/detekt/api/SplitPattern.kt | 3 +- .../main/resources/default-detekt-config.yml | 3 + .../collection/ConfigurationCollector.kt | 4 +- .../collection/MultiRuleCollector.kt | 3 +- .../generator/collection/RuleVisitor.kt | 6 +- .../detekt/extensions/DetektExtension.kt | 3 +- .../rules/complexity/TooManyFunctions.kt | 3 +- .../SuspendFunWithCoroutineScopeReceiver.kt | 5 +- .../detekt/rules/style/CanBeNonNullable.kt | 10 +- .../rules/style/CascadingCallWrapping.kt | 109 +++++++++++ .../detekt/rules/style/ForbiddenVoid.kt | 3 +- .../rules/style/ObjectLiteralToLambda.kt | 3 +- .../SerialVersionUIDInSerializableClass.kt | 3 +- .../detekt/rules/style/StyleGuideProvider.kt | 1 + .../rules/style/CascadingCallWrappingSpec.kt | 178 ++++++++++++++++++ 16 files changed, 324 insertions(+), 15 deletions(-) create mode 100644 detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrapping.kt create mode 100644 detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrappingSpec.kt diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 3f0b319ce07..be1b32e3e4e 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -155,6 +155,8 @@ potential-bugs: style: CanBeNonNullable: active: true + CascadingCallWrapping: + active: true ClassOrdering: active: true CollapsibleIfStatements: diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/SplitPattern.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/SplitPattern.kt index 08411d63e72..1450f2a1164 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/SplitPattern.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/SplitPattern.kt @@ -17,7 +17,8 @@ open class SplitPattern( .mapIf(removeTrailingAsterisks) { seq -> seq.map { it.removePrefix("*") } .map { it.removeSuffix("*") } - }.toList() + } + .toList() private fun Sequence.mapIf( condition: Boolean, diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index f7da171eeb3..2218451948a 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -490,6 +490,9 @@ style: active: true CanBeNonNullable: active: false + CascadingCallWrapping: + active: false + includeElvis: true ClassOrdering: active: false CollapsibleIfStatements: diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/ConfigurationCollector.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/ConfigurationCollector.kt index 59d77b874a8..bc7a4b19dd0 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/ConfigurationCollector.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/ConfigurationCollector.kt @@ -171,7 +171,9 @@ class ConfigurationCollector { private fun KtValueArgument.getReferenceIdentifierOrNull(): String? = (getArgumentExpression() as? KtCallableReferenceExpression) - ?.callableReference?.getIdentifier()?.text + ?.callableReference + ?.getIdentifier() + ?.text } private object ConfigWithAndroidVariantsSupport { diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt index aaaffa31213..6c7c4d9e6d0 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt @@ -64,7 +64,8 @@ class MultiRuleVisitor : DetektVisitor() { override fun visitSuperTypeList(list: KtSuperTypeList) { val isMultiRule = list.entries ?.mapNotNull { it.typeAsUserType?.referencedName } - ?.any { it == multiRule } ?: false + ?.any { it == multiRule } + ?: false val containingClass = list.containingClass() val className = containingClass?.name diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/RuleVisitor.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/RuleVisitor.kt index 679df61d68a..862eb94c0d4 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/RuleVisitor.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/RuleVisitor.kt @@ -63,7 +63,8 @@ internal class RuleVisitor : DetektVisitor() { val isRule = list.entries ?.asSequence() ?.map { it.typeAsUserType?.referencedName } - ?.any { ruleClasses.contains(it) } ?: false + ?.any { ruleClasses.contains(it) } + ?: false val containingClass = list.containingClass() val className = containingClass?.name @@ -138,7 +139,8 @@ internal class RuleVisitor : DetektVisitor() { .singleOrNull { it.name == "issue" } ?.initializer as? KtCallExpression ) - ?.valueArguments.orEmpty() + ?.valueArguments + .orEmpty() if (arguments.size >= ISSUE_ARGUMENT_SIZE) { severity = getArgument(arguments[1], "Severity") diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt index cd5e24e1d66..2707e2b2f22 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt @@ -47,7 +47,8 @@ open class DetektExtension @Inject constructor(objects: ObjectFactory) : CodeQua var baseline: File? = objects.fileProperty() .fileValue(File("detekt-baseline.xml")) - .get().asFile + .get() + .asFile var basePath: String? = null diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/TooManyFunctions.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/TooManyFunctions.kt index ed619afadda..d0ed5b44ad1 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/TooManyFunctions.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/TooManyFunctions.kt @@ -156,7 +156,8 @@ class TooManyFunctions(config: Config = Config.empty) : Rule(config) { declarations .filterIsInstance() .count { !isIgnoredFunction(it) } - } ?: 0 + } + ?: 0 private fun isIgnoredFunction(function: KtNamedFunction): Boolean = when { ignoreDeprecated && function.hasAnnotation(DEPRECATED) -> true diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt index 463b1b064e7..5b18e583756 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt @@ -67,7 +67,10 @@ class SuspendFunWithCoroutineScopeReceiver(config: Config) : Rule(config) { private fun checkReceiver(function: KtNamedFunction) { val suspendModifier = function.modifierList?.getModifier(KtTokens.SUSPEND_KEYWORD) ?: return val receiver = bindingContext[BindingContext.FUNCTION, function] - ?.extensionReceiverParameter?.value?.type ?: return + ?.extensionReceiverParameter + ?.value + ?.type + ?: return if (receiver.isCoroutineScope()) { report( CodeSmell( diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt index ba14ae34d9b..570f7ce22bd 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt @@ -14,7 +14,6 @@ import io.gitlab.arturbosch.detekt.rules.isNonNullCheck import io.gitlab.arturbosch.detekt.rules.isNullCheck import io.gitlab.arturbosch.detekt.rules.isOpen import io.gitlab.arturbosch.detekt.rules.isOverride -import org.jetbrains.kotlin.com.intellij.codeInsight.NullableNotNullManager.isNullable import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -137,11 +136,13 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { function.valueParameters.asSequence() .filter { it.typeReference?.typeElement is KtNullableType - }.mapNotNull { parameter -> + } + .mapNotNull { parameter -> bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, parameter]?.let { it to parameter } - }.forEach { (descriptor, param) -> + } + .forEach { (descriptor, param) -> candidateDescriptors.add(descriptor) nullableParams[descriptor] = NullableParam(param) } @@ -175,7 +176,8 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { .filter { val onlyNonNullCheck = validSingleChildExpression && it.isNonNullChecked && !it.isNullChecked it.isNonNullForced || onlyNonNullCheck - }.forEach { nullableParam -> + } + .forEach { nullableParam -> report( CodeSmell( issue, diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrapping.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrapping.kt new file mode 100644 index 00000000000..3dba019a61a --- /dev/null +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrapping.kt @@ -0,0 +1,109 @@ +package io.gitlab.arturbosch.detekt.rules.style + +import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity +import io.gitlab.arturbosch.detekt.api.config +import io.gitlab.arturbosch.detekt.api.internal.Configuration +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtBinaryExpression +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtQualifiedExpression +import org.jetbrains.kotlin.psi.KtUnaryExpression + +/** + * Requires that all chained calls are placed on a new line if a preceding one is. + * + * + * foo() + * .bar().baz() + * + * + * + * foo().bar().baz() + * + * foo() + * .bar() + * .baz() + * + */ +class CascadingCallWrapping(config: Config = Config.empty) : Rule(config) { + override val issue = Issue( + id = javaClass.simpleName, + severity = Severity.Style, + description = "If a chained call is wrapped to a new line, subsequent chained calls should be as well.", + debt = Debt.FIVE_MINS, + ) + + @Configuration("require trailing elvis expressions to be wrapped on a new line") + private val includeElvis: Boolean by config(true) + + override fun visitQualifiedExpression(expression: KtQualifiedExpression) { + super.visitQualifiedExpression(expression) + + checkExpression(expression, callExpression = expression.selectorExpression) + } + + override fun visitBinaryExpression(expression: KtBinaryExpression) { + super.visitBinaryExpression(expression) + + if (includeElvis && expression.operationToken == KtTokens.ELVIS) { + checkExpression(expression, callExpression = expression.right) + } + } + + private fun checkExpression(expression: KtExpression, callExpression: KtExpression?) { + if (!expression.containsNewline() && expression.receiverContainsNewline()) { + val callTextOrEmpty = callExpression?.text?.let { " `$it`" }.orEmpty() + report( + CodeSmell( + issue = issue, + entity = Entity.from(expression), + message = "Chained call$callTextOrEmpty should be wrapped to a new line since preceding calls were." + ) + ) + } + } + + @Suppress("ReturnCount") + private fun KtExpression.containsNewline(): Boolean { + val lhs: KtExpression + val rhs: KtExpression + + when (this) { + is KtQualifiedExpression -> { + lhs = receiverExpression + rhs = selectorExpression ?: return false + } + is KtBinaryExpression -> { + if (operationToken != KtTokens.ELVIS) return false + lhs = left ?: return false + rhs = right ?: return false + } + else -> return false + } + + val receiverEnd = lhs.startOffsetInParent + lhs.textLength + val selectorStart = rhs.startOffsetInParent + + return (receiverEnd until selectorStart).any { text[it] == '\n' } + } + + private fun KtExpression.receiverContainsNewline(): Boolean { + val lhs = when (this) { + is KtQualifiedExpression -> receiverExpression + is KtBinaryExpression -> left ?: return false + else -> return false + } + + return when (lhs) { + is KtQualifiedExpression -> lhs.containsNewline() + is KtUnaryExpression -> (lhs.baseExpression as? KtQualifiedExpression)?.containsNewline() == true + else -> false + } + } +} diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt index fb3e6502349..6e67b33309a 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt @@ -80,7 +80,8 @@ class ForbiddenVoid(config: Config = Config.empty) : Rule(config) { private fun KtTypeReference.isPartOfReturnTypeOfFunction() = getStrictParentOfType() ?.typeReference - ?.anyDescendantOfType { it == this } ?: false + ?.anyDescendantOfType { it == this } + ?: false private fun KtTypeReference.isParameterTypeOfFunction() = getStrictParentOfType() != null diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt index afe2e62c442..c4bbb262527 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt @@ -102,7 +102,8 @@ class ObjectLiteralToLambda(config: Config = Config.empty) : Rule(config) { if ( declaration.name == null && bindingContext.getType(expression) - ?.singleSuperTypeOrNull()?.couldBeSamInterface == true && + ?.singleSuperTypeOrNull() + ?.couldBeSamInterface == true && declaration.hasConvertibleMethod() ) { report(CodeSmell(issue, Entity.from(expression), issue.description)) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/SerialVersionUIDInSerializableClass.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/SerialVersionUIDInSerializableClass.kt index 644c95d1566..ad645ea96fe 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/SerialVersionUIDInSerializableClass.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/SerialVersionUIDInSerializableClass.kt @@ -100,7 +100,8 @@ class SerialVersionUIDInSerializableClass(config: Config = Config.empty) : Rule( private fun hasLongAssignment(property: KtProperty): Boolean { val assignmentText = property.children - .singleOrNull { it is KtConstantExpression || it is KtPrefixExpression }?.text + .singleOrNull { it is KtConstantExpression || it is KtPrefixExpression } + ?.text return assignmentText != null && assignmentText.last() == 'L' && assignmentText.substring(0, assignmentText.length - 1).toLongOrNull() != null } diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt index 7d6cbc250cc..981e73134c6 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt @@ -24,6 +24,7 @@ class StyleGuideProvider : DefaultRuleSetProvider { ruleSetId, listOf( CanBeNonNullable(config), + CascadingCallWrapping(config), ClassOrdering(config), CollapsibleIfStatements(config), DestructuringDeclarationWithTooManyEntries(config), diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrappingSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrappingSpec.kt new file mode 100644 index 00000000000..a9c141253c9 --- /dev/null +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CascadingCallWrappingSpec.kt @@ -0,0 +1,178 @@ +package io.gitlab.arturbosch.detekt.rules.style + +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.test.TestConfig +import io.gitlab.arturbosch.detekt.test.assertThat +import io.gitlab.arturbosch.detekt.test.compileAndLint +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class CascadingCallWrappingSpec { + private val subject = CascadingCallWrapping(Config.empty) + + @Test + fun `reports missing wrapping`() { + val code = """ + val a = 0 + .plus(0).plus(0).plus(0) + """ + + assertThat(subject.compileAndLint(code)) + .hasSize(1) + .hasTextLocations(8 to 30) + .first() + .hasMessage("Chained call `plus(0)` should be wrapped to a new line since preceding calls were.") + } + + @Test + fun `does not report when chained calls are on a single line`() { + val code = """ + val a = 0.plus(0).plus(0) + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `does not report wrapped calls`() { + val code = """ + val a = 0 + .plus(0) + .plus(0) + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `does not report unwrapped initial calls`() { + val code = """ + val a = 0.plus(0).plus(0) + .plus(0) + .plus(0) + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `reports missing wrapping for safe qualified calls`() { + val code = """ + val a = 0 + ?.plus(0)?.plus(0) + """ + + assertThat(subject.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports missing wrapping for calls with non-null assertions`() { + val code = """ + val a = 0!! + .plus(0)!!.plus(0) + """ + + assertThat(subject.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports missing wrapping for properties`() { + val code = """ + val a = "" + .plus("").length + + val b = "" + .length.plus(0) + """ + + assertThat(subject.compileAndLint(code)).hasSize(2) + } + + @Nested + inner class `with multiline calls` { + @Test + fun `does not report with wrapping`() { + val code = """ + val a = 0 + .plus( + 0 + ) + .let { + 0 + } + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `reports missing wrapping`() { + val code = """ + val a = 0 + .plus( + 0 + ) + .let { + 0 + }.plus( + 0 + ) + """ + + assertThat(subject.compileAndLint(code)).hasSize(1) + } + + @Test + fun `does not report when calls are multiline but never wrapped`() { + val code = """ + val a = 0.plus( + 0 + ).let { + 0 + } + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `does not report for single multiline call`() { + val code = """ + val a = 0.plus( + 0 + ) + """ + + assertThat(subject.compileAndLint(code)).isEmpty() + } + } + + @Nested + inner class `with elvis operators` { + private val subjectIncludingElvis = CascadingCallWrapping(TestConfig(mapOf("includeElvis" to true))) + private val subjectExcludingElvis = CascadingCallWrapping(TestConfig(mapOf("includeElvis" to false))) + + @Test + fun `does not report with wrapping`() { + val code = """ + val a = 0 + .plus(0) + ?: 0 + """ + + assertThat(subjectIncludingElvis.compileAndLint(code)).isEmpty() + assertThat(subjectExcludingElvis.compileAndLint(code)).isEmpty() + } + + @Test + fun `reports missing wrapping`() { + val code = """ + val a = 0 + .plus(0) ?: 0 + """ + + assertThat(subjectIncludingElvis.compileAndLint(code)).hasSize(1) + assertThat(subjectExcludingElvis.compileAndLint(code)).isEmpty() + } + } +} From 4979e371a476670f928865bb4fc7bec6ce22a159 Mon Sep 17 00:00:00 2001 From: marschwar Date: Wed, 22 Jun 2022 18:28:53 +0200 Subject: [PATCH 23/64] Do not allow junit assertions (#4987) Co-authored-by: Markus Schwarz --- config/detekt/detekt.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index be1b32e3e4e..399eee6b89d 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -182,6 +182,7 @@ style: active: true imports: - 'org.assertj.core.api.Assertions' + - 'org.junit.jupiter.api.Assertions*' ForbiddenMethodCall: active: true methods: From 8dc783a8ebd937586ba86548190f119b7731098a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Wed, 22 Jun 2022 18:32:31 +0200 Subject: [PATCH 24/64] Measure flakyness (#4742) --- detekt-gradle-plugin/build.gradle.kts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index c0d36619006..756acaae382 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.pluginPublishing) // We use this published version of the Detekt plugin to self analyse this project. id("io.gitlab.arturbosch.detekt") version "1.20.0" + id("org.gradle.test-retry") version "1.4.0" } repositories { @@ -189,3 +190,13 @@ afterEvaluate { } val String.byProperty: String? get() = findProperty(this) as? String + +tasks.withType().configureEach { + retry { + @Suppress("MagicNumber") + if (System.getenv().containsKey("CI")) { + maxRetries.set(2) + maxFailures.set(20) + } + } +} From 47428426d0760181a4acb395abad6c6aefed4968 Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Fri, 24 Jun 2022 18:09:31 +0300 Subject: [PATCH 25/64] Fix false-negative for CanBeNonNullable (#4993) * Report null-check returning 'Unit' The rule will report code smell when null-check expression returns 'Unit' * Not report guard statement with side effect ahead --- .../detekt/rules/style/CanBeNonNullable.kt | 43 +++++++++++++---- .../rules/style/CanBeNonNullableSpec.kt | 46 +++++++++++++++++++ 2 files changed, 79 insertions(+), 10 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt index 570f7ce22bd..a65ed2e7ceb 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtBinaryExpression +import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtConstantExpression @@ -46,6 +47,7 @@ import org.jetbrains.kotlin.psi.KtWhenConditionWithExpression import org.jetbrains.kotlin.psi.KtWhenExpression import org.jetbrains.kotlin.psi.psiUtil.allChildren import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType +import org.jetbrains.kotlin.psi.psiUtil.isFirstStatement import org.jetbrains.kotlin.psi.psiUtil.isPrivate import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.smartcasts.getKotlinTypeForComparison @@ -83,6 +85,11 @@ import org.jetbrains.kotlin.types.isNullable * println(a) * } * } + * + * fun foo(a: Int?) { + * if (a == null) return + * println(a) + * } * * * @@ -175,7 +182,7 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { // the param, either via an if/when check or with a safe-qualified expression. .filter { val onlyNonNullCheck = validSingleChildExpression && it.isNonNullChecked && !it.isNullChecked - it.isNonNullForced || onlyNonNullCheck + it.isNonNullForced || it.isNullCheckReturnsUnit || onlyNonNullCheck } .forEach { nullableParam -> report( @@ -235,9 +242,24 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { override fun visitIfExpression(expression: KtIfExpression) { expression.condition.evaluateCheckStatement(expression.`else`) + if (expression.isFirstStatement()) { + evaluateNullCheckReturnsUnit(expression.condition, expression.then) + } super.visitIfExpression(expression) } + private fun evaluateNullCheckReturnsUnit(condition: KtExpression?, then: KtExpression?) { + val thenExpression = if (then is KtBlockExpression) then.firstStatement else then + if (thenExpression !is KtReturnExpression) return + if (thenExpression.returnedExpression != null) return + + if (condition is KtBinaryExpression && condition.isNullCheck()) { + getDescriptor(condition.left, condition.right) + ?.let { nullableParams[it] } + ?.let { it.isNullCheckReturnsUnit = true } + } + } + override fun visitSafeQualifiedExpression(expression: KtSafeQualifiedExpression) { updateNullableParam(expression.receiverExpression) { it.isNonNullChecked = true } super.visitSafeQualifiedExpression(expression) @@ -323,15 +345,6 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { val rightExpression = right val nonNullChecks = mutableListOf() - fun getDescriptor(leftExpression: KtExpression?, rightExpression: KtExpression?): CallableDescriptor? { - return when { - leftExpression is KtNameReferenceExpression -> leftExpression - rightExpression is KtNameReferenceExpression -> rightExpression - else -> null - }?.getResolvedCall(bindingContext) - ?.resultingDescriptor - } - if (isNullCheck()) { getDescriptor(leftExpression, rightExpression) ?.let { nullableParams[it] } @@ -346,6 +359,15 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { return nonNullChecks } + private fun getDescriptor(leftExpression: KtExpression?, rightExpression: KtExpression?): CallableDescriptor? { + return when { + leftExpression is KtNameReferenceExpression -> leftExpression + rightExpression is KtNameReferenceExpression -> rightExpression + else -> null + }?.getResolvedCall(bindingContext) + ?.resultingDescriptor + } + private fun KtIsExpression.evaluateIsExpression(): List { val descriptor = this.leftHandSide.getResolvedCall(bindingContext)?.resultingDescriptor ?: return emptyList() @@ -417,6 +439,7 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { var isNullChecked = false var isNonNullChecked = false var isNonNullForced = false + var isNullCheckReturnsUnit = false } private inner class PropertyCheckVisitor : DetektVisitor() { diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt index d0e67b42caf..4b20456b0b4 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt @@ -897,6 +897,52 @@ class CanBeNonNullableSpec(val env: KotlinCoreEnvironment) { assertThat(subject.compileAndLintWithContext(env, code)).hasSize(1) } + @Test + fun `does report null-check returning unit type`() { + val code = """ + fun foo(a: Int?) { + if (a == null) return + println(a) + } + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)).hasSize(1) + } + + @Test + fun `does report null-check returning unit type in block`() { + val code = """ + fun foo(a: Int?) { + if (a == null) { return } + println(a) + } + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)).hasSize(1) + } + + @Test + fun `does not report guard statement with side effect ahead`() { + val code = """ + fun foo(a: Int?) { + println("side effect") + if (a == null) return + println(a) + } + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)).hasSize(0) + } + + @Test + fun `does not report null-check returning non-unit type`() { + val code = """ + fun foo(a: Int?): Int { + if (a == null) return 0 + println(a) + return a + } + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)).hasSize(0) + } + @Test fun `does not report when the parameter is checked on non-nullity with an else statement`() { val code = """ From 3d0f21565ac97e9db59a9aa9ac48e8a96f4340e4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jun 2022 11:44:23 +1000 Subject: [PATCH 26/64] Update actions/setup-java digest to 16cca54 (#4996) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codecoverage.yaml | 2 +- .github/workflows/deploy-snapshot.yaml | 2 +- .github/workflows/detekt-with-type-resolution.yaml | 4 ++-- .github/workflows/pre-merge.yaml | 8 ++++---- .github/workflows/website.yaml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/codecoverage.yaml b/.github/workflows/codecoverage.yaml index d3a982bec2f..489a5ae2551 100644 --- a/.github/workflows/codecoverage.yaml +++ b/.github/workflows/codecoverage.yaml @@ -23,7 +23,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/deploy-snapshot.yaml b/.github/workflows/deploy-snapshot.yaml index 7e9526749c3..d479b37b321 100644 --- a/.github/workflows/deploy-snapshot.yaml +++ b/.github/workflows/deploy-snapshot.yaml @@ -20,7 +20,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index e3ed8a2095a..f6f537f1e09 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -28,7 +28,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' @@ -53,7 +53,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index 6085863039f..9510dbf0769 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -32,7 +32,7 @@ jobs: - name: Checkout Repo uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: ${{ matrix.jdk }} distribution: 'temurin' @@ -65,7 +65,7 @@ jobs: - name: Checkout Repo uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' @@ -81,7 +81,7 @@ jobs: - name: Checkout Repo uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' @@ -97,7 +97,7 @@ jobs: - name: Checkout Repo uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 58bd23978fd..05a153fd494 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -23,7 +23,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - name: Setup Java - uses: actions/setup-java@860f60056505705214d223b91ed7a30f173f6142 # tag=v3 + uses: actions/setup-java@16cca5479d7c6b6843f6a6515640ba33c6501543 # tag=v3 with: java-version: 17 distribution: 'temurin' From 4441bc403e3f08122a24c5be0eeee06813916df4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jun 2022 11:45:36 +1000 Subject: [PATCH 27/64] Update github/codeql-action digest to 41a4ada (#4981) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/detekt-with-type-resolution.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index f6f537f1e09..5aa1aae19d6 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -39,7 +39,7 @@ jobs: arguments: :detekt-cli:runWithArgsFile - name: Upload SARIF to Github using the upload-sarif action - uses: github/codeql-action/upload-sarif@27ea8f8fe5977c00f5b37e076ab846c5bd783b96 # tag=v2 + uses: github/codeql-action/upload-sarif@41a4ada31ba866a7f1196b9602703a89edd69e22 # tag=v2 if: ${{ always() }} with: sarif_file: build/detekt-report.sarif From 3b7cae17b6f3d4d73545694d107a673b5abed802 Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Mon, 27 Jun 2022 15:30:23 +0300 Subject: [PATCH 28/64] Support markdown report in Gradle plugin (#4995) * Support markdown report in Gradle plugin * Add markdown description to website docs * Improve markdown description for website docs --- README.md | 1 + build.gradle.kts | 3 +++ code-coverage-report/build.gradle.kts | 1 + .../main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt | 2 +- .../io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt | 3 +++ .../src/main/kotlin/io/gitlab/arturbosch/detekt/Detekt.kt | 6 ++++++ .../arturbosch/detekt/extensions/DetektReportType.kt | 3 ++- .../gitlab/arturbosch/detekt/extensions/DetektReports.kt | 5 +++++ .../arturbosch/detekt/internal/DetektMultiplatform.kt | 1 + website/docs/gettingstarted/gradle.mdx | 7 +++++-- website/docs/intro.mdx | 2 ++ website/docs/introduction/configurations.md | 1 + website/docs/introduction/reporting.md | 7 ++++++- 13 files changed, 37 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 046ada92c2e..0178caaf5f8 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ tasks.withType().configureEach { xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins txt.required.set(true) // similar to the console output, contains issue signature to manually edit baseline files sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with Github Code Scanning + md.required.set(true) // simple Markdown format } } diff --git a/build.gradle.kts b/build.gradle.kts index 24858abb49f..15a04143a7f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,7 @@ allprojects { html.required.set(true) txt.required.set(true) sarif.required.set(true) + md.required.set(true) } } tasks.withType().configureEach { @@ -70,6 +71,7 @@ val detektFormat by tasks.registering(Detekt::class) { xml.required.set(false) html.required.set(false) txt.required.set(false) + md.required.set(false) } } @@ -88,6 +90,7 @@ val detektAll by tasks.registering(Detekt::class) { xml.required.set(false) html.required.set(false) txt.required.set(false) + md.required.set(false) } } diff --git a/code-coverage-report/build.gradle.kts b/code-coverage-report/build.gradle.kts index 3b3ea8bb6fd..74bfd601844 100644 --- a/code-coverage-report/build.gradle.kts +++ b/code-coverage-report/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { jacocoAggregation(projects.detektReportSarif) jacocoAggregation(projects.detektReportTxt) jacocoAggregation(projects.detektReportXml) + jacocoAggregation(projects.detektReportMd) jacocoAggregation(projects.detektRules) jacocoAggregation(projects.detektRulesComplexity) jacocoAggregation(projects.detektRulesCoroutines) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt index 4d2714a5d2d..b223993bf1c 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt @@ -79,7 +79,7 @@ class CliArgs { names = ["--report", "-r"], description = "Generates a report for given 'report-id' and stores it on given 'path'. " + "Entry should consist of: [report-id:path]. " + - "Available 'report-id' values: 'txt', 'xml', 'html', 'sarif'. " + + "Available 'report-id' values: 'txt', 'xml', 'html', 'md', 'sarif'. " + "These can also be used in combination with each other " + "e.g. '-r txt:reports/detekt.txt -r xml:reports/detekt.xml'" ) diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt index 33009439de8..d0b43e87d2f 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/DetektTaskDslSpec.kt @@ -321,6 +321,9 @@ class DetektTaskDslSpec { | sarif { | enabled = false | } + | md { + | enabled = false + | } | } |} """ diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/Detekt.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/Detekt.kt index 2af5d07ae84..8f0c8b97718 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/Detekt.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/Detekt.kt @@ -189,6 +189,11 @@ open class Detekt @Inject constructor( @Optional get() = getTargetFileProvider(reports.sarif) + val mdReportFile: Provider + @OutputFile + @Optional + get() = getTargetFileProvider(reports.md) + internal val customReportFiles: ConfigurableFileCollection @OutputFiles @Optional @@ -217,6 +222,7 @@ open class Detekt @Inject constructor( DefaultReportArgument(DetektReportType.HTML, htmlReportFile.orNull), DefaultReportArgument(DetektReportType.TXT, txtReportFile.orNull), DefaultReportArgument(DetektReportType.SARIF, sarifReportFile.orNull), + DefaultReportArgument(DetektReportType.MD, mdReportFile.orNull), DebugArgument(debugProp.getOrElse(false)), ParallelArgument(parallelProp.getOrElse(false)), BuildUponDefaultConfigArgument(buildUponDefaultConfigProp.getOrElse(false)), diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReportType.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReportType.kt index 124e72e2014..0afbf1c2588 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReportType.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReportType.kt @@ -5,7 +5,8 @@ enum class DetektReportType(val reportId: String, val extension: String) { XML("xml", "xml"), HTML("html", "html"), TXT("txt", "txt"), - SARIF("sarif", "sarif"); + SARIF("sarif", "sarif"), + MD("md", "md"); companion object { fun isWellKnownReportId(reportId: String) = reportId in values().map(DetektReportType::reportId) diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReports.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReports.kt index dcbf3e11397..9a084c1af58 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReports.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektReports.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.detekt.extensions import io.gitlab.arturbosch.detekt.extensions.DetektReportType.HTML +import io.gitlab.arturbosch.detekt.extensions.DetektReportType.MD import io.gitlab.arturbosch.detekt.extensions.DetektReportType.SARIF import io.gitlab.arturbosch.detekt.extensions.DetektReportType.TXT import io.gitlab.arturbosch.detekt.extensions.DetektReportType.XML @@ -19,6 +20,8 @@ open class DetektReports @Inject constructor(val objects: ObjectFactory) { val sarif: DetektReport = objects.newInstance(DetektReport::class.java, SARIF) + val md: DetektReport = objects.newInstance(DetektReport::class.java, MD) + val custom = mutableListOf() fun xml(action: Action): Unit = action.execute(xml) @@ -29,6 +32,8 @@ open class DetektReports @Inject constructor(val objects: ObjectFactory) { fun sarif(action: Action): Unit = action.execute(sarif) + fun md(action: Action): Unit = action.execute(md) + fun custom(action: Action): Unit = action.execute(createAndAddCustomReport()) private fun createAndAddCustomReport() = diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/internal/DetektMultiplatform.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/internal/DetektMultiplatform.kt index 4e124b1a292..06319abf0c9 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/internal/DetektMultiplatform.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/internal/DetektMultiplatform.kt @@ -145,6 +145,7 @@ internal fun Project.setReportOutputConventions(reports: DetektReports, extensio setReportOutputConvention(extension, reports.html, name, "html") setReportOutputConvention(extension, reports.txt, name, "txt") setReportOutputConvention(extension, reports.sarif, name, "sarif") + setReportOutputConvention(extension, reports.md, name, "md") } private fun Project.setReportOutputConvention( diff --git a/website/docs/gettingstarted/gradle.mdx b/website/docs/gettingstarted/gradle.mdx index 535b29ed941..17425f09d19 100644 --- a/website/docs/gettingstarted/gradle.mdx +++ b/website/docs/gettingstarted/gradle.mdx @@ -21,7 +21,7 @@ The detekt Gradle plugin will generate multiple tasks: - By default, the standard rule set without any ignore list is executed on sources files located in `src/main/java`, `src/test/java`, `src/main/kotlin` and `src/test/kotlin`. - Reports are automatically generated in xml, - html, txt, and sarif format and can be found in `build/reports/detekt/detekt.[xml|html|txt|sarif]` respectively. + html, txt, md, and sarif format and can be found in `build/reports/detekt/detekt.[xml|html|txt|md|sarif]` respectively. - Please note that the `detekt` task is automatically run when executing `gradle check`. - You may specify Gradle task CLI option for auto correction, such as `gradle detekt --auto-correct`. - `detektGenerateConfig` - Generates a default detekt configuration file into your project directory. @@ -48,7 +48,7 @@ the name of the build variant in their name, unless otherwise configured, such a `detekt-productionDebug.xml`. If both, a `detekt-main.xml` and a `detekt.xml` baseline file exists in place, the more specific one - `detekt-main.xml` - -takes precendence when the `detektMain` task is executed, likewise for Android variant-specific baseline files. +takes precedence when the `detektMain` task is executed, likewise for Android variant-specific baseline files. _NOTE:_ When analyzing Android projects that make use of specific code generators, such as Data Binding, Kotlin synthetic view accessors or else, you might see warnings output while Detekt runs. This is due to the inability to gather the @@ -318,6 +318,9 @@ tasks.named("detekt").configure { // Enable/Disable SARIF report (default: false) sarif.required.set(true) sarif.outputLocation.set(file("build/reports/detekt.sarif")) + // Enable/Disable MD report (default: false) + md.required.set(true) + md.outputLocation.set(file("build/reports/detekt.md")) custom { // The simple class name of your custom report. reportId = "CustomJsonReport" diff --git a/website/docs/intro.mdx b/website/docs/intro.mdx index 1bddd10ffed..5628b9ba8b4 100644 --- a/website/docs/intro.mdx +++ b/website/docs/intro.mdx @@ -68,6 +68,7 @@ tasks.withType().configureEach { html.required.set(true) txt.required.set(true) sarif.required.set(true) + md.required.set(true) } } ``` @@ -80,6 +81,7 @@ tasks.withType(Detekt).configureEach { html.required.set(true) txt.required.set(true) sarif.required.set(true) + md.required.set(true) } } ``` diff --git a/website/docs/introduction/configurations.md b/website/docs/introduction/configurations.md index 40fe937d421..26f7b2bde40 100644 --- a/website/docs/introduction/configurations.md +++ b/website/docs/introduction/configurations.md @@ -126,6 +126,7 @@ output-reports: # - 'TxtOutputReport' # - 'XmlOutputReport' # - 'SarifOutputReport' + # - 'MdOutputReport' ``` diff --git a/website/docs/introduction/reporting.md b/website/docs/introduction/reporting.md index b73b7670e32..eb7be2611ff 100644 --- a/website/docs/introduction/reporting.md +++ b/website/docs/introduction/reporting.md @@ -37,7 +37,12 @@ XML is a machine-readable format that can be integrated with CI tools. It is com [SARIF](https://sarifweb.azurewebsites.net/) is a standard format for the output of static analysis tools. It is a JSON format with a defined [schema](https://docs.oasis-open.org/sarif/sarif/v2.0/csprd02/schemas/). It is currently supported -by Github Code Scanning and we expect more consuming tools will be adopt this format in the future. +by GitHub Code Scanning, and we expect more consuming tools will adopt this format in the future. + +### MD +Markdown is a lightweight markup language for creating formatted text using a plain-text editor. +The output structure looks similar to HTML format. +About [markdown](https://github.github.com/gfm/#what-is-markdown-) on GitHub. ## Severity For machine-readable format, it is possible to configure the severity of each finding to fit From 5170077edc3452a5b1b0f58e257b2905a96d54f9 Mon Sep 17 00:00:00 2001 From: Chao Zhang Date: Mon, 27 Jun 2022 05:38:14 -0700 Subject: [PATCH 29/64] Address TextLocation for Wrapping (#4998) --- .../detekt/formatting/wrappers/Indentation.kt | 3 ++- .../detekt/formatting/wrappers/Wrapping.kt | 11 +++++++++++ .../arturbosch/detekt/formatting/WrappingSpec.kt | 12 ++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt index 4c98d5bbb34..40a7a64cf60 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt @@ -38,7 +38,8 @@ class Indentation(config: Config) : FormattingRule(config) { ) /** - * [wrapping] is working with file's [node] and we don't want to highlight the whole file + * [IndentationRule] has visitor modifier RunOnRootNodeOnly, so [node] is always the root file. + * Override the parent implementation to highlight the entire file. */ override fun getTextLocationForViolation(node: ASTNode, offset: Int): TextLocation { val relativeEnd = node.text diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt index ee4a7412aae..ed79bf053be 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt @@ -2,9 +2,11 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers import com.pinterest.ktlint.ruleset.standard.WrappingRule import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.TextLocation import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule +import org.jetbrains.kotlin.com.intellij.lang.ASTNode /** * See [ktlint-website](https://ktlint.github.io#rule-indentation) for documentation. @@ -15,4 +17,13 @@ class Wrapping(config: Config) : FormattingRule(config) { override val wrapping = WrappingRule() override val issue = issueFor("Reports missing newlines (e.g. between parentheses of a multi-line function call") + + /** + * [Wrapping] has visitor modifier RunOnRootNodeOnly, so [node] is always the root file. + * Override the parent implementation to highlight the entire file. + */ + override fun getTextLocationForViolation(node: ASTNode, offset: Int): TextLocation { + // Use offset + 1 since Wrapping always reports the location of missing new line. + return TextLocation(offset, offset + 1) + } } diff --git a/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/WrappingSpec.kt b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/WrappingSpec.kt index 529196b712f..47235379254 100644 --- a/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/WrappingSpec.kt +++ b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/WrappingSpec.kt @@ -2,7 +2,7 @@ package io.gitlab.arturbosch.detekt.formatting import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.formatting.wrappers.Wrapping -import io.gitlab.arturbosch.detekt.test.assertThat +import io.gitlab.arturbosch.detekt.test.assert import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -22,8 +22,16 @@ class WrappingSpec { class A() : B, C { } + + interface B + + interface C + """.trimIndent() - assertThat(subject.lint(code)).hasSize(1) + subject.lint(code).assert() + .hasSize(1) + .hasSourceLocation(1, 12) + .hasTextLocations(11 to 12) } } From 2b068e00426ad0acb83081575e0903b106e7d9fa Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Mon, 27 Jun 2022 15:51:52 +0300 Subject: [PATCH 30/64] Fix Signatures.kt:buildFunctionSignature (#4961) * Fix Signatures.kt:buildFunctionSignature 'buildFunctionSignature' fails when function body has KDoc. * Simplify tests * Skip comments --- .../detekt/api/internal/Signatures.kt | 25 ++++------ .../detekt/api/internal/SignaturesSpec.kt | 47 +++++++++++++++++++ 2 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/internal/SignaturesSpec.kt diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Signatures.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Signatures.kt index 117100b1985..4cac91362d4 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Signatures.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/Signatures.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments import java.io.File private val multipleWhitespaces = Regex("\\s{2,}") @@ -92,21 +93,15 @@ private fun buildClassSignature(classOrObject: KtClassOrObject): String { } private fun buildFunctionSignature(element: KtNamedFunction): String { - var methodStart = 0 - element.docComment?.let { - methodStart = it.endOffset - it.startOffset - } - var methodEnd = element.endOffset - element.startOffset - val typeReference = element.typeReference - if (typeReference != null) { - methodEnd = typeReference.endOffset - element.startOffset + val startOffset = element.startOffsetSkippingComments - element.startOffset + val endOffset = if (element.typeReference != null) { + element.typeReference?.endOffset ?: 0 } else { - element.valueParameterList?.let { - methodEnd = it.endOffset - element.startOffset - } - } - require(methodStart < methodEnd) { - "Error building function signature with range $methodStart - $methodEnd for element: ${element.text}" + element.valueParameterList?.endOffset ?: 0 + } - element.startOffset + + require(startOffset < endOffset) { + "Error building function signature with range $startOffset - $endOffset for element: ${element.text}" } - return element.text.substring(methodStart, methodEnd) + return element.text.substring(startOffset, endOffset) } diff --git a/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/internal/SignaturesSpec.kt b/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/internal/SignaturesSpec.kt new file mode 100644 index 00000000000..acfcf1bf5f9 --- /dev/null +++ b/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/internal/SignaturesSpec.kt @@ -0,0 +1,47 @@ +package io.gitlab.arturbosch.detekt.api.internal + +import io.github.detekt.test.utils.compileContentForTest +import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.assertThatThrownBy +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.junit.jupiter.api.Test + +class SignaturesSpec { + @Test + fun `function with type reference`() { + val result = compileContentForTest("fun data(): Int = 0") + .findChildByClass(KtNamedFunction::class.java)!! + .buildFullSignature() + + assertThat(result).isEqualTo("Test.kt\$fun data(): Int") + } + + @Test + fun `function without type reference`() { + val result = compileContentForTest("fun data() = 0") + .findChildByClass(KtNamedFunction::class.java)!! + .buildFullSignature() + + assertThat(result).isEqualTo("Test.kt\$fun data()") + } + + @Test + fun `function with comments`() { + val result = compileContentForTest("/* comments */ fun data() = 0") + .findChildByClass(KtNamedFunction::class.java)!! + .buildFullSignature() + + assertThat(result).isEqualTo("Test.kt\$fun data()") + } + + @Test + fun `function throws exception`() { + assertThatThrownBy { + compileContentForTest("{ fun data() = 0 }") + .findChildByClass(KtNamedFunction::class.java)!! + .buildFullSignature() + } + .isInstanceOf(IllegalArgumentException::class.java) + .hasMessageContaining("Error building function signature") + } +} From 0c879a7f37064a800aa2a94b2e0c19e46963442e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 17:03:47 +0200 Subject: [PATCH 31/64] Update dependency org.jetbrains.dokka to v1.7.0 (#4974) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5204958f0d1..192415dc91b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -dokka = "1.6.21" +dokka = "1.7.0" jacoco = "0.8.8" kotlin = "1.6.21" ktlint = "0.45.2" From c8eb24c04b8ef666a37d1c0ae6497342c9825349 Mon Sep 17 00:00:00 2001 From: Dominic Zirbel Date: Mon, 27 Jun 2022 08:09:25 -0700 Subject: [PATCH 32/64] UnnecessaryApply: fix false negative for assignment (#4948) Fix a missed case of UnnecessaryApply where the apply contains a single field assignment but the result of the apply{} is unused. This pattern is actually used in 2/3 of the examples and while it occurred in tests for false positives, no test actually checked that warnings were generated in the simple case. --- .../detekt/rules/style/UnnecessaryApply.kt | 17 +++++-- .../rules/style/UnnecessaryApplySpec.kt | 48 ++++++++++++++++++- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt index 5ed09649101..dc9a4647843 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt @@ -10,7 +10,9 @@ import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.rules.receiverIsUsed +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi.KtBinaryExpression import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtNameReferenceExpression @@ -75,11 +77,20 @@ class UnnecessaryApply(config: Config) : Rule(config) { @Suppress("ReturnCount") private fun KtCallExpression.hasOnlyOneMemberAccessStatement(): Boolean { val lambda = lambdaArguments.firstOrNull()?.getLambdaExpression() ?: return false - val singleStatement = lambda.bodyExpression?.statements?.singleOrNull() ?: return false - if (singleStatement !is KtThisExpression && + var singleStatement = lambda.bodyExpression?.statements?.singleOrNull() ?: return false + + if (singleStatement is KtBinaryExpression) { + if (singleStatement.operationToken !in KtTokens.ALL_ASSIGNMENTS) return false + + // for an assignment expression only consider whether members on the LHS use the apply{} context + singleStatement = singleStatement.left ?: return false + } else if (singleStatement !is KtThisExpression && singleStatement !is KtReferenceExpression && singleStatement !is KtDotQualifiedExpression - ) return false + ) { + return false + } + val lambdaDescriptor = bindingContext[BindingContext.FUNCTION, lambda.functionLiteral] ?: return false return singleStatement.collectDescendantsOfType { val resolvedCall = it.getResolvedCall(bindingContext) diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApplySpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApplySpec.kt index cd051c8214c..b9f6ce081ea 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApplySpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApplySpec.kt @@ -117,12 +117,12 @@ class UnnecessaryApplySpec(val env: KotlinCoreEnvironment) { class C { var prop = 0 } - + fun main() { val list = ArrayList() list.add( if (true) { - C().apply { + C().apply { prop = 1 } } else { @@ -235,6 +235,50 @@ class UnnecessaryApplySpec(val env: KotlinCoreEnvironment) { } } + @Nested + inner class `unnecessary apply expressions that can be changed to assignment` { + @Test + fun `reports apply with a single assignment whose result is unused`() { + assertThat( + subject.compileAndLintWithContext( + env, + """ + class C { + var prop = 0 + } + + fun main() { + val c = C() + c.apply { + prop = 1 + } + } + """ + ) + ).hasSize(1) + } + + @Test + fun `does not report apply with a single assignment whose result is used`() { + assertThat( + subject.compileAndLintWithContext( + env, + """ + class C { + var prop = 0 + } + + fun main() { + val c = C().apply { + prop = 1 + } + } + """ + ) + ).isEmpty() + } + } + @Nested inner class `reported false positives - #1305` { From 5ff82e1131785d1a78bd0c45dddc332619840f46 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 27 Jun 2022 21:44:41 +0100 Subject: [PATCH 33/64] Setup a Remark plugin to replace [detekt_version] with the current version on website (#5001) --- .../src/main/kotlin/releasing.gradle.kts | 6 +++--- website/docs/_detekt-version-banner.mdx | 5 ----- website/docs/_detekt-version.jsx | 8 -------- website/docs/gettingstarted/cli.mdx | 3 --- website/docs/gettingstarted/gradle.mdx | 4 ---- website/docs/gettingstarted/gradletask.md | 4 ---- website/docs/gettingstarted/mavenanttask.md | 4 ---- website/docs/intro.mdx | 4 ---- website/docs/introduction/extensions.md | 6 +----- website/docusaurus.config.js | 5 ++--- website/src/remark/detektVersionReplace.js | 19 +++++++++++++++++++ 11 files changed, 25 insertions(+), 43 deletions(-) delete mode 100644 website/docs/_detekt-version-banner.mdx delete mode 100644 website/docs/_detekt-version.jsx create mode 100644 website/src/remark/detektVersionReplace.js diff --git a/build-logic/src/main/kotlin/releasing.gradle.kts b/build-logic/src/main/kotlin/releasing.gradle.kts index 3d8dc6b7c1c..c44b5c97a0a 100644 --- a/build-logic/src/main/kotlin/releasing.gradle.kts +++ b/build-logic/src/main/kotlin/releasing.gradle.kts @@ -66,9 +66,9 @@ tasks { register("incrementMajor") { doLast { updateVersion { it.nextMajor() } } } register("applyDocVersion") { - fileToUpdate.set(file("${rootProject.rootDir}/website/docusaurus.config.js")) - linePartToFind.set(" detektVersion:") - lineTransformation.set(" detektVersion: '${Versions.DETEKT}'") + fileToUpdate.set(file("${rootProject.rootDir}/website/src/remark/detektVersionReplace.js")) + linePartToFind.set("const detektVersion = ") + lineTransformation.set("const detektVersion = \"${Versions.DETEKT}\";") } } diff --git a/website/docs/_detekt-version-banner.mdx b/website/docs/_detekt-version-banner.mdx deleted file mode 100644 index 9380373b605..00000000000 --- a/website/docs/_detekt-version-banner.mdx +++ /dev/null @@ -1,5 +0,0 @@ -import DetektVersion from "./_detekt-version.jsx"; - -:::info -The latest released version of Detekt is **** -::: diff --git a/website/docs/_detekt-version.jsx b/website/docs/_detekt-version.jsx deleted file mode 100644 index 376377d0621..00000000000 --- a/website/docs/_detekt-version.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; - -const DetektVersion = () => ( - {useDocusaurusContext().siteConfig.customFields.detektVersion} -); - -export default DetektVersion \ No newline at end of file diff --git a/website/docs/gettingstarted/cli.mdx b/website/docs/gettingstarted/cli.mdx index a333d7e802c..ef7092c7145 100644 --- a/website/docs/gettingstarted/cli.mdx +++ b/website/docs/gettingstarted/cli.mdx @@ -8,7 +8,6 @@ summary: sidebar_position: 1 --- -import DetektVersionBanner from "../_detekt-version-banner.mdx"; import CliOptions from "./_cli-options.md"; ## Install the cli @@ -31,8 +30,6 @@ detekt [options] ### Any OS: - - ```sh curl -sSLO https://github.com/detekt/detekt/releases/download/v[detekt_version]/detekt-cli-[detekt_version].zip unzip detekt-cli-[detekt_version].zip diff --git a/website/docs/gettingstarted/gradle.mdx b/website/docs/gettingstarted/gradle.mdx index 17425f09d19..70be03c1abd 100644 --- a/website/docs/gettingstarted/gradle.mdx +++ b/website/docs/gettingstarted/gradle.mdx @@ -8,8 +8,6 @@ summary: sidebar_position: 2 --- -import DetektVersionBanner from "../\_detekt-version-banner.mdx"; - Detekt requires **Gradle 6.1** or higher. We, however, recommend using the version of Gradle that is [listed in this table](/docs/introduction/compatibility). ## Available plugin tasks @@ -64,8 +62,6 @@ Using the plugins DSL: #### Groovy DSL - - ```groovy plugins { id "io.gitlab.arturbosch.detekt" version "[detekt_version]" diff --git a/website/docs/gettingstarted/gradletask.md b/website/docs/gettingstarted/gradletask.md index af35e08a118..6fd265f63a3 100644 --- a/website/docs/gettingstarted/gradletask.md +++ b/website/docs/gettingstarted/gradletask.md @@ -8,13 +8,9 @@ summary: sidebar_position: 3 --- -import DetektVersionBanner from "../\_detekt-version-banner.mdx"; - 1. Add following lines to your build.gradle file. 2. Run `gradle detekt` - - ###### Groovy DSL ```groovy repositories { diff --git a/website/docs/gettingstarted/mavenanttask.md b/website/docs/gettingstarted/mavenanttask.md index 86458babead..b832a9bb7c7 100644 --- a/website/docs/gettingstarted/mavenanttask.md +++ b/website/docs/gettingstarted/mavenanttask.md @@ -8,13 +8,9 @@ summary: sidebar_position: 4 --- -import DetektVersionBanner from "../\_detekt-version-banner.mdx"; - 1. Add following lines to your pom.xml. 2. Run `mvn verify` (when using the verify phase as we are doing here) - - ```xml diff --git a/website/docs/intro.mdx b/website/docs/intro.mdx index 5628b9ba8b4..630ee21624c 100644 --- a/website/docs/intro.mdx +++ b/website/docs/intro.mdx @@ -5,8 +5,6 @@ sidebar_position: 1 summary: --- -import DetektVersionBanner from "./\_detekt-version-banner.mdx"; - ![detekt logo](/img/logo.svg "detekt logo") ![detekt in action](/img/tutorial/detekt_in_action.png "detekt in action") @@ -26,8 +24,6 @@ import DetektVersionBanner from "./\_detekt-version-banner.mdx"; Apply the following configuration to your Gradle project build file: - - ```kotlin plugins { id("io.gitlab.arturbosch.detekt").version("[detekt_version]") diff --git a/website/docs/introduction/extensions.md b/website/docs/introduction/extensions.md index 011306f6b25..6d72e9e8a09 100644 --- a/website/docs/introduction/extensions.md +++ b/website/docs/introduction/extensions.md @@ -5,8 +5,6 @@ keywords: [extensions, rulesets] sidebar_position: 9 --- -import DetektVersionBanner from "../\_detekt-version-banner.mdx"; - The following page describes how to extend detekt and how to customize it to your domain-specific needs. The associated **code samples** to this guide can be found in the package [detekt/detekt-sample-extensions](https://github.com/detekt/detekt/tree/main/detekt-sample-extensions). @@ -221,11 +219,9 @@ To enable it, we add the published dependency to `detekt` via the `detektPlugins ###### Gradle (Kotlin/Groovy DSL) - - ```kotlin dependencies { - detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:{{ site.detekt_version }}") + detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:[detekt_version]") } ``` diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 39e821aff07..572d4864085 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -3,6 +3,7 @@ const lightCodeTheme = require('prism-react-renderer/themes/github'); const darkCodeTheme = require('prism-react-renderer/themes/dracula'); +const detektVersionReplace = require('./src/remark/detektVersionReplace'); /** @type {import('@docusaurus/types').Config} */ const config = { @@ -25,6 +26,7 @@ const config = { docs: { sidebarPath: require.resolve('./sidebars.js'), editUrl: 'https://github.com/detekt/detekt/edit/main/website/', + remarkPlugins: [detektVersionReplace], }, blog: { showReadingTime: true, @@ -179,9 +181,6 @@ const config = { }, }), - customFields: { - detektVersion: '1.21.0-RC1' - }, }; module.exports = config; diff --git a/website/src/remark/detektVersionReplace.js b/website/src/remark/detektVersionReplace.js new file mode 100644 index 00000000000..51959a3c428 --- /dev/null +++ b/website/src/remark/detektVersionReplace.js @@ -0,0 +1,19 @@ +const visit = require("unist-util-visit"); + +// Remark plugin that is replacing the [detekt_version] with the latest +// released version. Please note that this field is updated automatically +// by the `:detekt-generator:generateDocumentation` task. +const detektVersion = "1.21.0-RC1"; + +const plugin = (options) => { + const transformer = async (ast) => { + visit(ast, "code", (node) => { + if (node.value.includes("[detekt_version]")) { + node.value = node.value.replace("[detekt_version]", detektVersion); + } + }); + }; + return transformer; +}; + +module.exports = plugin; From 5d6ee2f43e84f083a05126cd0810332a766fb6bb Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 28 Jun 2022 18:43:31 +0900 Subject: [PATCH 34/64] NamedArguments: don't count trailing lambda argument (#5002) --- .../detekt/rules/complexity/NamedArguments.kt | 4 ++-- .../detekt/rules/complexity/NamedArgumentsSpec.kt | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt index a6222ece6ee..2fc021d9fe2 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt @@ -42,7 +42,7 @@ class NamedArguments(config: Config = Config.empty) : Rule(config) { Debt.FIVE_MINS ) - @Configuration("number of parameters that triggers this inspection") + @Configuration("number of arguments that triggers this inspection") private val threshold: Int by config(defaultValue = 3) @Configuration("ignores when argument values are the same as the parameter names") @@ -50,7 +50,7 @@ class NamedArguments(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { if (bindingContext == BindingContext.EMPTY) return - val valueArguments = expression.valueArguments + val valueArguments = expression.valueArguments.filterNot { it is KtLambdaArgument } if (valueArguments.size > threshold && expression.canNameArguments()) { val message = "This function call has ${valueArguments.size} arguments. To call a function with more " + "than $threshold arguments you should set the name of each argument." diff --git a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArgumentsSpec.kt b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArgumentsSpec.kt index f3039cda62a..b077cca74f0 100644 --- a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArgumentsSpec.kt +++ b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArgumentsSpec.kt @@ -196,6 +196,18 @@ class NamedArgumentsSpec(val env: KotlinCoreEnvironment) { val findings = subject.compileAndLintWithContext(env, code) assertThat(findings).hasSize(1) } + + @Test + fun `does not count lambda argument`() { + val code = """ + fun test(n: Int) { + require(n == 2) { "N is not 2" } + } + """ + val subject = NamedArguments(TestConfig(mapOf("threshold" to 1))) + val findings = subject.compileAndLintWithContext(env, code) + assertThat(findings).hasSize(0) + } } @Nested From 29158afff71aa6fbe4661a449df2110d2b05823d Mon Sep 17 00:00:00 2001 From: Artur Bosch Date: Tue, 28 Jun 2022 15:25:56 +0200 Subject: [PATCH 35/64] Show finding at declaration name instead of the whole declaration (#5003) --- .../detekt/rules/naming/MatchingDeclarationName.kt | 2 +- .../rules/naming/MatchingDeclarationNameSpec.kt | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationName.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationName.kt index cd2f1cc8c94..6acc1a419fb 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationName.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationName.kt @@ -79,7 +79,7 @@ class MatchingDeclarationName(config: Config = Config.empty) : Rule(config) { val declarationName = declaration.name val filename = file.fileNameWithoutSuffix() if (declarationName != filename && hasNoMatchingTypeAlias(filename)) { - val entity = Entity.from(declaration).copy(ktElement = file) + val entity = Entity.atName(declaration).copy(ktElement = file) report( CodeSmell( issue, diff --git a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationNameSpec.kt b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationNameSpec.kt index 123b56d201c..b5c29655987 100644 --- a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationNameSpec.kt +++ b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/MatchingDeclarationNameSpec.kt @@ -132,7 +132,7 @@ class MatchingDeclarationNameSpec { fun `should not pass for object declaration`() { val ktFile = compileContentForTest("object O", filename = "Objects.kt") val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 8) } @Test @@ -142,14 +142,14 @@ class MatchingDeclarationNameSpec { filename = "Objects.kt" ) val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 45) } @Test fun `should not pass for class declaration`() { val ktFile = compileContentForTest("class C", filename = "Classes.kt") val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 7) } @Test @@ -163,14 +163,14 @@ class MatchingDeclarationNameSpec { filename = "ClassUtils.kt" ) val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 7) } @Test fun `should not pass for interface declaration`() { val ktFile = compileContentForTest("interface I", filename = "Not_I.kt") val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 11) } @Test @@ -184,7 +184,7 @@ class MatchingDeclarationNameSpec { filename = "E.kt" ) val findings = MatchingDeclarationName().lint(ktFile) - assertThat(findings).hasSourceLocation(1, 1) + assertThat(findings).hasSourceLocation(1, 12) } @Test @@ -211,7 +211,7 @@ class MatchingDeclarationNameSpec { val findings = MatchingDeclarationName( TestConfig("mustBeFirst" to "false") ).lint(ktFile) - assertThat(findings).hasSourceLocation(3, 1) + assertThat(findings).hasSourceLocation(3, 7) } } } From 1e696fd9fca384060f3e03a7711318f00523b93f Mon Sep 17 00:00:00 2001 From: Dominic Zirbel Date: Tue, 28 Jun 2022 06:28:01 -0700 Subject: [PATCH 36/64] Add MaxChainedCallsOnSameLine style rule (#4985) Add a new rule MaxChainedCallsOnSameLine to limit the number of chained calls on placed on a single line. This works well alongside CascadingCallWrapping in #4979 to make long call chains more readable by wrapping them on new lines. --- .../main/resources/default-detekt-config.yml | 3 + .../rules/style/MaxChainedCallsOnSameLine.kt | 79 +++++++++++++ .../detekt/rules/style/StyleGuideProvider.kt | 1 + .../style/MaxChainedCallsOnSameLineSpec.kt | 107 ++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt create mode 100644 detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index 2218451948a..462058ca590 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -582,6 +582,9 @@ style: active: false MandatoryBracesLoops: active: false + MaxChainedCallsOnSameLine: + active: false + maxChainedCalls: 5 MaxLineLength: active: true maxLineLength: 120 diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt new file mode 100644 index 00000000000..f9680a0fc0a --- /dev/null +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt @@ -0,0 +1,79 @@ +package io.gitlab.arturbosch.detekt.rules.style + +import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity +import io.gitlab.arturbosch.detekt.api.config +import io.gitlab.arturbosch.detekt.api.internal.Configuration +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtQualifiedExpression +import org.jetbrains.kotlin.psi.KtUnaryExpression + +/** + * Limits the number of chained calls which can be placed on a single line. + * + * + * a().b().c().d().e().f() + * + * + * + * a().b().c() + * .d().e().f() + * + */ +class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { + override val issue = Issue( + id = javaClass.simpleName, + severity = Severity.Style, + description = "Chained calls beyond the maximum should be wrapped to a new line.", + debt = Debt.FIVE_MINS, + ) + + @Configuration("maximum chained calls allowed on a single line") + private val maxChainedCalls: Int by config(defaultValue = 5) + + override fun visitQualifiedExpression(expression: KtQualifiedExpression) { + super.visitQualifiedExpression(expression) + + // skip if the parent is also a call on the same line to avoid duplicated warnings + val parent = expression.parent + if (parent is KtQualifiedExpression && !parent.callOnNewLine()) return + + val chainedCalls = expression.countChainedCalls() + 1 + if (chainedCalls > maxChainedCalls) { + report( + CodeSmell( + issue = issue, + entity = Entity.from(expression), + message = "$chainedCalls chained calls on a single line; more than $maxChainedCalls calls should " + + "be wrapped to a new line." + ) + ) + } + } + + private fun KtExpression.countChainedCalls(): Int { + return when (this) { + is KtQualifiedExpression -> + if (callOnNewLine()) 0 else receiverExpression.countChainedCalls() + 1 + is KtUnaryExpression -> baseExpression?.countChainedCalls() ?: 0 + else -> 0 + } + } + + private fun KtQualifiedExpression.callOnNewLine(): Boolean { + val receiver = receiverExpression + val selector = selectorExpression ?: return false + + val receiverEnd = receiver.startOffsetInParent + receiver.textLength + val selectorStart = selector.startOffsetInParent + + return text + .subSequence(startIndex = receiverEnd, endIndex = selectorStart) + .contains('\n') + } +} diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt index 981e73134c6..4591807eb81 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt @@ -99,6 +99,7 @@ class StyleGuideProvider : DefaultRuleSetProvider { UseOrEmpty(config), UseAnyOrNoneInsteadOfFind(config), UnnecessaryBackticks(config), + MaxChainedCallsOnSameLine(config), ) ) } diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt new file mode 100644 index 00000000000..9d135a648d2 --- /dev/null +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt @@ -0,0 +1,107 @@ +package io.gitlab.arturbosch.detekt.rules.style + +import io.gitlab.arturbosch.detekt.test.TestConfig +import io.gitlab.arturbosch.detekt.test.assertThat +import io.gitlab.arturbosch.detekt.test.compileAndLint +import org.junit.jupiter.api.Test + +class MaxChainedCallsOnSameLineSpec { + @Test + fun `does not report 2 calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0.plus(0)" + + assertThat(rule.compileAndLint(code)).isEmpty() + } + + @Test + fun `does not report 3 calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0.plus(0).plus(0)" + + assertThat(rule.compileAndLint(code)).isEmpty() + } + + @Test + fun `reports 4 calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0.plus(0).plus(0).plus(0)" + + assertThat(rule.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports 4 safe qualified calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0?.plus(0)?.plus(0)?.plus(0)" + + assertThat(rule.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports 4 non-null asserted calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0!!.plus(0)!!.plus(0)!!.plus(0)" + + assertThat(rule.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports once for 7 calls on a single line with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "val a = 0.plus(0).plus(0).plus(0).plus(0).plus(0).plus(0)" + + assertThat(rule.compileAndLint(code)).hasSize(1) + } + + @Test + fun `does not report 5 calls on separate lines with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val a = 0 + .plus(0) + .plus(0) + .plus(0) + .plus(0) + """ + + assertThat(rule.compileAndLint(code)).isEmpty() + } + + @Test + fun `does not report 3 calls on same line with wrapped calls with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val a = 0.plus(0).plus(0) + .plus(0).plus(0).plus(0) + .plus(0).plus(0).plus(0) + """ + + assertThat(rule.compileAndLint(code)).isEmpty() + } + + @Test + fun `reports 4 calls on same line with wrapped calls with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val a = 0.plus(0).plus(0).plus(0) + .plus(0) + .plus(0) + """ + + assertThat(rule.compileAndLint(code)).hasSize(1) + } + + @Test + fun `reports 4 calls on wrapped line with with a max of 3`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val a = 0 + .plus(0) + .plus(0).plus(0).plus(0).plus(0) + .plus(0) + """ + + assertThat(rule.compileAndLint(code)).hasSize(1) + } +} From 5c39d7d252b1f2cf822766f1886a70fbf0410b0f Mon Sep 17 00:00:00 2001 From: Artur Bosch Date: Wed, 29 Jun 2022 12:42:08 +0200 Subject: [PATCH 37/64] Loading a specific resource from a module must use class from module (#5008) --- .../arturbosch/detekt/core/tooling/DefaultConfigProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt index 3bddf2f45e4..397f8088d10 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/tooling/DefaultConfigProvider.kt @@ -32,7 +32,7 @@ class DefaultConfigProvider : DefaultConfigurationProvider { private fun configInputStream(extensionsSpec: ExtensionsSpec): InputStream { val outputStream = ByteArrayOutputStream() - requireNotNull(extensionsSpec.javaClass.getSafeResourceAsStream("/default-detekt-config.yml")) + requireNotNull(DefaultConfigProvider::class.java.getSafeResourceAsStream("/default-detekt-config.yml")) .use { it.copyTo(outputStream) } ExtensionFacade(extensionsSpec.plugins).pluginLoader From 0a00c2a5f1d6808372bd4b6478386fc5651ad3c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 19:59:05 +0100 Subject: [PATCH 38/64] Update github/codeql-action digest to 3f62b75 (#5007) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/detekt-with-type-resolution.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/detekt-with-type-resolution.yaml b/.github/workflows/detekt-with-type-resolution.yaml index 5aa1aae19d6..bc31220a131 100644 --- a/.github/workflows/detekt-with-type-resolution.yaml +++ b/.github/workflows/detekt-with-type-resolution.yaml @@ -39,7 +39,7 @@ jobs: arguments: :detekt-cli:runWithArgsFile - name: Upload SARIF to Github using the upload-sarif action - uses: github/codeql-action/upload-sarif@41a4ada31ba866a7f1196b9602703a89edd69e22 # tag=v2 + uses: github/codeql-action/upload-sarif@3f62b754e23e0dd60f91b744033e1dc1654c0ec6 # tag=v2 if: ${{ always() }} with: sarif_file: build/detekt-report.sarif From bea15be1201c9ec6ca87431666b47265825f6f16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 19:59:36 +0100 Subject: [PATCH 39/64] Update plugin pluginPublishing to v1.0.0 (#5010) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 192415dc91b..a850b56bf50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -45,5 +45,5 @@ contester-driver = { module = "io.github.davidburstrom.contester:contester-drive binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.1" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } gradleVersions = { id = "com.github.ben-manes.versions", version = "0.42.0" } -pluginPublishing = { id = "com.gradle.plugin-publish", version = "1.0.0-rc-3" } +pluginPublishing = { id = "com.gradle.plugin-publish", version = "1.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "7.1.2" } From 49c6d88d08c929f40d60c8ef755981222c6385a4 Mon Sep 17 00:00:00 2001 From: Amit Dash Date: Thu, 30 Jun 2022 00:32:56 +0530 Subject: [PATCH 40/64] Allow constants to be skipped for BooleanPropertyNaming rule (#5006) Co-authored-by: Amit Dash --- .../detekt/rules/naming/BooleanPropertyNaming.kt | 4 +++- .../detekt/rules/naming/BooleanPropertyNamingSpec.kt | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt index e28cea260aa..29ae0bbb0a0 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt @@ -12,6 +12,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.rules.fqNameOrNull import io.gitlab.arturbosch.detekt.rules.identifierName +import io.gitlab.arturbosch.detekt.rules.isConstant import io.gitlab.arturbosch.detekt.rules.isOverride import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtParameter @@ -68,8 +69,9 @@ class BooleanPropertyNaming(config: Config = Config.empty) : Rule(config) { val typeName = getTypeName(declaration) val isBooleanType = typeName == KOTLIN_BOOLEAN_TYPE_NAME || typeName == JAVA_BOOLEAN_TYPE_NAME + val isNonConstantBooleanType = isBooleanType && !declaration.isConstant() - if (isBooleanType && !name.contains(allowedPattern) && !isIgnoreOverridden(declaration)) { + if (isNonConstantBooleanType && !name.contains(allowedPattern) && !isIgnoreOverridden(declaration)) { report(reportCodeSmell(declaration, name)) } } diff --git a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNamingSpec.kt b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNamingSpec.kt index a6fa028720e..0b112ef86c2 100644 --- a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNamingSpec.kt +++ b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNamingSpec.kt @@ -270,6 +270,18 @@ class BooleanPropertyNamingSpec(val env: KotlinCoreEnvironment) { assertThat(findings).hasSize(1) } + @Test + fun `should not warn about Kotlin Boolean if it is a constant val`() { + val code = """ + object Test { + const val CONSTANT_VAL_BOOLEAN = true + } + """ + val findings = subject.compileAndLintWithContext(env, code) + + assertThat(findings).hasSize(0) + } + @Test fun `should warn about Kotlin Boolean override if isIgnoreOverridden is false`() { val code = """ From 58d4b8e839896b280b8a3f4b8ff856f434afab77 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 30 Jun 2022 09:08:04 +0100 Subject: [PATCH 41/64] Prepare Detekt 1.21.0-RC2 (#5013) --- build-logic/src/main/kotlin/Versions.kt | 2 +- .../io/gitlab/arturbosch/detekt/JvmSpec.kt | 2 +- .../detekt/extensions/DetektExtension.kt | 3 +- scripts/github-milestone-report.main.kts | 2 +- website/docs/introduction/changelog 1.x.x.md | 32 +++++++++++++++++-- website/src/remark/detektVersionReplace.js | 2 +- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/build-logic/src/main/kotlin/Versions.kt b/build-logic/src/main/kotlin/Versions.kt index 47088dbedf4..f9ab2f076e2 100644 --- a/build-logic/src/main/kotlin/Versions.kt +++ b/build-logic/src/main/kotlin/Versions.kt @@ -1,6 +1,6 @@ object Versions { - const val DETEKT: String = "1.21.0-RC1" + const val DETEKT: String = "1.21.0-RC2" const val SNAPSHOT_NAME: String = "main" const val JVM_TARGET: String = "1.8" diff --git a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt index cc48081f178..307946fe1ce 100644 --- a/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt +++ b/detekt-gradle-plugin/src/functionalTest/kotlin/io/gitlab/arturbosch/detekt/JvmSpec.kt @@ -15,7 +15,7 @@ class JvmSpec { .buildAndFail() assertThat(result.output).contains("failed with 2 weighted issues.") - assertThat(result.output).contains("Do not directly exit the process outside the `main` function. Throw an exception(…)") + assertThat(result.output).contains("Do not directly exit the process outside the `main` function. Throw an exception(...)") assertThat(result.output).contains("Errors.kt:7:9") assertThat(result.output).contains("Errors.kt:12:16") } diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt index 2707e2b2f22..d100b34ec2a 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/extensions/DetektExtension.kt @@ -45,7 +45,8 @@ open class DetektExtension @Inject constructor(objects: ObjectFactory) : CodeQua DEFAULT_TEST_SRC_DIR_KOTLIN, ) - var baseline: File? = objects.fileProperty() + var baseline: File? = objects + .fileProperty() .fileValue(File("detekt-baseline.xml")) .get() .asFile diff --git a/scripts/github-milestone-report.main.kts b/scripts/github-milestone-report.main.kts index 3c2d4ec68e8..d0042bbe9dd 100755 --- a/scripts/github-milestone-report.main.kts +++ b/scripts/github-milestone-report.main.kts @@ -50,7 +50,7 @@ class GithubMilestoneReport : CliktCommand() { var ghIssues: List = ghRepository.getIssues(GHIssueState.CLOSED, ghMilestone) if (filterExisting) { - val changeLogContent = File("./docs/pages/changelog 1.x.x.md").readText() + val changeLogContent = File("./website/docs/introduction/changelog 1.x.x.md").readText() ghIssues = ghIssues.filter { "[#${it.number}]" !in changeLogContent } } diff --git a/website/docs/introduction/changelog 1.x.x.md b/website/docs/introduction/changelog 1.x.x.md index f9040eacce7..10404e801fc 100644 --- a/website/docs/introduction/changelog 1.x.x.md +++ b/website/docs/introduction/changelog 1.x.x.md @@ -5,22 +5,44 @@ keywords: [changelog, release-notes, migration] sidebar_position: 1 --- -#### 1.21.0-RC1 - 2022-06-02 +#### 1.21.0-RC2 - 2022-06-29 ##### Notable Changes - We enabled ~30 new rules by default which we believe are now stable enough. - [#4875](https://github.com/detekt/detekt/pull/4875) -- We added **3** new Rules to Detekt +- We added **6** new Rules to Detekt - `NullableBooleanCheck` - [#4872](https://github.com/detekt/detekt/pull/4872) - `CouldBeSequence` - [#4855](https://github.com/detekt/detekt/pull/4855) - `UnnecessaryBackticks` - [#4764](https://github.com/detekt/detekt/pull/4764) + - `ForbiddenSuppress` - [#4899](https://github.com/detekt/detekt/pull/4899) + - `MaxChainedCallsOnSameLine` - [#4985](https://github.com/detekt/detekt/pull/4985) + - `CascadingCallWrapping` - [#4979](https://github.com/detekt/detekt/pull/4979) +- We added support for Markdown reports - [#4858](https://github.com/detekt/detekt/pull/4858) - We now allow users and rule authors to specify a **reason** for every value in the config file - [#4611](https://github.com/detekt/detekt/pull/4611) -- We now report as warnings the in the config file that should converted to be an array - [#4793](https://github.com/detekt/detekt/pull/4793) +- We now report as warnings the in the config file that can be converted to be an array - [#4793](https://github.com/detekt/detekt/pull/4793) - We added a dependency on **ConTester** to help us verify concurrency scenarios for Detekt - [#4672](https://github.com/detekt/detekt/pull/4672) - For contributors: we restructured our build setup to be use **Gradle composite build** - [#4751](https://github.com/detekt/detekt/pull/4751) ##### Changelog +- Fix Signatures.kt:buildFunctionSignature - [#4961](https://github.com/detekt/detekt/pull/4961) +- Loading a specific resource from a module must use class from module - [#5008](https://github.com/detekt/detekt/pull/5008) +- Update github/codeql-action digest to 3f62b75 - [#5007](https://github.com/detekt/detekt/pull/5007) +- Show finding at declaration name instead of the whole declaration - [#5003](https://github.com/detekt/detekt/pull/5003) +- NamedArguments: don't count trailing lambda argument - [#5002](https://github.com/detekt/detekt/pull/5002) +- Address TextLocation for Wrapping - [#4998](https://github.com/detekt/detekt/pull/4998) +- Support markdown report in Gradle plugin - [#4995](https://github.com/detekt/detekt/pull/4995) +- Fix false-negative for CanBeNonNullable - [#4993](https://github.com/detekt/detekt/pull/4993) +- Give a better error message for --jvm-target - [#4978](https://github.com/detekt/detekt/pull/4978) +- Fix rule code samples to be valid Kotlin code - [#4969](https://github.com/detekt/detekt/pull/4969) +- Use plain ASCII output in standard reports - [#4968](https://github.com/detekt/detekt/pull/4968) +- UnnecessaryApply: fix false negative for assignment - [#4948](https://github.com/detekt/detekt/pull/4948) +- Support disabling config validation via tooling spec - [#4937](https://github.com/detekt/detekt/pull/4937) +- UnusedPrivateMember: highlight declaration name - [#4928](https://github.com/detekt/detekt/pull/4928) +- Provide a priority field for DetektProvider - [#4923](https://github.com/detekt/detekt/pull/4923) +- CastToNullableType: allow casting null keyword - [#4907](https://github.com/detekt/detekt/pull/4907) +- Update plugin com.gradle.common-custom-user-data-gradle-plugin to v1.7.2 - [#4897](https://github.com/detekt/detekt/pull/4897) +- Set strict dependency on tested Kotlin compiler version - [#4822](https://github.com/detekt/detekt/pull/4822) - Simplify regular expressions - [#4893](https://github.com/detekt/detekt/pull/4893) - Remove redundant character escape in RegExp - [#4892](https://github.com/detekt/detekt/pull/4892) - Reformat Markdown files to comply with the spec - [#4891](https://github.com/detekt/detekt/pull/4891) @@ -68,6 +90,9 @@ sidebar_position: 1 ##### Dependency Updates +- Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.3 - [#4976](https://github.com/detekt/detekt/pull/4976) +- Update dependency org.jetbrains.dokka to v1.7.0 - [#4974](https://github.com/detekt/detekt/pull/4974) +- Update plugin binaryCompatibilityValidator to v0.10.1 - [#4954](https://github.com/detekt/detekt/pull/4954) - Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.2 - [#4868](https://github.com/detekt/detekt/pull/4868) - Update dependency com.android.tools.build:gradle to v7.2.1 - [#4861](https://github.com/detekt/detekt/pull/4861) - Update plugin binaryCompatibilityValidator to v0.10.0 - [#4837](https://github.com/detekt/detekt/pull/4837) @@ -82,6 +107,7 @@ sidebar_position: 1 ##### Housekeeping & Refactorings +- Measure flakyness on Windows CI - [#4742](https://github.com/detekt/detekt/pull/4742) - Declare nested test classes as non-static - [#4894](https://github.com/detekt/detekt/pull/4894) - Remove deprecated usages in gradle-plugin test - [#4889](https://github.com/detekt/detekt/pull/4889) - Remove reference to contributor list - [#4871](https://github.com/detekt/detekt/pull/4871) diff --git a/website/src/remark/detektVersionReplace.js b/website/src/remark/detektVersionReplace.js index 51959a3c428..5c6e20984ee 100644 --- a/website/src/remark/detektVersionReplace.js +++ b/website/src/remark/detektVersionReplace.js @@ -3,7 +3,7 @@ const visit = require("unist-util-visit"); // Remark plugin that is replacing the [detekt_version] with the latest // released version. Please note that this field is updated automatically // by the `:detekt-generator:generateDocumentation` task. -const detektVersion = "1.21.0-RC1"; +const detektVersion = "1.21.0-RC2"; const plugin = (options) => { const transformer = async (ast) => { From 292372ed598e1ad6052ecfaaa908f2395dd875a4 Mon Sep 17 00:00:00 2001 From: julien Lengrand-Lambert Date: Thu, 30 Jun 2022 14:49:57 +0200 Subject: [PATCH 42/64] Fix CLI link that is incorrect (#5016) --- website/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 572d4864085..7c001942765 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -127,7 +127,7 @@ const config = { }, { label: 'Getting Started with the CLI', - to: '/docs/gettingstarted/gradle', + to: '/docs/gettingstarted/cli', }, { label: 'Rules Documentation', From 246ccd8aa67f4f70507b2d20e20d533dedc8a5c1 Mon Sep 17 00:00:00 2001 From: julien Lengrand-Lambert Date: Thu, 30 Jun 2022 23:30:39 +0200 Subject: [PATCH 43/64] Removes documentation formatting issue (#5017) * Removes documentation formatting issue * Removes extra caracter --- website/docs/gettingstarted/type-resolution.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/website/docs/gettingstarted/type-resolution.md b/website/docs/gettingstarted/type-resolution.md index cd1715579d8..295f4a47a16 100644 --- a/website/docs/gettingstarted/type-resolution.md +++ b/website/docs/gettingstarted/type-resolution.md @@ -51,7 +51,11 @@ All the rules that require type resolution are annotated with [`@RequiresTypeRes Moreover, their official documentation in the Detekt website will mention _Requires Type Resolution_ ([like here](/docs/rules/potential-bugs#unnecessarysafecall)). -{% include note.html content="Please note that we do have some rules that have mixed behavior whether type resolution is enabled or not. Those rules are listed here: [#2994](https://github.com/detekt/detekt/issues/2994)" %} +:::caution + +Please note that we do have some rules that have mixed behavior whether type resolution is enabled or not. Those rules are listed here: [#2994](https://github.com/detekt/detekt/issues/2994) + +::: Before opening an issue that you're rule is not working, please verify, whether your rule requires type resolution and check if you have type resolution enabled. From cf8bd5ebd37ff3819185ce70eb4b54d02b42c586 Mon Sep 17 00:00:00 2001 From: schalkms <30376729+schalkms@users.noreply.github.com> Date: Fri, 1 Jul 2022 11:20:24 +0200 Subject: [PATCH 44/64] Add test for ForbiddenMethodCall with getters (#5018) See: ForbiddenMethodCall with Kotlin getters as property #5015 --- .../rules/style/ForbiddenMethodCallSpec.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCallSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCallSpec.kt index 0edded78698..1c665b7e39d 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCallSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCallSpec.kt @@ -442,4 +442,44 @@ class ForbiddenMethodCallSpec(val env: KotlinCoreEnvironment) { .hasSourceLocation(6, 9) } } + + @Nested + inner class `Java getter calls` { + + @Test + fun `should report Java getter call`() { + val code = """ + import java.util.Calendar + + fun main() { + val calendar = Calendar.getInstance() + val day = calendar.getFirstDayOfWeek() + } + """ + val findings = + ForbiddenMethodCall(TestConfig(mapOf(METHODS to "java.util.Calendar.getFirstDayOfWeek"))).compileAndLintWithContext( + env, + code + ) + assertThat(findings).hasSize(1) + } + + @Test + fun `should not report property call`() { + val code = """ + import java.util.Calendar + + fun main() { + val calendar = Calendar.getInstance() + val day = calendar.firstDayOfWeek + } + """ + val findings = + ForbiddenMethodCall(TestConfig(mapOf(METHODS to "java.util.Calendar.firstDayOfWeek"))).compileAndLintWithContext( + env, + code + ) + assertThat(findings).isEmpty() + } + } } From b037183a35e44eb45d12358b57750359c465afb0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 14:21:03 +0200 Subject: [PATCH 45/64] Update dependency prism-react-renderer to v1.3.5 (#5019) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- website/package.json | 2 +- website/yarn.lock | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/website/package.json b/website/package.json index accecba259b..bc9dd29686e 100644 --- a/website/package.json +++ b/website/package.json @@ -21,7 +21,7 @@ "@docusaurus/preset-classic": "2.0.0-beta.21", "@mdx-js/react": "1.6.22", "clsx": "1.1.1", - "prism-react-renderer": "1.3.3", + "prism-react-renderer": "1.3.5", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/website/yarn.lock b/website/yarn.lock index 671e93aa3b3..c7495480005 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -6671,7 +6671,12 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@1.3.3, prism-react-renderer@^1.3.3: +prism-react-renderer@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prism-react-renderer@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== From fbb913b161ec2cdee3657142b9709a45fc6d4c9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 18:27:46 +0200 Subject: [PATCH 46/64] Update JamesIves/github-pages-deploy-action digest to e6d003d (#5023) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/website.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 05a153fd494..f46bda61d3e 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -49,7 +49,7 @@ jobs: run: yarn build - name: Deploy Github Pages (only on main) - uses: JamesIves/github-pages-deploy-action@8817a56e5bfec6e2b08345c81f4d422db53a2cdc # tag=v4 + uses: JamesIves/github-pages-deploy-action@e6d003d0839927f5a4b998bfd92ed8e448fde37a # tag=v4 if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} with: branch: gh-pages From b49aea7d0a43835b9ebc8058aad1a179d2cdd44e Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Fri, 1 Jul 2022 21:32:04 +0300 Subject: [PATCH 47/64] Add endColumn/endLine to SARIF region (#5011) * Add endColumn/endLine to SARIF region * Add fixes Replace toSet() with distinct(), get rid of null check. * Get rid of 'mockk' * Fix line order --- detekt-report-sarif/build.gradle.kts | 1 + .../io/github/detekt/report/sarif/Results.kt | 61 +++++---- .../report/sarif/SarifOutputReportSpec.kt | 121 +++++++++++++++++- 3 files changed, 159 insertions(+), 24 deletions(-) diff --git a/detekt-report-sarif/build.gradle.kts b/detekt-report-sarif/build.gradle.kts index 3734494fe7e..3e1ad5d37ed 100644 --- a/detekt-report-sarif/build.gradle.kts +++ b/detekt-report-sarif/build.gradle.kts @@ -10,4 +10,5 @@ dependencies { testImplementation(projects.detektTestUtils) testImplementation(testFixtures(projects.detektApi)) testImplementation(libs.assertj) + testImplementation(projects.detektTest) } diff --git a/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/Results.kt b/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/Results.kt index 728cfa0ef14..3d146e53634 100644 --- a/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/Results.kt +++ b/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/Results.kt @@ -23,26 +23,43 @@ private fun SeverityLevel.toResultLevel() = when (this) { SeverityLevel.INFO -> Level.Note } -private fun Finding.toResult(ruleSetId: RuleSetId) = io.github.detekt.sarif4k.Result( - ruleID = "detekt.$ruleSetId.$id", - level = severity.toResultLevel(), - locations = (listOf(location) + references.map { it.location }).map(Location::toLocation).toSet().toList(), - message = Message(text = messageOrDescription()) -) - -private fun Location.toLocation() = io.github.detekt.sarif4k.Location( - physicalLocation = PhysicalLocation( - region = Region( - startLine = source.line.toLong(), - startColumn = source.column.toLong(), - ), - artifactLocation = if (filePath.relativePath != null) { - ArtifactLocation( - uri = filePath.relativePath?.toUnifiedString(), - uriBaseID = SRCROOT - ) - } else { - ArtifactLocation(uri = filePath.absolutePath.toUnifiedString()) - } +private fun Finding.toResult(ruleSetId: RuleSetId): io.github.detekt.sarif4k.Result { + val code = entity.ktElement?.containingFile?.text + + return io.github.detekt.sarif4k.Result( + ruleID = "detekt.$ruleSetId.$id", + level = severity.toResultLevel(), + locations = (listOf(location) + references.map { it.location }).map { it.toLocation(code) }.distinct().toList(), + message = Message(text = messageOrDescription()) + ) +} + +private fun Location.toLocation(code: String?): io.github.detekt.sarif4k.Location { + var endLine: Long? = null + var endColumn: Long? = null + + if (code != null) { + val snippet = code.take(text.end).split('\n') + endLine = snippet.size.toLong() + endColumn = snippet.last().length.toLong() + 1 + } + + return io.github.detekt.sarif4k.Location( + physicalLocation = PhysicalLocation( + region = Region( + startLine = source.line.toLong(), + startColumn = source.column.toLong(), + endLine = endLine, + endColumn = endColumn + ), + artifactLocation = if (filePath.relativePath != null) { + ArtifactLocation( + uri = filePath.relativePath?.toUnifiedString(), + uriBaseID = SRCROOT + ) + } else { + ArtifactLocation(uri = filePath.absolutePath.toUnifiedString()) + } + ) ) -) +} diff --git a/detekt-report-sarif/src/test/kotlin/io/github/detekt/report/sarif/SarifOutputReportSpec.kt b/detekt-report-sarif/src/test/kotlin/io/github/detekt/report/sarif/SarifOutputReportSpec.kt index f2f1550bf9f..d2935e69ddc 100644 --- a/detekt-report-sarif/src/test/kotlin/io/github/detekt/report/sarif/SarifOutputReportSpec.kt +++ b/detekt-report-sarif/src/test/kotlin/io/github/detekt/report/sarif/SarifOutputReportSpec.kt @@ -3,16 +3,26 @@ package io.github.detekt.report.sarif import io.github.detekt.test.utils.readResourceContent import io.github.detekt.tooling.api.VersionProvider import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity import io.gitlab.arturbosch.detekt.api.Finding +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Location +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.SeverityLevel +import io.gitlab.arturbosch.detekt.api.SourceLocation +import io.gitlab.arturbosch.detekt.api.TextLocation import io.gitlab.arturbosch.detekt.api.UnstableApi import io.gitlab.arturbosch.detekt.api.internal.whichOS import io.gitlab.arturbosch.detekt.test.EmptySetupContext import io.gitlab.arturbosch.detekt.test.TestDetektion +import io.gitlab.arturbosch.detekt.test.compileAndLint import io.gitlab.arturbosch.detekt.test.createEntity import io.gitlab.arturbosch.detekt.test.createFindingForRelativePath import io.gitlab.arturbosch.detekt.test.createIssue import org.assertj.core.api.Assertions.assertThat +import org.jetbrains.kotlin.psi.KtClassOrObject import org.junit.jupiter.api.Test import java.nio.file.Paths @@ -66,10 +76,117 @@ class SarifOutputReportSpec { assertThat(report).isEqualToIgnoringWhitespace(systemAwareExpectedReport) } + + @Test + fun `region should be bounded with word`() { + /** + * Region constraints in Snippet for word 'TestClass' + * @sample Snippet.code + */ + val startLine = 3 + val startColumn = 7 + val endLine = 3 + val endColumn = 15 + + val refEntity = TestRule().compileAndLint(Snippet.code).first().entity + val location = Location( + SourceLocation(startLine, startColumn), + TextLocation( + startLine + (startColumn - 1) * Snippet.lineLength, + endColumn + (endLine - 1) * Snippet.lineLength + ), + filePath = refEntity.location.filePath + ) + + val result = TestDetektion( + createFinding( + ruleName = "TestSmellB", + entity = refEntity.copy(location = location), + severity = SeverityLevel.WARNING + ) + ) + + val report = SarifOutputReport() + .apply { init(EmptySetupContext()) } + .render(result) + + assertThat(report) + .containsIgnoringWhitespaces(constrainRegion(startLine, startColumn, endLine, endColumn)) + } + + @Test + fun `region should be bounded with block`() { + /** + * Region constraints in Snippet for curly braces + * @sample Snippet.code + */ + val startLine = 3 + val startColumn = 17 + val endLine = 5 + val endColumn = 1 + + val refEntity = TestRule().compileAndLint(Snippet.code).first().entity + val location = Location( + SourceLocation(startLine, startColumn), + TextLocation( + startLine + (startColumn - 1) * Snippet.lineLength, + endColumn + (endLine - 1) * Snippet.lineLength + ), + filePath = refEntity.location.filePath + ) + + val result = TestDetektion( + createFinding( + ruleName = "TestSmellB", + entity = refEntity.copy(location = location), + severity = SeverityLevel.WARNING + ) + ) + + val report = SarifOutputReport() + .apply { init(EmptySetupContext()) } + .render(result) + + assertThat(report) + .containsIgnoringWhitespaces(constrainRegion(startLine, startColumn, endLine, endColumn)) + } +} + +private object Snippet { + // Each line of code is 50 chars long + const val lineLength = 50 + val code = """ + // 4567890123456789012345678901234567890123456789 + // 0000001111111111222222222233333333334444444444 + class TestClass { /////////////////////////////// + val greeting: String = "Hello, World!"/////// + }//////////////////////////////////////////////// + """.trimIndent() +} + +private fun constrainRegion(startLine: Int, startColumn: Int, endLine: Int, endColumn: Int) = """ + "region": { + "endColumn": ${endColumn + 1}, + "endLine": $endLine, + "startColumn": $startColumn, + "startLine": $startLine + } +""" + +class TestRule : Rule() { + override val issue = Issue(javaClass.simpleName, Severity.Warning, "", Debt.FIVE_MINS) + + override fun visitClassOrObject(classOrObject: KtClassOrObject) { + report(CodeSmell(issue, Entity.atName(classOrObject), message = "Error")) + } } -private fun createFinding(ruleName: String, severity: SeverityLevel): Finding { - return object : CodeSmell(createIssue(ruleName), createEntity("TestFile.kt"), "TestMessage") { +private fun createFinding( + ruleName: String, + severity: SeverityLevel, + entity: Entity = createEntity("TestFile.kt") +): Finding { + return object : CodeSmell(createIssue(ruleName), entity, "TestMessage") { override val severity: SeverityLevel get() = severity } From 1322deb5bf37a50eb79981e061800f8c01f18061 Mon Sep 17 00:00:00 2001 From: Amit Dash Date: Sat, 2 Jul 2022 01:54:41 +0530 Subject: [PATCH 48/64] Fix type resolution link in Contributing.md (#5027) --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e9269568bbd..c10378eb0e9 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -64,7 +64,7 @@ Rules annotated with `@ActiveByDefault` will be marked as active in the `default Generally, this will not be the case for new rules. A rule that requires type resolution must be marked with `@RequiresTypeResolution`. -See [the type resolution wiki page](../docs/pages/gettingstarted/type-resolution.md) for +See [the type resolution wiki page](../website/docs/gettingstarted/type-resolution.md) for more detail on this topic. The rule defined above will translate to a rule entry in the `default-detekt-config.yml`: From ddcf77d9d4651bd117ff622180312141f900ac23 Mon Sep 17 00:00:00 2001 From: Amit Dash Date: Sat, 2 Jul 2022 01:59:08 +0530 Subject: [PATCH 49/64] Fix ReturnCount debt and refactor code (#5026) * Fix ReturnCount debt in UnnecessaryBackticks * Remove code duplication in NullableBooleanCheck * Fix MultilineIfElse debt --- .../rules/style/NullableBooleanCheck.kt | 25 +++++++------------ .../rules/style/UnnecessaryBackticks.kt | 14 +++++------ 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/NullableBooleanCheck.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/NullableBooleanCheck.kt index 889644bad63..c70b7971250 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/NullableBooleanCheck.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/NullableBooleanCheck.kt @@ -46,23 +46,16 @@ class NullableBooleanCheck(config: Config = Config.empty) : Rule(config) { expression.right?.isBooleanConstant() == true && expression.left?.getType(bindingContext)?.isBooleanOrNullableBoolean() == true ) { - if (expression.right?.text == "true") { - report( - CodeSmell( - issue, - Entity.from(expression), - "The nullable boolean check `${expression.text}` should use `!= false` rather than `?: true`", - ) + val messageSuffix = + if (expression.right?.text == "true") "`!= false` rather than `?: true`" + else "`== true` rather than `?: false`" + report( + CodeSmell( + issue = issue, + entity = Entity.from(expression), + message = "The nullable boolean check `${expression.text}` should use $messageSuffix", ) - } else { - report( - CodeSmell( - issue, - Entity.from(expression), - "The nullable boolean check `${expression.text}` should use `== true` rather than `?: false`", - ) - ) - } + ) } super.visitBinaryExpression(expression) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryBackticks.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryBackticks.kt index 8a496aea3f4..b0463b9e074 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryBackticks.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryBackticks.kt @@ -42,16 +42,16 @@ class UnnecessaryBackticks(config: Config = Config.empty) : Rule(config) { super.visitKtElement(element) } - @Suppress("ReturnCount") private fun PsiElement.hasUnnecessaryBackticks(): Boolean { - val text = this.text - if (!text.startsWith("`") || !text.endsWith("`")) return false - val unquoted = text.drop(1).dropLast(1) - if (!unquoted.isIdentifier() || unquoted.isKeyword()) return false - val stringTemplateEntry = getStrictParentOfType() - return stringTemplateEntry == null || canPlaceAfterSimpleNameEntry(stringTemplateEntry.nextSibling) + return when { + (!text.startsWith("`") || !text.endsWith("`")) -> false + (!unquoted.isIdentifier() || unquoted.isKeyword()) -> false + else -> canPlaceAfterSimpleNameEntry( + getStrictParentOfType()?.nextSibling + ) + } } private fun String.isKeyword() = this in KEYWORDS || this.all { it == '_' } From 6edf6bbd76129cb88b81a6d05aef126d9cce74ee Mon Sep 17 00:00:00 2001 From: Dominic Zirbel Date: Sat, 2 Jul 2022 11:41:42 -0700 Subject: [PATCH 50/64] #5014 Fix MaxChainedCallsOnSameLine false positives (#5020) Fix issues where MaxChainedCallsOnSameLine would report long import and package directives, where a warning certainly isn't necessary. --- .../rules/style/MaxChainedCallsOnSameLine.kt | 7 ++++++- .../style/MaxChainedCallsOnSameLineSpec.kt | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt index f9680a0fc0a..e47a6ea033c 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt @@ -10,6 +10,8 @@ import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.config import io.gitlab.arturbosch.detekt.api.internal.Configuration import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.psi.KtPackageDirective import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.KtUnaryExpression @@ -39,10 +41,13 @@ class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { override fun visitQualifiedExpression(expression: KtQualifiedExpression) { super.visitQualifiedExpression(expression) - // skip if the parent is also a call on the same line to avoid duplicated warnings val parent = expression.parent + + // skip if the parent is also a call on the same line to avoid duplicated warnings if (parent is KtQualifiedExpression && !parent.callOnNewLine()) return + if (parent is KtImportDirective || parent is KtPackageDirective) return + val chainedCalls = expression.countChainedCalls() + 1 if (chainedCalls > maxChainedCalls) { report( diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt index 9d135a648d2..84f61f6cec7 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt @@ -3,6 +3,7 @@ package io.gitlab.arturbosch.detekt.rules.style import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat import io.gitlab.arturbosch.detekt.test.compileAndLint +import io.gitlab.arturbosch.detekt.test.lint import org.junit.jupiter.api.Test class MaxChainedCallsOnSameLineSpec { @@ -104,4 +105,20 @@ class MaxChainedCallsOnSameLineSpec { assertThat(rule.compileAndLint(code)).hasSize(1) } + + @Test + fun `does not report long imports`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "import a.b.c.d.e" + + assertThat(rule.lint(code)).isEmpty() + } + + @Test + fun `does not report long package declarations`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = "package a.b.c.d.e" + + assertThat(rule.lint(code)).isEmpty() + } } From c953140d408a297039b6a61dfad7561594b1b86d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 08:01:56 +0100 Subject: [PATCH 51/64] Update dependency clsx to v1.2.0 (#5031) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- website/package.json | 2 +- website/yarn.lock | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/website/package.json b/website/package.json index bc9dd29686e..ee851336dce 100644 --- a/website/package.json +++ b/website/package.json @@ -20,7 +20,7 @@ "@docusaurus/plugin-client-redirects": "2.0.0-beta.21", "@docusaurus/preset-classic": "2.0.0-beta.21", "@mdx-js/react": "1.6.22", - "clsx": "1.1.1", + "clsx": "1.2.0", "prism-react-renderer": "1.3.5", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/website/yarn.lock b/website/yarn.lock index c7495480005..4823430f1db 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -3556,7 +3556,12 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clsx@1.1.1, clsx@^1.1.1: +clsx@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.0.tgz#b0e415ea7537dbac01b169c5cec1caeb11d86566" + integrity sha512-EPRP7XJsM1y0iCU3Z7C7jFKdQboXSeHgEfzQUTlz7m5NP3hDrlz48aUsmNGp4pC+JOW9WA3vIRqlYuo/bl4Drw== + +clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== From aa2a1bf37d6e667ca78cf2a868a272bb1ff2932a Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 5 Jul 2022 17:00:52 +0900 Subject: [PATCH 52/64] MaxChainedCallsOnSameLine: don't count package references as chained calls (#5036) * MaxChainedCallsOnSameLine: don't count package references as chained calls * Use compileAndLintWithContext --- .../rules/style/MaxChainedCallsOnSameLine.kt | 20 +++++++- .../style/MaxChainedCallsOnSameLineSpec.kt | 47 ++++++++++++++----- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt index e47a6ea033c..f64f09a2974 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt @@ -9,11 +9,15 @@ import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.config import io.gitlab.arturbosch.detekt.api.internal.Configuration +import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution +import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtPackageDirective import org.jetbrains.kotlin.psi.KtQualifiedExpression +import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.psi.KtUnaryExpression +import org.jetbrains.kotlin.resolve.BindingContext /** * Limits the number of chained calls which can be placed on a single line. @@ -27,6 +31,7 @@ import org.jetbrains.kotlin.psi.KtUnaryExpression * .d().e().f() * */ +@RequiresTypeResolution class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { override val issue = Issue( id = javaClass.simpleName, @@ -38,9 +43,12 @@ class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { @Configuration("maximum chained calls allowed on a single line") private val maxChainedCalls: Int by config(defaultValue = 5) + @Suppress("ReturnCount") override fun visitQualifiedExpression(expression: KtQualifiedExpression) { super.visitQualifiedExpression(expression) + if (bindingContext == BindingContext.EMPTY) return + val parent = expression.parent // skip if the parent is also a call on the same line to avoid duplicated warnings @@ -63,13 +71,21 @@ class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { private fun KtExpression.countChainedCalls(): Int { return when (this) { - is KtQualifiedExpression -> - if (callOnNewLine()) 0 else receiverExpression.countChainedCalls() + 1 + is KtQualifiedExpression -> when { + receiverExpression.isReferenceToPackage() || callOnNewLine() -> 0 + else -> receiverExpression.countChainedCalls() + 1 + } is KtUnaryExpression -> baseExpression?.countChainedCalls() ?: 0 else -> 0 } } + private fun KtExpression.isReferenceToPackage(): Boolean { + val selectorOrThis = (this as? KtQualifiedExpression)?.selectorExpression ?: this + if (selectorOrThis !is KtReferenceExpression) return false + return bindingContext[BindingContext.REFERENCE_TARGET, selectorOrThis] is PackageViewDescriptor + } + private fun KtQualifiedExpression.callOnNewLine(): Boolean { val receiver = receiverExpression val selector = selectorExpression ?: return false diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt index 84f61f6cec7..f1240d13bfb 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLineSpec.kt @@ -1,18 +1,21 @@ package io.gitlab.arturbosch.detekt.rules.style +import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat -import io.gitlab.arturbosch.detekt.test.compileAndLint +import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext import io.gitlab.arturbosch.detekt.test.lint +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.junit.jupiter.api.Test -class MaxChainedCallsOnSameLineSpec { +@KotlinCoreEnvironmentTest +class MaxChainedCallsOnSameLineSpec(private val env: KotlinCoreEnvironment) { @Test fun `does not report 2 calls on a single line with a max of 3`() { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0.plus(0)" - assertThat(rule.compileAndLint(code)).isEmpty() + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() } @Test @@ -20,7 +23,7 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0.plus(0).plus(0)" - assertThat(rule.compileAndLint(code)).isEmpty() + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() } @Test @@ -28,7 +31,7 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0.plus(0).plus(0).plus(0)" - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -36,7 +39,7 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0?.plus(0)?.plus(0)?.plus(0)" - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -44,7 +47,7 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0!!.plus(0)!!.plus(0)!!.plus(0)" - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -52,7 +55,7 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "val a = 0.plus(0).plus(0).plus(0).plus(0).plus(0).plus(0)" - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -66,7 +69,7 @@ class MaxChainedCallsOnSameLineSpec { .plus(0) """ - assertThat(rule.compileAndLint(code)).isEmpty() + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() } @Test @@ -78,7 +81,7 @@ class MaxChainedCallsOnSameLineSpec { .plus(0).plus(0).plus(0) """ - assertThat(rule.compileAndLint(code)).isEmpty() + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() } @Test @@ -90,7 +93,7 @@ class MaxChainedCallsOnSameLineSpec { .plus(0) """ - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -103,7 +106,7 @@ class MaxChainedCallsOnSameLineSpec { .plus(0) """ - assertThat(rule.compileAndLint(code)).hasSize(1) + assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1) } @Test @@ -119,6 +122,24 @@ class MaxChainedCallsOnSameLineSpec { val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) val code = "package a.b.c.d.e" - assertThat(rule.lint(code)).isEmpty() + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() + } + + @Test + fun `does not count package references as chained calls`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val x = kotlin.math.floor(1.0).plus(1).plus(1) + """ + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() + } + + @Test + fun `does not count a package reference as chained calls`() { + val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3))) + val code = """ + val x = kotlin.run { 1 }.plus(1).plus(1) + """ + assertThat(rule.compileAndLintWithContext(env, code)).isEmpty() } } From 08a196a11ae91d43b5d03c60d16a9e63ac4623a4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 16:56:28 +0200 Subject: [PATCH 53/64] Update dependency clsx to v1.2.1 (#5039) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- website/package.json | 2 +- website/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/package.json b/website/package.json index ee851336dce..e7b6afffc37 100644 --- a/website/package.json +++ b/website/package.json @@ -20,7 +20,7 @@ "@docusaurus/plugin-client-redirects": "2.0.0-beta.21", "@docusaurus/preset-classic": "2.0.0-beta.21", "@mdx-js/react": "1.6.22", - "clsx": "1.2.0", + "clsx": "1.2.1", "prism-react-renderer": "1.3.5", "react": "18.2.0", "react-dom": "18.2.0" diff --git a/website/yarn.lock b/website/yarn.lock index 4823430f1db..6ed66709997 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -3556,10 +3556,10 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clsx@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.0.tgz#b0e415ea7537dbac01b169c5cec1caeb11d86566" - integrity sha512-EPRP7XJsM1y0iCU3Z7C7jFKdQboXSeHgEfzQUTlz7m5NP3hDrlz48aUsmNGp4pC+JOW9WA3vIRqlYuo/bl4Drw== +clsx@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== clsx@^1.1.1: version "1.1.1" From 2add9e71580e42bc50478999c3eb7d4dddde75b5 Mon Sep 17 00:00:00 2001 From: Clay Johnson Date: Wed, 6 Jul 2022 10:07:44 -0500 Subject: [PATCH 54/64] Add 'Revved up by Gradle Enterprise' badge (#5012) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0178caaf5f8..d85a7516c41 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Visit the website at detekt.dev/](https://img.shields.io/badge/visit-website-red.svg?logo=firefox)](https://detekt.dev/) [![Maven Central](https://img.shields.io/maven-central/v/io.gitlab.arturbosch.detekt/detekt-cli?label=MavenCentral&logo=apache-maven)](https://search.maven.org/artifact/io.gitlab.arturbosch.detekt/detekt-cli) [![Gradle Plugin](https://img.shields.io/maven-metadata/v/https/plugins.gradle.org/m2/io/gitlab/arturbosch/detekt/io.gitlab.arturbosch.detekt.gradle.plugin/maven-metadata.xml.svg?label=Gradle&logo=gradle)](https://plugins.gradle.org/plugin/io.gitlab.arturbosch.detekt) +[![Revved up by Gradle Enterprise](https://img.shields.io/badge/Revved%20up%20by-Gradle%20Enterprise-06A0CE?logo=Gradle&labelColor=02303A)](https://ge.detekt.dev/scans) ![Pre Merge Checks](https://github.com/detekt/detekt/workflows/Pre%20Merge%20Checks/badge.svg?branch=main) [![Codecov](https://codecov.io/gh/detekt/detekt/branch/main/graph/badge.svg)](https://codecov.io/gh/detekt/detekt) From 1a6d059924a73054e9feeececc0c4ea827b6b799 Mon Sep 17 00:00:00 2001 From: Amit Dash Date: Wed, 6 Jul 2022 20:47:54 +0530 Subject: [PATCH 55/64] Fix `ComplexMethod` debt and refactor code (#5029) * Fix ComplexCondition debt and refactor code * Remove unnecessary parentheses --- .../rules/style/UnnecessaryAbstractClass.kt | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt index 5d4e526a549..20f4b9f2de5 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt @@ -14,6 +14,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.rules.isAbstract import io.gitlab.arturbosch.detekt.rules.isInternal import io.gitlab.arturbosch.detekt.rules.isProtected +import org.jetbrains.kotlin.com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.psi.KtCallableDeclaration @@ -79,25 +80,12 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) { super.visitClass(klass) } - @Suppress("ComplexMethod") private fun KtClass.check() { val nameIdentifier = this.nameIdentifier ?: return if (annotationExcluder.shouldExclude(annotationEntries) || isInterface() || !isAbstract()) return val members = members() when { - members.isNotEmpty() -> { - val (abstractMembers, concreteMembers) = members.partition { it.isAbstract() } - if (abstractMembers.isEmpty() && !hasInheritedMember(true)) { - report(CodeSmell(issue, Entity.from(nameIdentifier), noAbstractMember)) - return - } - if (abstractMembers.any { it.isInternal() || it.isProtected() } || hasConstructorParameter()) { - return - } - if (concreteMembers.isEmpty() && !hasInheritedMember(false)) { - report(CodeSmell(issue, Entity.from(nameIdentifier), noConcreteMember)) - } - } + members.isNotEmpty() -> checkMembers(members, nameIdentifier) !hasConstructorParameter() -> report(CodeSmell(issue, Entity.from(nameIdentifier), noConcreteMember)) else -> @@ -105,6 +93,21 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) { } } + private fun KtClass.checkMembers( + members: List, + nameIdentifier: PsiElement + ) { + val (abstractMembers, concreteMembers) = members.partition { it.isAbstract() } + when { + abstractMembers.isEmpty() && !hasInheritedMember(true) -> + report(CodeSmell(issue, Entity.from(nameIdentifier), noAbstractMember)) + abstractMembers.any { it.isInternal() || it.isProtected() } || hasConstructorParameter() -> + Unit + concreteMembers.isEmpty() && !hasInheritedMember(false) -> + report(CodeSmell(issue, Entity.from(nameIdentifier), noConcreteMember)) + } + } + private fun KtClass.members() = body?.children?.filterIsInstance().orEmpty() + primaryConstructor?.valueParameters?.filter { it.hasValOrVar() }.orEmpty() From 46aa36f22bba16dbde6b9ecac10231bbae87a4f9 Mon Sep 17 00:00:00 2001 From: Steven Jeuris Date: Wed, 6 Jul 2022 19:17:39 +0200 Subject: [PATCH 56/64] Only recommend using index accessors for Java classes that are known collections (#4994) * Refactor: clear separation between "can" and "recommended" replace This also provides a less strict and universal implementation for the previous type parameters bugfix: https://github.com/detekt/detekt/pull/4803 As commented in the code, it does this by doing a lazy attempt at whether type inference is possible. If needed, this can be extended on later. * Fix: non-sensical index accessor recommendations for java classes Closes #4918 * Refactor: use default Java sources for ExplicitCollectionElementAccess test --- .../ExplicitCollectionElementAccessMethod.kt | 59 +++++++++++++------ ...plicitCollectionElementAccessMethodSpec.kt | 40 ++++++++----- 2 files changed, 67 insertions(+), 32 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt index f561cfd7ce3..61601003522 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt @@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.rules.fqNameOrNull +import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.load.java.isFromJava import org.jetbrains.kotlin.psi.KtBlockExpression @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.types.ErrorType import org.jetbrains.kotlin.types.typeUtil.supertypes @@ -52,31 +54,58 @@ class ExplicitCollectionElementAccessMethod(config: Config = Config.empty) : Rul super.visitDotQualifiedExpression(expression) if (bindingContext == BindingContext.EMPTY) return val call = expression.selectorExpression as? KtCallExpression ?: return - if (isIndexableGetter(call) || (isIndexableSetter(call) && unusedReturnValue(call))) { + if (isIndexGetterRecommended(call) || isIndexSetterRecommended(call)) { report(CodeSmell(issue, Entity.from(expression), issue.description)) } } - private fun isIndexableGetter(expression: KtCallExpression): Boolean { - if (expression.calleeExpression?.text != "get") return false - val descriptor = expression.getFunctionDescriptor() ?: return false - return descriptor.isOperator && descriptor.typeParameters.isEmpty() + private fun isIndexGetterRecommended(expression: KtCallExpression): Boolean { + val getter = + if (expression.calleeExpression?.text == "get") expression.getFunctionDescriptor() + else null + if (getter == null) return false + + return canReplace(getter) && shouldReplace(getter) } - private fun isIndexableSetter(expression: KtCallExpression): Boolean = + private fun isIndexSetterRecommended(expression: KtCallExpression): Boolean = when (expression.calleeExpression?.text) { "set" -> { - val function = expression.getFunctionDescriptor() - when { - function == null -> false - !function.isOperator -> false - else -> !(function.isFromJava && function.valueParameters.size > 2) - } + val setter = expression.getFunctionDescriptor() + if (setter == null) false + else canReplace(setter) && shouldReplace(setter) } // `put` isn't an operator function, but can be replaced with indexer when the caller is Map. "put" -> isCallerMap(expression) else -> false - } + } && unusedReturnValue(expression) + + private fun KtCallExpression.getFunctionDescriptor(): FunctionDescriptor? = + getResolvedCall(bindingContext)?.resultingDescriptor as? FunctionDescriptor + + private fun canReplace(function: FunctionDescriptor): Boolean { + // Can't use index operator when insufficient information is available to infer type variable. + // For now, this is an incomplete check and doesn't report edge cases (e.g. inference using return type). + val genericParameterTypeNames = function.valueParameters.map { it.original.type.toString() }.toSet() + val typeParameterNames = function.typeParameters.map { it.name.asString() } + if (!genericParameterTypeNames.containsAll(typeParameterNames)) return false + + return function.isOperator + } + + private fun shouldReplace(function: FunctionDescriptor): Boolean { + // The intent of kotlin operation functions is to support indexed accessed, so should always be replaced. + if (!function.isFromJava) return true + + // It does not always make sense for all Java get/set functions to be replaced by index accessors. + // Only recommend known collection types. + val javaClass = function.containingDeclaration as? ClassDescriptor ?: return false + return javaClass.fqNameSafe.asString() in setOf( + "java.util.ArrayList", + "java.util.HashMap", + "java.util.LinkedHashMap" + ) + } private fun isCallerMap(expression: KtCallExpression): Boolean { val caller = expression.getQualifiedExpressionForSelector()?.receiverExpression @@ -90,8 +119,4 @@ class ExplicitCollectionElementAccessMethod(config: Config = Config.empty) : Rul private fun unusedReturnValue(expression: KtCallExpression): Boolean = expression.parent.parent is KtBlockExpression - - private fun KtCallExpression.getFunctionDescriptor(): FunctionDescriptor? { - return getResolvedCall(bindingContext)?.resultingDescriptor as? FunctionDescriptor - } } diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt index c6d0394e1cb..2456dce4646 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt @@ -296,6 +296,30 @@ class ExplicitCollectionElementAccessMethodSpec { } } + @Nested + inner class `Java non-collection types` { + @Test + fun `does not report ByteBuffer get`() { + val code = """ + fun f() { + val buffer = java.nio.ByteBuffer() + buffer.get(byteArrayOf(0x42)) + } + """ + assertThat(subject.lintWithContext(env, code)).isEmpty() + } + + @Test + fun `does not report Field get`() { + val code = """ + fun f(field: java.lang.reflect.Field) { + val value = field.get(null) // access static field + } + """ + assertThat(subject.lintWithContext(env, code)).isEmpty() + } + } + @Nested inner class `custom operators` { @@ -438,28 +462,14 @@ class ExplicitCollectionElementAccessMethodSpec { @Nested @KotlinCoreEnvironmentTest(additionalJavaSourcePaths = ["java"]) inner class WithAdditionalJavaSources(val env: KotlinCoreEnvironment) { - @Test - fun `reports setter from java with 2 or less parameters`() { - // this test case ensures that the test environment are set up correctly. + fun `does not report setters defined in java which are unlikely to be collection accessors`() { val code = """ import com.example.fromjava.Rect fun foo() { val rect = Rect() rect.set(0, 1) - } - """ - assertThat(subject.lintWithContext(env, code)).hasSize(1) - } - - @Test - fun `does not report if the function has 3 or more arguments and it's defined in java - #4288`() { - val code = """ - import com.example.fromjava.Rect - - fun foo() { - val rect = Rect() rect.set(0, 1, 2) } """ From b6448e37189178ea39876e619450787d4aed7ba2 Mon Sep 17 00:00:00 2001 From: Tim Oltjenbruns Date: Thu, 7 Jul 2022 03:10:39 -0400 Subject: [PATCH 57/64] Xml Report Merger now merges duplicate smells across input report files (#5033) * Xml Report Merger now merges duplicate smells across input report files * Mock time in MarkdownReportSpec for more consistent test results * Update detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMerger.kt Co-authored-by: Tim Oltjenbruns Co-authored-by: Chao Zhang --- .../detekt/report/XmlReportMerger.kt | 137 +++++++++++++++--- .../detekt/report/XmlReportMergerSpec.kt | 76 +++++++++- .../detekt/report/md/MdOutputReportSpec.kt | 26 ++++ 3 files changed, 215 insertions(+), 24 deletions(-) diff --git a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMerger.kt b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMerger.kt index 2bfa89ce47b..daebbbae9ff 100644 --- a/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMerger.kt +++ b/detekt-gradle-plugin/src/main/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMerger.kt @@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.report import org.w3c.dom.Document import org.w3c.dom.Node +import org.w3c.dom.NodeList import java.io.File import javax.xml.parsers.DocumentBuilderFactory import javax.xml.transform.OutputKeys @@ -16,42 +17,132 @@ object XmlReportMerger { private val documentBuilder by lazy { DocumentBuilderFactory.newInstance().newDocumentBuilder() } - fun merge(inputs: Collection, output: File) { - val document = documentBuilder.newDocument().apply { - xmlStandalone = true - val checkstyleNode = createElement("checkstyle") - checkstyleNode.setAttribute("version", "4.3") - appendChild(checkstyleNode) - } - inputs.filter { it.exists() }.forEach { - importNodesFromInput(it, document) - } + fun merge(reportFiles: Collection, output: File) { + val distinctErrorsBySourceFile = DetektCheckstyleReports(reportFiles) + .parseCheckstyleToSourceFileNodes() + .distinctErrorsGroupedBySourceFile() + + val mergedCheckstyle = createMergedCheckstyle(distinctErrorsBySourceFile) + TransformerFactory.newInstance().newTransformer().run { setOutputProperty(OutputKeys.INDENT, "yes") setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2") - transform(DOMSource(document), StreamResult(output.writer())) + transform(DOMSource(mergedCheckstyle), StreamResult(output.writer())) } } - private fun importNodesFromInput(input: File, document: Document) { - val checkstyleNode = documentBuilder.parse(input.inputStream()).documentElement.also { removeWhitespaces(it) } - (0 until checkstyleNode.childNodes.length).forEach { - val node = checkstyleNode.childNodes.item(it) - document.documentElement.appendChild(document.importNode(node, true)) + private fun createMergedCheckstyle(distinctErrorsBySourceFile: Map>): Document { + val mergedDocument = documentBuilder.newDocument().apply { + xmlStandalone = true } + val mergedCheckstyleNode = mergedDocument.createElement("checkstyle") + mergedCheckstyleNode.setAttribute("version", "4.3") + mergedDocument.appendChild(mergedCheckstyleNode) + + distinctErrorsBySourceFile.forEach { (fileName, errorNodes) -> + mergedCheckstyleNode.appendChild( + mergedDocument.createElement("file").apply { + setAttribute("name", fileName) + errorNodes.forEach { + appendChild(mergedDocument.importNode(it, true)) + } + } + ) + } + return mergedDocument + } + + /** A list of checkstyle xml files written by Detekt */ + private class DetektCheckstyleReports(private val files: Collection) { + + /** + * Parses a list of `file` nodes matching the following topology + * + * ```xml + * + * + * + * ``` + * + * @see CheckstyleSourceFileNodes + */ + fun parseCheckstyleToSourceFileNodes() = + CheckstyleSourceFileNodes( + files.filter { reportFile -> reportFile.exists() } + .flatMap { existingReportFile -> + val checkstyleNode = documentBuilder.parse(existingReportFile.inputStream()) + checkstyleNode.documentElement.childNodes.asSequence().filterWhitespace() + } + ) } /** - * Use code instead of XSLT to exclude whitespaces. + * A list of checkstyle `file` nodes that may contain 0 to many `error` nodes + * + * ```xml + * + * + * + * ``` */ - private fun removeWhitespaces(node: Node) { - (node.childNodes.length - 1 downTo 0).forEach { idx -> - val childNode = node.childNodes.item(idx) - if (childNode.nodeType == Node.TEXT_NODE && childNode.textContent.isBlank()) { - node.removeChild(childNode) + private class CheckstyleSourceFileNodes(private val nodes: List) { + + /** Returns a map containing only distinct error nodes, grouped by file name */ + fun distinctErrorsGroupedBySourceFile() = nodes + .flatMap { fileNode -> + val fileNameAttribute = fileNode.attributes.getNamedItem("name").nodeValue + val errorNodes = fileNode.childNodes.asSequence().filterWhitespace() + errorNodes.map { errorNode -> + CheckstyleErrorNodeWithFileData( + errorID = errorID(fileNameAttribute, errorNode), + fileName = fileNameAttribute, + errorNode = errorNode + ) + } + } + .distinctBy { it.errorID } + .groupBy({ it.fileName }, { it.errorNode }) + + private fun errorID(fileNameAttribute: String, errorNode: Node): Any { + // error nodes are expected to take the form of at least + val line = errorNode.attributes.getNamedItem("line")?.nodeValue + val column = errorNode.attributes.getNamedItem("column")?.nodeValue + val source = errorNode.attributes.getNamedItem("source")?.nodeValue + + return if (line != null && column != null && source != null) { + // data class provides convenient hashCode/equals based on these attributes + ErrorID(fileName = fileNameAttribute, line = line, column = column, source = source) } else { - removeWhitespaces(childNode) + // if the error node does not contain the expected attributes, + // use org.w3c.dom.Node's more strict hashCode/equals method to determine error uniqueness + errorNode } } + + private class CheckstyleErrorNodeWithFileData( + val errorID: Any, + val fileName: String, + val errorNode: Node + ) + + private data class ErrorID( + val fileName: String, + val line: String, + val column: String, + val source: String + ) + } + + /** + * Use code instead of XSLT to exclude whitespaces. + */ + private fun Sequence.filterWhitespace(): Sequence = asSequence().filterNot { + it.nodeType == Node.TEXT_NODE && it.textContent.isBlank() + } + + private fun NodeList.asSequence() = sequence { + for (index in 0 until length) { + yield(item(index)) + } } } diff --git a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMergerSpec.kt b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMergerSpec.kt index 6a22dea2bfc..4f34c691675 100644 --- a/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMergerSpec.kt +++ b/detekt-gradle-plugin/src/test/kotlin/io/gitlab/arturbosch/detekt/report/XmlReportMergerSpec.kt @@ -9,7 +9,7 @@ private const val TAB = "\t" class XmlReportMergerSpec { @Test - fun `passes for same files`() { + fun `passes for no overlapping errors`() { val file1 = File.createTempFile("detekt1", "xml").apply { writeText( """ @@ -49,4 +49,78 @@ class XmlReportMergerSpec { """.trimIndent() assertThat(output.readText()).isEqualToIgnoringNewLines(expectedText) } + + @Test + fun `passes for all overlapping errors`() { + val text = """ + + + + $TAB + + + """.trimIndent() + val file1 = File.createTempFile("detekt1", "xml").apply { + writeText(text) + } + val file2 = File.createTempFile("detekt2", "xml").apply { + writeText(text) + } + val output = File.createTempFile("output", "xml") + XmlReportMerger.merge(setOf(file1, file2), output) + + val expectedText = """ + + + + + + """.trimIndent() + assertThat(output.readText()).isEqualToIgnoringNewLines(expectedText) + } + + @Test + fun `passes for some overlapping errors`() { + val file1 = File.createTempFile("detekt1", "xml").apply { + writeText( + """ + + + + $TAB + + + $TAB + + + """.trimIndent() + ) + } + val file2 = File.createTempFile("detekt2", "xml").apply { + writeText( + """ + + + + $TAB + + + """.trimIndent() + ) + } + val output = File.createTempFile("output", "xml") + XmlReportMerger.merge(setOf(file1, file2), output) + + val expectedText = """ + + + + + + + + + """.trimIndent() + assertThat(output.readText()).isEqualToIgnoringNewLines(expectedText) + } } diff --git a/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt b/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt index 378d6643605..cf8d96b56e2 100644 --- a/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt +++ b/detekt-report-md/src/test/kotlin/io/github/detekt/report/md/MdOutputReportSpec.kt @@ -14,18 +14,44 @@ import io.gitlab.arturbosch.detekt.test.TestDetektion import io.gitlab.arturbosch.detekt.test.createEntity import io.gitlab.arturbosch.detekt.test.createFinding import io.gitlab.arturbosch.detekt.test.createIssue +import io.mockk.clearStaticMockk import io.mockk.every import io.mockk.mockk +import io.mockk.mockkStatic import org.assertj.core.api.Assertions.assertThat import org.jetbrains.kotlin.com.intellij.psi.PsiFile import org.jetbrains.kotlin.psi.KtElement +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import java.time.OffsetDateTime +import java.time.ZoneOffset class MdOutputReportSpec { private val mdReport = MdOutputReport() private val detektion = createTestDetektionWithMultipleSmells() private val result = mdReport.render(detektion) + @BeforeEach + fun setup() { + mockkStatic(OffsetDateTime::class) + every { OffsetDateTime.now(ZoneOffset.UTC) } returns OffsetDateTime.of( + 2000, // year + 1, // month + 1, // dayOfMonth + 0, // hour + 0, // minute + 0, // second + 0, // nanoOfSecond + ZoneOffset.UTC // offset + ) + } + + @AfterEach + fun teardown() { + clearStaticMockk(OffsetDateTime::class) + } + @Test fun `renders Markdown structure correctly`() { assertThat(result).contains("Metrics") From 6638b2ffa7b3df7e0cb01e38ff3d587ce9cdeb60 Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Thu, 7 Jul 2022 23:29:03 +0300 Subject: [PATCH 58/64] Add ending line and column to Location.kt (#5032) * Add ending line and column to Location.kt * Revert changes to detekt-api.api * Add tests for Location.kt * Add new line to comply with format Co-authored-by: schalkms <30376729+schalkms@users.noreply.github.com> --- detekt-api/api/detekt-api.api | 2 + .../gitlab/arturbosch/detekt/api/Location.kt | 41 +++++++++++++++---- .../arturbosch/detekt/api/LocationSpec.kt | 35 ++++++++++++++++ 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/LocationSpec.kt diff --git a/detekt-api/api/detekt-api.api b/detekt-api/api/detekt-api.api index 8405d730980..665e3f51d90 100644 --- a/detekt-api/api/detekt-api.api +++ b/detekt-api/api/detekt-api.api @@ -353,6 +353,7 @@ public final class io/gitlab/arturbosch/detekt/api/LazyRegex : kotlin/properties public final class io/gitlab/arturbosch/detekt/api/Location : io/gitlab/arturbosch/detekt/api/Compactable { public static final field Companion Lio/gitlab/arturbosch/detekt/api/Location$Companion; + public fun (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Lio/github/detekt/psi/FilePath;)V public fun (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Lio/github/detekt/psi/FilePath;)V public fun (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;)V public fun (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;)V @@ -367,6 +368,7 @@ public final class io/gitlab/arturbosch/detekt/api/Location : io/gitlab/arturbos public final fun copy (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;)Lio/gitlab/arturbosch/detekt/api/Location; public static synthetic fun copy$default (Lio/gitlab/arturbosch/detekt/api/Location;Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;ILjava/lang/Object;)Lio/gitlab/arturbosch/detekt/api/Location; public fun equals (Ljava/lang/Object;)Z + public final fun getEndSource ()Lio/gitlab/arturbosch/detekt/api/SourceLocation; public final fun getFile ()Ljava/lang/String; public final fun getFilePath ()Lio/github/detekt/psi/FilePath; public final fun getSource ()Lio/gitlab/arturbosch/detekt/api/SourceLocation; diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Location.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Location.kt index 5f7fccd6186..a95648addb8 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Location.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Location.kt @@ -26,6 +26,8 @@ data class Location @Deprecated("Consider relative path by passing a [FilePath]" val file: String, val filePath: FilePath = FilePath.fromAbsolute(Paths.get(file)) ) : Compactable { + var endSource: SourceLocation = source + private set @Suppress("DEPRECATION") constructor( @@ -34,6 +36,16 @@ data class Location @Deprecated("Consider relative path by passing a [FilePath]" filePath: FilePath ) : this(source, text, filePath.absolutePath.toString(), filePath) + @Suppress("DEPRECATION") + constructor( + source: SourceLocation, + endSource: SourceLocation, + text: TextLocation, + filePath: FilePath, + ) : this(source, text, filePath.absolutePath.toString(), filePath) { + this.endSource = endSource + } + @Suppress("DEPRECATION") @Deprecated( """ @@ -62,20 +74,33 @@ data class Location @Deprecated("Consider relative path by passing a [FilePath]" fun from(element: PsiElement, offset: Int = 0): Location { val start = startLineAndColumn(element, offset) val sourceLocation = SourceLocation(start.line, start.column) + val end = endLineAndColumn(element, offset) + val endSourceLocation = SourceLocation(end.line, end.column) val textLocation = TextLocation(element.startOffset + offset, element.endOffset + offset) - return Location(sourceLocation, textLocation, element.containingFile.toFilePath()) + return Location(sourceLocation, endSourceLocation, textLocation, element.containingFile.toFilePath()) } /** - * Determines the line and column of a [PsiElement] in the source file. + * Determines the start line and column of a [PsiElement] in the source file. */ - fun startLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn { + fun startLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn = + lineAndColumn( + element, + TextRange(element.textRange.startOffset + offset, element.textRange.endOffset + offset) + ) + + /** + * Determines the end line and column of a [PsiElement] in the source file. + */ + private fun endLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn = + lineAndColumn( + element, + TextRange(element.textRange.endOffset + offset, element.textRange.endOffset + offset) + ) + + private fun lineAndColumn(element: PsiElement, range: TextRange): PsiDiagnosticUtils.LineAndColumn { return try { - val range = element.textRange - DiagnosticUtils.getLineAndColumnInPsiFile( - element.containingFile, - TextRange(range.startOffset + offset, range.endOffset + offset) - ) + DiagnosticUtils.getLineAndColumnInPsiFile(element.containingFile, range) } catch (@Suppress("SwallowedException", "TooGenericExceptionCaught") e: IndexOutOfBoundsException) { // #3317 If any rule mutates the PsiElement, searching the original PsiElement may throw exception. PsiDiagnosticUtils.LineAndColumn(-1, -1, null) diff --git a/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/LocationSpec.kt b/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/LocationSpec.kt new file mode 100644 index 00000000000..b55dda3392b --- /dev/null +++ b/detekt-api/src/test/kotlin/io/gitlab/arturbosch/detekt/api/LocationSpec.kt @@ -0,0 +1,35 @@ +package io.gitlab.arturbosch.detekt.api + +import io.github.detekt.test.utils.compileContentForTest +import org.assertj.core.api.Assertions.assertThat +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.junit.jupiter.api.Test + +class LocationSpec { + + @Test + fun `start and end positions of block`() { + val code = """ + fun data(): Int { + return 0 + } + """.trimIndent() + val psiElement = compileContentForTest(code).findChildByClass(KtNamedFunction::class.java)!! + val location = Location.from(psiElement) + + assertThat("${location.source} - ${location.endSource}").isEqualTo("1:1 - 3:2") + } + + @Test + fun `start and end positions of fun keyword`() { + val code = """ + fun data(): Int { + return 0 + } + """.trimIndent() + val psiElement = compileContentForTest(code).findChildByClass(KtNamedFunction::class.java)!! + val location = Location.from(psiElement.funKeyword!!) + + assertThat("${location.source} - ${location.endSource}").isEqualTo("1:1 - 1:4") + } +} From 8940fb6b943cf4ea58d8e6804ea29dbbb07d887a Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Fri, 8 Jul 2022 19:14:13 +1000 Subject: [PATCH 59/64] Enable strict Kotlin DSL precompiled script plugins accessors generation (#5048) This opts-in to a stricter mode of operation that fails the build when a plugin application fails, and enables the build cache for the :generatePrecompiledScriptPluginAccessors task. This will be the default in Gradle 8.0, but there's no reason not to enable this in advance of that release given our build is stable with it enabled. --- gradle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle.properties b/gradle.properties index 7ca0715b49e..1b69faa5a08 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,3 +4,4 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.jvmargs=-Xmx1g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 org.gradle.unsafe.configuration-cache=false +systemProp.org.gradle.kotlin.dsl.precompiled.accessors.strict=true From 7cdd6ca24f97726d2e7425caa93517e179d50b61 Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sat, 9 Jul 2022 17:19:09 +1000 Subject: [PATCH 60/64] Drop redundant workaround (#5057) This workaround is no longer required as of Kotlin 1.6.20. --- detekt-gradle-plugin/build.gradle.kts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index 756acaae382..4d3d04b9aa0 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -1,6 +1,3 @@ -import org.gradle.api.internal.classpath.ModuleRegistry -import org.gradle.kotlin.dsl.support.serviceOf - plugins { id("module") `java-gradle-plugin` @@ -34,17 +31,6 @@ testing { implementation(libs.assertj) implementation(libs.kotlin.gradle) implementation(gradleKotlinDsl()) - - // See https://github.com/gradle/gradle/issues/16774#issuecomment-853407822 - runtimeOnly( - files( - serviceOf() - .getModule("gradle-tooling-api-builders") - .classpath - .asFiles - .first() - ) - ) } } register("functionalTest", JvmTestSuite::class) { From 8903b2eae0315e3015989e7019aa8703606f2463 Mon Sep 17 00:00:00 2001 From: schalkms <30376729+schalkms@users.noreply.github.com> Date: Sat, 9 Jul 2022 11:49:20 +0200 Subject: [PATCH 61/64] Improve extensions.doc format with admonitions (#5055) More information can be seen in the Docusaurus doc: https://docusaurus.io/docs/next/markdown-features/admonitions --- website/docs/introduction/extensions.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/website/docs/introduction/extensions.md b/website/docs/introduction/extensions.md index 6d72e9e8a09..4e8097b6b26 100644 --- a/website/docs/introduction/extensions.md +++ b/website/docs/introduction/extensions.md @@ -13,9 +13,13 @@ The associated **code samples** to this guide can be found in the package [detek _detekt_ uses the `ServiceLoader` pattern to collect all instances of `RuleSetProvider` interfaces. So it is possible to define rules/rule sets and enhance _detekt_ with your own flavor. -Attention: You need a `resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider` file which +:::caution Attention + +You need a `resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider` file which has as content the fully qualified name of your `RuleSetProvider` e.g. `io.gitlab.arturbosch.detekt.sample.extensions.SampleProvider`. +::: + You can use our [GitHub template](https://github.com/detekt/detekt-custom-rule-template) to have a basic scaffolding to develop your own custom rules. Another option is to clone the provided [detekt/detekt-sample-extensions](https://github.com/detekt/detekt/tree/main/detekt-sample-extensions) project. @@ -104,9 +108,13 @@ By specifying the rule set and rule ids, _detekt_ will use the sub configuration ```val threshold = valueOrDefault("threshold", THRESHOLD)``` -Note: As of version 1.2.0 detekt now verifies if all configured properties actually exist in a configuration created by `--generate-config`. +:::note + +As of version 1.2.0 detekt now verifies if all configured properties actually exist in a configuration created by `--generate-config`. This means that by default detekt does not know about your new properties. -Therefore we need to mention them in the configuration under `config>excludes`: +Therefore we need to mention them in the configuration under `config>excludes`. + +::: ```yaml config: @@ -156,6 +164,7 @@ class NumberOfLoopsProcessor : FileProcessListener { } } ``` + To let detekt know about the new processor, we specify a `resources/META-INF/services/io.gitlab.arturbosch.detekt.api.FileProcessListener` file with the full qualify name of our processor as the content: `io.gitlab.arturbosch.detekt.sample.extensions.processors.NumberOfLoopsProcessor`. @@ -243,4 +252,4 @@ you created a pure kotlin module which has no Android dependencies. `apply plugi In detekt you can write custom rules which can manipulate your code base. For this a cli flag `--auto-correct` and the gradle plugin property `autoCorrect` exists. -Only write auto correcting code within the `Rule#withAutoCorrect()`-function. \ No newline at end of file +Only write auto correcting code within the `Rule#withAutoCorrect()`-function. From 2e6f16b2e7269c249a673578e1dc723c08583d37 Mon Sep 17 00:00:00 2001 From: schalkms <30376729+schalkms@users.noreply.github.com> Date: Sat, 9 Jul 2022 11:49:58 +0200 Subject: [PATCH 62/64] Update ktlint links from website to readme (#5056) Links either point to the standard or experimental section in the readme. Closes #5054 --- .../detekt/formatting/wrappers/AnnotationOnSeparateLine.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/AnnotationSpacing.kt | 2 +- .../detekt/formatting/wrappers/ArgumentListWrapping.kt | 2 +- .../formatting/wrappers/BlockCommentInitialStarAlignment.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/ChainWrapping.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/CommentSpacing.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/CommentWrapping.kt | 2 +- .../detekt/formatting/wrappers/DiscouragedCommentLocation.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/EnumEntryNameCase.kt | 2 +- .../io/gitlab/arturbosch/detekt/formatting/wrappers/Filename.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/FinalNewline.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/FunKeywordSpacing.kt | 2 +- .../detekt/formatting/wrappers/FunctionTypeReferenceSpacing.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/ImportOrdering.kt | 2 +- .../gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/KdocWrapping.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/MaximumLineLength.kt | 2 +- .../detekt/formatting/wrappers/ModifierListSpacing.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/ModifierOrdering.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/MultiLineIfElse.kt | 2 +- .../detekt/formatting/wrappers/NoBlankLineBeforeRbrace.kt | 2 +- .../detekt/formatting/wrappers/NoConsecutiveBlankLines.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoEmptyClassBody.kt | 2 +- .../detekt/formatting/wrappers/NoEmptyFirstLineInMethodBlock.kt | 2 +- .../detekt/formatting/wrappers/NoLineBreakAfterElse.kt | 2 +- .../detekt/formatting/wrappers/NoLineBreakBeforeAssignment.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoMultipleSpaces.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoSemicolons.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoTrailingSpaces.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoUnitReturn.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoUnusedImports.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/NoWildcardImports.kt | 2 +- .../gitlab/arturbosch/detekt/formatting/wrappers/PackageName.kt | 2 +- .../detekt/formatting/wrappers/ParameterListWrapping.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundAngleBrackets.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/SpacingAroundColon.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/SpacingAroundComma.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/SpacingAroundCurly.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/SpacingAroundDot.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundDoubleColon.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundKeyword.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundOperators.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundParens.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundRangeOperator.kt | 2 +- .../detekt/formatting/wrappers/SpacingAroundUnaryOperator.kt | 2 +- .../wrappers/SpacingBetweenDeclarationsWithAnnotations.kt | 2 +- .../wrappers/SpacingBetweenDeclarationsWithComments.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/StringTemplate.kt | 2 +- .../arturbosch/detekt/formatting/wrappers/TrailingComma.kt | 2 +- .../detekt/formatting/wrappers/TypeArgumentListSpacing.kt | 2 +- .../wrappers/UnnecessaryParenthesesBeforeTrailingLambda.kt | 2 +- .../io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt | 2 +- 52 files changed, 52 insertions(+), 52 deletions(-) diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationOnSeparateLine.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationOnSeparateLine.kt index 718841f2e5c..af06e4761e1 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationOnSeparateLine.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationOnSeparateLine.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.0.0") class AnnotationOnSeparateLine(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationSpacing.kt index 5f4b4c83c7e..923341607f5 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/AnnotationSpacing.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.0.0") class AnnotationSpacing(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ArgumentListWrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ArgumentListWrapping.kt index 2b8de2cdc5b..018e4eb06f9 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ArgumentListWrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ArgumentListWrapping.kt @@ -12,7 +12,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @OptIn(FeatureInAlphaState::class) @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/BlockCommentInitialStarAlignment.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/BlockCommentInitialStarAlignment.kt index bd427a1eb55..b2ff7280b4b 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/BlockCommentInitialStarAlignment.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/BlockCommentInitialStarAlignment.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class BlockCommentInitialStarAlignment(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ChainWrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ChainWrapping.kt index f2b5f8ccf6c..969c11f29f3 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ChainWrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ChainWrapping.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentSpacing.kt index f489224df75..01ccfae5441 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentSpacing.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentWrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentWrapping.kt index 9216c937568..64aacb7409c 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentWrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/CommentWrapping.kt @@ -11,7 +11,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-indentation) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class CommentWrapping(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/DiscouragedCommentLocation.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/DiscouragedCommentLocation.kt index e6b0b1213d7..53c19cb15fb 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/DiscouragedCommentLocation.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/DiscouragedCommentLocation.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class DiscouragedCommentLocation(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/EnumEntryNameCase.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/EnumEntryNameCase.kt index ef2663dd407..b93e45b6e08 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/EnumEntryNameCase.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/EnumEntryNameCase.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.4.0") class EnumEntryNameCase(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Filename.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Filename.kt index 64ee9f1da0d..1ef732390d4 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Filename.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Filename.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. * * This rules overlaps with [naming>MatchingDeclarationName](https://detekt.dev/naming.html#matchingdeclarationname) * from the standard rules, make sure to enable just one. diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FinalNewline.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FinalNewline.kt index 8477433c676..663c377faff 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FinalNewline.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FinalNewline.kt @@ -12,7 +12,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. * * This rules overlaps with [style>NewLineAtEndOfFile](https://detekt.dev/style.html#newlineatendoffile) * from the standard rules, make sure to enable just one. The pro of this rule is that it can auto-correct the issue. diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunKeywordSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunKeywordSpacing.kt index 7227500acfe..81f4e1213a4 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunKeywordSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunKeywordSpacing.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class FunKeywordSpacing(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunctionTypeReferenceSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunctionTypeReferenceSpacing.kt index 8a8e19adc76..d5770b2cfee 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunctionTypeReferenceSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/FunctionTypeReferenceSpacing.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class FunctionTypeReferenceSpacing(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ImportOrdering.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ImportOrdering.kt index a833b9cf747..e9fc4258f59 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ImportOrdering.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ImportOrdering.kt @@ -11,7 +11,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. * * For defining import layout patterns see the [KtLint Source Code](https://github.com/pinterest/ktlint/blob/a6ca5b2edf95cc70a138a9470cfb6c4fd5d9d3ce/ktlint-ruleset-standard/src/main/kotlin/com/pinterest/ktlint/ruleset/standard/ImportOrderingRule.kt) */ diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt index 40a7a64cf60..20ba3726de7 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Indentation.kt @@ -14,7 +14,7 @@ import io.gitlab.arturbosch.detekt.formatting.FormattingRule import org.jetbrains.kotlin.com.intellij.lang.ASTNode /** - * See [ktlint-website](https://ktlint.github.io#rule-indentation) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.19.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/KdocWrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/KdocWrapping.kt index 1fff0f207d2..041e9a0de23 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/KdocWrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/KdocWrapping.kt @@ -11,7 +11,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-indentation) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class KdocWrapping(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MaximumLineLength.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MaximumLineLength.kt index 7f400a68fb7..b60dda6aa15 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MaximumLineLength.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MaximumLineLength.kt @@ -12,7 +12,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. * * This rules overlaps with [style>MaxLineLength](https://detekt.dev/style.html#maxlinelength) * from the standard rules, make sure to enable just one or keep them aligned. The pro of this rule is that it can diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierListSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierListSpacing.kt index 926616dad6b..87acc9b0240 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierListSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierListSpacing.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class ModifierListSpacing(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierOrdering.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierOrdering.kt index 106fac23b59..94ffe2316f1 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierOrdering.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ModifierOrdering.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-modifier-order) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. * * This rules overlaps with [style>ModifierOrder](https://detekt.dev/style.html#modifierorder) * from the standard rules, make sure to enable just one. The pro of this rule is that it can auto-correct the issue. diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MultiLineIfElse.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MultiLineIfElse.kt index 4d42ee056ca..90fa0785abd 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MultiLineIfElse.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/MultiLineIfElse.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-modifier-order) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.0.0") class MultiLineIfElse(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoBlankLineBeforeRbrace.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoBlankLineBeforeRbrace.kt index 85e003bf1ec..437ca8ab090 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoBlankLineBeforeRbrace.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoBlankLineBeforeRbrace.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoConsecutiveBlankLines.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoConsecutiveBlankLines.kt index 5c35f1034a2..dd2479e1e42 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoConsecutiveBlankLines.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoConsecutiveBlankLines.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-blank) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyClassBody.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyClassBody.kt index 422e4c38134..c379e6fc90d 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyClassBody.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyClassBody.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-empty-class-body) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyFirstLineInMethodBlock.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyFirstLineInMethodBlock.kt index 8ee87a60592..79031348219 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyFirstLineInMethodBlock.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoEmptyFirstLineInMethodBlock.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.4.0") class NoEmptyFirstLineInMethodBlock(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakAfterElse.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakAfterElse.kt index 349240a3526..e5f3b6bd6bd 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakAfterElse.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakAfterElse.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakBeforeAssignment.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakBeforeAssignment.kt index 7655af1ce9b..bfabbae64f3 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakBeforeAssignment.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoLineBreakBeforeAssignment.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoMultipleSpaces.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoMultipleSpaces.kt index cc89fe3fa6f..d81fb568d01 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoMultipleSpaces.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoMultipleSpaces.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoSemicolons.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoSemicolons.kt index 830e33dbf4a..d2f6413a8ee 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoSemicolons.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoSemicolons.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-semi) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoTrailingSpaces.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoTrailingSpaces.kt index 1dc1e1c46fc..76a5b2b0333 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoTrailingSpaces.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoTrailingSpaces.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-trailing-whitespaces) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnitReturn.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnitReturn.kt index 35a084b80bb..b9313798dd6 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnitReturn.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnitReturn.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-unit-return) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnusedImports.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnusedImports.kt index 0c9280dfb68..9ce661acff1 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnusedImports.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoUnusedImports.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoWildcardImports.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoWildcardImports.kt index e38d9047419..579a0fc48ce 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoWildcardImports.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/NoWildcardImports.kt @@ -10,7 +10,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-import) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") class NoWildcardImports(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/PackageName.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/PackageName.kt index af7154774eb..2a9a8eb3983 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/PackageName.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/PackageName.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @AutoCorrectable(since = "1.0.0") class PackageName(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ParameterListWrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ParameterListWrapping.kt index 2065399dc39..98e9bc5ca79 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ParameterListWrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/ParameterListWrapping.kt @@ -13,7 +13,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundAngleBrackets.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundAngleBrackets.kt index 613cc263f42..94e2c39ad4f 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundAngleBrackets.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundAngleBrackets.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @AutoCorrectable(since = "1.16.0") class SpacingAroundAngleBrackets(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundColon.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundColon.kt index a7d8b8bee7a..ceb4bafd93e 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundColon.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundColon.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundComma.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundComma.kt index 045996c3353..e3762286434 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundComma.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundComma.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundCurly.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundCurly.kt index 09a581fe919..33c5e34f772 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundCurly.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundCurly.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDot.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDot.kt index 803526b2690..faa9699b2e3 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDot.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDot.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDoubleColon.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDoubleColon.kt index 26116a40e9a..940a9c558ec 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDoubleColon.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundDoubleColon.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @AutoCorrectable(since = "1.10.0") class SpacingAroundDoubleColon(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundKeyword.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundKeyword.kt index 3e97da9ab0a..a0286fed8cb 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundKeyword.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundKeyword.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundOperators.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundOperators.kt index 0c27a1cf6ff..7ac5bdb4f6e 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundOperators.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundOperators.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundParens.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundParens.kt index cb73e040b5c..6a5633fad94 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundParens.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundParens.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundRangeOperator.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundRangeOperator.kt index 88354cedd36..ed09bfe87b8 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundRangeOperator.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundRangeOperator.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundUnaryOperator.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundUnaryOperator.kt index 4adaedef062..b4612c1813b 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundUnaryOperator.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingAroundUnaryOperator.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @AutoCorrectable(since = "1.16.0") class SpacingAroundUnaryOperator(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithAnnotations.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithAnnotations.kt index 92b66a943cb..33c54e24284 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithAnnotations.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithAnnotations.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @AutoCorrectable(since = "1.10.0") class SpacingBetweenDeclarationsWithAnnotations(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithComments.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithComments.kt index 3b15666b7b5..2ccdbec98a1 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithComments.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/SpacingBetweenDeclarationsWithComments.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#spacing) for documentation. */ @AutoCorrectable(since = "1.10.0") class SpacingBetweenDeclarationsWithComments(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/StringTemplate.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/StringTemplate.kt index 849d9974062..92f2964834a 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/StringTemplate.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/StringTemplate.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-string-template) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.0.0") @AutoCorrectable(since = "1.0.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt index 5445efae42f..e5343226115 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt @@ -10,7 +10,7 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @OptIn(FeatureInAlphaState::class) @AutoCorrectable(since = "1.20.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TypeArgumentListSpacing.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TypeArgumentListSpacing.kt index e2933533dce..259fb2f0358 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TypeArgumentListSpacing.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TypeArgumentListSpacing.kt @@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @AutoCorrectable(since = "1.20.0") class TypeArgumentListSpacing(config: Config) : FormattingRule(config) { diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/UnnecessaryParenthesesBeforeTrailingLambda.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/UnnecessaryParenthesesBeforeTrailingLambda.kt index 1d60ee32d26..1b95932dc14 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/UnnecessaryParenthesesBeforeTrailingLambda.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/UnnecessaryParenthesesBeforeTrailingLambda.kt @@ -7,7 +7,7 @@ import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** - * See [ktlint-website](https://ktlint.github.io#rule-spacing) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#experimental-rules) for documentation. */ @OptIn(FeatureInAlphaState::class) @AutoCorrectable(since = "1.20.0") diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt index ed79bf053be..62f2f1eb653 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/Wrapping.kt @@ -9,7 +9,7 @@ import io.gitlab.arturbosch.detekt.formatting.FormattingRule import org.jetbrains.kotlin.com.intellij.lang.ASTNode /** - * See [ktlint-website](https://ktlint.github.io#rule-indentation) for documentation. + * See [ktlint-readme](https://github.com/pinterest/ktlint#standard-rules) for documentation. */ @ActiveByDefault(since = "1.20.0") @AutoCorrectable(since = "1.20.0") From b6437723aea286fc6157817848e10b3851fcb388 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Jul 2022 12:42:01 +0200 Subject: [PATCH 63/64] Update docusaurus monorepo to v2.0.0-beta.22 (#5050) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- website/package.json | 6 +- website/yarn.lock | 2138 ++++++++++++++++++++++-------------------- 2 files changed, 1146 insertions(+), 998 deletions(-) diff --git a/website/package.json b/website/package.json index e7b6afffc37..1c7899d6e84 100644 --- a/website/package.json +++ b/website/package.json @@ -16,9 +16,9 @@ "generate-and-build": "../gradlew -p .. :detekt-generator:generateDocumentation && docusaurus build" }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", - "@docusaurus/plugin-client-redirects": "2.0.0-beta.21", - "@docusaurus/preset-classic": "2.0.0-beta.21", + "@docusaurus/core": "2.0.0-beta.22", + "@docusaurus/plugin-client-redirects": "2.0.0-beta.22", + "@docusaurus/preset-classic": "2.0.0-beta.22", "@mdx-js/react": "1.6.22", "clsx": "1.2.1", "prism-react-renderer": "1.3.5", diff --git a/website/yarn.lock b/website/yarn.lock index 6ed66709997..ebbf20c0163 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -2,17 +2,24 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz#76832fffb6405ac2c87bac5a040b8a31a1cdef80" - integrity sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA== +"@algolia/autocomplete-core@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1" + integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg== dependencies: - "@algolia/autocomplete-shared" "1.6.3" + "@algolia/autocomplete-shared" "1.7.1" -"@algolia/autocomplete-shared@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz#52085ce89a755977841ed0a463aa31ce8f1dea97" - integrity sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg== +"@algolia/autocomplete-preset-algolia@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8" + integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg== + dependencies: + "@algolia/autocomplete-shared" "1.7.1" + +"@algolia/autocomplete-shared@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" + integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== "@algolia/cache-browser-local-storage@4.13.0": version "4.13.0" @@ -241,15 +248,22 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== +"@babel/compat-data@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@7.12.9": version "7.12.9" @@ -294,21 +308,21 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/core@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.2.tgz#87b2fcd7cce9becaa7f5acebdc4f09f3dd19d876" - integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== +"@babel/core@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" + integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helpers" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -324,13 +338,13 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== +"@babel/generator@^7.18.6", "@babel/generator@^7.18.7": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" + integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.16.7": @@ -340,6 +354,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" @@ -348,6 +369,14 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz#f14d640ed1ee9246fb33b8255f08353acfe70e6a" + integrity sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" @@ -358,23 +387,13 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe" - integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== +"@babel/helper-compilation-targets@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" + integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -391,18 +410,18 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.16.7": version "7.17.0" @@ -412,13 +431,13 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" -"@babel/helper-create-regexp-features-plugin@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" - integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" @@ -441,10 +460,10 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" @@ -453,6 +472,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" @@ -461,6 +487,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -468,6 +502,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -475,6 +516,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-member-expression-to-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" + integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -482,6 +530,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" @@ -496,19 +551,19 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== +"@babel/helper-module-transforms@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz#4f8408afead0188cfa48672f9d0e5787b61778c8" + integrity sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@babel/types" "^7.18.8" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -517,6 +572,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -527,10 +589,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-plugin-utils@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -541,6 +603,16 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz#fa1f81acd19daee9d73de297c0308783cd3cfc23" + integrity sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-wrap-function" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -552,16 +624,16 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== +"@babel/helper-replace-supers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" + integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/helper-simple-access@^7.17.7": version "7.17.7" @@ -570,12 +642,12 @@ dependencies: "@babel/types" "^7.17.0" -"@babel/helper-simple-access@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== dependencies: - "@babel/types" "^7.18.2" + "@babel/types" "^7.18.6" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -584,6 +656,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz#7dff00a5320ca4cf63270e5a0eca4b268b7380d9" + integrity sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" @@ -591,16 +670,33 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "@babel/helper-wrap-function@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" @@ -611,6 +707,16 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" +"@babel/helper-wrap-function@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz#ec44ea4ad9d8988b90c3e465ba2382f4de81a073" + integrity sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw== + dependencies: + "@babel/helper-function-name" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" @@ -620,14 +726,14 @@ "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== +"@babel/helpers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" + integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/highlight@^7.16.7": version "7.17.9" @@ -638,15 +744,24 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.12.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== -"@babel/parser@^7.18.0", "@babel/parser@^7.18.3": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" - integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== +"@babel/parser@^7.18.6", "@babel/parser@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" + integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" @@ -655,12 +770,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" - integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": version "7.16.7" @@ -671,14 +786,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" - integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" + integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" "@babel/plugin-proposal-async-generator-functions@^7.16.8": version "7.16.8" @@ -689,13 +804,14 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" - integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.16.7": @@ -706,13 +822,13 @@ "@babel/helper-create-class-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" - integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-class-static-block@^7.16.7": version "7.17.6" @@ -723,13 +839,13 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" - integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.16.7": @@ -740,6 +856,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-namespace-from@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" @@ -748,12 +872,12 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== +"@babel/plugin-proposal-export-namespace-from@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" + integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.16.7": @@ -764,12 +888,12 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" - integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.16.7": @@ -780,12 +904,12 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" - integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" + integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": @@ -796,12 +920,12 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" - integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.16.7": @@ -812,6 +936,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -832,16 +964,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-object-rest-spread@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" - integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== +"@babel/plugin-proposal-object-rest-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" + integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-transform-parameters" "^7.18.6" "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.16.7" @@ -851,6 +983,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" @@ -860,13 +1000,13 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" - integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== +"@babel/plugin-proposal-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" + integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.16.11": @@ -877,13 +1017,13 @@ "@babel/helper-create-class-features-plugin" "^7.16.10" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-methods@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" - integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.16.7": version "7.16.7" @@ -895,14 +1035,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -913,13 +1053,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-unicode-property-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" - integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== +"@babel/plugin-proposal-unicode-property-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -956,12 +1096,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" - integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" @@ -984,12 +1124,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -1054,12 +1194,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-typescript@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz#b54fc3be6de734a56b87508f99d6428b5b605a7b" - integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-arrow-functions@^7.16.7": version "7.16.7" @@ -1068,12 +1208,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" - integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" @@ -1084,14 +1224,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-async-to-generator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" - integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.16.7" @@ -1100,6 +1240,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-block-scoping@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" @@ -1107,12 +1254,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9" - integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== +"@babel/plugin-transform-block-scoping@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" + integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-classes@^7.16.7": version "7.16.7" @@ -1128,18 +1275,18 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814" - integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/plugin-transform-classes@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz#7e85777e622e979c85c701a095280360b818ce49" + integrity sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.16.7": @@ -1149,12 +1296,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-computed-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== +"@babel/plugin-transform-computed-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" + integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-destructuring@^7.16.7": version "7.17.7" @@ -1163,12 +1310,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" - integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== +"@babel/plugin-transform-destructuring@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" + integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" @@ -1178,6 +1325,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-dotall-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-duplicate-keys@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" @@ -1185,12 +1340,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" - integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== +"@babel/plugin-transform-duplicate-keys@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" + integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" @@ -1200,6 +1355,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-for-of@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" @@ -1207,12 +1370,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.18.1": - version "7.18.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" - integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== +"@babel/plugin-transform-for-of@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" @@ -1223,6 +1386,15 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" + integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== + dependencies: + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" @@ -1230,12 +1402,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== +"@babel/plugin-transform-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" + integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" @@ -1244,6 +1416,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-modules-amd@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" @@ -1253,13 +1432,13 @@ "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" - integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.16.8": @@ -1272,14 +1451,14 @@ "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" - integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.16.7": @@ -1293,15 +1472,15 @@ "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.0": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.4.tgz#3d6fd9868c735cce8f38d6ae3a407fb7e61e6d46" - integrity sha512-lH2UaQaHVOAeYrUUuZ8i38o76J/FnO8vu21OE+tD1MyP9lxdZoSfz+pDbWkq46GogUrdrMz3tiz/FYGB+bVThg== +"@babel/plugin-transform-modules-systemjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" + integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.16.7": @@ -1312,13 +1491,13 @@ "@babel/helper-module-transforms" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-umd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" - integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": version "7.16.8" @@ -1327,13 +1506,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" - integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-new-target@^7.16.7": version "7.16.7" @@ -1342,12 +1521,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-new-target@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz#10842cd605a620944e81ea6060e9e65c265742e3" - integrity sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w== +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" @@ -1357,6 +1536,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" @@ -1364,12 +1551,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-parameters@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" - integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== +"@babel/plugin-transform-parameters@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" @@ -1378,6 +1565,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-react-constant-elements@^7.14.5": version "7.17.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz#6cc273c2f612a6a50cb657e63ee1303e5e68d10a" @@ -1392,6 +1586,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-react-jsx-development@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" @@ -1399,6 +1600,13 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.16.7" +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx@^7.16.7": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" @@ -1410,16 +1618,16 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.17.0" -"@babel/plugin-transform-react-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" - integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" + integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/types" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.6" "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" @@ -1429,6 +1637,14 @@ "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-regenerator@^7.16.7": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" @@ -1436,12 +1652,12 @@ dependencies: regenerator-transform "^0.15.0" -"@babel/plugin-transform-regenerator@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" - integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" "@babel/plugin-transform-reserved-words@^7.16.7": @@ -1451,23 +1667,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-reserved-words@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" - integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.2.tgz#04637de1e45ae8847ff14b9beead09c33d34374d" - integrity sha512-mr1ufuRMfS52ttq+1G1PD8OJNqgcTFjq3hwn8SZ5n1x1pBhi0E36rYMdTK0TsKtApJ4lDEdfXJwtGobQMHSMPg== +"@babel/plugin-transform-runtime@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" + integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.16.7": @@ -1477,6 +1693,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-spread@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" @@ -1485,13 +1708,13 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-spread@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" - integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== +"@babel/plugin-transform-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" + integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.16.7" @@ -1500,6 +1723,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-template-literals@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" @@ -1507,12 +1737,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" - integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== +"@babel/plugin-transform-template-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" + integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-typeof-symbol@^7.16.7": version "7.16.7" @@ -1521,12 +1751,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" - integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== +"@babel/plugin-transform-typeof-symbol@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" + integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-typescript@^7.16.7": version "7.16.8" @@ -1537,14 +1767,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-typescript@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz#587eaf6a39edb8c06215e550dc939faeadd750bf" - integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz#303feb7a920e650f2213ef37b36bbf327e6fa5a0" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-typescript" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" @@ -1553,6 +1783,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-unicode-regex@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" @@ -1561,6 +1798,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/preset-env@^7.15.6": version "7.16.11" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" @@ -1641,38 +1886,38 @@ core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-env@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" - integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-async-generator-functions" "^7.17.12" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/plugin-proposal-class-static-block" "^7.18.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.17.12" - "@babel/plugin-proposal-json-strings" "^7.17.12" - "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.18.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-private-methods" "^7.17.12" - "@babel/plugin-proposal-private-property-in-object" "^7.17.12" - "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" +"@babel/preset-env@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" + integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.6" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.6" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-import-assertions" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1682,43 +1927,43 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.17.12" - "@babel/plugin-transform-async-to-generator" "^7.17.12" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.17.12" - "@babel/plugin-transform-classes" "^7.17.12" - "@babel/plugin-transform-computed-properties" "^7.17.12" - "@babel/plugin-transform-destructuring" "^7.18.0" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.17.12" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.18.1" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.17.12" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.18.0" - "@babel/plugin-transform-modules-commonjs" "^7.18.2" - "@babel/plugin-transform-modules-systemjs" "^7.18.0" - "@babel/plugin-transform-modules-umd" "^7.18.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" - "@babel/plugin-transform-new-target" "^7.17.12" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.17.12" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.18.0" - "@babel/plugin-transform-reserved-words" "^7.17.12" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.17.12" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.18.2" - "@babel/plugin-transform-typeof-symbol" "^7.17.12" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.6" + "@babel/plugin-transform-classes" "^7.18.6" + "@babel/plugin-transform-computed-properties" "^7.18.6" + "@babel/plugin-transform-destructuring" "^7.18.6" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.6" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.6" + "@babel/plugin-transform-function-name" "^7.18.6" + "@babel/plugin-transform-literals" "^7.18.6" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.6" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.6" + "@babel/plugin-transform-typeof-symbol" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.2" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/types" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1745,17 +1990,17 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-react@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" - integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== +"@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.17.12" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/preset-typescript@^7.15.0": version "7.16.7" @@ -1766,19 +2011,19 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/preset-typescript@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c" - integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== +"@babel/preset-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" -"@babel/runtime-corejs3@^7.18.3": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c" - integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== +"@babel/runtime-corejs3@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz#6f02c5536911f4b445946a2179554b95c8838635" + integrity sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" @@ -1790,10 +2035,10 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.18.3": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== +"@babel/runtime@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== dependencies: regenerator-runtime "^0.13.4" @@ -1806,6 +2051,15 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" @@ -1822,19 +2076,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.2.tgz#b77a52604b5cc836a9e1e08dca01cba67a12d2e8" - integrity sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.0" - "@babel/types" "^7.18.2" +"@babel/traverse@^7.18.6", "@babel/traverse@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.8.tgz#f095e62ab46abf1da35e5a2011f43aee72d8d5b0" + integrity sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.8" + "@babel/types" "^7.18.8" debug "^4.1.0" globals "^11.1.0" @@ -1846,12 +2100,12 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== +"@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.8.tgz#c5af199951bf41ba4a6a9a6d0d8ad722b30cd42f" + integrity sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@colors/colors@1.5.0": @@ -1859,43 +2113,44 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@docsearch/css@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.0.tgz#6781cad43fc2e034d012ee44beddf8f93ba21f19" - integrity sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA== +"@docsearch/css@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.1.tgz#e0976bf995e383f8ee8657306311b9cb95016330" + integrity sha512-utLgg7E1agqQeqCJn05DWC7XXMk4tMUUnL7MZupcknRu2OzGN13qwey2qA/0NAKkVBGugiWtON0+rlU0QIPojg== -"@docsearch/react@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.0.tgz#da943a64c01ee82b04e53b691806469272f943f7" - integrity sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg== +"@docsearch/react@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.1.tgz#3dffb5db8cf9eb95d6e732cf038264bfc10191ed" + integrity sha512-cfoql4qvtsVRqBMYxhlGNpvyy/KlCoPqjIsJSZYqYf9AplZncKjLBTcwBu6RXFMVCe30cIFljniI4OjqAU67pQ== dependencies: - "@algolia/autocomplete-core" "1.6.3" - "@docsearch/css" "3.1.0" + "@algolia/autocomplete-core" "1.7.1" + "@algolia/autocomplete-preset-algolia" "1.7.1" + "@docsearch/css" "3.1.1" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.21.tgz#50897317b22dbd94b1bf91bb30c2a0fddd15a806" - integrity sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA== +"@docusaurus/core@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.22.tgz#72430b817571e2d7354012523bcaefc99fe4e004" + integrity sha512-8KU56anfNo6V6crZG+K/zPKvyAAosZcWfkeNYWu14BzigRbBirJf7ZLRkkLa1NgDdJt3EEBgg+Iv8olPMC1uog== dependencies: - "@babel/core" "^7.18.2" - "@babel/generator" "^7.18.2" + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.18.2" - "@babel/preset-env" "^7.18.2" - "@babel/preset-react" "^7.17.12" - "@babel/preset-typescript" "^7.17.12" - "@babel/runtime" "^7.18.3" - "@babel/runtime-corejs3" "^7.18.3" - "@babel/traverse" "^7.18.2" - "@docusaurus/cssnano-preset" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@docusaurus/cssnano-preset" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" - "@slorber/static-site-generator-webpack-plugin" "^4.0.4" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.2.1" autoprefixer "^10.4.7" babel-loader "^8.2.5" @@ -1908,10 +2163,10 @@ combine-promises "^1.1.0" commander "^5.1.0" copy-webpack-plugin "^11.0.0" - core-js "^3.22.7" + core-js "^3.23.3" css-loader "^6.7.1" css-minimizer-webpack-plugin "^4.0.0" - cssnano "^5.1.9" + cssnano "^5.1.12" del "^6.1.1" detect-port "^1.3.0" escape-html "^1.0.3" @@ -1924,7 +2179,7 @@ import-fresh "^3.3.0" leven "^3.1.0" lodash "^4.17.21" - mini-css-extract-plugin "^2.6.0" + mini-css-extract-plugin "^2.6.1" postcss "^8.4.14" postcss-loader "^7.0.0" prompts "^2.4.2" @@ -1935,49 +2190,48 @@ react-router "^5.3.3" react-router-config "^5.1.1" react-router-dom "^5.3.3" - remark-admonitions "^1.2.1" rtl-detect "^1.0.4" semver "^7.3.7" serve-handler "^6.1.3" shelljs "^0.8.5" - terser-webpack-plugin "^5.3.1" + terser-webpack-plugin "^5.3.3" tslib "^2.4.0" update-notifier "^5.1.0" url-loader "^4.1.1" wait-on "^6.0.1" - webpack "^5.72.1" + webpack "^5.73.0" webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.9.0" + webpack-dev-server "^4.9.3" webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz#38113877a5857c3f9d493522085d20909dcec474" - integrity sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw== +"@docusaurus/cssnano-preset@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.22.tgz#dc3491a452fb66569261801c67e00a1bb8b7dce1" + integrity sha512-ewImLASzPD2dRQLhNdBA5AyckkPDqZPMMrQiuDpe4BgfbjROJWLjVzjMbQRdrB2UQPwm9HyE6/+gP55KNISKvQ== dependencies: - cssnano-preset-advanced "^5.3.5" + cssnano-preset-advanced "^5.3.8" postcss "^8.4.14" postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" -"@docusaurus/logger@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz#f6ab4133917965349ae03fd9111a940b24d4fd12" - integrity sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA== +"@docusaurus/logger@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.22.tgz#dd328d8cddd947c2211fd20ae91f5921b6c70f82" + integrity sha512-Gg6So3GYbFi6pyn5YrFS8lNST90f2sNrBTu/mAo2nDU391vIJ3bDkNfHNi4plz9TyCGxxx8BgOExh6x3xGJhMg== dependencies: chalk "^4.1.2" tslib "^2.4.0" -"@docusaurus/mdx-loader@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz#52af341e21f22be882d2155a7349bea10f5d77a3" - integrity sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ== +"@docusaurus/mdx-loader@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.22.tgz#7a015c161a4c40300fe99bde7dc0a6ada094d45f" + integrity sha512-kJT3zsHQTfMFSHlNohw0C4VJjKC2cox6navbMRJM4mZUm+wj0YDE2/WAcwYB8abM1AZkgJvAMZnxynq6vUZxhw== dependencies: - "@babel/parser" "^7.18.3" - "@babel/traverse" "^7.18.2" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" + "@babel/parser" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" "@mdx-js/mdx" "^1.6.22" escape-html "^1.0.3" file-loader "^6.2.0" @@ -1987,151 +2241,162 @@ remark-emoji "^2.2.0" stringify-object "^3.3.0" tslib "^2.4.0" + unified "^9.2.2" unist-util-visit "^2.0.3" url-loader "^4.1.1" - webpack "^5.72.1" + webpack "^5.73.0" -"@docusaurus/module-type-aliases@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz#345f1c1a99407775d1d3ffc1a90c2df93d50a9b8" - integrity sha512-gRkWICgQZiqSJgrwRKWjXm5gAB+9IcfYdUbCG0PRPP/G8sNs9zBIOY4uT4Z5ox2CWFEm44U3RTTxj7BiLVMBXw== +"@docusaurus/module-type-aliases@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.22.tgz#bae805e339364eb3d801e010b3098ceb04dd5ce4" + integrity sha512-h0IOYfFgZgV3MjLHefbS1Zf0zmiNOBCtvu9vXwoxbws7fzjqUl1HALS0HQ2SaHsVsQ4AeepYidHtkS2upw8+JQ== dependencies: - "@docusaurus/types" "2.0.0-beta.21" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.0.0-beta.22" + "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" "@types/react-router-dom" "*" react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-client-redirects@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.0.0-beta.21.tgz#bf0c3e94d89c7bd15933dacdfefc17fec22c5d76" - integrity sha512-4xzrti0au7SaQT/cxr+FM9b+R5gfOSFODwQJ2QeTXbkdiz1+9DV3bp8nB/2CmzZ9ApY5lsueXNpa4n7+UAngrA== +"@docusaurus/plugin-client-redirects@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.0.0-beta.22.tgz#12875d42a1640bf03b2e046d340f1de6608ec25d" + integrity sha512-v+ZpmJv40KWvtUKXk2y3YfFyMWW2xzIVgkf8jJFyt92MmR/oe+Rve8Xe8eF2Q3MmjrV5yqiInTlYKIT0mteBSg== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" eta "^1.12.3" fs-extra "^10.1.0" lodash "^4.17.21" tslib "^2.4.0" -"@docusaurus/plugin-content-blog@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.21.tgz#86211deeea901ddcd77ca387778e121e93ee8d01" - integrity sha512-IP21yJViP3oBmgsWBU5LhrG1MZXV4mYCQSoCAboimESmy1Z11RCNP2tXaqizE3iTmXOwZZL+SNBk06ajKCEzWg== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" - cheerio "^1.0.0-rc.11" +"@docusaurus/plugin-content-blog@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.22.tgz#c08a685fe19db417318b1e18414e9fefa520a51d" + integrity sha512-igXqg3O7KKwYq+RleeK73dxVOM2ONnerykmy5Uaasfzxzi2z5erAzTTUSINa86Czo4CfwaSDwVAkc43z4Z8Hiw== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^10.1.0" lodash "^4.17.21" reading-time "^1.5.0" - remark-admonitions "^1.2.1" tslib "^2.4.0" unist-util-visit "^2.0.3" utility-types "^3.10.0" - webpack "^5.72.1" - -"@docusaurus/plugin-content-docs@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.21.tgz#b3171fa9aed99e367b6eb7111187bd0e3dcf2949" - integrity sha512-aa4vrzJy4xRy81wNskyhE3wzRf3AgcESZ1nfKh8xgHUkT7fDTZ1UWlg50Jb3LBCQFFyQG2XQB9N6llskI/KUnw== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.22.tgz#ef8c60729f74c1604e178863a798890376a0dd63" + integrity sha512-Hfb0+coxJshheAQISamfGrU2T1CLhV6EAPcYx3ejCXsMTjAAtyFsK17t6qGOCGFg3J36gPrzBstBWwEvaVHCqw== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + "@types/react-router-config" "^5.0.6" combine-promises "^1.1.0" fs-extra "^10.1.0" import-fresh "^3.3.0" js-yaml "^4.1.0" lodash "^4.17.21" - remark-admonitions "^1.2.1" tslib "^2.4.0" utility-types "^3.10.0" - webpack "^5.72.1" - -"@docusaurus/plugin-content-pages@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.21.tgz#df6b4c5c4cde8a0ea491a30002e84941ca7bf0cf" - integrity sha512-DmXOXjqNI+7X5hISzCvt54QIK6XBugu2MOxjxzuqI7q92Lk/EVdraEj5mthlH8IaEH/VlpWYJ1O9TzLqX5vH2g== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.22.tgz#a9ed66a21f66019ada8d7cd5bb0bca06c2fe313c" + integrity sha512-v+oBM0IvRuU2D5HACaaHdxgW+XajFYgimRwV8jp1z6trjRInCO//VjYl+VEaqRHFZ1y7gwbInJxn4as1uGHcjw== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" fs-extra "^10.1.0" - remark-admonitions "^1.2.1" tslib "^2.4.0" - webpack "^5.72.1" + webpack "^5.73.0" -"@docusaurus/plugin-debug@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.21.tgz#dfa212fd90fe2f54439aacdc8c143e8ce96b0d27" - integrity sha512-P54J4q4ecsyWW0Jy4zbimSIHna999AfbxpXGmF1IjyHrjoA3PtuakV1Ai51XrGEAaIq9q6qMQkEhbUd3CffGAw== +"@docusaurus/plugin-debug@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.22.tgz#a0ca40d5e50c216d57a774c6f7831c18ccb92423" + integrity sha512-uB7+eHGpJugDy/Rzxbs293FuOf66ck5Wx/Q1wcRA1AQQVSiqDfvj2ZBTHBNr+onympYdL7IPWqTnjf1tt40nBQ== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" fs-extra "^10.1.0" react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-analytics@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.21.tgz#5475c58fb23603badf41d84298569f6c46b4e6b2" - integrity sha512-+5MS0PeGaJRgPuNZlbd/WMdQSpOACaxEz7A81HAxm6kE+tIASTW3l8jgj1eWFy/PGPzaLnQrEjxI1McAfnYmQw== +"@docusaurus/plugin-google-analytics@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.22.tgz#f6bdf168e5cd0ef8b8e48568e604ec554e3e08fe" + integrity sha512-5rT1b3QTcelOzx7ZeyL0mKiYvUR2c78gLmh4wHpqRJXSgZAr7Fz8VSgDzu4xfvp8+MSWWeGhCTHXQok256U4Vg== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz#a4a101089994a7103c1cc7cddb15170427b185d6" - integrity sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA== +"@docusaurus/plugin-google-gtag@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.22.tgz#4e3aac750f67c92275832c0d83281a5293184989" + integrity sha512-DkoFfHErs10YMQoXPmFn5MC9fj9URH9LbryjTPqDoIerAZjR7MZA5g/+OueYBcachpygPlWBu6Q3mhNX19VObA== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" tslib "^2.4.0" -"@docusaurus/plugin-sitemap@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.21.tgz#8bfa695eada2ec95c9376a884641237ffca5dd3d" - integrity sha512-/ynWbcXZXcYZ6sT2X6vAJbnfqcPxwdGEybd0rcRZi4gBHq6adMofYI25AqELmnbBDxt0If+vlAeUHFRG5ueP7Q== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" +"@docusaurus/plugin-sitemap@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.22.tgz#2066a94cf3a7518517f940001cedcc96319ea793" + integrity sha512-XGziHGR5ZeuNxBI3D3obRS2ufZvuWKrlFQpDCq1gWvZb5EgMePGNs1ZiXUIVNyW3jOSILbemvH6DAXuXSo1DlA== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" fs-extra "^10.1.0" sitemap "^7.1.1" tslib "^2.4.0" -"@docusaurus/preset-classic@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.21.tgz#1362d8650ebed22633db411caaba80075f7c86ce" - integrity sha512-KvBnIUu7y69pNTJ9UhX6SdNlK6prR//J3L4rhN897tb8xx04xHHILlPXko2Il+C3Xzgh3OCgyvkoz9K6YlFTDw== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - "@docusaurus/plugin-debug" "2.0.0-beta.21" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.21" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.21" - "@docusaurus/plugin-sitemap" "2.0.0-beta.21" - "@docusaurus/theme-classic" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-search-algolia" "2.0.0-beta.21" +"@docusaurus/preset-classic@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.22.tgz#f7c798398d805e8b06e8babb2d10e4b9206802c9" + integrity sha512-an4u7KnFLR6vyBQ7l3HCNL4mXdV5QNRleZv9G+kvVeUejxs0GMF1W2pRLyfU6bEnAD0W6bDH4bYdYgIAX4kGaw== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/plugin-debug" "2.0.0-beta.22" + "@docusaurus/plugin-google-analytics" "2.0.0-beta.22" + "@docusaurus/plugin-google-gtag" "2.0.0-beta.22" + "@docusaurus/plugin-sitemap" "2.0.0-beta.22" + "@docusaurus/theme-classic" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-search-algolia" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -2141,115 +2406,125 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.21.tgz#6df5b9ea2d389dafb6f59badeabb3eda060b5017" - integrity sha512-Ge0WNdTefD0VDQfaIMRRWa8tWMG9+8/OlBRd5MK88/TZfqdBq7b/gnCSaalQlvZwwkj6notkKhHx72+MKwWUJA== - dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-translations" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" +"@docusaurus/theme-classic@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.22.tgz#20e0521b7eedbc0160829f2be08f812832ac766b" + integrity sha512-WkoN1XC4F3v1vCWnyAdIuNF27dMccehnglloCNj0dF6mop6PHMXREQ2f6wKhp5ZjMZ/LKTAKyGjBotxPsOElvA== + dependencies: + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-translations" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" "@mdx-js/react" "^1.6.22" - clsx "^1.1.1" + clsx "^1.2.0" copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.39" + infima "0.2.0-alpha.41" lodash "^4.17.21" nprogress "^0.2.0" postcss "^8.4.14" - prism-react-renderer "^1.3.3" + prism-react-renderer "^1.3.5" prismjs "^1.28.0" react-router-dom "^5.3.3" rtlcss "^3.5.0" tslib "^2.4.0" + utility-types "^3.10.0" -"@docusaurus/theme-common@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.21.tgz#508478251982d01655ef505ccb2420db38623db8" - integrity sha512-fTKoTLRfjuFG6c3iwnVjIIOensxWMgdBKLfyE5iih3Lq7tQgkE7NyTGG9BKLrnTJ7cAD2UXdXM9xbB7tBf1qzg== - dependencies: - "@docusaurus/module-type-aliases" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - clsx "^1.1.1" +"@docusaurus/theme-common@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.22.tgz#696ae7fb963bf40ad7ee017ca77f4a31719cfa02" + integrity sha512-BTH23SryhomEetWiJKdl5C9JgnglO17IbbabhZ6wbm0bLNYXmRxV1Bh7LhVmoJECdc1LeQHDOY45mCjVxI5LAg== + dependencies: + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.0" parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.3" + prism-react-renderer "^1.3.5" tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.21.tgz#2891f11372e2542e4e1426c3100b72c2d30d4d68" - integrity sha512-T1jKT8MVSSfnztSqeebUOpWHPoHKtwDXtKYE0xC99JWoZ+mMfv8AFhVSoSddn54jLJjV36mxg841eHQIySMCpQ== - dependencies: - "@docsearch/react" "^3.1.0" - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-translations" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" +"@docusaurus/theme-search-algolia@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.22.tgz#193641f11df1af2157e652b530897064f707838e" + integrity sha512-z9edT4jQxfZsBOVxDhPpxHR5N/tlgkpogds3/XBapU8b7Qp7mgp5qU3Ndz3BX3CIICDDaI2ayGn8xLL65XFGFw== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-translations" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" algoliasearch "^4.13.1" - algoliasearch-helper "^3.8.2" - clsx "^1.1.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.0" eta "^1.12.3" fs-extra "^10.1.0" lodash "^4.17.21" tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.21.tgz#5da60ffc58de256b96316c5e0fe2733c1e83f22c" - integrity sha512-dLVT9OIIBs6MpzMb1bAy+C0DPJK3e3DNctG+ES0EP45gzEqQxzs4IsghpT+QDaOsuhNnAlosgJpFWX3rqxF9xA== +"@docusaurus/theme-translations@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.22.tgz#89fa0d0bd8e59bf4a0a5749182153483410946e1" + integrity sha512-duMoS+BEDWk+qCFZay6+L0C2ZYJvUdny9NdH2JLjNfC1ifl4+pM3HHciJgldos7hH/JGfohDY57fl6NKf5pQLQ== dependencies: fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.21.tgz#36659c6c012663040dcd4cbc97b5d7a555dae229" - integrity sha512-/GH6Npmq81eQfMC/ikS00QSv9jNyO1RXEpNSx5GLA3sFX8Iib26g2YI2zqNplM8nyxzZ2jVBuvUoeODTIbTchQ== +"@docusaurus/types@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.22.tgz#8042ccdf32a915db0e4a2c0e6f98f6d43c6f7fa5" + integrity sha512-F5NQyPKIBXcX+bOK+RMce9K8NTs9Vx6v5pZ4+byLylnNvC4I52USRm+s1l6jMpvlsP4XHz1h2Tm1L3RBCBOwpg== dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" commander "^5.1.0" - history "^4.9.0" joi "^17.6.0" react-helmet-async "^1.3.0" utility-types "^3.10.0" - webpack "^5.72.1" + webpack "^5.73.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz#81e86ed04ad62b75e9ba6a5e7689dc23d5f36a0a" - integrity sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ== +"@docusaurus/utils-common@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.22.tgz#c3c4365be9d2003917d24393f9ad9678fb6388a1" + integrity sha512-yQM1wPUUqoDCJy0cOFWtUsqxY3utL0E14T4NDtCcdc2Einsl1mamKIaBVpt9SMZugMVXbc/z4IQK8YC81CuXEw== dependencies: tslib "^2.4.0" -"@docusaurus/utils-validation@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz#10169661be5f8a233f4c12202ee5802ccb77400f" - integrity sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg== +"@docusaurus/utils-validation@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.22.tgz#517320e317dbc35ffe538eb586817929ebdb588c" + integrity sha512-sW2jrYvhvkh8PjjZzWFyqGs7tlls3F2FgOOj79T9rGj8y+b4a6sRjl8+QgXITjypcQWssCg0wqf6xSXD+LSD/Q== dependencies: - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" joi "^17.6.0" js-yaml "^4.1.0" tslib "^2.4.0" -"@docusaurus/utils@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz#8fc4499c4cfedd29805025d930f8008cad255044" - integrity sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ== +"@docusaurus/utils@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.22.tgz#4d66df9534419cc5cf2307581bab998541b8b7f2" + integrity sha512-ZwtfJl9n+dMBrdIl1DX9DyO9odMV6+1yqbJkdPrfNSLd17fYZK7HGcwQOem7QIEcJjnroUGrsQoKW8Svg3dQJg== dependencies: - "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.22" "@svgr/webpack" "^6.2.1" file-loader "^6.2.0" fs-extra "^10.1.0" @@ -2263,7 +2538,7 @@ shelljs "^0.8.5" tslib "^2.4.0" url-loader "^4.1.1" - webpack "^5.72.1" + webpack "^5.73.0" "@hapi/hoek@^9.0.0": version "9.2.1" @@ -2277,12 +2552,12 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: - "@jridgewell/set-array" "^1.0.0" + "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" @@ -2291,10 +2566,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz#4ac237f4dabc8dd93330386907b97591801f7352" integrity sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw== -"@jridgewell/set-array@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.0.tgz#1179863356ac8fbea64a5a4bcde93a4871012c01" - integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" @@ -2309,6 +2584,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.7": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.9": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" @@ -2405,15 +2688,14 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@slorber/static-site-generator-webpack-plugin@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz#2bf4a2545e027830d2aa5eb950437c26a289b0f1" - integrity sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g== +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== dependencies: - bluebird "^3.7.1" - cheerio "^0.22.0" eval "^0.1.8" - webpack-sources "^1.4.3" + p-map "^4.0.0" + webpack-sources "^3.2.2" "@svgr/babel-plugin-add-jsx-attribute@^6.0.0": version "6.0.0" @@ -2672,7 +2954,7 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-router-config@*": +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": version "5.0.6" resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== @@ -2731,7 +3013,7 @@ dependencies: "@types/express" "*" -"@types/serve-static@*": +"@types/serve-static@*", "@types/serve-static@^1.13.10": version "1.13.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== @@ -2964,10 +3246,10 @@ ajv@^8.0.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -algoliasearch-helper@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz#35726dc6d211f49dbab0bf6d37b4658165539523" - integrity sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg== +algoliasearch-helper@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.10.0.tgz#59a0f645dd3c7e55cf01faa568d1af50c49d36f6" + integrity sha512-4E4od8qWWDMVvQ3jaRX6Oks/k35ywD011wAA4LbYMMjOtaZV6VWaTjRr4iN2bdaXP2o1BP7SLFMBf3wvnHmd8Q== dependencies: "@algolia/events" "^4.0.1" @@ -3165,7 +3447,7 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.3.0: +babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== @@ -3174,7 +3456,7 @@ babel-plugin-polyfill-corejs2@^0.3.0: "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: +babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== @@ -3182,7 +3464,7 @@ babel-plugin-polyfill-corejs3@^0.5.0: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: +babel-plugin-polyfill-regenerator@^0.3.0, babel-plugin-polyfill-regenerator@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== @@ -3219,11 +3501,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bluebird@^3.7.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - body-parser@1.19.2: version "1.19.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" @@ -3250,7 +3527,7 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.4" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -3399,7 +3676,7 @@ caniuse-lite@^1.0.30001335: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001336.tgz#a9eb13edd2613f418ebc632c8d6c9ab9fde7ccc4" integrity sha512-/YxSlBmL7iKXTbIJ48IQTnAOBk7XmWsxhBF1PZLOko5Dt9qc4Pl+84lfqG3Tc4EuavurRn1QLoVJGxY2iSycfw== -ccount@^1.0.0, ccount@^1.0.3: +ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== @@ -3448,32 +3725,10 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -cheerio@^1.0.0-rc.11: - version "1.0.0-rc.11" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.11.tgz#1be84be1a126958366bcc57a11648cd9b30a60c2" - integrity sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag== +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== dependencies: cheerio-select "^2.1.0" dom-serializer "^2.0.0" @@ -3482,7 +3737,6 @@ cheerio@^1.0.0-rc.11: htmlparser2 "^8.0.1" parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" - tslib "^2.4.0" chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" @@ -3556,16 +3810,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clsx@1.2.1: +clsx@1.2.1, clsx@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -3677,10 +3926,10 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.3: version "2.15.3" @@ -3759,10 +4008,10 @@ core-js-pure@^3.20.2: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.2.tgz#c10bffdc3028d25c2aae505819a05543db61544f" integrity sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ== -core-js@^3.22.7: - version "3.22.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.7.tgz#8d6c37f630f6139b8732d10f2c114c3f1d00024f" - integrity sha512-Jt8SReuDKVNZnZEzyEQT5eK6T2RRCXkfTq7Lo09kpm+fHjgGewSbNjV+Wt4yZMhPDdzz2x1ulI5z/w4nxpBseg== +core-js@^3.23.3: + version "3.23.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.3.tgz#3b977612b15da6da0c9cc4aec487e8d24f371112" + integrity sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q== core-util-is@~1.0.0: version "1.0.3" @@ -3817,6 +4066,11 @@ css-declaration-sorter@^6.2.2: resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz#bfd2f6f50002d6a3ae779a87d3a0c5d5b10e0f02" integrity sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg== +css-declaration-sorter@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + css-loader@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" @@ -3865,16 +4119,6 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -3883,11 +4127,6 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" @@ -3898,13 +4137,13 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.5: - version "5.3.6" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.6.tgz#6c995a86cecc9e6472bf6d120e5517231ed527dc" - integrity sha512-OZHsytu16eStRVrIY3wmPQqhJMaI0+O3raU4JHoKV3uuQYEeQek/FJVUIvYXD55hWR6OjCMyKYNRDw+k3/xgUw== +cssnano-preset-advanced@^5.3.8: + version "5.3.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" + integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== dependencies: autoprefixer "^10.3.7" - cssnano-preset-default "^5.2.10" + cssnano-preset-default "^5.2.12" postcss-discard-unused "^5.1.0" postcss-merge-idents "^5.1.1" postcss-reduce-idents "^5.2.0" @@ -3945,12 +4184,56 @@ cssnano-preset-default@^5.2.10: postcss-svgo "^5.1.0" postcss-unique-selectors "^5.1.1" +cssnano-preset-default@^5.2.12: + version "5.2.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" + integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== + dependencies: + css-declaration-sorter "^6.3.0" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.6" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + cssnano-utils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^5.1.8, cssnano@^5.1.9: +cssnano@^5.1.12: + version "5.1.12" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c" + integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== + dependencies: + cssnano-preset-default "^5.2.12" + lilconfig "^2.0.3" + yaml "^1.10.2" + +cssnano@^5.1.8: version "5.1.10" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.10.tgz#fc6ddd9a4d7d238f320634326ed814cf0abf6e1c" integrity sha512-ACpnRgDg4m6CZD/+8SgnLcGCgy6DDGdkMbOawwdvVxNietTNLe/MtWcenp6qT0PRt5wzhGl6/cjMWCdhKXC9QA== @@ -4105,14 +4388,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -4131,31 +4406,11 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" @@ -4170,22 +4425,6 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -4289,11 +4528,6 @@ enhanced-resolve@^5.9.3: graceful-fs "^4.2.4" tapable "^2.2.0" -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -4913,17 +5147,6 @@ hast-to-hyperscript@^9.0.0: unist-util-is "^4.0.0" web-namespaces "^1.0.0" -hast-util-from-parse5@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" - integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== - dependencies: - ccount "^1.0.3" - hastscript "^5.0.0" - property-information "^5.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" - hast-util-from-parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" @@ -4968,16 +5191,6 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -5062,18 +5275,6 @@ html-webpack-plugin@^5.5.0: pretty-error "^4.0.0" tapable "^2.0.0" -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" @@ -5207,10 +5408,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infima@0.2.0-alpha.39: - version "0.2.0-alpha.39" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.39.tgz#054b13ac44f3e9a42bc083988f1a1586add2f59c" - integrity sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw== +infima@0.2.0-alpha.41: + version "0.2.0-alpha.41" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.41.tgz#a9b5c7dd2119a151c542e8950a2f9333b204dae4" + integrity sha512-i2RzEkNhaVXMIp54PS3coINbMGzAAbdumBcA0GQGFYAu2p1Y44EKOrI2kYoHt9iac736swdB7z3muU46+DL8AA== inflight@^1.0.4: version "1.0.6" @@ -5634,16 +5835,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" @@ -5654,66 +5845,16 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -5897,10 +6038,10 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-css-extract-plugin@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz#578aebc7fc14d32c0ad304c2c34f08af44673f5e" - integrity sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w== +mini-css-extract-plugin@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== dependencies: schema-utils "^4.0.0" @@ -6052,13 +6193,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -6244,11 +6378,6 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -6428,6 +6557,14 @@ postcss-merge-longhand@^5.1.5: postcss-value-parser "^4.2.0" stylehacks "^5.1.0" +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + postcss-merge-rules@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" @@ -6517,6 +6654,13 @@ postcss-normalize-positions@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-repeat-style@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" @@ -6524,6 +6668,13 @@ postcss-normalize-repeat-style@^5.1.0: dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" @@ -6569,6 +6720,14 @@ postcss-ordered-values@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + postcss-reduce-idents@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" @@ -6676,16 +6835,11 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@1.3.5: +prism-react-renderer@1.3.5, prism-react-renderer@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== -prism-react-renderer@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" - integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== - prismjs@^1.28.0: version "1.28.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" @@ -6980,7 +7134,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -7051,6 +7205,18 @@ regexpu-core@^5.0.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -7077,29 +7243,11 @@ regjsparser@^0.8.2: dependencies: jsesc "~0.5.0" -rehype-parse@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" - integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.0" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remark-admonitions@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" - integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== - dependencies: - rehype-parse "^6.0.2" - unified "^8.4.2" - unist-util-visit "^2.0.1" - remark-emoji@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" @@ -7542,11 +7690,6 @@ sort-css-media-queries@2.0.4: resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz#b2badfa519cb4a938acbc6d3aaa913d4949dc908" integrity sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw== -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -7565,7 +7708,7 @@ source-map@^0.5.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -7772,7 +7915,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1: +terser-webpack-plugin@^5.1.3: version "5.3.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== @@ -7783,6 +7926,17 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1: source-map "^0.6.1" terser "^5.7.2" +terser-webpack-plugin@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + terser@^5.10.0, terser@^5.7.2: version "5.12.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c" @@ -7938,13 +8092,14 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" -unified@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" - integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== dependencies: bail "^1.0.0" extend "^3.0.0" + is-buffer "^2.0.0" is-plain-obj "^2.0.0" trough "^1.0.0" vfile "^4.0.0" @@ -8005,7 +8160,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.3: +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -8168,7 +8323,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0, web-namespaces@^1.1.2: +web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== @@ -8204,15 +8359,16 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.9.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.1.tgz#184607b0287c791aeaa45e58e8fe75fcb4d7e2a8" - integrity sha512-CTMfu2UMdR/4OOZVHRpdy84pNopOuigVIsRbGX3LVDMWNP8EUgC5mUBMErbwBlHTEX99ejZJpVqrir6EXAEajA== +webpack-dev-server@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" "@types/express" "^4.17.13" "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" "@types/sockjs" "^0.3.33" "@types/ws" "^8.5.1" ansi-html-community "^0.0.8" @@ -8220,7 +8376,7 @@ webpack-dev-server@^4.9.0: chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" + connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" @@ -8246,23 +8402,15 @@ webpack-merge@^5.8.0: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^3.2.3: +webpack-sources@^3.2.2, webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.72.1: - version "5.72.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.1.tgz#3500fc834b4e9ba573b9f430b2c0a61e1bb57d13" - integrity sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung== +webpack@^5.73.0: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" From 69b3fd32157890e824e84781471fc660a14a19fd Mon Sep 17 00:00:00 2001 From: Amit Dash Date: Sat, 9 Jul 2022 23:58:44 +0530 Subject: [PATCH 64/64] Handle corner case of multiple inheritance in UnnecessaryAbstractClass rule --- .../rules/style/UnnecessaryAbstractClass.kt | 7 +++---- .../rules/style/UnnecessaryAbstractClassSpec.kt | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt index 33331a6331d..84487eb3929 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt @@ -88,7 +88,7 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) { val members = members() when { members.isNotEmpty() -> checkMembers(members, nameIdentifier) - hasInheritedMember(true) && !isParentInterface() -> return + hasInheritedMember(true) && isAnyParentAbstract() -> return !hasConstructorParameter() -> report(CodeSmell(issue, Entity.from(nameIdentifier), noConcreteMember)) else -> @@ -129,9 +129,8 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) { } } - private fun KtClass.isParentInterface() = + private fun KtClass.isAnyParentAbstract() = (bindingContext[BindingContext.CLASS, this]?.unsubstitutedMemberScope as? LazyClassMemberScope) ?.supertypes - ?.firstOrNull() - ?.isInterface() == true + ?.all { it.isInterface() } == false } diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt index 4f7d935db74..d9b65a797bd 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt @@ -90,7 +90,7 @@ class UnnecessaryAbstractClassSpec(val env: KotlinCoreEnvironment) { } @Test - fun `does not report abstract class that inherits from an interface and an abstract class in that order`() { + fun `does not report abstract class that inherits from an abstract class and an interface in that order`() { val code = """ interface I @@ -103,6 +103,21 @@ class UnnecessaryAbstractClassSpec(val env: KotlinCoreEnvironment) { val findings = subject.compileAndLintWithContext(env, code) assertThat(findings).isEmpty() } + + @Test + fun `does not report abstract class that inherits from an interface and an abstract class in that order`() { + val code = """ + interface I + + @Deprecated("We don't care about this first class") + abstract class A { + abstract val i: Int + } + abstract class B: I, A() + """ + val findings = subject.compileAndLintWithContext(env, code) + assertThat(findings).isEmpty() + } } @Test