]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5209 Filter lines by coverage
authorStas Vilchik <vilchiks@gmail.com>
Thu, 15 May 2014 13:05:44 +0000 (15:05 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 15 May 2014 13:05:51 +0000 (15:05 +0200)
sonar-server/src/main/coffee/component-viewer/header.coffee
sonar-server/src/main/coffee/component-viewer/main.coffee
sonar-server/src/main/coffee/component-viewer/source.coffee
sonar-server/src/main/hbs/component-viewer/header/_coverage-header.hbs

index 322787ef0f62a4b28038c98e59569bc60e018a85..9e2d5140327837aab595efb5b1a1d66f565a038a 100644 (file)
@@ -27,6 +27,9 @@ define [
       'click .js-toggle-duplications': 'toggleDuplications'
       'click .js-toggle-scm': 'toggleSCM'
 
+      'click .js-filter-line-to-cover': 'filterByLinesToCover'
+      'click .js-filter-uncovered-lines': 'filterByUncoveredLines'
+
 
     initialize: (options) ->
 #      @listenTo options.main.settings, 'change', @changeSettings
@@ -84,6 +87,14 @@ define [
       @toggleSetting e, @options.main.showWorkspace, @options.main.hideWorkspace
 
 
+    filterByLinesToCover: ->
+      @options.main.filterLinesByLinesToCover()
+
+
+    filterByUncoveredLines: ->
+      @options.main.filterLinesByUncoveredLines()
+
+
     serializeData: ->
       component = @options.main.component.toJSON()
       if component.measures
index 93d936e0729ecaad0030e446c6203241c2db5d98..f5ec52ee89ef8f016f501c875951cfdae37808f2 100644 (file)
@@ -17,11 +17,15 @@ define [
 ) ->
 
   $ = jQuery
+
   API_COMPONENT = "#{baseUrl}/api/sources/app"
   API_SOURCES = "#{baseUrl}/api/sources/show"
   API_COVERAGE = "#{baseUrl}/api/coverage/show"
   API_SCM = "#{baseUrl}/api/sources/scm"
 
+  LINES_AROUND_ISSUE = 4
+  LINES_AROUND_COVERED_LINE = 1
+
 
 
   class ComponentViewer extends Marionette.Layout
@@ -86,18 +90,12 @@ define [
       $.get API_SCM, key: key, (data) =>
         @source.set scm: data.scm
 
+
     requestCoverage: (key) ->
       $.get API_COVERAGE, key: key, (data) =>
         @source.set coverage: data.coverage
 
 
-    extractIssues: (data) ->
-      issuesMeasures = {}
-      data[0].msr.forEach (q) ->
-        issuesMeasures[q.key] = q.frmt_val
-      @component.set 'issuesMeasures', issuesMeasures
-
-
     open: (key) ->
       @workspace.reset [ key: key ]
       @_open key
@@ -124,7 +122,6 @@ define [
         @requestCoverage(@key).done => @sourceView.render()
       else
         @sourceView.render()
-      @sourceView.render()
 
 
     hideCoverage: ->
@@ -146,7 +143,9 @@ define [
       @settings.set 'issues', true
       if _.isArray(issues) && issues.length > 0
         @source.set 'issues', issues
-      @sourceView.render()
+        @filterLinesByIssues()
+      else
+        @sourceView.render()
 
 
     hideIssues: ->
@@ -177,6 +176,51 @@ define [
       @sourceView.render()
 
 
+    filterLinesByIssues: ->
+      issues = @source.get 'issues'
+      @sourceView.resetShowBlocks()
+      issues.forEach (issue) =>
+        line = issue.line || 0
+        @sourceView.addShowBlock line - LINES_AROUND_ISSUE, line + LINES_AROUND_ISSUE
+      @sourceView.render()
+
+
+    filterLinesByLinesToCover: ->
+      unless @source.has 'coverage'
+        @requestCoverage(@key).done => @_filterLinesByLinesToCover()
+      else
+        @_filterLinesByLinesToCover()
+
+
+    _filterLinesByLinesToCover: ->
+      coverage = @source.get 'coverage'
+      @settings.set 'coverage', true
+      @sourceView.resetShowBlocks()
+      coverage.forEach (c) =>
+        if c[1]? && c[1]
+          line = c[0]
+          @sourceView.addShowBlock line - LINES_AROUND_COVERED_LINE, line + LINES_AROUND_COVERED_LINE
+      @sourceView.render()
+
+
+    filterLinesByUncoveredLines: ->
+      unless @source.has 'coverage'
+        @requestCoverage(@key).done => @_filterLinesByUncoveredLines()
+      else
+        @_filterLinesByUncoveredLines()
+
+
+    _filterLinesByUncoveredLines: ->
+      coverage = @source.get 'coverage'
+      @settings.set 'coverage', true
+      @sourceView.resetShowBlocks()
+      coverage.forEach (c) =>
+        if c[1]? && !c[1]
+          line = c[0]
+          @sourceView.addShowBlock line - LINES_AROUND_COVERED_LINE, line + LINES_AROUND_COVERED_LINE
+      @sourceView.render()
+
+
     addTransition: (key, transition, optionsForCurrent, options) ->
       if optionsForCurrent?
         last = @workspace.at(@workspace.length - 1)
index 736ad552ae9cfc9c0c99f439e7007ee5ecdee891..b5b01020a8bc0c5fdbf22f8c1038b6f383635fe1 100644 (file)
@@ -47,6 +47,14 @@ define [
       @showBlocks = []
 
 
+    resetShowBlocks: ->
+      @showBlocks = []
+
+
+    addShowBlock: (from, to) ->
+      @showBlocks.push from: from, to: to
+
+
     onRender: ->
       @delegateEvents()
       @showSettings = false
@@ -187,23 +195,8 @@ define [
       source.forEach (sourceLine) =>
         show = false
         line = sourceLine.lineNumber
-
         @showBlocks.forEach (block) ->
-          if block.from <= line && block.to >= line
-            show = true
-
-        if @options.main.settings.get('issues') && !show
-          @model.get('issues')?.forEach (issue) ->
-            currentLine = issue.line || 0
-            if (currentLine - LINES_AROUND_ISSUE) <= line && (currentLine + LINES_AROUND_ISSUE) >= line
-              show = true
-
-        if @options.main.settings.get('coverage') && !show
-          @model.get('coverage')?.forEach (s) ->
-            currentLine = s[0]
-            if (currentLine - LINES_AROUND_COVERED_LINE) <= line && (currentLine + LINES_AROUND_COVERED_LINE) >= line
-              show = true
-
+          show = true if block.from <= line && block.to >= line
         _.extend sourceLine, show: show
       source
 
index 5f380f26c4674d8cf3db3a95856223590abb90fe..02fd444f3eba07ac181a85811fbb965379e2d778 100644 (file)
@@ -2,13 +2,25 @@
   <div class="component-viewer-header-expanded-bar-section-title">Unit Tests</div>
   <ul class="component-viewer-header-expanded-bar-section-list">
     <li><a class="item">
-      <span>Line Coverage</span>
+      <span>Line coverage</span>
       <span class="number">93.6%</span>
     </a></li>
+    <li><a class="item js-filter-line-to-cover">
+      <span>Lines to cover</span>
+      <span class="number">171</span>
+    </a></li>
+    <li><a class="item js-filter-uncovered-lines">
+      <span>Uncovered lines</span>
+      <span class="number">16</span>
+    </a></li>
     <li><a class="item">
-      <span>Branch Coverage</span>
+      <span>Branch coverage</span>
       <span class="number">100%</span>
     </a></li>
+    <li><a class="item">
+      <span>Branches to cover</span>
+      <span class="number">16</span>
+    </a></li>
   </ul>
 </div>
 
       <span class="number">47.2%</span>
     </a></li>
     <li><a class="item">
-      <span>Branch Coverage</span>
-      <span class="number">25%</span>
+      <span>Lines to cover</span>
+      <span class="number">171</span>
+    </a></li>
+    <li><a class="item">
+      <span>Uncovered lines</span>
+      <span class="number">16</span>
     </a></li>
   </ul>
 </div>
\ No newline at end of file