Skip to content

Instantly share code, notes, and snippets.

@tbuschto
Last active August 6, 2018 13:35
Show Gist options
  • Save tbuschto/9ef14cf819eedb5e4ead to your computer and use it in GitHub Desktop.
Save tbuschto/9ef14cf819eedb5e4ead to your computer and use it in GitHub Desktop.
js console autosuggest
function getSuggestions(input) {
var result = {};
var target = getTarget(input);
if (!target) {
return [];
}
var keys = getAllKeys(target);
var part = getLastPart(input);
for (var i = 0; i < keys.length; i++) {
if (keys[i].toLowerCase().startsWith(part.toLowerCase())) {
result[keys[i]] = true;
}
}
return Object.keys(result).sort();
}
function getTarget(input) {
var target = window;
var parts = [];
var rest = input;
while (rest) {
// TODO: support array[number], object[string] and object(expression)
var part = (/\.\w+$/).exec(rest);
if (part && part.length && part[0].length) {
parts.unshift(part[0].slice(1))
rest = rest.slice(0, part[0].length * -1);
} else {
var lastPart = (/\w+$/).exec(rest);
if (lastPart && lastPart.length && lastPart[0].length) {
parts.unshift(lastPart[0])
}
break;
}
}
while (target instanceof Object && parts.length > 1) {
target = target[parts.shift()]
}
return target;
}
function getAllKeys(obj) {
var result = [];
var target = obj;
while (target instanceof Object) {
result = result.concat(Object.getOwnPropertyNames(target));
target = Object.getPrototypeOf(target);
}
return result;
}
function getLastPart(input) {
return input.split(".").pop();
}
getSuggestions('console.log(document.b')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment