本文整理汇总了C#中IInteractiveWindow.GetSupportsMultipleStatements方法的典型用法代码示例。如果您正苦于以下问题:C# IInteractiveWindow.GetSupportsMultipleStatements方法的具体用法?C# IInteractiveWindow.GetSupportsMultipleStatements怎么用?C# IInteractiveWindow.GetSupportsMultipleStatements使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IInteractiveWindow
的用法示例。
在下文中一共展示了IInteractiveWindow.GetSupportsMultipleStatements方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PasteReplCode
private static async Task PasteReplCode(
IInteractiveWindow window,
string pasting,
PythonLanguageVersion version
) {
// there's some text in the buffer...
var view = window.TextView;
var caret = view.Caret;
if (view.Selection.IsActive && !view.Selection.IsEmpty) {
foreach (var span in view.Selection.SelectedSpans) {
foreach (var normalizedSpan in view.BufferGraph.MapDownToBuffer(span, SpanTrackingMode.EdgeInclusive, window.CurrentLanguageBuffer)) {
normalizedSpan.Snapshot.TextBuffer.Delete(normalizedSpan);
}
}
}
var curBuffer = window.CurrentLanguageBuffer;
var inputPoint = view.BufferGraph.MapDownToBuffer(
caret.Position.BufferPosition,
PointTrackingMode.Positive,
curBuffer,
PositionAffinity.Successor
);
// if we didn't find a location then see if we're in a prompt, and if so, then we want
// to insert after the prompt.
if (caret.Position.BufferPosition != window.TextView.TextBuffer.CurrentSnapshot.Length) {
for (int i = caret.Position.BufferPosition + 1;
inputPoint == null && i <= window.TextView.TextBuffer.CurrentSnapshot.Length;
i++) {
inputPoint = view.BufferGraph.MapDownToBuffer(
new SnapshotPoint(window.TextView.TextBuffer.CurrentSnapshot, i),
PointTrackingMode.Positive,
curBuffer,
PositionAffinity.Successor
);
}
}
if (inputPoint == null) {
// we didn't find a point to insert, insert at the beginning.
inputPoint = new SnapshotPoint(curBuffer.CurrentSnapshot, 0);
}
// we want to insert the pasted code at the caret, but we also want to
// respect the stepping. So first grab the code before and after the caret.
string startText = curBuffer.CurrentSnapshot.GetText(0, inputPoint.Value);
string endText = curBuffer.CurrentSnapshot.GetText(
inputPoint.Value,
curBuffer.CurrentSnapshot.Length - inputPoint.Value);
var splitCode = JoinToCompleteStatements(SplitAndDedent(startText + pasting + endText), version).ToList();
curBuffer.Delete(new Span(0, curBuffer.CurrentSnapshot.Length));
bool supportMultiple = await window.GetSupportsMultipleStatements();
if (supportMultiple) {
await window.SubmitAsync(new[] { string.Join(Environment.NewLine, splitCode) });
} else if (splitCode.Count == 1) {
curBuffer.Insert(0, splitCode[0]);
var viewPoint = view.BufferGraph.MapUpToBuffer(
new SnapshotPoint(curBuffer.CurrentSnapshot, Math.Min(inputPoint.Value.Position + pasting.Length, curBuffer.CurrentSnapshot.Length)),
PointTrackingMode.Positive,
PositionAffinity.Successor,
view.TextBuffer
);
if (viewPoint != null) {
view.Caret.MoveTo(viewPoint.Value);
}
} else if (splitCode.Count != 0) {
var lastCode = splitCode[splitCode.Count - 1];
splitCode.RemoveAt(splitCode.Count - 1);
while (splitCode.Any()) {
var code = splitCode[0];
splitCode.RemoveAt(0);
await window.SubmitAsync(new[] { code });
supportMultiple = await window.GetSupportsMultipleStatements();
if (supportMultiple) {
// Might have changed while we were executing
break;
}
}
if (supportMultiple) {
// Submit all remaning lines of code
await window.SubmitAsync(new[] { string.Join(Environment.NewLine, splitCode) });
} else {
window.CurrentLanguageBuffer.Insert(0, lastCode);
}
} else {
window.CurrentLanguageBuffer.Insert(0, startText + pasting + endText);
}
}