Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/changes/ChangesView.js

Issue 2780713005: DevTools: Add syntax highlighting to ChangesView (Closed)
Patch Set: diffRows Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/changes/ChangesHighlighter.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 Changes.ChangesView = class extends UI.VBox { 5 Changes.ChangesView = class extends UI.VBox {
6 constructor() { 6 constructor() {
7 super(true); 7 super(true);
8 this.registerRequiredCSS('changes/changesView.css'); 8 this.registerRequiredCSS('changes/changesView.css');
9 var splitWidget = new UI.SplitWidget(true /* vertical */, false /* sidebar o n left */); 9 var splitWidget = new UI.SplitWidget(true /* vertical */, false /* sidebar o n left */);
10 var mainWidget = new UI.Widget(); 10 var mainWidget = new UI.Widget();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 this._editor.hideWidget(); 125 this._editor.hideWidget();
126 this._emptyWidget.showWidget(); 126 this._emptyWidget.showWidget();
127 return; 127 return;
128 } 128 }
129 129
130 var insertions = 0; 130 var insertions = 0;
131 var deletions = 0; 131 var deletions = 0;
132 var currentLineNumber = 0; 132 var currentLineNumber = 0;
133 var baselineLineNumber = 0; 133 var baselineLineNumber = 0;
134 var paddingLines = 3; 134 var paddingLines = 3;
135 var originalLines = [];
136 var currentLines = [];
135 137
136 for (var i = 0; i < diff.length; ++i) { 138 for (var i = 0; i < diff.length; ++i) {
137 var token = diff[i]; 139 var token = diff[i];
138 switch (token[0]) { 140 switch (token[0]) {
139 case Diff.Diff.Operation.Equal: 141 case Diff.Diff.Operation.Equal:
140 this._diffRows.pushAll(createEqualRows(token[1], i === 0, i === diff.l ength - 1)); 142 this._diffRows.pushAll(createEqualRows(token[1], i === 0, i === diff.l ength - 1));
143 originalLines.pushAll(token[1]);
144 currentLines.pushAll(token[1]);
141 break; 145 break;
142 case Diff.Diff.Operation.Insert: 146 case Diff.Diff.Operation.Insert:
143 for (var line of token[1]) 147 for (var line of token[1])
144 this._diffRows.push(createRow(line, Changes.ChangesView.RowType.Addi tion)); 148 this._diffRows.push(createRow(line, Changes.ChangesView.RowType.Addi tion));
145 insertions += token[1].length; 149 insertions += token[1].length;
150 currentLines.pushAll(token[1]);
146 break; 151 break;
147 case Diff.Diff.Operation.Delete: 152 case Diff.Diff.Operation.Delete:
148 deletions += token[1].length; 153 deletions += token[1].length;
154 originalLines.pushAll(token[1]);
149 if (diff[i + 1] && diff[i + 1][0] === Diff.Diff.Operation.Insert) { 155 if (diff[i + 1] && diff[i + 1][0] === Diff.Diff.Operation.Insert) {
150 i++; 156 i++;
151 this._diffRows.pushAll(createModifyRows(token[1].join('\n'), diff[i] [1].join('\n'))); 157 this._diffRows.pushAll(createModifyRows(token[1].join('\n'), diff[i] [1].join('\n')));
152 insertions += diff[i][1].length; 158 insertions += diff[i][1].length;
159 currentLines.pushAll(diff[i][1]);
153 } else { 160 } else {
154 for (var line of token[1]) 161 for (var line of token[1])
155 this._diffRows.push(createRow(line, Changes.ChangesView.RowType.De letion)); 162 this._diffRows.push(createRow(line, Changes.ChangesView.RowType.De letion));
156 } 163 }
157 break; 164 break;
158 } 165 }
159 } 166 }
160 167
161 this._maxLineDigits = Math.ceil(Math.log10(Math.max(currentLineNumber, basel ineLineNumber))); 168 this._maxLineDigits = Math.ceil(Math.log10(Math.max(currentLineNumber, basel ineLineNumber)));
162 169
163 this._diffStats.setText(Common.UIString( 170 this._diffStats.setText(Common.UIString(
164 '%d insertion%s (+), %d deletion%s (-)', insertions, insertions !== 1 ? 's' : '', deletions, 171 '%d insertion%s (+), %d deletion%s (-)', insertions, insertions !== 1 ? 's' : '', deletions,
165 deletions !== 1 ? 's' : '')); 172 deletions !== 1 ? 's' : ''));
166 this._toolbar.setEnabled(true); 173 this._toolbar.setEnabled(true);
167 this._emptyWidget.hideWidget(); 174 this._emptyWidget.hideWidget();
168 175
169 this._editor.operation(() => { 176 this._editor.operation(() => {
170 this._editor.showWidget(); 177 this._editor.showWidget();
171 this._editor.setHighlightMode({name: 'devtools-diff', rows: this._diffRows }); 178 this._editor.setHighlightMode({
172 this._editor.setText(this._diffRows.map(row => row.content.map(t => t.text ).join('')).join('\n')); 179 name: 'devtools-diff',
180 diffRows: this._diffRows,
181 mimeType: Bindings.NetworkProject.uiSourceCodeMimeType(
182 /** @type {!Workspace.UISourceCode} */ (this._selectedUISourceCode)) ,
183 baselineLines: originalLines,
184 currentLines: currentLines
185 });
186 this._editor.setText(this._diffRows.map(row => row.tokens.map(t => t.text) .join('')).join('\n'));
173 this._editor.setLineNumberFormatter(this._lineFormatter.bind(this)); 187 this._editor.setLineNumberFormatter(this._lineFormatter.bind(this));
174 }); 188 });
175 189
176 /** 190 /**
177 * @param {!Array<string>} lines 191 * @param {!Array<string>} lines
178 * @param {boolean} atStart 192 * @param {boolean} atStart
179 * @param {boolean} atEnd 193 * @param {boolean} atEnd
180 * @return {!Array<!Changes.ChangesView.Row>}} 194 * @return {!Array<!Changes.ChangesView.Row>}}
181 */ 195 */
182 function createEqualRows(lines, atStart, atEnd) { 196 function createEqualRows(lines, atStart, atEnd) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 var className = type === Diff.Diff.Operation.Equal ? '' : 'inner-diff'; 237 var className = type === Diff.Diff.Operation.Equal ? '' : 'inner-diff';
224 var lines = text.split('\n'); 238 var lines = text.split('\n');
225 for (var i = 0; i < lines.length; i++) { 239 for (var i = 0; i < lines.length; i++) {
226 if (i > 0 && type !== Diff.Diff.Operation.Insert) 240 if (i > 0 && type !== Diff.Diff.Operation.Insert)
227 deletionRows.push(createRow('', Changes.ChangesView.RowType.Deletion )); 241 deletionRows.push(createRow('', Changes.ChangesView.RowType.Deletion ));
228 if (i > 0 && type !== Diff.Diff.Operation.Delete) 242 if (i > 0 && type !== Diff.Diff.Operation.Delete)
229 insertionRows.push(createRow('', Changes.ChangesView.RowType.Additio n)); 243 insertionRows.push(createRow('', Changes.ChangesView.RowType.Additio n));
230 if (!lines[i]) 244 if (!lines[i])
231 continue; 245 continue;
232 if (type !== Diff.Diff.Operation.Insert) 246 if (type !== Diff.Diff.Operation.Insert)
233 deletionRows[deletionRows.length - 1].content.push({text: lines[i], className}); 247 deletionRows[deletionRows.length - 1].tokens.push({text: lines[i], c lassName});
234 if (type !== Diff.Diff.Operation.Delete) 248 if (type !== Diff.Diff.Operation.Delete)
235 insertionRows[insertionRows.length - 1].content.push({text: lines[i] , className}); 249 insertionRows[insertionRows.length - 1].tokens.push({text: lines[i], className});
236 } 250 }
237 } 251 }
238 return deletionRows.concat(insertionRows); 252 return deletionRows.concat(insertionRows);
239 } 253 }
240 254
241 /** 255 /**
242 * @param {string} text 256 * @param {string} text
243 * @param {!Changes.ChangesView.RowType} type 257 * @param {!Changes.ChangesView.RowType} type
244 * @return {!Changes.ChangesView.Row} 258 * @return {!Changes.ChangesView.Row}
245 */ 259 */
246 function createRow(text, type) { 260 function createRow(text, type) {
247 if (type === Changes.ChangesView.RowType.Addition) 261 if (type === Changes.ChangesView.RowType.Addition)
248 currentLineNumber++; 262 currentLineNumber++;
249 if (type === Changes.ChangesView.RowType.Deletion) 263 if (type === Changes.ChangesView.RowType.Deletion)
250 baselineLineNumber++; 264 baselineLineNumber++;
251 if (type === Changes.ChangesView.RowType.Equal) { 265 if (type === Changes.ChangesView.RowType.Equal) {
252 baselineLineNumber++; 266 baselineLineNumber++;
253 currentLineNumber++; 267 currentLineNumber++;
254 } 268 }
255 269
256 return {baselineLineNumber, currentLineNumber, content: text ? [{text, cla ssName: 'inner-diff'}] : [], type}; 270 return {baselineLineNumber, currentLineNumber, tokens: text ? [{text, clas sName: 'inner-diff'}] : [], type};
257 } 271 }
258 } 272 }
259 273
260 /** 274 /**
261 * @param {number} lineNumber 275 * @param {number} lineNumber
262 * @return {string} 276 * @return {string}
263 */ 277 */
264 _lineFormatter(lineNumber) { 278 _lineFormatter(lineNumber) {
265 var row = this._diffRows[lineNumber - 1]; 279 var row = this._diffRows[lineNumber - 1];
266 var showBaseNumber = row.type === Changes.ChangesView.RowType.Deletion; 280 var showBaseNumber = row.type === Changes.ChangesView.RowType.Deletion;
267 var showCurrentNumber = row.type === Changes.ChangesView.RowType.Addition; 281 var showCurrentNumber = row.type === Changes.ChangesView.RowType.Addition;
268 if (row.type === Changes.ChangesView.RowType.Equal) { 282 if (row.type === Changes.ChangesView.RowType.Equal) {
269 showBaseNumber = true; 283 showBaseNumber = true;
270 showCurrentNumber = true; 284 showCurrentNumber = true;
271 } 285 }
272 var base = showBaseNumber ? numberToStringWithSpacesPadding(row.baselineLine Number, this._maxLineDigits) : 286 var base = showBaseNumber ? numberToStringWithSpacesPadding(row.baselineLine Number, this._maxLineDigits) :
273 spacesPadding(this._maxLineDigits); 287 spacesPadding(this._maxLineDigits);
274 var current = showCurrentNumber ? numberToStringWithSpacesPadding(row.curren tLineNumber, this._maxLineDigits) : 288 var current = showCurrentNumber ? numberToStringWithSpacesPadding(row.curren tLineNumber, this._maxLineDigits) :
275 spacesPadding(this._maxLineDigits); 289 spacesPadding(this._maxLineDigits);
276 return base + spacesPadding(1) + current; 290 return base + spacesPadding(1) + current;
277 } 291 }
278 }; 292 };
279 293
280 /** 294 /**
281 * @typedef {!{ 295 * @typedef {!{
282 * baselineLineNumber: number, 296 * baselineLineNumber: number,
283 * currentLineNumber: number, 297 * currentLineNumber: number,
284 * content: !Array<!{text: string, className: string}>, 298 * tokens: !Array<!{text: string, className: string}>,
285 * type: !Changes.ChangesView.RowType 299 * type: !Changes.ChangesView.RowType
286 * }} 300 * }}
287 */ 301 */
288 Changes.ChangesView.Row; 302 Changes.ChangesView.Row;
289 303
290 /** @enum {string} */ 304 /** @enum {string} */
291 Changes.ChangesView.RowType = { 305 Changes.ChangesView.RowType = {
292 Deletion: 'deletion', 306 Deletion: 'deletion',
293 Addition: 'addition', 307 Addition: 'addition',
294 Equal: 'equal', 308 Equal: 'equal',
295 Spacer: 'spacer' 309 Spacer: 'spacer'
296 }; 310 };
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/changes/ChangesHighlighter.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698