I am working on creating a basic language service extension
The Below is the code for language service
[ComVisible(true)]
[Guid("5CE7002C-0B61-47AB-9B99-EA0F62E0CE42")]
class CustomLanguageService : LanguageService
{
public const string LanguageName = "Custom Language";
public const string LanguageExtension = ".kav";
private LanguagePreferences _preferences;
public override string Name
{
get
{
return LanguageName;
}
}
public override LanguagePreferences GetLanguagePreferences()
{
if (this._preferences == null)
{
this._preferences = new LanguagePreferences(this.Site, typeof(CustomLanguageService).GUID, this.Name);
this._preferences.Init();
this._preferences.EnableCommenting = true;
}
return this._preferences;
}
public override IScanner GetScanner(IVsTextLines buffer)
{
return null;
}
public override AuthoringScope ParseSource(ParseRequest req)
{
return null;
}
public override string GetFormatFilterList()
{
return "Custom Language (*.kav)\n*.kav";
}
public override Source CreateSource(IVsTextLines buffer)
{
return new CustomLanguageSource(this, buffer, this.GetColorizer(buffer));
}
}
This is My Package Code
[PackageRegistration(UseManagedResourcesOnly = true)]
[DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\10.0")]
[ProvideObject(typeof(GeneralPropertyPage))]
[ProvideProjectFactory(typeof(MyCustomProjectFactory), "My Custom Project", "My Custom Project Files (*.myproj);*.myproj", "myproj", "myproj", @"..\..\Templates\Projects\MyCustomProject", LanguageVsTemplate = "MyCustomProject", NewProjectRequireNewFolderVsTemplate = false)]
[ProvideProjectItem(typeof(MyCustomProjectFactory), "My Items", @"..\..\Templates\ProjectItems\MyCustomProject", 500)]
[Guid(GuidStrings.guidCustomProjectPkgString)]
[ProvideService(typeof(CustomLanguageService))]
[ProvideLanguageExtension(typeof(CustomLanguageService), CustomLanguageService.LanguageExtension)]
[ProvideLanguageService(typeof(CustomLanguageService), CustomLanguageService.LanguageName, 0, EnableCommenting = true)]
public sealed class CustomProjectPackage : ProjectPackage
{
private CustomLanguageService _customLanguageService;
#region Overridden Implementation
protected override void Initialize()
{
base.Initialize();
this.RegisterProjectFactory(new MyCustomProjectFactory(this));
_customLanguageService = new CustomLanguageService();
_customLanguageService.SetSite(this);
IServiceContainer serviceContainer = (IServiceContainer)this;
serviceContainer.AddService(typeof(CustomLanguageService), _customLanguageService, true);
}
public override string ProductUserContext
{
get { return "CustomProj"; }
}
#endregion
}
Under the right click menu of the editor, the menus "Go To Definition", "Go To Declaration" and "Go To Reference' are visible.
As I am not implementing these right now I don't want these options.
I tried disabling the menus by using the IOleCommandTarget.QueryStatus and IOleCommandTarget.Exec functions. However, doing this only hides the "Go To Definition" and "Go To Declaration" menus, the "Go To Reference" stays visible. I am using the following code to hide them:
int IOleCommandTarget.QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
{
if (Microsoft.VisualStudio.Project.VsMenus.guidStandardCommandSet97 == pguidCmdGroup)
{
switch ((uint)prgCmds[0].cmdID)
{
case (uint)VsCommands.GotoDecl:
case (uint)VsCommands.GotoDefn:
case (uint)VsCommands.GotoRef:
prgCmds[0].cmdID |= (uint)QueryStatusResult.NOTSUPPORTED | (uint)QueryStatusResult.INVISIBLE;
return VSConstants.S_OK;
}
}
return _commandTarget.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText);
}
Is there a better way through the language service itself which helps me in disabling this?
