Есть ли простой способ получить предложения для строки кода JS? - PullRequest
0 голосов
/ 07 февраля 2019

Если у меня есть строка действительный код 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 Ответ

0 голосов
/ 07 февраля 2019

Возможно, это будет сложнее, чем это, но как только вы сможете правильно проанализировать код, вы можете получить массив функций-прототипов, выполнив что-то вроде: 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...