Как работает завершение кода?

Многие редакторы и IDE имеют код завершения. Некоторые из них очень «умны» другие не совсем. Я заинтересован в более интеллектуальном типе. Например, я видел IDE, которые предлагают функцию, только если она а) доступна в текущей области b) ее возвращаемое значение является действительным. (Например, после «5 + foo [tab]» он предлагает только функции, которые возвращают что-то, что может быть добавлено к целому числу или имени переменной правильного типа.) Я также видел, что они размещают наиболее часто используемые или самые длинные вариант впереди списка.

Я понимаю, что вам нужно разобрать код. Но обычно при редактировании текущего кода недопустимы синтаксические ошибки. Как вы анализируете что-то, когда оно неполное и содержит ошибки?

Существует также ограничение по времени. Завершение бесполезно, если для составления списка требуется несколько секунд. Иногда алгоритм завершения имеет дело с тысячами классов.

Каковы хорошие алгоритмы и структуры данных для этого?

Ответы на вопрос(3)

Ваш ответ на вопрос