From 51669f918be66591c7329fffc56004f3b6bfa483 Mon Sep 17 00:00:00 2001 From: Nicola Klemenc Date: Mon, 15 Apr 2024 15:20:33 +0200 Subject: [PATCH] feat: React migration - Quality PR detail page, Quality commit detail page - ALA-643 ALA-739 (#1975) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip: Add TODOs * wip: Add screenshots * feat: Quality overview section * feat: Draft initial sections * feat: Tweaks * wip: Add TODOs * fix: Broken fragment links * feat: Fix link IDs * clean: Remove extra tag * feat: Conditionally hide the toggle documentation * wip: Screenshot placeholder * feat: Wording tweaks * feat: Extend updates to the Commits page * feat: Tweaks to match UI * wip: Add TODOs * feat: Tweaks for readability * feat: Screenshots * feat: Copy tweaks * clean: Remove TODOs * feat: Update screenshots * feat: Tweaks for readability * feat: Tweak screenshots * clean: Remove gl/bb integration issues * feat: Second-order screenshot tweaks * feat: Tweaks * feat: Tweaks * feat: Apply suggestions from code review Co-authored-by: Cláudia Carpinteiro * feat: Reorder gate status components * feat: Update screenshots * feat: Apply suggestion from review Co-authored-by: Cláudia Carpinteiro * feat: Fix diff tab description * clean: Remove TODO * clean: Remove duplication logs screenshot * feat: Update new/fixed issues count * feat: Update line endings screenshot * clean: Remove TODO * feat: Update admonition * feat: Apply suggestions from review * feat: Apply review suggestions * clean: Remove conditional display of Coverage tabs * feat: Clarify types of complexity increase * feat: Add placeholder commit coverage tab * feat: Tweak wording for accuracy * feat: Update commit coverage tab screenshot --------- Co-authored-by: Cláudia Carpinteiro --- .../which-metrics-does-codacy-calculate.md | 2 +- .../how-do-i-reanalyze-my-repository.md | 4 +- .../images/reanalyze-repository-commit.png | Bin 17650 -> 22080 bytes .../reanalyze-repository-commits-list.png | Bin 101759 -> 135824 bytes .../images/reanalyze-repository-pr.png | Bin 18021 -> 25446 bytes .../images/reanalyze-repository-prs-list.png | Bin 88046 -> 131039 bytes .../images/duplication-commits.png | Bin 52794 -> 83659 bytes .../images/duplication-logs.png | Bin 82207 -> 0 bytes .../images/error-line-endings.png | Bin 57734 -> 95676 bytes ...nt-duplication-metrics-being-calculated.md | 4 +- .../integrations/bitbucket-integration.md | 4 - .../integrations/github-integration.md | 4 - .../images/bitbucket-integration-issues.png | Bin 34805 -> 0 bytes .../images/github-integration-issues.png | Bin 39407 -> 0 bytes docs/repositories-coverage/commits.md | 10 +- docs/repositories/commits.md | 122 ++++++++++-------- .../commits-detail-quality-overview.png | Bin 13209 -> 14707 bytes .../images/commits-detail-status.png | Bin 13871 -> 19359 bytes docs/repositories/images/commits-detail.png | Bin 72864 -> 137609 bytes .../images/commits-tab-complexity.png | Bin 0 -> 47139 bytes .../images/commits-tab-coverage.png | Bin 0 -> 113372 bytes docs/repositories/images/commits-tab-diff.png | Bin 35975 -> 113650 bytes .../images/commits-tab-duplication.png | Bin 33199 -> 77530 bytes .../repositories/images/commits-tab-files.png | Bin 37025 -> 58840 bytes .../images/commits-tab-issues.png | Bin 40930 -> 88385 bytes docs/repositories/images/commits.png | Bin 113412 -> 138544 bytes .../pull-requests-detail-quality-overview.png | Bin 17368 -> 18991 bytes .../images/pull-requests-detail-status.png | Bin 13313 -> 22741 bytes .../images/pull-requests-detail.png | Bin 78511 -> 150024 bytes .../images/pull-requests-tab-commits.png | Bin 52535 -> 89775 bytes .../images/pull-requests-tab-complexity.png | Bin 0 -> 51337 bytes .../images/pull-requests-tab-coverage.png | Bin 0 -> 114673 bytes .../images/pull-requests-tab-diff.png | Bin 31448 -> 117442 bytes .../images/pull-requests-tab-duplication.png | Bin 44911 -> 81559 bytes .../images/pull-requests-tab-files.png | Bin 37504 -> 78081 bytes .../images/pull-requests-tab-issues.png | Bin 50860 -> 92322 bytes docs/repositories/images/pull-requests.png | Bin 100496 -> 98805 bytes docs/repositories/issues.md | 4 +- docs/repositories/pull-requests.md | 10 +- 39 files changed, 89 insertions(+), 75 deletions(-) delete mode 100644 docs/faq/troubleshooting/images/duplication-logs.png delete mode 100644 docs/repositories-configure/integrations/images/bitbucket-integration-issues.png delete mode 100644 docs/repositories-configure/integrations/images/github-integration-issues.png create mode 100644 docs/repositories/images/commits-tab-complexity.png create mode 100644 docs/repositories/images/commits-tab-coverage.png create mode 100644 docs/repositories/images/pull-requests-tab-complexity.png create mode 100644 docs/repositories/images/pull-requests-tab-coverage.png diff --git a/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md b/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md index 5d0dadd005..837ed900c9 100644 --- a/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md +++ b/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md @@ -82,7 +82,7 @@ Codacy calculates complexity as follows: - The complexity value for each file is the highest cyclomatic complexity of the methods in the file. - A file is considered complex if its cyclomatic complexity value is higher than the threshold [**File is complex when over**](../../repositories-configure/adjusting-quality-goals.md). -- The complexity value of a commit or pull request is the sum of the cyclomatic complexity of the files that were changed in the commit or pull request and that have complexity higher than 4. +- The complexity value of a commit or pull request is the sum of the cyclomatic complexity of the files that were changed in the commit or pull request and that have a high complexity increase, defined as an increase of 4 or more. Codacy displays complexity on the following places: diff --git a/docs/faq/repositories/how-do-i-reanalyze-my-repository.md b/docs/faq/repositories/how-do-i-reanalyze-my-repository.md index 629667a469..59391f6975 100644 --- a/docs/faq/repositories/how-do-i-reanalyze-my-repository.md +++ b/docs/faq/repositories/how-do-i-reanalyze-my-repository.md @@ -26,7 +26,7 @@ To reanalyze a branch in your repository: ![Selecting the last commit on a branch](images/reanalyze-repository-commits-list.png) -1. Click the icon next to the **Current status** of the commit to trigger a reanalysis. Codacy will display a message when the analysis is complete. +1. Click the **Reanalyze** link to trigger a reanalysis. Codacy will display the status of the reanalysis request. ![Reanalyzing a commit](images/reanalyze-repository-commit.png) @@ -38,7 +38,7 @@ To reanalyze a pull request in your repository: ![Selecting a pull request](images/reanalyze-repository-prs-list.png) -1. Click the icon next to the **Current status** of the pull request to trigger a reanalysis. Codacy will display a message when the analysis is complete. +1. Click the **Reanalyze** button to trigger a reanalysis. Codacy will display the status of the reanalysis request. ![Reanalyzing a pull request](images/reanalyze-repository-pr.png) diff --git a/docs/faq/repositories/images/reanalyze-repository-commit.png b/docs/faq/repositories/images/reanalyze-repository-commit.png index b4d7c3d154f97f28babfcfadff1133b3bf9ef38f..7b6c821ce1a50e4f136bde97f0beb6be4bc43f49 100644 GIT binary patch literal 22080 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