Intellisense visual studio что это
Кроме того, при разработке компонентов на языке JavaScript для использования в браузере необходимо следить за большим количеством несопоставимых элементов. К ним относятся свойства самого языка JavaScript, элементы HTML DOM, а также собственные и внешние библиотеки. К счастью, система Visual Studio способна предоставить все достижения технологии IntelliSense для полноценного использования языка JavaScript, чтобы следить за всеми этими элементами и предупреждать разработчика о синтаксических ошибках.
Начиная с версии Internet Explorer 3.0 компания Microsoft поддерживает свой собственный вариант языка JavaScript, именуемый JScript. С формальной точки зрения средства JavaScript в системе Visual Studio разработаны для работы с диалектом Jscript, поэтому в командах меню и заголовках окон иногда встречается это название. На практике разница между этими двумя языками настолько мала, что программные средства одинаково успешно работают с любым из них.
Контекст JavaScript IntelliSense
Для того чтобы предотвратить случайные ссылки на несуществующие элементы в языке JavaScript, система Visual Studio 2013 использует понятие "контекст IntelliSense", основываясь на местоположении редактируемого блока конструкций на языке JavaScript. Этот контекст создается следующими элементами:
Текущий блок сценария. Включает в себя блоки сценариев для файлов .aspx, .ascx, .master, .html и .htm.
Любой файл сценариев, импортированный на текущую страницу с помощью элемента <script/> или элемента управления ScriptManager. В этом случае импортируемый файл должен иметь расширение .js.
Любой файл сценариев, на который есть ссылка в виде директивы ссылок (как описано в следующем разделе).
Любая ссылка на веб-службы XML.
Ссылка на еще один файл JavaScript
Иногда один файл JavaScript создается на основе функциональных возможностей другого (например, если вы используете библиотеку jQuery). Когда это происходит, эти файлы обычно ссылаются друг на друга на какой-то странице, используя друг друга, но не имеют явно определенных прямых ссылок. Из-за отсутствия явных ссылок система Visual Studio не может добавить файл с базовыми функциональными возможностями в контекст JavaScript IntelliSense, и в таком случае разработчик не получает полной поддержки со стороны системы IntelliSense.
Для того чтобы система Visual Studio могла найти базовый файл и добавить его в контекст, разработчик может вставить ссылку, используя директиву ссылок (references directive). Директива ссылок - это особая разновидность комментария, содержащего информацию о местоположении другого файла. С помощью директивы ссылок можно сослаться на любой из перечисленных ниже объектов:
Другие файлы языка JavaScript. К ним относятся файлы с расширением .js и файлы языка JavaScript, внедренные в сборки. Они не содержат абсолютных путей, поэтому файл, на который имеется ссылка, должен принадлежать текущему проекту.
Файлы веб-службы (.asmx). Они также должны быть частью текущего проекта, причем файлы веб-службы в проектах типа Web Application не поддерживаются.
Директиву ссылок обычно принято размещать в папке со скриптами, а файл называть _references.js. Рассмотрим несколько примеров директив ссылок. Они должны появляться для любого кода в файле на языке JavaScript:
Существует несколько ограничений, наложенных на директивы ссылок. Во-первых, директивы ссылок, ссылающиеся на путь, внешний по отношению к проекту, игнорируются. Во-вторых, директивы ссылок не могут вычисляться рекурсивно, поэтому для создания контекста используются только те директивы, которые существуют в редактируемом файле. Директивы ссылок в других файлах в контексте не используются.
В Visual Studio файл _references.js можно подключить в диалоговом окне Options (Tools --> Options) в разделе Text Editor --> JavaScript --> IntelliSense --> References. Обратите внимание, что данный раздел содержит список из нескольких библиотек, которые Visual Studio подключает по умолчанию.
XAML и IntelliSense
Visual Studio поддерживает возможности IntelliSense с момента появления XAML. Конструктивно, XAML имеет синтаксис XML, поэтому Visual Studio обеспечивает одни и те же возможности для XAML-файла, как и для любого файла XML, в котором Visual Studio знает о схеме документа. Благодаря этому, разработчикам очень легко работать с кодом XAML - различные элементы и связанные с ними атрибуты легко доступны через подсказки IntelliSense. Единственным недостатком является проблема в отображении связанных данных. Это происходит потому, что IntelliSense не может динамически разобрать контекст данных для элементов управления, используемых в XAML.
В Visual Studio 2013, IntelliSense для связывания данных доступно, но с некоторыми оговорками. Основное требование заключается в том, что контекст данных для XAML документа должен быть определен в документе. Если установить контекст данных за пределами XAML документа, что является обычной практикой, если вы используете шаблон Model-View-ViewModel (MVVM), то вам необходимо установить контекст данных в теле документа XAML во время разработки. Это не оказывает никакого влияния на функциональность среды выполнения вашей страницы XAML, но позволяет IntelliSense получить необходимую информацию.
Другая проблема заключается в том, как IntelliSense обрабатывает привязки данных ресурсов, таких как шаблоны данных. Эти шаблоны данных могут быть определены во внешнем словаре ресурсов, что делает невозможным использование IntelliSense для определения контекста данных. Для решения этой проблемы, вы можете непосредственно установить контекст данных во время разработки шаблона во внешнем словаре ресурсов. С другой стороны, после того, как контекст данных определяется на странице XAML, вы можете использовать команду Go To Definition ( F12 ) и Visual Studio автоматически скопирует контекст данных.
Возможности IntelliSense для XAML в основном аналогичны тем, что Visual Studio использует для языков программирования. XAML также включает в себя идею нечеткого соответствия. Как показано на рисунке ниже, выбран элемент StackPanel, хотя набранные символы StakPa только незначительно близки к правильному элементу:
Списки завершения
члены типа или пространства имен;
имена переменных, команд и функций;
Ключевые слова языка
Фрагменты кода в списках завершения
Ключевые слова языка в списках завершения
Методы расширения в списках завершения
В списке завершения отображаются не все методы расширения для объектов String.
В методах расширения используется не такой значок, как в методах экземпляра. Справочник по значкам списка вы найдете в статье Значки представления классов и обозревателя объектов. Если метод экземпляра и метод расширения с одинаковыми именами находятся в одной области, в списке завершения отображается значок метода расширения.
Фильтрованные списки завершения
Атрибуты. При применении атрибута к типу список завершения фильтруется таким образом, что в нем остаются только типы, которые получены из пространств имен, содержащих эти типы, например Attribute.
Предложения CATCH.
Инициализаторы объектов. В списке завершения будут отображаться только те элементы, которые могут быть инициализированы.
Ключевое слово new. При вводе new и нажатии клавиши ПРОБЕЛ появляется список завершения. Элемент в списке выбирается автоматически в зависимости от контекста в коде. Например, в списке завершения автоматически выбираются элементы для объявлений и операторов возврата в методах.
Ключевое слово enum. При нажатии клавиши ПРОБЕЛ после ввода знака равенства для назначения перечисления появляется список завершения. Элемент в списке выбирается автоматически в зависимости от контекста в коде. Например, в списке завершения автоматически выбираются элементы после ввода ключевого слова "return" и при объявлении.
Операторы AS и IS. Фильтрованный список завершения отображается автоматически при нажатии клавиши ПРОБЕЛ после ввода ключевого слова as или is .
События. При вводе ключевого слова event список завершения содержит только типы делегатов.
Справочная система по параметрам автоматически сортируется по первой перегрузке метода, соответствующей параметрам, по мере их ввода. Если существует несколько перегрузок метода, можно использовать кнопки со стрелками вверх и вниз для перехода к следующей возможной перегрузке в списке.
Недавно использовавшиеся члены
IntelliSense запоминает последние элементы, выбранные во всплывающем окне Список членов для автоматического завершения имени объекта. Когда вы откроете список членов в следующий раз, сверху будут отображаться элементы, которые недавно использовались. Журнал наиболее часто используемых членов списка очищается после завершения каждого сеанса Visual Studio.
override
Если ввести override, а затем нажать клавишу ПРОБЕЛ, IntelliSense покажет во всплывающем списке все допустимые элементы базового класса, которые можно переопределить. Если после приглашения override ввести тип возвращаемого значения метода, IntelliSense отобразит только методы, возвращающие этот тип. Если IntelliSense не сможет найти совпадения, будут показаны все члены базового класса.
IntelliSense с возможностями искусственного интеллекта
Расширение Visual Studio IntelliCode предоставляет списки завершения IntelliSense с использованием искусственного интеллекта. IntelliCode предсказывает, какой API будет наиболее подходящим, а не просто возвращает список членов в алфавитном порядке. Оно формирует список динамически на основе текущего контекста вашего кода.
Автоматическое генерирование кода
Добавить директиву using
Операция IntelliSense Добавить директиву using автоматически добавляет требуемую директиву using в файл кода. Это позволяет сосредоточить внимание на коде, который вы пишете, и не отвлекаться на другую часть кода.
Чтобы инициировать операцию Добавить директиву using, поместите курсор на ссылку на тип, которую не удается разрешить. Например, при создании консольного приложения и добавлении XmlReader в тело метода Main в соответствующей строке появляется подчеркивание красной волнистой линией, так как ссылку на тип не удается разрешить. После этого можно вызвать операцию Добавить директиву using, выбрав быстрое действие. Быстрые действия отображаются, только если курсор находится в несвязанном типе.
Щелкните значок лампочки с ошибкой и выберите пункт using System.Xml;, чтобы автоматически добавить директиву using.
Добавлять отсутствующие директивы using при вставке
Удаление и сортировка директив using
Параметр Удалить и сортировать директивы using позволяет сортировать и удалять объявления using и extern , не меняя поведение исходного кода. Со временем исходные файлы могут стать перегруженными, и их станет трудно читать по причине ненужных и неорганизованных директив using . Параметр Удалить и сортировать директивы using сжимает исходный код, удаляя неиспользуемые директивы using и улучшая читаемость путем их сортировки. В меню Правка выберите IntelliSense, а затем Упорядочить директивы Using.
Реализация интерфейса
Технология IntelliSense может облегчить реализацию интерфейса при работе в редакторе кода. Обычно для правильной реализации интерфейса нужно создать объявление метода для каждого члена интерфейса в классе. При использовании IntelliSense после ввода имени интерфейса в объявлении класса появляется значок быстрых действий в виде лампочки. Он позволяет выбрать вариант автоматической реализации интерфейса с помощью явного или неявного именования. При явном именовании объявления метода содержат имя интерфейса. В случае неявного именования объявления метода не указывают, к какому интерфейсу они принадлежат. Доступ к явно именованному методу интерфейса может осуществляться только через экземпляр интерфейса, а не через экземпляр класса. Дополнительные сведения см. в разделе Явная реализация интерфейса.
Реализация интерфейса создает минимально необходимый для работы интерфейса набор заглушек методов. Если базовый класс уже реализует часть интерфейса, заглушки не восстанавливаются.
Реализация абстрактного базового класса
IntelliSense предоставляет возможность автоматической реализации членов абстрактного базового класса при работе в редакторе кода. В обычном режиме для реализации членов абстрактного базового класса для каждого метода абстрактного базового класса в производном классе необходимо создать новое определение метода. При использовании IntelliSense после ввода имени абстрактного базового класса в объявлении класса появляется значок быстрых действий в виде лампочки. Он дает возможность автоматической реализации методов базового класса.
Заглушки метода, создаваемые функцией Реализовать абстрактный базовый класс, моделируются фрагментом кода, определенным в файле MethodStub.snippet. Фрагменты кода можно изменять. Подробнее см. в разделе Пошаговое руководство. Создание фрагмента кода.
Создание в результате использования
Возможность Создание в результате использования позволяет использовать классы и элементы до того, как они будут определены. Для любого класса, конструктора, метода, свойства, поля или перечисления, которое вы хотите использовать, но еще не определили, можно создать заглушку. Новые типы и члены можно создавать, не покидая текущего расположения в коде. Это сводит до минимума нарушения в рабочем процессе.
Щелкните неопределенный идентификатор. Под идентификатором появляется значок быстрых действий в виде лампочки с ошибкой. Щелкните лампочку с ошибкой.
Щелкните неопределенный идентификатор и нажмите клавиши CTRL+ . (CTRL+точка).
Щелкните неопределенный идентификатор правой кнопкой мыши и выберите пункт Быстрые действия и рефакторинг.
В число появившихся параметров могут входить следующие:
Сформировать свойство
Сформировать поле
Создание метода
Сформировать класс
Сформировать новый тип (для класса, структуры, интерфейса или перечисления)
Сформировать обработчики событий
В редакторе кода IntelliSense упрощает подключение методов (обработчиков событий) к полям событий.
Если ввести оператор += после поля события в файле CS, IntelliSense предложит нажать клавишу TAB. В результате будет вставлен новый экземпляр делегата, который указывает на метод, обрабатывающий событие.
При нажатии клавиши TAB IntelliSense автоматически завершает оператор и отображает ссылку на обработчик событий в виде выделенного текста в редакторе кода. Для завершения автоматического подключения события IntelliSense предлагает снова нажать клавишу TAB или создать пустую заглушку для обработчика событий.
Если новый делегат, созданный IntelliSense, ссылается на существующий обработчик событий, IntelliSense выводит эти сведения во всплывающей подсказке. Эту ссылку можно изменить — соответствующий текст уже выделен в редакторе кода. В противном случае автоматическое подключение события завершается на этом этапе.
При нажатии клавиши TAB IntelliSense заглушает метод с корректной сигнатурой и размещает указатель в теле обработчика событий.
IntelliSense — это имя, присвоенное набору возможностей, которые делают процесс кодирования более удобным. Технология IntelliSense для C++ доступна для автономных файлов, а также для файлов, являющихся частью проекта C++. В кроссплатформенных проектах некоторые возможности IntelliSense доступны в файлах .cpp и .c в проекте с общим кодом даже в том случае, если вы находитесь в контексте Android или iOS.
В этой статье представлены общие сведения о функциях IntelliSense в C++. Сведения о том, как настроить проект для IntelliSense, а также устранять проблемы, см. в статье Настройка проекта C++ для IntelliSense.
Возможности IntelliSense в C++
IntelliSense — это имя, присвоенное набору возможностей, которые делают процесс кодирования более удобным. У каждого человека существуют свои представления об удобстве, поэтому мы предоставили возможность включать и отключать почти все функции IntelliSense в разделе Текстовый редактор > C/C++ > Дополнительно в диалоговом окне Параметры. Диалоговое окно Параметры доступно через пункт Средства в строке меню.
Для доступа к IntelliSense можно использовать пункты меню и сочетания клавиш, показанные на следующем изображении.
Завершение операторов и список элементов
Когда вы набираете на клавиатуре ключевое слово, тип, функцию, имя переменной или другие программные элементы, распознаваемые компилятором, редактор подставляет полное слово.
При первом вызове списка элементов отображаются только те элементы, которые доступны для текущего контекста. Если нажать сочетание клавиш CTRL+J, вы увидите полный список элементов, независимо от их доступности. Если данный список вызвать третий раз, будет показан еще более широкой список программных элементов. Список элементов можно отключить в диалоговом окне Параметры, выбрав Текстовый редактор > C/C++ > Общие > Автоматически отображать список членов.
Справка по параметрам
При наборе на клавиатуре открывающей фигурной скобки для вызова функции или угловой скобки в объявлении переменной шаблона класса редактор отображает небольшое окно с типами параметров для каждого события перегрузки функции или конструктора. Полужирным шрифтом выделяется тот элемент, который считается активным в текущий момент. Сведения о параметрах можно отключить в диалоговом окне Параметры, выбрав Текстовый редактор > C/C++ > Общие > Сведения о параметрах.
Краткие сведения
При наведении курсора мыши на переменную появляется небольшое окно, где отображаются сведения о типе и заголовок, в котором определяется тип. Чтобы увидеть сигнатуру функции, наведите указатель мыши на вызов функции. Краткие сведения можно отключить в диалоговом окне Параметры, выбрав Текстовый редактор > C/C++ > Расширенные > Auto Quick Info (Автоматически предоставляемые краткие сведения).
Выделение ошибок
Волнистые линии под программным элементом (переменной, ключевым словом, фигурной скобкой, именем типа и т. д.) указывают на фактическую или возможную ошибку в коде. Зеленая волнистая линия появляется при написании опережающего объявления и напоминает о том, что необходимо написать реализацию. Фиолетовая волнистая линия появляется в общем проекте при наличии ошибки в коде, который не является активным, например, когда вы работаете в контексте Windows, но вводите что-то, что будет ошибкой в контексте Android. Красная волнистая линия указывает на ошибку компилятора или предупреждение в активном коде, с которыми необходимо разобраться.
Выделение кода цветом и шрифты
Используемые по умолчанию цвета и шрифты можно изменить в диалоговом окне Параметры, выбрав Среда > Шрифты и цвета. Здесь можно изменять шрифты не только для редактора, но и для различных окон пользовательского интерфейса. Параметры, относящиеся к C++, начинаются с «C++». Другие параметры относятся ко всем языкам.
Кроссплатформенная технология IntelliSense
В проекте с общим кодом некоторые возможности IntelliSense, например волнистые линии, доступны даже в том случае, если вы работаете в контексте Android. При написании кода, который приводит к ошибке в неактивном проекте, IntelliSense будет по-прежнему отображать волнистые линии, но они будут иметь другой цвет, чем волнистые линии для ошибок в текущем контексте.
Рассмотрим приложение OpenGLES, настроенное для сборки для Android и iOS. На иллюстрации показан редактируемый общий код. На этом изображении активным проектом является iOS.StaticLibrary:
Обратите внимание на следующее.
Переменная приветствия в строке 11 инициализируется с идентификатором HELLO , теперь подчеркнутым красной волнистой линией. Это вызвано тем, что идентификатор HELLO не определен в активном на данный момент проекте iOS.
Если вы измените активный проект на Android, волнистые линии изменятся:
Переменная приветствия в строке 11 инициализируется с идентификатором HELLO , подчеркнутым фиолетовой волнистой линией. Это вызвано тем, что идентификатор HELLO не определен в неактивном на данный момент проекте iOS.
Идентификатор BYE в строке 12 подчеркнут красной волнистой линией. Этот идентификатор не определен в активном проекте.
IntelliSense для автономных файлов
При открытии одного файла за пределами любого проекта функции IntelliSense по-прежнему остаются доступными. Отдельные возможности IntelliSense можно включить и (или) отключить в диалоговом окне Параметры, выбрав Текстовый редактор > C/C++ > Общие. Чтобы настроить IntelliSense для отдельных файлов, которые не входят в проект, найдите раздел IntelliSense и обозреватель для файлов, не входящих в проект.
По умолчанию в IntelliSense с одним файлом используются только стандартные каталоги включения для поиска файлов заголовка. Чтобы добавить дополнительные каталоги, откройте контекстное меню в узле Решение и добавьте каталог в список Исходный код отладки, как показано на следующей иллюстрации:
Включение и отключение функций
У каждого человека существуют свои представления об удобстве, поэтому мы предоставили возможность включать и отключать почти все функции IntelliSense в разделе Текстовый редактор > C/C++ > Дополнительно в диалоговом окне Параметры. Диалоговое окно Параметры доступно через пункт Средства в строке меню.
Система Visual Studio устанавливает много настроек средств IntelliSense по умолчанию, но многие из них можно изменить с помощью диалогового окна Options, если их значения, заданные по умолчанию, не устраивают разработчика. Некоторые из этих настроек связаны только с определенным языком программирования.
Общие настройки
Сначала рассмотрим настройки из группы Keyboard в разделе Environment. Каждой команде, доступной в системе Visual Studio, соответствует вполне определенная запись в списке комбинаций клавиш (на рисунке ниже показано диалоговое окно Options, которое открывается по команде Tools --> Options):
Комбинации клавиш, заданные по умолчанию, можно заменить или добавить новые. Комбинации клавиш для команд системы IntelliSense приведены в таблице ниже:
Выводит на экран информацию команды Quick Info о выбранном элементе
Пытается дополнить слово, если существует однозначное соответствие, или выводит список, если есть несколько совпадений
Переключает систему IntelliSense из режима подсказки в режим дополнения
Выводит на экран информацию о списке параметров вызываемой функции
Открывает диалоговое окно Code Snippet, в котором можно выбрать фрагмент кода, чтобы вставить его автоматически (создание и использование сниппетов мы рассмотрим позже)
Генерирует полную заглушку метода по шаблону
Генерирует определения абстрактного класса из заглушки
Генерирует явную реализацию интерфейса для определения класса
Генерирует неявную реализацию интерфейса для определения класса
Используя способы, описанные в статье "Горячие клавиши в Visual Studio", можно добавить новые комбинации клавиш или изменить существующие для любой команды.
Дополнение инструкции
Работой системы IntelliSense можно управлять либо в глобальном масштабе, как показано на рисунке ниже, либо для каждого языка программирования в отдельности. Для того чтобы определить способ вывода списка членов классов или вообще отменить его вывод, на закладке General в группе All Languages диалогового окна Options можно изменить настройки Statement Completion:
Во-первых, можно отключить список дополнений, чтобы они не появлялись автоматически. Некоторые разработчики предпочитают делать именно так, потому что списки членов классов мешают им набирать тексты своих программ. Если список дополнений выводится не автоматически, а только по вызову, то пользователь может сам решить, что включать в эти списки, помимо стандартных записей, включая ключевые слова и фрагменты кода.
Дополнительные возможности системы IntelliSense
Кроме основных аспектов технологии IntelliSense, в системе Visual Studio 2013 реализованы также дополнительные функциональные возможности интегрированной среды разработки, которые тоже относятся к этой технологии. Эти свойства подробно обсуждаются позже, а в этой статье приводится лишь их краткое описание.
Сниппеты
Сниппеты (code snippets) - это фрагменты кода, которые можно автоматически генерировать и вставлять в свой собственный код вместе с соответствующими ссылками и директивами using, помечая переменные фразы, чтобы облегчить их замену. Для того чтобы открыть диалоговое окно Code Snippets, следует нажать клавиши <Ctrl+K>, <Ctrl+X> .
В поисках требуемого сниппета можно перемещаться по иерархии каталогов сниппетов. Если разработчик знает комбинацию клавиш, установленную для конкретного сниппета, он может просто нажать ее и клавишу <Tab> , и система Visual Studio вставит сниппет, не открывая диалоговое окно. Мощь сниппетов будет продемонстрирована в одной из следующих статей.
Комментарии XML
Комментарии XML используются как способ автоматического документирования проектов и решений. Еще одним преимуществом использования XML-комментариев в своем коде является то, что система Visual Studio может использовать их в своей системе IntelliSense для вывода подсказок и более полной информации о параметрах, помимо простой информации о типах, как это делается в обычных пользовательских классах. Мы приведем примеры использования комментариев XML в одной из следующих статей.
Добавление собственных схем IntelliSense
Пользователь может добавить собственные схемы IntelliSense, которые бывают полезными для редактирования XML- и HTML-файлов. Для этого следует создать правильно отформатированный XML-файл и инсталлировать его в подкаталог Common7\Packages\schemas\xml каталога инсталляции системы Visual Studio (по умолчанию C:\Program Files\Microsoft Visual Studio ). Например, можно расширить возможности технологии IntelliSense для XML-редактора, включив свою собственную схему определений. Описание процесса создания таких схем, выходит за рамки нашего руководства, но о нем можно прочитать в статье "Функции IntelliSense редактора XML".
Итак, в этой и предыдущих статьях мы рассмотрели систему IntelliSense. Функциональные возможности технологии IntelliSense выходят за пределы основного окна редактирования кода. Мощь технологии IntelliSense, проявляющаяся в автоматическом дополнении инструкций и параметров, можно использовать во многих других инструментальных окнах, например Command и Immediate. Любые ключевые слова и даже переменные и объекты, известные в текущем контексте на протяжении сессии отладки, могут быть найдены с помощью списка членов классов IntelliSense. Технология IntelliSense во всех ее проявлениях значительно повышает эффективность работы системы Visual Studio по сравнению с большинством других доступных инструментов. Постоянно отслеживания нажатия клавиш, чтобы обеспечить обратную визуальную связь или автоматическое дополнение и генерацию кода, система IntelliSense позволяет разработчикам исключительно быстро, эффективно и правильно набирать программы с первой попытки.
Читайте также: