Visual Studio 2022 HTML 编辑器自定义 Intellisense - IHtmlCompletionListProvider

Visual Studio 2022 HTML Editor Custom Intellisense - IHtmlCompletionListProvider

我们正在尝试将 Visual Studio 2019 扩展迁移到 Visual Studio 2022。 扩展提供了几个功能,但一个不起作用的功能是“HtmlCompletionProvider”。 我们正在使用它在 VS2019 的 HTML 编辑器中提供自定义元素和属性。

这就是我们的补全 类 的定义方式。

 [HtmlCompletionProvider("Children", "*")]
 [ContentType("htmlx")]
 [Name("DurandalElementsCompletionProvider")]
 public class DurandalElementsCompletionProvider : IHtmlCompletionListProvider

接口在 Microsoft.WebTools.Languages.Html.Editor 程序集中定义。

这个接口允许我们插入现有的 VS2019 智能感知并提供额外的条目。

在 Visual Studio 2022 年内执行此操作的正确方法是什么? 没有我们可以通过谷歌搜索找到的文档。

我们最接近的解释是新 Visual Studio 正在使用定义在以下语言中的 LanguageService: C:\Program Files\Microsoft Visual Studio22\Enterprise\Common7\IDE\Extensions\Microsoft\Web Tools\Languages\LanguageServers\Microsoft.WebTools.Languages.LanguageServer.Server.dll

我们假设 VS2022 不支持提供“HtmlCompletionProvider”的旧方法。

Angular 正在使用 IHtmlCompletionListProvider 作为它的扩展。

https://devblogs.microsoft.com/visualstudio/angular-language-service-for-visual-studio/

他们如何使用 IHTMLCompletionListProvider

的代码示例

https://github.com/microsoft/vs-ng-language-service/blob/main/AngularLanguageService/AngularHtmlCompletionProvider.cs

他们基本上使用它作为代理来调用他们的 LanguageService。

据我所知,VS2022 没有 Angular 扩展(所以我们可以看看它是如何完成的)。

亲切的问候, Goran Vukoja

我们解决了。

我们反编译了Microsoft.WebTools.Languages.Html.Editor.dll,看看默认的 HTMLCompletionListProvider 是如何定义的。 您应该使用 ContentType("html"),而不是 ContentType("htmlx").

[HtmlCompletionProvider("Children", "*")]
[ContentType("html")]
[Name("DurandalElementsCompletionProvider")]
public class DurandalElementsCompletionProvider : IHtmlCompletionListProvider