Last active
August 6, 2018 13:35
-
-
Save tbuschto/9ef14cf819eedb5e4ead to your computer and use it in GitHub Desktop.
js console autosuggest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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