コード例 #1
0
ファイル: LspEditorUtilities.cs プロジェクト: int19h/PTVS
        internal static void ApplyTextEdits(IEnumerable <TextEdit> textEdits, ITextSnapshot snapshot, ITextBuffer textBuffer)
        {
            var vsTextEdit = textBuffer.CreateEdit();

            foreach (var textEdit in textEdits)
            {
                if (textEdit.Range.Start == textEdit.Range.End)
                {
                    var position = snapshot.GetSnapshotPositionFromProtocolPosition(textEdit.Range.Start);
                    if (position > -1)
                    {
                        var span = GetTranslatedSpan(position, 0, snapshot, vsTextEdit.Snapshot);
                        vsTextEdit.Insert(span.Start, textEdit.NewText);
                    }
                }
                else if (string.IsNullOrEmpty(textEdit.NewText))
                {
                    var startPosition = snapshot.GetSnapshotPositionFromProtocolPosition(textEdit.Range.Start);
                    var endPosition   = snapshot.GetSnapshotPositionFromProtocolPosition(textEdit.Range.End);
                    var difference    = endPosition - startPosition;
                    if (startPosition > -1 && endPosition > -1 && difference > 0)
                    {
                        var span = GetTranslatedSpan(startPosition, difference, snapshot, vsTextEdit.Snapshot);
                        vsTextEdit.Delete(span);
                    }
                }
                else
                {
                    var startPosition = snapshot.GetSnapshotPositionFromProtocolPosition(textEdit.Range.Start);
                    var endPosition   = snapshot.GetSnapshotPositionFromProtocolPosition(textEdit.Range.End);
                    var difference    = endPosition - startPosition;

                    if (startPosition > -1 && endPosition > -1 && difference > 0)
                    {
                        var span = GetTranslatedSpan(startPosition, difference, snapshot, vsTextEdit.Snapshot);
                        vsTextEdit.Replace(span, textEdit.NewText);
                    }
                }
            }

            vsTextEdit.Apply();
        }