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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/sources/SourceMapNamesResolver.js

Issue 2769843003: DevTools: split text_utils out of common module (Closed)
Patch Set: rebaseline Created 3 years, 9 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 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 Sources.SourceMapNamesResolver = {}; 4 Sources.SourceMapNamesResolver = {};
5 5
6 Sources.SourceMapNamesResolver._cachedMapSymbol = Symbol('cache'); 6 Sources.SourceMapNamesResolver._cachedMapSymbol = Symbol('cache');
7 Sources.SourceMapNamesResolver._cachedIdentifiersSymbol = Symbol('cachedIdentifi ers'); 7 Sources.SourceMapNamesResolver._cachedIdentifiersSymbol = Symbol('cachedIdentifi ers');
8 8
9 /** 9 /**
10 * @unrestricted 10 * @unrestricted
(...skipping 28 matching lines...) Expand all
39 return script.requestContent().then(onContent); 39 return script.requestContent().then(onContent);
40 40
41 /** 41 /**
42 * @param {?string} content 42 * @param {?string} content
43 * @return {!Promise<!Array<!Sources.SourceMapNamesResolver.Identifier>>} 43 * @return {!Promise<!Array<!Sources.SourceMapNamesResolver.Identifier>>}
44 */ 44 */
45 function onContent(content) { 45 function onContent(content) {
46 if (!content) 46 if (!content)
47 return Promise.resolve(/** @type {!Array<!Sources.SourceMapNamesResolver.I dentifier>}*/ ([])); 47 return Promise.resolve(/** @type {!Array<!Sources.SourceMapNamesResolver.I dentifier>}*/ ([]));
48 48
49 var text = new Common.Text(content); 49 var text = new TextUtils.Text(content);
50 var scopeRange = new Common.TextRange( 50 var scopeRange = new TextUtils.TextRange(
51 startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNu mber, endLocation.columnNumber); 51 startLocation.lineNumber, startLocation.columnNumber, endLocation.lineNu mber, endLocation.columnNumber);
52 var scopeText = text.extract(scopeRange); 52 var scopeText = text.extract(scopeRange);
53 var scopeStart = text.toSourceRange(scopeRange).offset; 53 var scopeStart = text.toSourceRange(scopeRange).offset;
54 var prefix = 'function fui'; 54 var prefix = 'function fui';
55 return Common.formatterWorkerPool.javaScriptIdentifiers(prefix + scopeText) 55 return Common.formatterWorkerPool.javaScriptIdentifiers(prefix + scopeText)
56 .then(onIdentifiers.bind(null, text, scopeStart, prefix)); 56 .then(onIdentifiers.bind(null, text, scopeStart, prefix));
57 } 57 }
58 58
59 /** 59 /**
60 * @param {!Common.Text} text 60 * @param {!TextUtils.Text} text
61 * @param {number} scopeStart 61 * @param {number} scopeStart
62 * @param {string} prefix 62 * @param {string} prefix
63 * @param {!Array<!{name: string, offset: number}>} identifiers 63 * @param {!Array<!{name: string, offset: number}>} identifiers
64 * @return {!Array<!Sources.SourceMapNamesResolver.Identifier>} 64 * @return {!Array<!Sources.SourceMapNamesResolver.Identifier>}
65 */ 65 */
66 function onIdentifiers(text, scopeStart, prefix, identifiers) { 66 function onIdentifiers(text, scopeStart, prefix, identifiers) {
67 var result = []; 67 var result = [];
68 var cursor = new Common.TextCursor(text.lineEndings()); 68 var cursor = new TextUtils.TextCursor(text.lineEndings());
69 for (var i = 0; i < identifiers.length; ++i) { 69 for (var i = 0; i < identifiers.length; ++i) {
70 var id = identifiers[i]; 70 var id = identifiers[i];
71 if (id.offset < prefix.length) 71 if (id.offset < prefix.length)
72 continue; 72 continue;
73 var start = scopeStart + id.offset - prefix.length; 73 var start = scopeStart + id.offset - prefix.length;
74 cursor.resetTo(start); 74 cursor.resetTo(start);
75 result.push(new Sources.SourceMapNamesResolver.Identifier(id.name, cursor. lineNumber(), cursor.columnNumber())); 75 result.push(new Sources.SourceMapNamesResolver.Identifier(id.name, cursor. lineNumber(), cursor.columnNumber()));
76 } 76 }
77 return result; 77 return result;
78 } 78 }
79 }; 79 };
80 80
81 /** 81 /**
82 * @param {!SDK.DebuggerModel.Scope} scope 82 * @param {!SDK.DebuggerModel.Scope} scope
83 * @return {!Promise.<!Map<string, string>>} 83 * @return {!Promise.<!Map<string, string>>}
84 */ 84 */
85 Sources.SourceMapNamesResolver._resolveScope = function(scope) { 85 Sources.SourceMapNamesResolver._resolveScope = function(scope) {
86 var identifiersPromise = scope[Sources.SourceMapNamesResolver._cachedIdentifie rsSymbol]; 86 var identifiersPromise = scope[Sources.SourceMapNamesResolver._cachedIdentifie rsSymbol];
87 if (identifiersPromise) 87 if (identifiersPromise)
88 return identifiersPromise; 88 return identifiersPromise;
89 89
90 var script = scope.callFrame().script; 90 var script = scope.callFrame().script;
91 var sourceMap = Bindings.debuggerWorkspaceBinding.sourceMapForScript(script); 91 var sourceMap = Bindings.debuggerWorkspaceBinding.sourceMapForScript(script);
92 if (!sourceMap) 92 if (!sourceMap)
93 return Promise.resolve(new Map()); 93 return Promise.resolve(new Map());
94 94
95 /** @type {!Map<string, !Common.Text>} */ 95 /** @type {!Map<string, !TextUtils.Text>} */
96 var textCache = new Map(); 96 var textCache = new Map();
97 identifiersPromise = Sources.SourceMapNamesResolver._scopeIdentifiers(scope).t hen(onIdentifiers); 97 identifiersPromise = Sources.SourceMapNamesResolver._scopeIdentifiers(scope).t hen(onIdentifiers);
98 scope[Sources.SourceMapNamesResolver._cachedIdentifiersSymbol] = identifiersPr omise; 98 scope[Sources.SourceMapNamesResolver._cachedIdentifiersSymbol] = identifiersPr omise;
99 return identifiersPromise; 99 return identifiersPromise;
100 100
101 /** 101 /**
102 * @param {!Array<!Sources.SourceMapNamesResolver.Identifier>} identifiers 102 * @param {!Array<!Sources.SourceMapNamesResolver.Identifier>} identifiers
103 * @return {!Promise<!Map<string, string>>} 103 * @return {!Promise<!Map<string, string>>}
104 */ 104 */
105 function onIdentifiers(identifiers) { 105 function onIdentifiers(identifiers) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 * @param {!Sources.SourceMapNamesResolver.Identifier} id 141 * @param {!Sources.SourceMapNamesResolver.Identifier} id
142 * @return {!Promise<?string>} 142 * @return {!Promise<?string>}
143 */ 143 */
144 function resolveSourceName(id) { 144 function resolveSourceName(id) {
145 var startEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber); 145 var startEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber);
146 var endEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber + id.name. length); 146 var endEntry = sourceMap.findEntry(id.lineNumber, id.columnNumber + id.name. length);
147 if (!startEntry || !endEntry || !startEntry.sourceURL || startEntry.sourceUR L !== endEntry.sourceURL || 147 if (!startEntry || !endEntry || !startEntry.sourceURL || startEntry.sourceUR L !== endEntry.sourceURL ||
148 !startEntry.sourceLineNumber || !startEntry.sourceColumnNumber || !endEn try.sourceLineNumber || 148 !startEntry.sourceLineNumber || !startEntry.sourceColumnNumber || !endEn try.sourceLineNumber ||
149 !endEntry.sourceColumnNumber) 149 !endEntry.sourceColumnNumber)
150 return Promise.resolve(/** @type {?string} */ (null)); 150 return Promise.resolve(/** @type {?string} */ (null));
151 var sourceTextRange = new Common.TextRange( 151 var sourceTextRange = new TextUtils.TextRange(
152 startEntry.sourceLineNumber, startEntry.sourceColumnNumber, endEntry.sou rceLineNumber, 152 startEntry.sourceLineNumber, startEntry.sourceColumnNumber, endEntry.sou rceLineNumber,
153 endEntry.sourceColumnNumber); 153 endEntry.sourceColumnNumber);
154 var uiSourceCode = 154 var uiSourceCode =
155 Bindings.NetworkProject.uiSourceCodeForScriptURL(Workspace.workspace, st artEntry.sourceURL, script); 155 Bindings.NetworkProject.uiSourceCodeForScriptURL(Workspace.workspace, st artEntry.sourceURL, script);
156 if (!uiSourceCode) 156 if (!uiSourceCode)
157 return Promise.resolve(/** @type {?string} */ (null)); 157 return Promise.resolve(/** @type {?string} */ (null));
158 158
159 return uiSourceCode.requestContent().then(onSourceContent.bind(null, sourceT extRange)); 159 return uiSourceCode.requestContent().then(onSourceContent.bind(null, sourceT extRange));
160 } 160 }
161 161
162 /** 162 /**
163 * @param {!Common.TextRange} sourceTextRange 163 * @param {!TextUtils.TextRange} sourceTextRange
164 * @param {?string} content 164 * @param {?string} content
165 * @return {?string} 165 * @return {?string}
166 */ 166 */
167 function onSourceContent(sourceTextRange, content) { 167 function onSourceContent(sourceTextRange, content) {
168 if (!content) 168 if (!content)
169 return null; 169 return null;
170 var text = textCache.get(content); 170 var text = textCache.get(content);
171 if (!text) { 171 if (!text) {
172 text = new Common.Text(content); 172 text = new TextUtils.Text(content);
173 textCache.set(content, text); 173 textCache.set(content, text);
174 } 174 }
175 var originalIdentifier = text.extract(sourceTextRange).trim(); 175 var originalIdentifier = text.extract(sourceTextRange).trim();
176 return /[a-zA-Z0-9_$]+/.test(originalIdentifier) ? originalIdentifier : null ; 176 return /[a-zA-Z0-9_$]+/.test(originalIdentifier) ? originalIdentifier : null ;
177 } 177 }
178 }; 178 };
179 179
180 Sources.SourceMapNamesResolver._scopeResolvedForTest = function() {}; 180 Sources.SourceMapNamesResolver._scopeResolvedForTest = function() {};
181 181
182 /** 182 /**
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 return script.requestContent().then(onContent); 267 return script.requestContent().then(onContent);
268 268
269 /** 269 /**
270 * @param {?string} content 270 * @param {?string} content
271 * @return {!Promise<string>} 271 * @return {!Promise<string>}
272 */ 272 */
273 function onContent(content) { 273 function onContent(content) {
274 if (!content) 274 if (!content)
275 return Promise.resolve(''); 275 return Promise.resolve('');
276 276
277 var text = new Common.Text(content); 277 var text = new TextUtils.Text(content);
278 var textRange = sourceMap.reverseMapTextRange( 278 var textRange = sourceMap.reverseMapTextRange(
279 uiSourceCode.url(), new Common.TextRange(lineNumber, startColumnNumber, lineNumber, endColumnNumber)); 279 uiSourceCode.url(), new TextUtils.TextRange(lineNumber, startColumnNumbe r, lineNumber, endColumnNumber));
280 var originalText = text.extract(textRange); 280 var originalText = text.extract(textRange);
281 if (!originalText) 281 if (!originalText)
282 return Promise.resolve(''); 282 return Promise.resolve('');
283 return Common.formatterWorkerPool.evaluatableJavaScriptSubstring(originalTex t); 283 return Common.formatterWorkerPool.evaluatableJavaScriptSubstring(originalTex t);
284 } 284 }
285 }; 285 };
286 286
287 /** 287 /**
288 * @param {?SDK.DebuggerModel.CallFrame} callFrame 288 * @param {?SDK.DebuggerModel.CallFrame} callFrame
289 * @return {!Promise<?SDK.RemoteObject>} 289 * @return {!Promise<?SDK.RemoteObject>}
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 } 574 }
575 575
576 /** 576 /**
577 * @override 577 * @override
578 * @return {boolean} 578 * @return {boolean}
579 */ 579 */
580 isNode() { 580 isNode() {
581 return this._object.isNode(); 581 return this._object.isNode();
582 } 582 }
583 }; 583 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698