本文整理汇总了C#中IVsExpansionSession类的典型用法代码示例。如果您正苦于以下问题:C# IVsExpansionSession类的具体用法?C# IVsExpansionSession怎么用?C# IVsExpansionSession使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IVsExpansionSession类属于命名空间,在下文中一共展示了IVsExpansionSession类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnBeforeInsertion
public int OnBeforeInsertion(IVsExpansionSession pSession)
{
return VSConstants.S_OK;
}
示例2: OnAfterInsertion
public int OnAfterInsertion(IVsExpansionSession pSession)
{
Logger.Log(FunctionId.Snippet_OnAfterInsertion);
return VSConstants.S_OK;
}
示例3: InsertNamedExpansion
public int InsertNamedExpansion(string bstrTitle, string bstrPath, TextSpan tsInsertPos, IVsExpansionClient pExpansionClient, Guid guidLang, int fShowDisambiguationUI, out IVsExpansionSession pSession) {
throw new NotImplementedException();
}
示例4: InsertSpecificExpansion
public int InsertSpecificExpansion(MSXML.IXMLDOMNode pSnippet, TextSpan tsInsertPos, IVsExpansionClient pExpansionClient, Guid guidLang, string pszRelativePath, out IVsExpansionSession pSession) {
throw new NotImplementedException();
}
示例5: InsertExpansion
public int InsertExpansion(TextSpan tsContext, TextSpan tsInsertPos, IVsExpansionClient pExpansionClient, Guid guidLang, out IVsExpansionSession pSession) {
throw new NotImplementedException();
}
示例6: AddReferencesAndImports
private void AddReferencesAndImports(
IVsExpansionSession pSession,
int position,
CancellationToken cancellationToken)
{
if (!TryGetSnippetNode(pSession, out var snippetNode))
{
return;
}
var documentWithImports = this.SubjectBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges();
if (documentWithImports == null)
{
return;
}
var documentOptions = documentWithImports.GetOptionsAsync(cancellationToken).WaitAndGetResult(cancellationToken);
var placeSystemNamespaceFirst = documentOptions.GetOption(GenerationOptions.PlaceSystemNamespaceFirst);
documentWithImports = AddImports(documentWithImports, position, snippetNode, placeSystemNamespaceFirst, cancellationToken);
AddReferences(documentWithImports.Project, snippetNode);
}
示例7: SetEndPositionIfNoneSpecified
/// <summary>
/// If there was no $end$ token, place it at the end of the snippet code. Otherwise, it
/// defaults to the beginning of the snippet code.
/// </summary>
private static bool SetEndPositionIfNoneSpecified(IVsExpansionSession pSession)
{
XElement snippetNode;
if (!TryGetSnippetNode(pSession, out snippetNode))
{
return false;
}
var ns = snippetNode.Name.NamespaceName;
var codeNode = snippetNode.Element(XName.Get("Code", ns));
if (codeNode == null)
{
return false;
}
var delimiterAttribute = codeNode.Attribute("Delimiter");
var delimiter = delimiterAttribute != null ? delimiterAttribute.Value : "$";
if (codeNode.Value.IndexOf(string.Format("{0}end{0}", delimiter), StringComparison.OrdinalIgnoreCase) != -1)
{
return false;
}
var snippetSpan = new VsTextSpan[1];
if (pSession.GetSnippetSpan(snippetSpan) != VSConstants.S_OK)
{
return false;
}
var newEndSpan = new VsTextSpan
{
iStartLine = snippetSpan[0].iEndLine,
iStartIndex = snippetSpan[0].iEndIndex,
iEndLine = snippetSpan[0].iEndLine,
iEndIndex = snippetSpan[0].iEndIndex
};
pSession.SetEndSpan(newEndSpan);
return true;
}
示例8: TryGetSnippetNode
protected static bool TryGetSnippetNode(IVsExpansionSession pSession, out XElement snippetNode)
{
IXMLDOMNode xmlNode = null;
snippetNode = null;
try
{
// Cast to our own version of IVsExpansionSession so that we can get pNode as an
// IntPtr instead of a via a RCW. This allows us to guarantee that it pNode is
// released before leaving this method. Otherwise, a second invocation of the same
// snippet may cause an AccessViolationException.
var session = (IVsExpansionSessionInternal)pSession;
IntPtr pNode;
if (session.GetSnippetNode(null, out pNode) != VSConstants.S_OK)
{
return false;
}
xmlNode = (IXMLDOMNode)Marshal.GetUniqueObjectForIUnknown(pNode);
snippetNode = XElement.Parse(xmlNode.xml);
return true;
}
finally
{
if (xmlNode != null && Marshal.IsComObject(xmlNode))
{
Marshal.ReleaseComObject(xmlNode);
}
}
}
示例9: OnAfterInsertion
public virtual int OnAfterInsertion(IVsExpansionSession session) {
return NativeMethods.S_OK;
}
示例10: OnItemChosen
public int OnItemChosen(string pszTitle, string pszPath) {
int hr = VSConstants.E_FAIL;
if (!TextView.Caret.InVirtualSpace) {
SnapshotPoint caretPoint = TextView.Caret.Position.BufferPosition;
IVsExpansion expansion = TextBuffer.GetBufferAdapter<IVsExpansion>();
_earlyEndExpansionHappened = false;
_title = pszTitle;
var ts = TextSpanFromPoint(caretPoint);
hr = expansion.InsertNamedExpansion(pszTitle, pszPath, ts, this, RGuidList.RLanguageServiceGuid, 0, out _expansionSession);
if (_earlyEndExpansionHappened) {
// EndExpansion was called before InsertNamedExpansion returned, so set _expansionSession
// to null to indicate that there is no active expansion session. This can occur when
// the snippet inserted doesn't have any expansion fields.
_expansionSession = null;
_earlyEndExpansionHappened = false;
_title = null;
_shortcut = null;
}
}
return hr;
}
示例11: InsertNamedExpansion
public int InsertNamedExpansion(string pszTitle, string pszPath, TextSpan textSpan) {
if (_session != null) {
// if the user starts an expansion session while one is in progress
// then abort the current expansion session
_session.EndCurrentExpansion(1);
_session = null;
}
var selection = _textView.Selection;
var snapshot = selection.Start.Position.Snapshot;
_selectionStart = snapshot.CreateTrackingPoint(selection.Start.Position, VisualStudio.Text.PointTrackingMode.Positive);
_selectionEnd = snapshot.CreateTrackingPoint(selection.End.Position, VisualStudio.Text.PointTrackingMode.Negative);
_selectEndSpan = _sessionEnded = false;
int hr = _expansion.InsertNamedExpansion(
pszTitle,
pszPath,
textSpan,
this,
GuidList.guidPythonLanguageServiceGuid,
0,
out _session
);
if (ErrorHandler.Succeeded(hr)) {
if (_sessionEnded) {
_session = null;
}
}
return hr;
}
示例12: OnItemChosen
public int OnItemChosen(string pszTitle, string pszPath)
{
var hr = VSConstants.S_OK;
try
{
VsTextSpan textSpan;
GetCaretPositionInSurfaceBuffer(out textSpan.iStartLine, out textSpan.iStartIndex);
textSpan.iEndLine = textSpan.iStartLine;
textSpan.iEndIndex = textSpan.iStartIndex;
IVsExpansion expansion = EditorAdaptersFactoryService.GetBufferAdapter(TextView.TextBuffer) as IVsExpansion;
earlyEndExpansionHappened = false;
hr = expansion.InsertNamedExpansion(pszTitle, pszPath, textSpan, this, LanguageServiceGuid, fShowDisambiguationUI: 0, pSession: out ExpansionSession);
if (earlyEndExpansionHappened)
{
// EndExpansion was called before InsertNamedExpansion returned, so set
// expansionSession to null to indicate that there is no active expansion
// session. This can occur when the snippet inserted doesn't have any expansion
// fields.
ExpansionSession = null;
earlyEndExpansionHappened = false;
}
}
catch (COMException ex)
{
hr = ex.ErrorCode;
}
return hr;
}
示例13: TryHandleBackTab
public virtual bool TryHandleBackTab()
{
if (ExpansionSession != null)
{
var tabbedInsideSnippetField = VSConstants.S_OK == ExpansionSession.GoToPreviousExpansionField();
if (!tabbedInsideSnippetField)
{
ExpansionSession.EndCurrentExpansion(fLeaveCaret: 1);
ExpansionSession = null;
}
return tabbedInsideSnippetField;
}
return false;
}
示例14: TryHandleReturn
public virtual bool TryHandleReturn()
{
// TODO(davip): Only move the caret if the enter was hit within the editable spans
if (ExpansionSession != null)
{
ExpansionSession.EndCurrentExpansion(fLeaveCaret: 0);
ExpansionSession = null;
return true;
}
return false;
}
示例15: TryHandleReturn
public virtual bool TryHandleReturn()
{
if (ExpansionSession != null)
{
// Only move the caret if the enter was hit within the snippet fields.
var hitWithinField = VSConstants.S_OK == ExpansionSession.GoToNextExpansionField(fCommitIfLast: 0);
ExpansionSession.EndCurrentExpansion(fLeaveCaret: hitWithinField ? 0 : 1);
ExpansionSession = null;
return hitWithinField;
}
return false;
}