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