IntelliSense 参数信息 (托管包结构)

IntelliSense 参数信息是公开方法签名的工具提示,当用户启动字符的用户类型 (通常为一个左括号时) 方法的参数列表。 在每个参数中输入,并参数分隔符 (通常为英文逗号) 类型化,以粗体更新工具提示显示下一个参数。

托管包框架 (MPF)类提供用于管理参数信息工具提示支持。 该分析器必须接下来检测参数开头、参数和参数结束字符,因此,它必须提供方法签名及其关联的参数的列表。

实现

该分析器应设置触发器值 ParameterStart 设置,当找到参数列表启动字符时 (通常为一个左括号)。 它应设置 ParameterNext 触发器,当找到一个参数分隔符时 (通常逗号)。 在粗体导致参数信息工具提示更新并显示下一个参数。 该分析器应设置触发器值 ParameterEnd ,当,则查找参数列表尾字符 (通常一个右括号)。

ParameterStart 触发器值启动对 MethodTip 方法,然后调用与 MethodTip分析原因的 ParseSource 方法分析程序。 如果该分析器确定此标识符,在参数列表之前启动字符是一个无法识别的方法名称,它将返回匹配方法签名列表中 AuthoringScope 对象的。 如果找到任何方法签名,参数信息工具提示显示与列表中的第一个签名。 然后更新此工具提示更多该签名中键入。 当参数列表时结束字符类型化,参数信息工具提示从视图中移除。

备注

若要确保参数信息工具提示正确的格式时,必须重写在 Methods 类的属性提供适当的字符。基础 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 类对 AuthoringScopeAuthoringSink 类的内容的某些假设。

  • ,当参数列表开始键入字符时,为分析器 MethodTip

  • ParseRequest 对象提供的位置是,在参数列表中启动一个字符之后。 该分析器在列表中必须收集任何方法声明签名可用于该位置和存储在 AuthoringScope 对象的版本。 此列表包含方法名称、方法类型 (或返回类型) 和可能的参数列表。 这将参数信息工具提示列表之后搜索方法签名或签名显示。

该分析器必须将分析 ParseRequest 对象指定的行收集所输入的方法的名称以及沿用户进度在键入的参数。 这是通过通过该方法的名称完成对 AuthoringSink 对象的 StartName 然后调用方法 StartParameters 方法,当用户启动字符时进行分析,调用 NextParameter 方法,以便在列表下一个字符时分析和最后调用 EndParameters 方法,当参数列表尾字符时分析。 调用方法 Source 类使用这些结果的相应地更新参数信息工具提示。

示例

这是用户可以输入文本的行。 低于线的数字指示哪个步骤由分析器对行中的该位置 (假定分析从左到右移动)。 此处该假定所有内容,在行的方法签名之前已分析,包括 “testfunc”方法签名。

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

该分析器采取的步骤如下:概述

  1. 该分析器调用且带有文本 “testfunc”的 StartName

  2. 该分析器调用 StartParameters

  3. 该分析器调用 NextParameter

  4. 该分析器调用 EndParameters