]> source.dussan.org Git - sonarqube.git/commitdiff
Feature/pm/sonar 10554 display issues from external engine (#155)
authorPascal Mugnier <pascal.mugnier@sonarsource.com>
Wed, 18 Apr 2018 14:09:17 +0000 (16:09 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 26 Apr 2018 18:20:52 +0000 (20:20 +0200)
server/sonar-web/src/main/js/app/styles/components/badges.css
server/sonar-web/src/main/js/app/styles/components/issues.css
server/sonar-web/src/main/js/app/styles/init/misc.css
server/sonar-web/src/main/js/app/types.ts
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsDescription.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsMeta.tsx
server/sonar-web/src/main/js/components/issue/components/IssueMessage.js
server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js
server/sonar-web/src/main/js/components/issue/types.js
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index 1dd87fe7d6484ab1d0eebd75574d3ad5115a6b46..c7c42cc6d598811079a2e35bedda0757d1522eae 100644 (file)
@@ -70,8 +70,8 @@ a.badge {
 }
 
 .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 {
index 686167c867bfe38ce75240eb65f19362d07f37e2..3ff1e99190224538d634365e40eb13a3fd1497eb 100644 (file)
   overflow: hidden;
 }
 
+.issue-message .button-link {
+  height: 16px;
+}
+
 .issue-rule {
   vertical-align: top;
   margin-top: 2px;
index cecd341e962a1c3239ad6a2d7d752e89762ddd72..80c0438930e9a608e79941227cab8c7b11530182 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 .vertical-top {
-  vertical-align: top;
+  vertical-align: top !important;
 }
 
 .vertical-bottom {
-  vertical-align: bottom;
+  vertical-align: bottom !important;
 }
 
 .vertical-middle {
-  vertical-align: middle;
+  vertical-align: middle !important;
 }
 
 .vertical-text-top {
-  vertical-align: text-top;
+  vertical-align: text-top !important;
 }
 
 .nowrap {
index 8f6f6f5da0f2dd9cd0a65dda87d1f41f991251cb..7d32fffa2ba17d3b1e02986a271e072c95e5a5f3 100644 (file)
@@ -218,6 +218,7 @@ export interface Issue {
   componentUuid: string;
   creationDate: string;
   effort?: string;
+  fromExternalRule?: boolean;
   key: string;
   flows: FlowLocation[][];
   line?: number;
@@ -400,6 +401,7 @@ export interface RuleDetails extends Rule {
   htmlDesc?: string;
   htmlNote?: string;
   internalKey?: string;
+  isExternal?: boolean;
   mdDesc?: string;
   mdNote?: string;
   remFnBaseEffort?: string;
index c353a8c5c77f9483b58a5bfa45fd0f1c19d5e777..b6e5b8455ef39588a72ac38f2162510cda67eeaa 100644 (file)
@@ -23,7 +23,7 @@ import { updateRule } from '../../../api/rules';
 import { RuleDetails } from '../../../app/types';
 import MarkdownTips from '../../../components/common/MarkdownTips';
 import { Button, ResetButtonLink } from '../../../components/ui/buttons';
-import { translate } from '../../../helpers/l10n';
+import { translate, translateWithParameters } from '../../../helpers/l10n';
 
 interface Props {
   canWrite: boolean | undefined;
@@ -192,10 +192,16 @@ export default class RuleDetailsDescription extends React.PureComponent<Props, S
 
     return (
       <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 && (
           <div className="coding-rules-detail-description coding-rules-detail-description-extra">
index 87359ccaf3f088979c8f0ead6f911276127cc277..e5992257d0e3733d31d67aac27934a65824ceaee 100644 (file)
@@ -225,11 +225,13 @@ export default class RuleDetailsMeta extends React.PureComponent<Props, State> {
         <header className="page-header">
           <div className="pull-right">
             <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 && (
               <SimilarRulesFilter onFilterChange={this.props.onFilterChange} rule={ruleDetails} />
             )}
index 515edd9b3babaf45979aa7d9b1a6bae2c500b868..888d7f2d521c66f6629f441a70fd141de86d9123 100644 (file)
 // @flow
 import React from 'react';
 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 {
   /*:: props: {
+    engine?: string;
     message: string,
-    rule: string,
-    organization: string
+    organization: string,
+    rule: string
   };
   */
 
@@ -52,6 +54,14 @@ export default class IssueMessage extends React.PureComponent {
           aria-label={translate('issue.rule_details')}
           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>
     );
   }
index 3dbe2919e6e1c2e86f499b3b75621b11089533ef..0dad342b1b50b6bc29433da7ed9ae38c36dc9b4a 100644 (file)
@@ -75,7 +75,12 @@ export default function IssueTitleBar(props /*: Props */) {
 
   return (
     <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">
         <ul className="list-inline issue-meta-list">
@@ -84,8 +89,8 @@ export default function IssueTitleBar(props /*: Props */) {
               creationDate={issue.creationDate}
               isOpen={props.currentPopup === 'changelog'}
               issue={issue}
-              togglePopup={props.togglePopup}
               onFail={props.onFail}
+              togglePopup={props.togglePopup}
             />
           </li>
           {issue.textRange != null && (
@@ -120,9 +125,9 @@ export default function IssueTitleBar(props /*: Props */) {
               <SimilarIssuesFilter
                 isOpen={props.currentPopup === 'similarIssues'}
                 issue={issue}
-                togglePopup={props.togglePopup}
                 onFail={props.onFail}
                 onFilter={props.onFilter}
+                togglePopup={props.togglePopup}
               />
             </li>
           )}
index 6b0ee3a90af3e2cb45248663cf145925e1af1b32..2a5ce7ed3face3467fbe9f7833c4a6c3e7b44446 100644 (file)
@@ -65,6 +65,7 @@ export type Issue = {
   componentUuid: string,
   creationDate: string,
   effort?: string,
+  externalRuleEngine?: string,
   key: string,
   flows: Array<Array<FlowLocation>>,
   line?: number,
index b1f662821025647bfcfae5080eee94a017cc1397..0a5d7f441210528e69712c5ddfdea4cb5aed9c7e 100644 (file)
@@ -610,6 +610,8 @@ issue.effort=Effort:
 issue.x_effort={0} effort
 issue.filter_similar_issues=Filter Similar Issues
 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.bulk_change=All Issues ({0})
 issues.bulk_change_selected=Selected Issues ({0})