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

Unified Diff: third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js

Issue 2656683003: Revert of DevTools: Console: Provide autocompletions for Maps (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js
diff --git a/third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js b/third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js
index 85941e5cf26441ce17dbfaeac27efcd6f43803fc..b9aad4f0374aa194fbc76020491617051507f0b3 100644
--- a/third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js
+++ b/third_party/WebKit/Source/devtools/front_end/components/JavaScriptAutocomplete.js
@@ -14,24 +14,13 @@
* @return {!Promise<!UI.SuggestBox.Suggestions>}
*/
Components.JavaScriptAutocomplete.completionsForTextInCurrentContext = function(text, query, force) {
- var clippedExpression = Components.JavaScriptAutocomplete._clipExpression(text, true);
- var mapCompletionsPromise = Components.JavaScriptAutocomplete._mapCompletions(text, query);
- return Components.JavaScriptAutocomplete.completionsForExpression(clippedExpression, query, force)
- .then(completions => mapCompletionsPromise.then(mapCompletions => mapCompletions.concat(completions)));
-};
-
-/**
- * @param {string} text
- * @param {boolean=} allowEndingBracket
- * @return {string}
- */
-Components.JavaScriptAutocomplete._clipExpression = function(text, allowEndingBracket) {
var index;
var stopChars = new Set('=:({;,!+-*/&|^<>`'.split(''));
var whiteSpaceChars = new Set(' \r\n\t'.split(''));
var continueChars = new Set('[. \r\n\t'.split(''));
for (index = text.length - 1; index >= 0; index--) {
+ // Pass less stop characters to rangeOfWord so the range will be a more complete expression.
if (stopChars.has(text.charAt(index)))
break;
if (whiteSpaceChars.has(text.charAt(index)) && !continueChars.has(text.charAt(index - 1)))
@@ -46,112 +35,16 @@
if (character === ']')
bracketCount++;
// Allow an open bracket at the end for property completion.
- if (character === '[' && (index < clippedExpression.length - 1 || !allowEndingBracket)) {
+ if (character === '[' && index < clippedExpression.length - 1) {
bracketCount--;
if (bracketCount < 0)
break;
}
index--;
}
- return clippedExpression.substring(index + 1).trim();
-};
-
-/**
- * @param {string} text
- * @param {string} query
- * @return {!Promise<!UI.SuggestBox.Suggestions>}
- */
-Components.JavaScriptAutocomplete._mapCompletions = function(text, query) {
- var mapMatch = text.match(/\.\s*(get|set|delete)\s*\(\s*$/);
- var executionContext = UI.context.flavor(SDK.ExecutionContext);
- if (!executionContext || !mapMatch)
- return Promise.resolve([]);
-
- var clippedExpression = Components.JavaScriptAutocomplete._clipExpression(text.substring(0, mapMatch.index));
- var fulfill;
- var promise = new Promise(x => fulfill = x);
- executionContext.evaluate(clippedExpression, 'completion', true, true, false, false, false, evaluated);
- return promise;
-
- /**
- * @param {?SDK.RemoteObject} result
- * @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails
- */
- function evaluated(result, exceptionDetails) {
- if (!result || !!exceptionDetails || result.subtype !== 'map') {
- fulfill([]);
- return;
- }
- result.getOwnPropertiesPromise().then(extractEntriesProperty);
- }
-
- /**
- * @param {!{properties: ?Array<!SDK.RemoteObjectProperty>, internalProperties: ?Array<!SDK.RemoteObjectProperty>}} properties
- */
- function extractEntriesProperty(properties) {
- var internalProperties = properties.internalProperties || [];
- var entriesProperty = internalProperties.find(property => property.name === '[[Entries]]');
- if (!entriesProperty) {
- fulfill([]);
- return;
- }
- entriesProperty.value.callFunctionJSONPromise(getEntries).then(keysObj => gotKeys(Object.keys(keysObj)));
- }
-
- /**
- * @suppressReceiverCheck
- * @this {!Array<{key:?, value:?}>}
- * @return {!Object}
- */
- function getEntries() {
- var result = {__proto__: null};
- for (var i = 0; i < this.length; i++) {
- if (typeof this[i].key === 'string')
- result[this[i].key] = true;
- }
- return result;
- }
-
- /**
- * @param {!Array<string>} rawKeys
- */
- function gotKeys(rawKeys) {
- var caseSensitivePrefix = [];
- var caseInsensitivePrefix = [];
- var caseSensitiveAnywhere = [];
- var caseInsensitiveAnywhere = [];
- var quoteChar = '"';
- if (query.startsWith('\''))
- quoteChar = '\'';
- var endChar = ')';
- if (mapMatch[0].indexOf('set') !== -1)
- endChar = ', ';
-
- var sorter = rawKeys.length < 1000 ? String.naturalOrderComparator : undefined;
- var keys = rawKeys.sort(sorter).map(key => quoteChar + key + quoteChar + endChar);
-
- for (var key of keys) {
- if (key.length < query.length)
- continue;
- if (query.length && key.toLowerCase().indexOf(query.toLowerCase()) === -1)
- continue;
- // Substitute actual newlines with newline characters. @see crbug.com/498421
- var title = key.split('\n').join('\\n');
-
- if (key.startsWith(query))
- caseSensitivePrefix.push({title: title, priority: 4});
- else if (key.toLowerCase().startsWith(query.toLowerCase()))
- caseInsensitivePrefix.push({title: title, priority: 3});
- else if (key.indexOf(query) !== -1)
- caseSensitiveAnywhere.push({title: title, priority: 2});
- else
- caseInsensitiveAnywhere.push({title: title, priority: 1});
- }
- var suggestions = caseSensitivePrefix.concat(caseInsensitivePrefix, caseSensitiveAnywhere, caseInsensitiveAnywhere);
- if (suggestions.length)
- suggestions[0].subtitle = Common.UIString('Keys');
- fulfill(suggestions);
- }
+ clippedExpression = clippedExpression.substring(index + 1).trim();
+
+ return Components.JavaScriptAutocomplete.completionsForExpression(clippedExpression, query, force);
};
/**
@@ -183,8 +76,8 @@
if (!query && !expressionString && !force)
return Promise.resolve([]);
- var fulfill;
- var promise = new Promise(x => fulfill = x);
+ var fufill;
+ var promise = new Promise(x => fufill = x);
var selectedFrame = executionContext.debuggerModel.selectedCallFrame();
if (!expressionString && selectedFrame)
variableNamesInScopes(selectedFrame, receivedPropertyNames);
@@ -198,7 +91,7 @@
*/
function evaluated(result, exceptionDetails) {
if (!result || !!exceptionDetails) {
- fulfill([]);
+ fufill([]);
return;
}
@@ -326,7 +219,7 @@
if (result && !exceptionDetails)
receivedPropertyNames(/** @type {!Object} */ (result.value));
else
- fulfill([]);
+ fufill([]);
}
/**
@@ -335,7 +228,7 @@
function receivedPropertyNames(object) {
executionContext.target().runtimeAgent().releaseObjectGroup('completion');
if (!object) {
- fulfill([]);
+ fufill([]);
return;
}
var propertyGroups = /** @type {!Array<!Components.JavaScriptAutocomplete.CompletionGroup>} */ (object);
@@ -365,7 +258,7 @@
];
propertyGroups.push({items: commandLineAPI});
}
- fulfill(Components.JavaScriptAutocomplete._completionsForQuery(
+ fufill(Components.JavaScriptAutocomplete._completionsForQuery(
dotNotation, bracketNotation, expressionString, query, propertyGroups));
}
};
@@ -399,7 +292,7 @@
var result = [];
var lastGroupTitle;
for (var group of propertyGroups) {
- group.items.sort(itemComparator.bind(null, group.items.length > 1000));
+ group.items.sort(itemComparator);
var caseSensitivePrefix = [];
var caseInsensitivePrefix = [];
var caseSensitiveAnywhere = [];
@@ -443,18 +336,17 @@
return result;
/**
- * @param {boolean} naturalOrder
* @param {string} a
* @param {string} b
* @return {number}
*/
- function itemComparator(naturalOrder, a, b) {
+ function itemComparator(a, b) {
var aStartsWithUnderscore = a.startsWith('_');
var bStartsWithUnderscore = b.startsWith('_');
if (aStartsWithUnderscore && !bStartsWithUnderscore)
return 1;
if (bStartsWithUnderscore && !aStartsWithUnderscore)
return -1;
- return naturalOrder ? String.naturalOrderComparator(a, b) : a.localeCompare(b);
+ return String.naturalOrderComparator(a, b);
}
};

Powered by Google App Engine
This is Rietveld 408576698