Есть ли простой способ получить предложения для строки кода JS?
Если у меня есть строка действительного кода JS, например "'foobar'.charCodeAt(0)"
Я могу это оценить - это очевидно просто. eval()
(или же new Function()
) в коде JS или node -e
(или же d8 -e
) из CLI решает эту задачу.
Но мне нужно получить потенциальные предложения для неполной строки кода JS.
Например, если у меня есть строка "'foobar'.cha"
Я хочу что-то вроде массива ['charAt', 'charCodeAt, 'matchAll']
(или же ["'foobar'.charAt", "'foobar'.charCodeAt", "'foobar'.matchAll"]
).
Есть ли надежное и желательно готовое решение для этого? Для меня это не имеет большого значения, и я не хочу тратить на это слишком много времени.
Спасибо.
1 ответ
Возможно, это будет сложнее, чем это, но как только вы сможете правильно проанализировать код, вы можете получить массив функций-прототипов, выполнив что-то вроде: Object.getOwnPropertyNames(String.prototype)
- или любой другой прототип, который вам нужен, просто используя String
в этом примере.
function getFuncs(type) {
if (type === 'string') {
var funcs = Object.getOwnPropertyNames(String.prototype).reduce((accum, el) => {
accum.push(el);
return accum;
}, []);
//console.log(funcs);
return funcs;
}
console.log(`${type} not implemented yet..`);
return;
}
var divEl = document.querySelector('#divEl');
document.querySelector('#inputEl').addEventListener('keyup', e => {
divEl.innerHTML = '<ul>';
var funcs = getFuncs(typeof e.target.value);
var filtered = funcs.filter(fnName => {
return fnName.toLowerCase().indexOf(e.target.value.toLowerCase()) > -1;
});
if (e.target.value.trim() != '') {
filtered.forEach(fnName => divEl.innerHTML += `<li>${fnName}</li>`);
}
divEl.innerHTML += '</ul>';
});
"foobar.<input id="inputEl" type="text" />"
<br />
<div id="divEl"></div>