Есть ли простой способ получить предложения для строки кода 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>

Другие вопросы по тегам