Поделиться через


Сведения о параметрах MPF (intellisense)

Сведения о параметрах IntelliSense подсказку, которая указывает сигнатуру метода когда пользователь вводит знак начала списка параметров открытую круглую скобку (обычно) для просмотра списка параметров метода. Так как каждый параметр введен и разделителя параметра (запятая) типизируется как правило, подсказка обновится, чтобы показать следующий параметр полужирным шрифтом.

Управляемые классы платформы пакета (MPF) предоставляют поддержку для управления tooltip сведения о параметрах. Средство синтаксического анализа должно определить начало параметра, параметр далее и символы конца параметра, и оно должно предоставить список сигнатур методов и связанные с ними параметры.

Реализация

Средство синтаксического анализа должно установить значение триггера ParameterStart задается при обнаружении знак начала списка параметров часто открытую круглую скобку (). Он должен установить a ParameterNext триггер при обнаружении разделителя параметра (часто запятая). В результате подсказку сведения о параметрах, должны быть обновлены и отображает следующий параметр полужирным шрифтом. Средство синтаксического анализа должно установить значение триггера ParameterEnd если находит если знак конца списка параметров (часто близкая скобка).

MethodTip значение начнет вызов триггера ParseSource метод, который, в свою очередь, вызывает MethodTipсредство синтаксического анализа метода с причиной анализ ParameterStart . Если средство синтаксического анализа, указывающее, что идентификатор, прежде чем символ начала списка параметров определяемым имя метода, он возвращает список сопоставлении сигнатур методов в AuthoringScope объект. Если какие-либо подписи методов найдены, то подсказка сведения о параметрах отображается с первым подписи в списке. Эта подсказка затем обновлена в виде нескольких подписи. Если знак конца списка параметров типизирован, подсказка сведения о параметрах удаляется из представления.

Примечание

Чтобы убедиться, что подсказка сведения о параметрах правильно форматируется необходимо переопределить свойства Methods класс, чтобы предоставить соответствующие символы.Base Methods класс имеет сигнатуру метода в стиле языка C.См. Methods класс подробные сведения о том, как это можно сделать.

Включение поддержки дополнительные сведения о параметрах

Для поддержки подсказок сведения о параметрах, необходимо установить ShowCompletion параметр ProvideLanguageServiceAttribute В true. Служба языка считывает значение этой записи реестра из EnableCodeSense свойство.

Кроме того, ParameterInformation свойству должно быть присвоено true для подсказки сведения о параметрах для отображения.

Пример

Ниже приведен упрощенный примере определить символы списка параметров и присвоив соответствующие триггеры. В этом примере для иллюстративных целях. Он предполагает, что читатель содержит метод GetNextToken это определяет и возвращает токены из линий текста. Код примера просто устанавливает триггеры, когда он видит правильный тип символа.

using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;

namespace TestLanguagePackage
{
    public class TestScanner : IScanner
    {
        private Lexer lex;
        private const char parameterListStartChar = '(';
        private const char parameterListEndChar   = ')';
        private const char parameterNextChar      = ',';

        public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo,
                                                   ref int state)
        {
            bool foundToken = false
            string token = lex.GetNextToken();
            if (token != null)
            {
                foundToken = true;
                char c = token[0];
                if (Char.IsPunctuation(c))
                {
                    tokenInfo.Type = TokenType.Operator;
                    tokenInfo.Color = TokenColor.Keyword;
                    tokenInfo.EndIndex = index;
                    
                    if (c == parameterListStartChar)
                    {
                        tokenInfo.Trigger |= TokenTriggers.ParameterStart;
                    }
                    else if (c == parameterListNextChar)
                    {
                        tokenInfo.Trigger |= TokenTriggers.ParameterNext;
                    else if (c == parameterListEndChar)
                    {
                        tokenInfo.Trigger |= TokenTriggers.ParameterEnd;
                    }
                }
            return foundToken;
        }
    }
}

Поддержка подсказку сведения о параметрах в средстве синтаксического анализа

Source класс выполняет некоторые предположения о содержимом AuthoringScope и AuthoringSink классы и обновляется при отображении подсказки сведения о параметрах.

  • Средство синтаксического анализа задается MethodTip если символ начала списка параметров типизирован.

  • Расположение, указанное в качестве ParseRequest объект немедленно после символа начала списка параметров. Средство синтаксического анализа должно собрать подписи всех объявлений методов, доступных на этой позиции и сохранения их в списке в вашей версии AuthoringScope объект. Этот список содержит имя метода типа метода (или возвращаемый тип) и список возможных параметров. Этот список далее искать сигнатуры метода или подписей для отображения в подсказке сведения о параметрах.

Средство синтаксического анализа должно затем проанализировать линия указанная ParseRequest объект для получения имени, введенными метода, так же как расстояние вдоль пользователя ввести параметры. Это достигается путем передачи в имя метода StartName метод AuthoringSink объект, а затем вызвать StartParameters метод, если знак начала списка параметров, проверен, вызывающий NextParameter метод, если символ списка параметров, проверен и, наконец, вызвать next EndParameters метод, если знак конца списка параметров, проверен. Результаты этих вызовов метода используются Source класс для обновления подсказка сведения о параметрах.

Пример

Здесь линия пользователь может вводить текст. Числа отображаются под линией, предпринят средством синтаксического анализа в этой позиции линии (предполагая, что анализ перемещении слева направо). Здесь предположение, что все, прежде чем линия уже была проанализирована для сигнатур метода, включая сигнатуры метода "testfunc".

    testfunc("a string",3);
         ^^          ^ ^
         12          3 4

, Которые средство синтаксического анализа конспектированы выполняет указанные ниже:

  1. Вызовы средства синтаксического анализа StartName с текстом "testfunc".

  2. Вызовы средства синтаксического анализа StartParameters.

  3. Вызовы средства синтаксического анализа NextParameter.

  4. Вызовы средства синтаксического анализа EndParameters.