LanguageService 类
这是提供语言功能包括公开的语法的语言服务的基类,匹配的大括号,自动完成, IntelliSense 支持和代码段展开。
此 API 不兼容 CLS。
继承层次结构
System.Object
Microsoft.VisualStudio.Package.LanguageService
命名空间: Microsoft.VisualStudio.Package
程序集: Microsoft.VisualStudio.Package.LanguageService.9.0(在 Microsoft.VisualStudio.Package.LanguageService.9.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService.10.0(在 Microsoft.VisualStudio.Package.LanguageService.10.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService.11.0(在 Microsoft.VisualStudio.Package.LanguageService.11.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService(在 Microsoft.VisualStudio.Package.LanguageService.dll 中)
语法
声明
<CLSCompliantAttribute(False)> _
<ComVisibleAttribute(True)> _
Public MustInherit Class LanguageService _
Implements IDisposable, IVsLanguageInfo, IVsLanguageDebugInfo, IVsProvideColorableItems, _
IVsLanguageContextProvider, IServiceProvider, IObjectWithSite, ISynchronizeInvoke, IVsDebuggerEvents, _
IVsFormatFilterProvider
[CLSCompliantAttribute(false)]
[ComVisibleAttribute(true)]
public abstract class LanguageService : IDisposable,
IVsLanguageInfo, IVsLanguageDebugInfo, IVsProvideColorableItems, IVsLanguageContextProvider, IServiceProvider,
IObjectWithSite, ISynchronizeInvoke, IVsDebuggerEvents, IVsFormatFilterProvider
LanguageService 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
LanguageService | 初始化 LanguageService 类的新实例。 |
页首
属性
名称 | 说明 | |
---|---|---|
InvokeRequired | 确定是否必须跨线程边界调用方法。 | |
IsActive | 确定语言服务是否已连接到当前视图并处于活动状态。 | |
IsDebugging | 确定调试器是否处于活动状态。 | |
IsParsing | 确定背景是否分析正在进行。 | |
LastActiveTextView | 返回最后一个有效的文本视图与此语言服务。 | |
MainThreadId | 返回此语言服务运行线程的 ID。 | |
Name | 返回该语言的名称 (例如, “C++”或 “HTML”)。 | |
ParseThreadIsAlive | ||
ParseThreadPaused | ||
Preferences | 提供对语言服务首选项。 | |
Site | 返回服务提供程序提供此语言服务。 |
页首
方法
页首
显式接口实现
名称 | 说明 | |
---|---|---|
IVsFormatFilterProvider.CurFileExtensionFormat | 返回索引到文件扩展名的列表与指定的文件名的扩展。 | |
IVsFormatFilterProvider.GetFormatFilterList | 返回文件扩展名筛选器列出适用于 保存 对话框。 | |
IVsFormatFilterProvider.QueryInvalidEncoding | 确定指定的源格式是否有效。 | |
IVsLanguageContextProvider.UpdateLanguageContext | 更新给定的当前用户帮助上下文给定源中的选定的区域。 |
页首
备注
Visual Studio 使用语言服务提供代码语言支持。 ,安装后,语言服务向 Visual Studio 注册语言服务包。 的一部分此注册过程来将文件扩展名与语言服务,在具有该扩展名的文件加载后,语言服务还加载。
LanguageService 类是语言服务的基类。 Visual Studio 实例化实现语言服务的 VSPackage 并调用在 VSPackage 中 SetSite 方法。 此方法的实现,在 Package 基类的 Initialize 方法调用。 重写 Initialize 方法实例化语言服务。 确保在实例化后调用语言服务的 SetSite 方法。
对实现者的说明
从此类派生类创建拥有语言服务。 您还必须,至少,实现 IScanner 接口的分析器。 语言服务的所有功能基于此分析器。
该以下方法和属性在类派生的 tom 标记为抽象类,并且必须实现 LanguageService 类:
将要实现的方法/属性 |
说明 |
---|---|
返回 LanguagePreferences 对象的方法。 |
|
返回 IScanner 对象的方法。 |
|
分析数据源的方法。 |
|
返回语言名称的只读属性 |
如果您不希望支持 ValidateBreakpointLocation ,但该语言支持断点,必须重写 ValidateBreakpointLocation 方法并返回包含指定的行和列的大小;否则,断点不能设置任何位置排除行将 1。 可以返回 E_NOTIMPL 指示您未以其他方式支持此方法,但必须始终设置范围。 在 ValidateBreakpointLocation 方法的示例显示了如何实现的。
对调用者的说明
注册语言服务,即使安装 VSPackage 时 (这可能是包专用语言服务也可以同时提供语言服务) 的项目包。 在实例化包中初始化时拥有语言服务。 Visual Studio 与语言服务以在该语言编写的代码支持的语言服务。 为此语言注册如何请参见下面的示例可完成。
示例
下面的示例演示如何注册并初始化包的语言服务。 注意: MyLanguageService 从 LanguageService 类派生。
using System.ComponentModel.Design;
using Microsoft.VisualStudio.Shell;
namespace MyLanguagePackage
{
/////////////////////////////////////////////
// Other package registration details go here
/////////////////////////////////////////////
// Offer a new language service
[ProvideServiceAttribute(typeof(MyLanguageService),
ServiceName = "My Language Service")]
// Register the language service with Visual Studio.
// "106" is the resource ID in the satellite DLL to the localized language name.
[ProvideLanguageServiceAttribute(typeof(MyLanguageService),"My Language",106)]
// Associate a file extension with our language service.
[ProvideLanguageExtensionAttribute(typeof(MyLanguageService), ".myext")]
class MyLanguagePackage : Package
{
protected override void Initialize()
{
base.Initialize();
IServiceContainer serviceContainer = this as IServiceContainer;
MyLanguageService languageService = new MyLanguageService();
languageService.SetSite(this);
serviceContainer.AddService(typeof(MyLanguageService),
languageService,
true);
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
请参见
参考
Microsoft.VisualStudio.Package 命名空间