From b4c9b8d4798f890f02334770eb724715d65be03f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gr=C3=A9goire=20Aubert?= Date: Fri, 25 Aug 2017 15:09:16 +0200 Subject: [PATCH] Reorganize the measures page sidebar --- .../__snapshots__/utils-test.js.snap | 25 ++-- .../__tests__/utils-test.js | 3 +- .../apps/component-measures/config/domains.js | 46 ++++-- .../component-measures/sidebar/DomainFacet.js | 81 +++++----- .../__snapshots__/DomainFacet-test.js.snap | 140 ++++++++---------- .../__snapshots__/Sidebar-test.js.snap | 24 +-- .../main/js/apps/component-measures/utils.js | 33 +++-- server/sonar-web/src/main/js/helpers/l10n.ts | 18 ++- .../less/components/search-navigator.less | 9 ++ .../resources/org/sonar/l10n/core.properties | 29 +++- 10 files changed, 242 insertions(+), 166 deletions(-) diff --git a/server/sonar-web/src/main/js/apps/component-measures/__tests__/__snapshots__/utils-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/__tests__/__snapshots__/utils-test.js.snap index 782aa588005..979e672595d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/__tests__/__snapshots__/utils-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/__tests__/__snapshots__/utils-test.js.snap @@ -5,36 +5,36 @@ Array [ Object { "measures": Array [ Object { - "leak": "0.0999999999999943", + "leak": "70", "metric": Object { "domain": "Coverage", - "key": "coverage", - "name": "Coverage", - "type": "PERCENT", + "key": "lines_to_cover", + "name": "Lines to Cover", + "type": "INT", }, "periods": Array [ Object { "index": 1, - "value": "0.0999999999999943", + "value": "70", }, ], - "value": "99.3", + "value": "431", }, Object { - "leak": "70", + "leak": "0.0999999999999943", "metric": Object { "domain": "Coverage", - "key": "lines_to_cover", - "name": "Lines to Cover", - "type": "INT", + "key": "coverage", + "name": "Coverage", + "type": "PERCENT", }, "periods": Array [ Object { "index": 1, - "value": "70", + "value": "0.0999999999999943", }, ], - "value": "431", + "value": "99.3", }, ], "name": "Coverage", @@ -79,6 +79,7 @@ Array [ "type": "INT", }, }, + "overall_category", Object { "metric": Object { "key": "bugs", diff --git a/server/sonar-web/src/main/js/apps/component-measures/__tests__/utils-test.js b/server/sonar-web/src/main/js/apps/component-measures/__tests__/utils-test.js index bd275efccc8..603c04953e7 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/__tests__/utils-test.js +++ b/server/sonar-web/src/main/js/apps/component-measures/__tests__/utils-test.js @@ -74,7 +74,8 @@ describe('sortMeasures', () => { { metric: { key: 'reliability_remediation_effort', name: 'new_bugs', type: 'INT' } }, { metric: { key: 'new_reliability_remediation_effort', name: 'bugs', type: 'INT' } }, { metric: { key: 'new_bugs', name: 'new_bugs', type: 'INT' } }, - { metric: { key: 'bugs', name: 'bugs', type: 'INT' } } + { metric: { key: 'bugs', name: 'bugs', type: 'INT' } }, + 'overall_category' ]) ).toMatchSnapshot(); }); diff --git a/server/sonar-web/src/main/js/apps/component-measures/config/domains.js b/server/sonar-web/src/main/js/apps/component-measures/config/domains.js index 274f09a5e86..a3ffba8f56c 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/config/domains.js +++ b/server/sonar-web/src/main/js/apps/component-measures/config/domains.js @@ -18,62 +18,75 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ // @flow -export const domains = { +export const domains /*: { [string]: { categories?: Array, order: Array } }*/ = { Reliability: { + categories: ['new_code_category', 'overall_category'], order: [ - 'new_reliability_rating', + 'new_code_category', 'new_bugs', + 'new_reliability_rating', 'new_reliability_remediation_effort', - 'reliability_rating', + 'overall_category', 'bugs', + 'reliability_rating', 'reliability_remediation_effort' ] }, Security: { + categories: ['new_code_category', 'overall_category'], order: [ - 'new_security_rating', + 'new_code_category', 'new_vulnerabilities', + 'new_security_rating', 'new_security_remediation_effort', - 'security_rating', + 'overall_category', 'vulnerabilities', + 'security_rating', 'security_remediation_effort' ] }, Maintainability: { + categories: ['new_code_category', 'overall_category'], order: [ + 'new_code_category', 'new_code_smells', - 'new_maintainability_rating', 'new_technical_debt', 'new_sqale_debt_ratio', + 'new_maintainability_rating', + 'overall_category', 'code_smells', - 'sqale_rating', 'sqale_index', 'sqale_debt_ratio', + 'sqale_rating', 'effort_to_reach_maintainability_rating_a' ] }, Coverage: { + categories: ['new_code_category', 'overall_category', 'tests_category'], order: [ + 'new_code_category', 'new_coverage', - 'new_line_coverage', - 'new_branch_coverage', + 'new_lines_to_cover', 'new_uncovered_lines', + 'new_line_coverage', 'new_uncovered_conditions', - 'new_lines_to_cover', + 'new_branch_coverage', + 'overall_category', 'coverage', - 'line_coverage', - 'branch_coverage', + 'lines_to_cover', 'uncovered_lines', + 'line_coverage', 'uncovered_conditions', - 'lines_to_cover', + 'branch_coverage', + 'tests_category', 'tests', 'test_success', 'test_errors', @@ -85,14 +98,17 @@ export const domains = { }, Duplications: { + categories: ['new_code_category', 'overall_category'], order: [ + 'new_code_category', 'new_duplicated_lines_density', - 'new_duplicated_blocks', 'new_duplicated_lines', + 'new_duplicated_blocks', + 'overall_category', 'duplicated_lines_density', - 'duplicated_blocks', 'duplicated_lines', + 'duplicated_blocks', 'duplicated_files' ] }, diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.js b/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.js index ac8949d88f6..85d77e4bb34 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.js +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.js @@ -25,14 +25,18 @@ import FacetHeader from '../../../components/facet/FacetHeader'; import FacetItem from '../../../components/facet/FacetItem'; import FacetItemsList from '../../../components/facet/FacetItemsList'; import FacetMeasureValue from './FacetMeasureValue'; -import IssueTypeIcon from '../../../components/ui/IssueTypeIcon'; -import Tooltip from '../../../components/controls/Tooltip'; -import { filterMeasures, hasBubbleChart, hasFacetStat, sortMeasures } from '../utils'; import { + addMeasureCategories, + filterMeasures, + hasBubbleChart, + hasFacetStat, + sortMeasures +} from '../utils'; +import { + getLocalizedCategoryMetricName, getLocalizedMetricDomain, getLocalizedMetricName, - translate, - translateWithParameters + translate } from '../../../helpers/l10n'; /*:: import type { MeasureEnhanced } from '../../../components/measure/types'; */ @@ -59,26 +63,51 @@ export default class DomainFacet extends React.PureComponent { return measureSelected || overviewSelected; }; + renderItemsFacet = () => { + const { domain, selected } = this.props; + const items = addMeasureCategories(domain.name, filterMeasures(domain.measures)); + const hasCategories = items.some(item => typeof item === 'string'); + const sortedItems = sortMeasures(domain.name, items); + return sortedItems.map( + item => + typeof item === 'string' + ? + + {translate('component_measures.facet_category', item)} + + + : + {hasCategories + ? getLocalizedCategoryMetricName(item.metric) + : getLocalizedMetricName(item.metric)} + + } + onClick={this.props.onChange} + stat={hasFacetStat(item.metric.key) ? : null} + value={item.metric.key} + /> + ); + }; + renderOverviewFacet = () => { const { domain, selected } = this.props; if (!hasBubbleChart(domain.name)) { return null; } - const facetName = translateWithParameters( - 'component_measures.domain_x_overview', - getLocalizedMetricDomain(domain.name) - ); return ( - - {facetName} - - + + {translate('component_measures.domain_overview')} + } onClick={this.props.onChange} stat={} @@ -89,7 +118,6 @@ export default class DomainFacet extends React.PureComponent { render() { const { domain, selected } = this.props; - const measures = sortMeasures(domain.name, filterMeasures(domain.measures)); const helper = `component_measures.domain_facets.${domain.name}.help`; const translatedHelper = translate(helper); return ( @@ -99,32 +127,13 @@ export default class DomainFacet extends React.PureComponent { name={getLocalizedMetricDomain(domain.name)} onClick={this.handleHeaderClick} open={this.props.open} - values={this.hasFacetSelected(domain, measures, selected) ? 1 : 0} + values={this.hasFacetSelected(domain, domain.measures, selected) ? 1 : 0} /> {this.props.open && {this.renderOverviewFacet()} - {measures.map(measure => - - - - {getLocalizedMetricName(measure.metric)} - - - } - onClick={this.props.onChange} - stat={ - hasFacetStat(measure.metric.key) ? : null - } - value={measure.metric.key} - /> - )} + {this.renderItemsFacet()} } ); diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap index 8aff649b863..422bc79790f 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap @@ -14,17 +14,11 @@ exports[`should display facet item list 1`] = ` disabled={false} halfWidth={false} name={ - - - component_measures.domain_x_overview.Reliability - - + component_measures.domain_overview + } onClick={[Function]} stat={ @@ -34,26 +28,26 @@ exports[`should display facet item list 1`] = ` } value="Reliability" /> + + + component_measures.facet_category.new_code_category + + - - - New Bugs - - + New Bugs + } onClick={[Function]} stat={ @@ -79,26 +73,26 @@ exports[`should display facet item list 1`] = ` } value="new_bugs" /> + + + component_measures.facet_category.overall_category + + - - - Bugs - - + Bugs + } onClick={[Function]} stat={ @@ -143,17 +137,11 @@ exports[`should display facet item list with bugs selected 1`] = ` disabled={false} halfWidth={false} name={ - - - component_measures.domain_x_overview.Reliability - - + component_measures.domain_overview + } onClick={[Function]} stat={ @@ -163,26 +151,26 @@ exports[`should display facet item list with bugs selected 1`] = ` } value="Reliability" /> + + + component_measures.facet_category.new_code_category + + - - - New Bugs - - + New Bugs + } onClick={[Function]} stat={ @@ -208,26 +196,26 @@ exports[`should display facet item list with bugs selected 1`] = ` } value="new_bugs" /> + + + component_measures.facet_category.overall_category + + - - - Bugs - - + Bugs + } onClick={[Function]} stat={ diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap index e4d5357f9c7..2472444bb70 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap @@ -14,36 +14,36 @@ exports[`should display two facets 1`] = ` Object { "measures": Array [ Object { - "leak": "0.0999999999999943", + "leak": "70", "metric": Object { "domain": "Coverage", - "key": "coverage", - "name": "Coverage", - "type": "PERCENT", + "key": "lines_to_cover", + "name": "Lines to Cover", + "type": "INT", }, "periods": Array [ Object { "index": 1, - "value": "0.0999999999999943", + "value": "70", }, ], - "value": "99.3", + "value": "431", }, Object { - "leak": "70", + "leak": "0.0999999999999943", "metric": Object { "domain": "Coverage", - "key": "lines_to_cover", - "name": "Lines to Cover", - "type": "INT", + "key": "coverage", + "name": "Coverage", + "type": "PERCENT", }, "periods": Array [ Object { "index": 1, - "value": "70", + "value": "0.0999999999999943", }, ], - "value": "431", + "value": "99.3", }, ], "name": "Coverage", diff --git a/server/sonar-web/src/main/js/apps/component-measures/utils.js b/server/sonar-web/src/main/js/apps/component-measures/utils.js index b3db6ba1baa..23e7871a6f1 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/utils.js +++ b/server/sonar-web/src/main/js/apps/component-measures/utils.js @@ -63,19 +63,33 @@ export function filterMeasures( export function sortMeasures( domainName /*: string */, - measures /*: Array */ -) /*: Array */ { + measures /*: Array */ +) /*: Array */ { const config = domains[domainName] || {}; const configOrder = config.order || []; return sortBy(measures, [ - measure => { - const idx = configOrder.indexOf(measure.metric.key); + item => { + if (typeof item === 'string') { + return configOrder.indexOf(item); + } + const idx = configOrder.indexOf(item.metric.key); return idx >= 0 ? idx : configOrder.length; }, - measure => getLocalizedMetricName(measure.metric) + item => (typeof item === 'string' ? item : getLocalizedMetricName(item.metric)) ]); } +export function addMeasureCategories( + domainName /*: string */, + measures /*: Array */ +) /*: Array */ { + const categories = domains[domainName] && domains[domainName].categories; + if (categories && categories.length > 0) { + return [...categories, ...measures]; + } + return measures; +} + export function enhanceComponent( component /*: Component */, metric /*: ?Metric */, @@ -98,11 +112,10 @@ export function isViewType(component /*: Component */) /*: boolean */ { } export const groupByDomains = memoize((measures /*: Array */) => { - const domains = toPairs(groupBy(measures, measure => measure.metric.domain)).map(r => { - const [name, measures] = r; - const sortedMeasures = sortBy(measures, measure => getLocalizedMetricName(measure.metric)); - return { name, measures: sortedMeasures }; - }); + const domains = toPairs(groupBy(measures, measure => measure.metric.domain)).map(r => ({ + name: r[0], + measures: r[1] + })); return sortBy(domains, [ domain => { diff --git a/server/sonar-web/src/main/js/helpers/l10n.ts b/server/sonar-web/src/main/js/helpers/l10n.ts index 5a1e4bcb190..b8959977de8 100644 --- a/server/sonar-web/src/main/js/helpers/l10n.ts +++ b/server/sonar-web/src/main/js/helpers/l10n.ts @@ -142,10 +142,22 @@ export function getLocalizedDashboardName(baseName: string) { return l10nLabel !== l10nKey ? l10nLabel : baseName; } -export function getLocalizedMetricName(metric: { key: string; name: string }) { - const bundleKey = `metric.${metric.key}.name`; +export function getLocalizedMetricName( + metric: { key: string; name: string }, + short?: boolean +): string { + const bundleKey = `metric.${metric.key}.${short ? 'short_name' : 'name'}`; + const fromBundle = translate(bundleKey); + if (fromBundle === bundleKey) { + return short ? getLocalizedMetricName(metric) : metric.name; + } + return fromBundle; +} + +export function getLocalizedCategoryMetricName(metric: { key: string; name: string }) { + const bundleKey = `metric.${metric.key}.extra_short_name`; const fromBundle = translate(bundleKey); - return fromBundle !== bundleKey ? fromBundle : metric.name; + return fromBundle === bundleKey ? getLocalizedMetricName(metric, true) : fromBundle; } export function getLocalizedMetricDomain(domainName: string) { diff --git a/server/sonar-web/src/main/less/components/search-navigator.less b/server/sonar-web/src/main/less/components/search-navigator.less index b6c203bdbcc..84f686f4ad2 100644 --- a/server/sonar-web/src/main/less/components/search-navigator.less +++ b/server/sonar-web/src/main/less/components/search-navigator.less @@ -146,6 +146,15 @@ } } + &.facet-category { + opacity: 1; + cursor: default; + + .facet-name { + color: @secondFontColor; + } + } + .facet-name { line-height: 16px; background-color: @barBackgroundColor; diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index d5cc057a13a..a99fd9f00c6 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -2153,12 +2153,14 @@ metric.duplicated_lines_density.abbreviation=Dup. lines(%) metric.duplicated_lines_density.description=Duplicated lines balanced by statements metric.duplicated_lines_density.name=Duplicated Lines (%) metric.duplicated_lines_density.short_name=Duplications +metric.duplicated_lines_density.extra_short_name=Density metric.duplications_data.description=Duplications details metric.duplications_data.name=Duplication Details metric.efficiency.description=Efficiency metric.efficiency.name=Efficiency metric.effort_to_reach_maintainability_rating_a.description=Effort to reach maintainability rating A metric.effort_to_reach_maintainability_rating_a.name=Effort to Reach Maintainability Rating A +metric.effort_to_reach_maintainability_rating_a.extra_short_name=Effort to Reach A metric.false_positive_issues.description=False positive issues metric.false_positive_issues.name=False Positive Issues metric.files.description=Number of files @@ -2247,6 +2249,7 @@ metric.new_blocker_violations.description=New Blocker issues metric.new_blocker_violations.name=New Blocker Issues metric.new_branch_coverage.description=Condition coverage of new/changed code metric.new_branch_coverage.name=Condition Coverage on New Code +metric.new_branch_coverage.extra_short_name=Condition Coverage metric.new_bugs.description=New Bugs metric.new_bugs.name=New Bugs metric.new_bugs.short_name=Bugs @@ -2261,12 +2264,15 @@ metric.new_coverage.short_name=Coverage metric.new_critical_violations.description=New Critical issues metric.new_critical_violations.name=New Critical Issues metric.new_duplicated_blocks.name=Duplicated Blocks on New Code +metric.new_duplicated_blocks.extra_short_name=Duplicated Blocks metric.new_duplicated_blocks.description=Duplicated blocks on new code metric.new_duplicated_lines.name=Duplicated Lines on New Code +metric.new_duplicated_lines.extra_short_name=Duplicated Lines metric.new_duplicated_lines.description=Duplicated Lines on New Code metric.new_duplicated_lines_density.description=Duplicated lines on new code balanced by statements metric.new_duplicated_lines_density.name=Duplicated Lines on New Code (%) metric.new_duplicated_lines_density.short_name=Duplications +metric.new_duplicated_lines_density.extra_short_name=Density metric.new_info_violations.description=New Info issues metric.new_info_violations.name=New Info Issues metric.new_it_branch_coverage.description=Integration tests condition coverage of new/changed code @@ -2285,10 +2291,13 @@ metric.new_it_uncovered_lines.description=New lines that are not covered by inte metric.new_it_uncovered_lines.name=Uncovered Lines by IT on New Code metric.new_lines_to_cover.description=Lines to cover on new code metric.new_lines_to_cover.name=Lines to Cover on New Code +metric.new_lines_to_cover.extra_short_name=Lines to Cover metric.new_line_coverage.description=Line coverage of added/changed code metric.new_line_coverage.name=Line Coverage on New Code +metric.new_line_coverage.extra_short_name=Line Coverage metric.new_maintainability_rating.description=Maintainability rating on new code metric.new_maintainability_rating.name=Maintainability Rating on New Code +metric.new_maintainability_rating.extra_short_name=Rating metric.new_major_violations.description=New Major issues metric.new_major_violations.name=New Major Issues metric.new_minor_violations.description=New Minor issues @@ -2312,22 +2321,30 @@ metric.new_overall_uncovered_lines.description=New lines that are not covered by metric.new_overall_uncovered_lines.name=Overall Uncovered Lines on New Code metric.new_reliability_rating.description=Reliability rating on new code metric.new_reliability_rating.name=Reliability Rating on New Code +metric.new_reliability_rating.extra_short_name=Rating metric.new_reliability_remediation_effort.description=Reliability remediation effort on new code metric.new_reliability_remediation_effort.name=Reliability Remediation Effort on New Code +metric.new_reliability_remediation_effort.extra_short_name=Remediation Effort metric.new_security_rating.description=Security rating on new code metric.new_security_rating.name=Security Rating on New Code +metric.new_security_rating.extra_short_name=Rating metric.new_security_remediation_effort.description=Security remediation effort on new code metric.new_security_remediation_effort.name=Security Remediation Effort on New Code +metric.new_security_remediation_effort.extra_short_name=Remediation Effort metric.new_sqale_debt_ratio.description=Technical Debt Ratio of new/changed code. metric.new_sqale_debt_ratio.name=Technical Debt Ratio on New Code metric.new_sqale_debt_ratio.short_name=Debt Ratio on new code +metric.new_sqale_debt_ratio.extra_short_name=Debt Ratio metric.new_technical_debt.description=Added technical debt metric.new_technical_debt.name=Added Technical Debt metric.new_technical_debt.short_name=Added Debt +metric.new_technical_debt.extra_short_name=Debt metric.new_uncovered_conditions.description=Uncovered conditions on new code metric.new_uncovered_conditions.name=Uncovered Conditions on New Code +metric.new_uncovered_conditions.extra_short_name=Uncovered Conditions metric.new_uncovered_lines.description=Uncovered lines on new code metric.new_uncovered_lines.name=Uncovered Lines on New Code +metric.new_uncovered_lines.extra_short_name=Uncovered Lines metric.new_violations.description=New issues metric.new_violations.name=New Issues metric.new_vulnerabilities.description=New Vulnerabilities @@ -2398,6 +2415,7 @@ metric.reliability.description=Reliability metric.reliability.name=Reliability metric.reliability_rating.description=Reliability rating metric.reliability_rating.name=Reliability Rating +metric.reliability_rating.extra_short_name=Rating metric.reliability_rating.tooltip.A=Reliability rating is A when there are no bugs. metric.reliability_rating.tooltip.B=Reliability rating is B when there is at least one minor bug. metric.reliability_rating.tooltip.C=Reliability rating is C when there is at least one major bug. @@ -2405,6 +2423,7 @@ metric.reliability_rating.tooltip.D=Reliability rating is D when there is at lea metric.reliability_rating.tooltip.E=Reliability rating is E when there is at least one blocker bug. metric.reliability_remediation_effort.description=Reliability Remediation Effort metric.reliability_remediation_effort.name=Reliability Remediation Effort +metric.reliability_remediation_effort.extra_short_name=Remediation Effort metric.reopened_issues.description=Reopened issues metric.reopened_issues.name=Reopened Issues metric.revisions_by_line.description=Revisions by line @@ -2415,6 +2434,7 @@ metric.rfc_distribution.description=Class distribution /RFC metric.rfc_distribution.name=Class Distribution / RFC metric.security_rating.description=Security rating metric.security_rating.name=Security Rating +metric.security_rating.extra_short_name=Rating metric.security_rating.tooltip.A=Security rating is A when there are no vulnerabilities. metric.security_rating.tooltip.B=Security rating is B when there is at least one minor vulnerability. metric.security_rating.tooltip.C=Security rating is C when there is at least one major vulnerability. @@ -2422,6 +2442,7 @@ metric.security_rating.tooltip.D=Security rating is D when there is at least one metric.security_rating.tooltip.E=Security rating is E when there is at least one blocker vulnerability. metric.security_remediation_effort.description=Security remediation effort metric.security_remediation_effort.name=Security Remediation Effort +metric.security_remediation_effort.extra_short_name=Remediation Effort metric.skipped_tests.abbreviation=Skipped UTs metric.skipped_tests.description=Number of skipped unit tests metric.skipped_tests.name=Skipped Unit Tests @@ -2431,9 +2452,10 @@ metric.sqale_debt_ratio.name=Technical Debt Ratio metric.sqale_debt_ratio.short_name=Debt Ratio metric.sqale_index.description=Total effort (in days) to fix all the issues on the component and therefore to comply to all the requirements. metric.sqale_index.name=Technical Debt -metric.sqale_index.short_name=Effort +metric.sqale_index.short_name=Debt metric.sqale_rating.description=A-to-E rating based on the technical debt ratio metric.sqale_rating.name=Maintainability Rating +metric.sqale_rating.extra_short_name=Rating metric.sqale_rating.tooltip=Maintainability rating is {0} when the technical debt ratio is greater than {1} metric.sqale_rating.tooltip.A=Maintainability rating is A when the technical debt ratio is less than {0} metric.statements.abbreviation=Stmts @@ -2903,6 +2925,7 @@ code.open_component_page=Open Component's Page component_measures.all_measures=All Measures component_measures.domain_measures={0} Measures component_measures.domain_x_overview={0} Overview +component_measures.domain_overview=Overview component_measures.back_to_list=Back to List component_measures.files=files component_measures.show_metric_history=Show history of this metric @@ -2935,6 +2958,10 @@ component_measures.domain_facets.Maintainability.help=Issues in this domain mark component_measures.domain_facets.Security.help=Issues in this domain mark potential weaknesses to hackers. component_measures.domain_facets.Complexity.help=How simple or complicated the control flow of the application is. Cyclomatic Complexity measures the minimum number of test cases requiref for full test coverage. Cognitive Complexity is a measure of how difficult the application is to Understand +component_measures.facet_category.new_code_category=On new code +component_measures.facet_category.overall_category=Overall +component_measures.facet_category.tests_category=Tests + #------------------------------------------------------------------------------ # # ABOUT PAGE -- 2.39.5