Quantcast
Channel: Visual Studio Integrate forum
Viewing all articles
Browse latest Browse all 4410

VS Extension - disabling errors from embedded code editor

$
0
0

Hi,

I'm embedding a c# code editor in a wpf control. I'm loading into it a temp file that is not part of the solution. 

The problem is that the code have parsing errors which shows up in the error list. Is there a way to make sure such errors will not appear in the error list?

Here is the code:

IVsInvisibleEditorManager invisibleEditorManager = (IVsInvisibleEditorManager)ServiceProvider.GlobalProvider.GetService(typeof(SVsInvisibleEditorManager));

ErrorHandler.ThrowOnFailure(invisibleEditorManager.RegisterInvisibleEditor(csTempFilePath, pProject: null,dwFlags: (uint)_EDITORREGFLAGS.RIEF_ENABLECACHING,
																		   pFactory: null, ppEditor: out this.invisibleEditor));

//The doc data is the IVsTextLines that represents the in-memory version of the file we opened in our invisibe editor, we need
//to extract that so that we can create our real (visible) editor.
IntPtr docDataPointer = IntPtr.Zero;
Guid guidIVSTextLines = typeof(IVsTextLines).GUID;
ErrorHandler.ThrowOnFailure(this.invisibleEditor.GetDocData(fEnsureWritable: 1, riid: ref guidIVSTextLines, ppDocData: out docDataPointer));

try
{
	IVsTextLines docData = (IVsTextLines)Marshal.GetObjectForIUnknown(docDataPointer);

	//Get the component model so we can request the editor adapter factory which we can use to spin up an editor instance.
	IComponentModel componentModel = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
	IVsEditorAdaptersFactoryService editorAdapterFactoryService = componentModel.GetService<IVsEditorAdaptersFactoryService>();

	//Create a code window adapter.
	this.codeWindow = editorAdapterFactoryService.CreateVsCodeWindowAdapter(OleServiceProvider);

	IVsCodeWindowEx codeWindowEx = (IVsCodeWindowEx)this.codeWindow;
	INITVIEW[] initView = new INITVIEW[1];
	codeWindowEx.Initialize((uint)_codewindowbehaviorflags.CWB_DISABLESPLITTER,
							 VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_Filter,
							 szNameAuxUserContext: "",
							 szValueAuxUserContext: "",
							 InitViewFlags: 0,
							 pInitView: initView);

	ErrorHandler.ThrowOnFailure(this.codeWindow.SetBuffer((IVsTextLines)docData));

	//Get our text view for our editor which we will use to get the WPF control that hosts said editor.
	ErrorHandler.ThrowOnFailure(this.codeWindow.GetPrimaryView(out this.textView));

	//Get our WPF host from our text view (from our code window).
	IWpfTextViewHost textViewHost = editorAdapterFactoryService.GetWpfTextViewHost(this.textView);

	textViewHost.TextView.Options.SetOptionValue(DefaultTextViewHostOptions.ChangeTrackingId, false);
	textViewHost.TextView.Options.SetOptionValue(DefaultTextViewOptions.ViewProhibitUserInputId, true);

	var dte = ContainerFactory.GetContainer().Resolve<DTE2>();
	var projectItem = dte.Solution.FindProjectItem(csTempFilePath);
	projectItem.Properties.Item("BuildAction").Value = prjBuildAction.prjBuildActionNone;

	return textViewHost.HostControl;
}
finally
{
	if (docDataPointer != IntPtr.Zero)
	{
		//Release the doc data from the invisible editor since it gave us a ref-counted copy.
		Marshal.Release(docDataPointer);
	}
}

Thanks,

Yoel


Viewing all articles
Browse latest Browse all 4410

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>