none
如何开发/扩展 VS 的 InteliSense 的显示语句完成插件? RRS feed

  • 问题

  • 看了这篇文章,演练: 显示语句完成

    但是其中的:

    在此示例中,标识符和及其说明是硬编码AugmentCompletionSession方法。 在大多数实际使用时,你将使用您的语言分析器来获取令牌以填充的完成列表。”

    void ICompletionSource.AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets)
        {
            List<string> strList = new List<string>();
            strList.Add("addition");    // * //
            strList.Add("adaptation");  // 硬 //
            strList.Add("subtraction");  // 编 //
            strList.Add("summation");  // 码 //
            m_compList = new List<Completion>();
            foreach (string str in strList)
                m_compList.Add(new Completion(str, str, str, null, null));
    
            completionSets.Add(new CompletionSet(
                "Tokens",    //the non-localized title of the tab
                "Tokens",    //the display title of the tab
                FindTokenSpanAtPosition(session.GetTriggerPoint(m_textBuffer),
                    session),
                m_compList,
                null));
        }

    它说的“语言分析器来获取令牌以填充的完成列表”是什么意思?具体如何操作?



    2017年4月4日 3:49

全部回复

  • 你好,

    >>它说的“语言分析器来获取令牌以填充的完成列表”是什么意思?具体如何操作?

    实例中是写死的List, 实际使用中很少这样做。 关于语言分析器来获取令牌以填充的完成列表, 你可以参考下面的代码。

    List<Intel.Completion> completions = new List<Intel.Completion>();  
                foreach (string item in LanguageTokens.Keywords.Keys)  
                {  
                     completions.Add(new Intel.Completion(item, item, LanguageTokens.Keywords[item], _glyph, item));  
               }  
    

    更多的内容,请参考:https://github.com/weidazhao/DockerTools2/pull/2/files

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月5日 7:07
  • 难道这个 

    LanguageTokens

    不是硬编码???

    我只是想获得默认的完成列表,然后加以重排序而已。


    2017年4月5日 14:44
  • 你好,

    >>不是硬编码???

    这个不是写死一些固定的值。里面的值来自LanguageTokens.

    >>我只是想获得默认的完成列表,然后加以重排序而已。

    你所谓的默认的完成列表指的是什么?

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月7日 5:30
  • 这个 LanguageTokens 也是硬编码啊,一个类,里面只有一个字典,字典里硬编码了字符串作为 Token。

    我指的默认完成列表是当我们键入字符时,智能感知提供的完成列表,我想对现有的完成列表进行改进,比如支持缩写:键入“mc”,完成列表的“MyClass”排名第一。

    2017年4月7日 10:16
  • 你好,

    >>这个 LanguageTokens 也是硬编码啊,一个类,里面只有一个字典,字典里硬编码了字符串作为  Token。

    你要这么理解也是可以的。

    >>我指的默认完成列表是当我们键入字符时,智能感知提供的完成列表,我想对现有的完成列表进行改进,比如支持缩写:键入“mc”,完成列表的“MyClass”排名第一。

    1. 缩写的话, 可以通过下面的代码来模拟了。按Tab或者Enter 键来获得MyClass.

     void ICompletionSource.AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets)
            {
    
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                dic["ad"] = "addition";
                dic["aa"] = "adaptation";
                dic["mc"] = "MyClass";
                dic["mb"] = "MbClass";
                dic["ma"] = "MaClass";
    
    
                m_compList = new List<Completion>();
                foreach (KeyValuePair<string,string> str in dic)
                    m_compList.Add(new Completion(str.Key, str.Value, str.Value, null, null));
    
                completionSets.Add(new CompletionSet(
                    "Tokens",    //the non-localized title of the tab
                    "Tokens",    //the display title of the tab
                    FindTokenSpanAtPosition(session.GetTriggerPoint(m_textBuffer),
                        session),
                    m_compList,
                    null));
            }

    2. 排序的话,是按照 数组的先后顺序来的。

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月11日 1:35
  • 晕,这样谁不会啊,我难道要为这个字典把 .NetFramework 里所有成员写进去?如果引用第三方库又得继续往字典里添加?能说重点吗?简直贴吧式回答,算了,弃坑。不用回了。
    2017年4月11日 3:35