В автодополнении есть две крайности.
Вариант один - просто разбиваем текст на слова, добавляем в список ключевые слова текущего языка и как-нибудь подсказываем то что начал набирать программист.
Вариант два - выполняем честный анализ кода, прям как это делает компилятор/интерпретатор, и в зависимости от контекста в котором набирается слово подсказываем только возможные варинты. Ну например, если мы набираем определение класса, то после названия может быть либо extends либо implements. Если набрали extends то дальше однозначно будет название класса, причём не финального.
Каждый редактор кода использует свой подход, причём совсем не обязательно что точно один из двух, может быть смесь в любых пропорциях.