我正在使用 Visual Studio 2022。我正在尝试编写自己的语言扩展,该扩展可以自动完成我的工作使用的自定义语言。我尝试过遵循文档、视频和聊天 gpt,但无法让自动完成功能正常工作,甚至无法在我的代码上加载符号。我创建了一个类来定义扩展和内容类型
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Utilities;
namespace OpcenterCoreLanguagePlugin.Types
{
public class FileAndContentTypeDefinitions
{
[Export]
[Name("CommonLanguageFunction")]
[BaseDefinition("text")]
internal static ContentTypeDefinition CommonLanguageFunctionDefinition;
[Export]
[ContentType("CommonLanguageFunction")]
[FileExtension(".clf")]
internal static FileExtensionToContentTypeDefinition CommonLanguageFunctionTypeDefinition;
}
}
然后我使用此代码创建了一个源提供程序:
[Export(typeof(ICompletionSourceProvider))]
[ContentType("CommonLanguageFunction")]
[Name("CLFAutoComplete")]
和完成处理程序
[Export(typeof(IVsTextViewCreationListener))]
[Name("CLFcompletionhandler")]
[ContentType("CommonLanguageFunction")]
[TextViewRole(PredefinedTextViewRoles.Editable)]
我的问题是这些符号似乎甚至没有加载这些类的实际代码。我没有包含代码,因为我认为它不一定相关。我只是想在开始编写实际逻辑之前获取要显示的静态字符串列表。
我还缺少其他步骤吗?我似乎找不到其他我应该做的事情。
我在我的项目中实现了以下接口:
IOleCommandTarget
IVsTextViewCreationListener
ICompletionSource
ICompletionSourceProvider
我基本上从 Visual Studio 说明中复制了代码 https://learn.microsoft.com/en-us/visualstudio/extensibility/walkthrough-displaying-statement-completion?view=vs-2022&tabs=csharp#create- a-mef-项目.
只是想看看在我删除他们的代码并将其替换为我自己的代码之前是否可以使其工作。
我试图为
.clf
的自定义文件类型创建自己的编辑器,并在输入字母时自动完成。
结果我必须在 vsix 文件中将该项目标记为 MEF 组件,以便读取类。找了好久才找到这个信息。