Автодополнение кода — это функция автодополнения во многих интегрированных средах разработки (IDE), которая ускоряет процесс кодирования приложений, исправляя распространенные ошибки и предлагая строки кода. Обычно это происходит с помощью всплывающих окон при наборе текста, запроса параметров функций и подсказок запросов, связанных с синтаксическими ошибками. Современное программное обеспечение для автодополнения кода обычно использует генеративные системы искусственного интеллекта для прогнозирования строк кода. Автодополнение кода и связанные с ним инструменты служат для документирования и устранения неоднозначности для имен переменных , функций и методов с использованием статического анализа . [1] [2]
Эта функция присутствует во многих средах программирования. [3] [4] Реализации включают IntelliSense в Visual Studio Code . Термин изначально был популярен как «список выбора», и некоторые реализации до сих пор называют его так. [5]
Интеллектуальное завершение кода, похожее на другие системы автодополнения , является удобным способом доступа к описаниям функций, и в частности к спискам их параметров. Эта функция ускоряет разработку программного обеспечения, сокращая ввод с клавиатуры и необходимость запоминания имен. Она также позволяет пользователям реже обращаться к внешней документации, поскольку интерактивная документация по многим символам (т. е. переменным и функциям) в активной области отображается динамически в виде подсказок . [6]
Интеллектуальное завершение кода использует автоматически сгенерированную в памяти базу данных классов, имен переменных и других конструкций, которые данный компьютерный код определяет или ссылается. «Классическая» реализация IntelliSense работает путем обнаружения символов-маркеров, таких как точки (или другие символы-разделители, в зависимости от языка). Когда пользователь вводит один из этих символов сразу после имени сущности, имеющей один или несколько доступных членов (например, содержащиеся переменные или функции), IntelliSense предлагает совпадения во всплывающем диалоговом окне. Пользователь может либо принять предложение, введя символ завершения оператора ( Tab ↹или ) или маркер, специфичный для языка (например, точку с запятой для C++ ), либо продолжить вводить имя. Со временем IntelliSense определяет, какая переменная или функция, скорее всего, нужна пользователю. IntelliSense также отображает краткое описание функции во всплывающем окне — в зависимости от объема документации в исходном коде функции .↵ Enter
Эта функция также позволяет пользователям выбирать из ряда перегруженных функций в языках, поддерживающих объектно-ориентированное программирование . Некоторые программы для редактирования кода обеспечивают интеллектуальное завершение кода через сервер Language Server Protocol (LSP).
Исследования по интеллектуальному завершению кода начались в 1957 году с проверки орфографии для растровых изображений курсивного письма и специальных приложений для поиска записей в базах данных, несмотря на неверные записи. В 1961 году Лес Эрнест , возглавлявший исследования этой начинающей технологии, посчитал необходимым включить первую проверку орфографии, которая обращалась к списку из 10 000 приемлемых слов. [7] Ральф Горин, аспирант Эрнеста в то время, создал первую настоящую программу проверки орфографии, написанную как приложение (а не исследование) для общего английского текста. SPELL для DEC PDP-10 в Лаборатории искусственного интеллекта Стэнфордского университета (SAIL), была опубликована в феврале 1971 года. [8] Горин написал программу на ассемблере для более быстрой работы; он сделал это, просматривая список слов для правдоподобных правильных написаний, которые отличаются одной буквой или перестановками соседних букв, и представляя их пользователю. Горин сделал SPELL общедоступным, как это было сделано с большинством программ SAIL, и вскоре он распространился по всему миру через тогда еще новую сеть ARPANET , примерно за десятилетие до того, как персональные компьютеры стали общедоступными. [9] SPELL и его алгоритмы и структуры данных вдохновили программу Ispell для Unix .
IntelliSense — это реализация автодополнения кода Microsoft , наиболее известная в Visual Studio . Впервые она была представлена как функция основного продукта Microsoft в 1996 году [10], основанная на многих уже изобретенных концепциях автодополнения кода и проверки синтаксиса, в Visual Basic 5.0 Control Creation Edition, который по сути был общедоступным прототипом для Visual Basic 5.0. [11] Первоначально Visual Basic IDE была основным «испытательным полигоном» для этой технологии, но IntelliSense была включена в Visual FoxPro и Visual C++ [12] в период Visual Studio 97 (одна ревизия после первого появления в Visual Basic). Поскольку она была основана на возможностях интроспекции COM , версии IntelliSense для Visual Basic всегда были более надежными и полными, чем версии 5.0 и 6.0 (97 и 98 в последовательности именования Visual Studio) Visual C++, которые не имели преимущества полностью основанных на COM. Эти недостатки (критикуемые многими разработчиками VC++ с момента выпуска 97) были в значительной степени исправлены в линейках продуктов .NET . Например, одной из наиболее востребованных возможностей, отсутствовавших в продуктах до .NET, была поддержка шаблонов , которая теперь полностью реализована. [13]
IntelliSense вступил в новую фазу развития с унифицированной средой Visual Studio.NET, впервые выпущенной в 2001 году, дополненной более мощными возможностями интроспекции и документирования кода, предоставляемыми фреймворком .NET. IntelliSense теперь поддерживается редакторами Visual Studio для C++ , C# , J# , Visual Basic , XML , HTML и XSLT и другими. Начиная с Visual Studio 2005 , IntelliSense теперь активируется по умолчанию, когда пользователь начинает печатать, вместо того, чтобы требовать символы-маркеры (хотя это поведение можно отключить). IDE имеет возможность выводить большее количество контекста на основе того, что печатает разработчик, до такой степени, что основные языковые конструкции, такие как for и while, также включены в список выбора. В 2017 году Microsoft анонсировала IntelliCode, [14] который использует машинное обучение для точного вывода того, какой язык или функция библиотеки, вероятно, будет подразумеваться при каждом нажатии клавиши. Первоначально он был доступен только как расширение для C#, но, как ожидается, будет встроен в будущие версии Visual Studio.
Visual Studio 2022 включает функции искусственного интеллекта, такие как GitHub Copilot , который может автоматически предлагать целые строки кода на основе окружающего контекста.
Другие продукты Microsoft, включающие IntelliSense, включают Expression Web , FrontPage 2003 , Small Basic , Visual Basic for Applications IDE в продуктах Microsoft Office , Visual Studio Code и многие другие. SQL Server 2008 Management Studio имеет функцию автозаполнения для синтаксиса SQL.
Eclipse IDE имеет инструменты автодополнения кода, которые поставляются вместе с программой. [15] [16] Он включает в себя заметную поддержку написания кода Java, C++ и JavaScript. Проект Code Recommenders Eclipse использовался для предоставления мощного интеллектуального автодополнения, [17] но из-за нехватки ресурсов был удален в Eclipse 2018–12, а затем архивирован в июле 2019 года. [18] [19] [20]
Vim Intellisense [21] — это усовершенствованная система автодополнения кода для редактора Vim .
Предположим, что приложение C++, редактируемое в Visual Studio, имеет класс Foo с некоторыми функциями-членами:
класс Foo { public : void bar (); void foo_bar ( char c , int n ); };
Когда разработчик ссылается на этот класс в исходном коде, например:
Фу -фу ; фу .
как только пользователь вводит точку после foo
, IntelliSense автоматически выводит список всех доступных функций-членов (т. е. bar()
и foo_bar()
) и всех доступных атрибутов членов (закрытые и защищенные члены можно определить по изображению замка рядом с их именами). Затем пользователь может выбрать один из них, используя клавиши со стрелками и нажав символ завершения, когда будет выделена правильная функция-член. Если доступно, IntelliSense отображает краткое описание функции-члена, как указано в документации по исходному коду.
IntelliSense идет дальше, указывая требуемые параметры в другом всплывающем окне, пока пользователь заполняет параметры. Когда пользователь вводит имя переменной, функция также предлагает варианты для завершения переменной по мере ввода. IntelliSense продолжает показывать параметры, выделяя соответствующие, по мере ввода пользователем.
Пользователь может «заставить» IntelliSense отобразить всплывающий список без контекста, используя + или + . В Visual Studio это отображает всю объектную модель домена приложения, доступную разработчику.CtrlJCtrlSpace