OLD | NEW |
---|---|
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 Coverage.CoverageView = class extends UI.VBox { | 5 Coverage.CoverageView = class extends UI.VBox { |
6 constructor() { | 6 constructor() { |
7 super(true); | 7 super(true); |
8 | 8 |
9 /** @type {?Coverage.CoverageModel} */ | 9 /** @type {?Coverage.CoverageModel} */ |
10 this._model = null; | 10 this._model = null; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 */ | 106 */ |
107 static async _updateGutter(coverageInfo) { | 107 static async _updateGutter(coverageInfo) { |
108 var uiSourceCode = Workspace.workspace.uiSourceCodeForURL(coverageInfo.conte ntProvider.contentURL()); | 108 var uiSourceCode = Workspace.workspace.uiSourceCodeForURL(coverageInfo.conte ntProvider.contentURL()); |
109 if (!uiSourceCode) | 109 if (!uiSourceCode) |
110 return; | 110 return; |
111 // FIXME: gutter should be set in terms of offsets and therefore should not require contents. | 111 // FIXME: gutter should be set in terms of offsets and therefore should not require contents. |
112 var contents = await coverageInfo.contentProvider.requestContent(); | 112 var contents = await coverageInfo.contentProvider.requestContent(); |
113 if (!contents) | 113 if (!contents) |
114 return; | 114 return; |
115 var text = new Common.Text(contents); | 115 var text = new Common.Text(contents); |
116 for (var range of coverageInfo.ranges) { | 116 var lastOffset = 0; |
117 var startPosition = text.positionFromOffset(range.startOffset); | 117 var rangesByDepth = []; |
118 var endPosition = text.positionFromOffset(range.endOffset); | 118 for (var segment of coverageInfo.segments) { |
119 if (typeof segment.count !== 'number') { | |
120 lastOffset = segment.end; | |
121 continue; | |
122 } | |
123 var startPosition = text.positionFromOffset(lastOffset); | |
124 var endPosition = text.positionFromOffset(segment.end); | |
119 if (!startPosition.lineNumber) | 125 if (!startPosition.lineNumber) |
120 startPosition.columnNumber += coverageInfo.columnOffset; | 126 startPosition.columnNumber += coverageInfo.columnOffset; |
121 startPosition.lineNumber += coverageInfo.lineOffset; | 127 startPosition.lineNumber += coverageInfo.lineOffset; |
122 if (!endPosition.lineNumber) | 128 if (!endPosition.lineNumber) |
123 endPosition.columnNumber += coverageInfo.columnOffset; | 129 endPosition.columnNumber += coverageInfo.columnOffset; |
124 endPosition.lineNumber += coverageInfo.lineOffset; | 130 endPosition.lineNumber += coverageInfo.lineOffset; |
125 | 131 |
126 var textRange = new Common.TextRange( | 132 var ranges = rangesByDepth[segment.depth - 1]; // depth === 0 => count == = undefined |
alph
2017/03/10 02:05:09
can you store depth-1 in segments?
| |
127 startPosition.lineNumber, startPosition.columnNumber, endPosition.line Number, endPosition.columnNumber); | 133 if (!ranges) { |
128 uiSourceCode.addDecoration(textRange, Coverage.CoverageView.LineDecorator. type, range.count); | 134 ranges = []; |
135 rangesByDepth[segment.depth - 1] = ranges; | |
136 } | |
137 ranges.push({ | |
138 count: segment.count, | |
139 range: new Common.TextRange( | |
140 startPosition.lineNumber, startPosition.columnNumber, endPosition.li neNumber, endPosition.columnNumber) | |
141 }); | |
142 lastOffset = segment.end; | |
143 } | |
144 for (var ranges of rangesByDepth) { | |
alph
2017/03/10 02:05:09
I didn't get why you need to iterate in the depth
| |
145 for (var r of ranges) | |
146 uiSourceCode.addDecoration(r.range, Coverage.CoverageView.LineDecorator. type, r.count); | |
129 } | 147 } |
130 } | 148 } |
131 }; | 149 }; |
132 | 150 |
133 /** | 151 /** |
134 * @implements {SourceFrame.UISourceCodeFrame.LineDecorator} | 152 * @implements {SourceFrame.UISourceCodeFrame.LineDecorator} |
135 */ | 153 */ |
136 Coverage.CoverageView.LineDecorator = class { | 154 Coverage.CoverageView.LineDecorator = class { |
137 /** | 155 /** |
138 * @override | 156 * @override |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
177 */ | 195 */ |
178 handleAction(context, actionId) { | 196 handleAction(context, actionId) { |
179 var coverageViewId = 'coverage'; | 197 var coverageViewId = 'coverage'; |
180 UI.viewManager.showView(coverageViewId) | 198 UI.viewManager.showView(coverageViewId) |
181 .then(() => UI.viewManager.view(coverageViewId).widget()) | 199 .then(() => UI.viewManager.view(coverageViewId).widget()) |
182 .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRec ording()); | 200 .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRec ording()); |
183 | 201 |
184 return true; | 202 return true; |
185 } | 203 } |
186 }; | 204 }; |
OLD | NEW |