Przeglądaj źródła

Feature/pm/sonar 10554 display issues from external engine (#155)

tags/7.5
Pascal Mugnier 6 lat temu
rodzic
commit
4c9a714da9

+ 2
- 2
server/sonar-web/src/main/js/app/styles/components/badges.css Wyświetl plik

} }


.badge-tiny-height { .badge-tiny-height {
height: var(--tinyControlHeight);
line-height: calc(var(--tinyControlHeight) - 1px);
height: var(--tinyControlHeight) !important;
line-height: calc(var(--tinyControlHeight) - 1px) !important;
} }


.badge-muted { .badge-muted {

+ 4
- 0
server/sonar-web/src/main/js/app/styles/components/issues.css Wyświetl plik

overflow: hidden; overflow: hidden;
} }


.issue-message .button-link {
height: 16px;
}

.issue-rule { .issue-rule {
vertical-align: top; vertical-align: top;
margin-top: 2px; margin-top: 2px;

+ 4
- 4
server/sonar-web/src/main/js/app/styles/init/misc.css Wyświetl plik

* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
.vertical-top { .vertical-top {
vertical-align: top;
vertical-align: top !important;
} }


.vertical-bottom { .vertical-bottom {
vertical-align: bottom;
vertical-align: bottom !important;
} }


.vertical-middle { .vertical-middle {
vertical-align: middle;
vertical-align: middle !important;
} }


.vertical-text-top { .vertical-text-top {
vertical-align: text-top;
vertical-align: text-top !important;
} }


.nowrap { .nowrap {

+ 2
- 0
server/sonar-web/src/main/js/app/types.ts Wyświetl plik

componentUuid: string; componentUuid: string;
creationDate: string; creationDate: string;
effort?: string; effort?: string;
fromExternalRule?: boolean;
key: string; key: string;
flows: FlowLocation[][]; flows: FlowLocation[][];
line?: number; line?: number;
htmlDesc?: string; htmlDesc?: string;
htmlNote?: string; htmlNote?: string;
internalKey?: string; internalKey?: string;
isExternal?: boolean;
mdDesc?: string; mdDesc?: string;
mdNote?: string; mdNote?: string;
remFnBaseEffort?: string; remFnBaseEffort?: string;

+ 11
- 5
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsDescription.tsx Wyświetl plik

import { RuleDetails } from '../../../app/types'; import { RuleDetails } from '../../../app/types';
import MarkdownTips from '../../../components/common/MarkdownTips'; import MarkdownTips from '../../../components/common/MarkdownTips';
import { Button, ResetButtonLink } from '../../../components/ui/buttons'; import { Button, ResetButtonLink } from '../../../components/ui/buttons';
import { translate } from '../../../helpers/l10n';
import { translate, translateWithParameters } from '../../../helpers/l10n';


interface Props { interface Props {
canWrite: boolean | undefined; canWrite: boolean | undefined;


return ( return (
<div className="js-rule-description"> <div className="js-rule-description">
<div
className="coding-rules-detail-description rule-desc markdown"
dangerouslySetInnerHTML={{ __html: ruleDetails.htmlDesc || '' }}
/>
{ruleDetails.isExternal ? (
<div className="coding-rules-detail-description rule-desc markdown">
{translateWithParameters('issue.external_issue_description', ruleDetails.name)}
</div>
) : (
<div
className="coding-rules-detail-description rule-desc markdown"
dangerouslySetInnerHTML={{ __html: ruleDetails.htmlDesc || '' }}
/>
)}


{!ruleDetails.templateKey && ( {!ruleDetails.templateKey && (
<div className="coding-rules-detail-description coding-rules-detail-description-extra"> <div className="coding-rules-detail-description coding-rules-detail-description-extra">

+ 7
- 5
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsMeta.tsx Wyświetl plik

<header className="page-header"> <header className="page-header">
<div className="pull-right"> <div className="pull-right">
<span className="note text-middle">{ruleDetails.key}</span> <span className="note text-middle">{ruleDetails.key}</span>
<Link
className="coding-rules-detail-permalink link-no-underline spacer-left text-middle"
to={getRuleUrl(ruleDetails.key, this.props.organization)}>
<LinkIcon />
</Link>
{!ruleDetails.isExternal && (
<Link
className="coding-rules-detail-permalink link-no-underline spacer-left text-middle"
to={getRuleUrl(ruleDetails.key, this.props.organization)}>
<LinkIcon />
</Link>
)}
{!this.props.hideSimilarRulesFilter && ( {!this.props.hideSimilarRulesFilter && (
<SimilarRulesFilter onFilterChange={this.props.onFilterChange} rule={ruleDetails} /> <SimilarRulesFilter onFilterChange={this.props.onFilterChange} rule={ruleDetails} />
)} )}

+ 13
- 3
server/sonar-web/src/main/js/components/issue/components/IssueMessage.js Wyświetl plik

// @flow // @flow
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { translate } from '../../../helpers/l10n';
import Tooltip from '../../controls/Tooltip';
import { translate, translateWithParameters } from '../../../helpers/l10n';


export default class IssueMessage extends React.PureComponent { export default class IssueMessage extends React.PureComponent {
/*:: props: { /*:: props: {
engine?: string;
message: string, message: string,
rule: string,
organization: string
organization: string,
rule: string
}; };
*/ */


aria-label={translate('issue.rule_details')} aria-label={translate('issue.rule_details')}
onClick={this.handleClick} onClick={this.handleClick}
/> />
{this.props.engine && (
<Tooltip
overlay={translateWithParameters('issue.from_external_rule_engine', this.props.engine)}>
<div className="outline-badge badge-tiny-height spacer-left vertical-text-top">
{this.props.engine}
</div>
</Tooltip>
)}
</div> </div>
); );
} }

+ 8
- 3
server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js Wyświetl plik



return ( return (
<div className="issue-row"> <div className="issue-row">
<IssueMessage message={issue.message} rule={issue.rule} organization={issue.organization} />
<IssueMessage
engine={issue.externalRuleEngine}
message={issue.message}
organization={issue.organization}
rule={issue.rule}
/>


<div className="issue-row-meta"> <div className="issue-row-meta">
<ul className="list-inline issue-meta-list"> <ul className="list-inline issue-meta-list">
creationDate={issue.creationDate} creationDate={issue.creationDate}
isOpen={props.currentPopup === 'changelog'} isOpen={props.currentPopup === 'changelog'}
issue={issue} issue={issue}
togglePopup={props.togglePopup}
onFail={props.onFail} onFail={props.onFail}
togglePopup={props.togglePopup}
/> />
</li> </li>
{issue.textRange != null && ( {issue.textRange != null && (
<SimilarIssuesFilter <SimilarIssuesFilter
isOpen={props.currentPopup === 'similarIssues'} isOpen={props.currentPopup === 'similarIssues'}
issue={issue} issue={issue}
togglePopup={props.togglePopup}
onFail={props.onFail} onFail={props.onFail}
onFilter={props.onFilter} onFilter={props.onFilter}
togglePopup={props.togglePopup}
/> />
</li> </li>
)} )}

+ 1
- 0
server/sonar-web/src/main/js/components/issue/types.js Wyświetl plik

componentUuid: string, componentUuid: string,
creationDate: string, creationDate: string,
effort?: string, effort?: string,
externalRuleEngine?: string,
key: string, key: string,
flows: Array<Array<FlowLocation>>, flows: Array<Array<FlowLocation>>,
line?: number, line?: number,

+ 2
- 0
sonar-core/src/main/resources/org/sonar/l10n/core.properties Wyświetl plik

issue.x_effort={0} effort issue.x_effort={0} effort
issue.filter_similar_issues=Filter Similar Issues issue.filter_similar_issues=Filter Similar Issues
issue.this_issue_involves_x_code_locations=This issue involves {0} code location(s) issue.this_issue_involves_x_code_locations=This issue involves {0} code location(s)
issue.from_external_rule_engine=Issue detected by an external rule engine: {0}
issue.external_issue_description=This is external rule {0}. No details are available.
issues.return_to_list=Return to List issues.return_to_list=Return to List
issues.bulk_change=All Issues ({0}) issues.bulk_change=All Issues ({0})
issues.bulk_change_selected=Selected Issues ({0}) issues.bulk_change_selected=Selected Issues ({0})

Ładowanie…
Anuluj
Zapisz