C# применить исходный текст к документу DTE с изменениями строки - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь проанализировать изменения (которые я получил ранее с сервера) от фактического исходного текста до существующего в открытом документе. Но я думаю, что мне не хватает чего-то, чтобы позиционировать курсор, потому что он обрезает части кода, и только первая строка работает, как я. Код (комментарий в предложении if предназначен для имитации того, что файл поступает с сервера)

        DTE dte = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(DTE)) as DTE;
        var textDocument = dte.ActiveDocument.Object() as TextDocument;
        var cursorPosition = textDocument.Selection.ActivePoint.AbsoluteCharOffset;
        var editPoint = textDocument.StartPoint.CreateEditPoint();
        var documentSourceText = CSharpSyntaxTree.ParseText(editPoint.GetText(textDocument.EndPoint)).GetRoot().GetText();
        var fileSourceText = SourceText.From(ToString());
        int i = 0;
        while(i < documentSourceText.Lines.Count)
        {
            if (i < fileSourceText.Lines.Count) //&& !line.ToString().Equals(fileSourceText.Lines[i].ToString())
            {
                if(i == 0)
                    editPoint.MoveToAbsoluteOffset(documentSourceText.Lines[i].Start + 1);
                else
                {
                    editPoint.MoveToAbsoluteOffset(documentSourceText.Lines[i].Start);
                }
                editPoint.Delete(documentSourceText.Lines[i].End);
                editPoint.Insert(fileSourceText.Lines[i].ToString());
            }
            else if (i >= fileSourceText.Lines.Count)
            {
                editPoint.MoveToAbsoluteOffset(documentSourceText.Lines[i].Start + 1);
                editPoint.Delete(documentSourceText.Lines[i].EndIncludingLineBreak);
            }
            i++;
        }

        dte.ActiveDocument.Save();
        textDocument.Selection.MoveToAbsoluteOffset(cursorPosition >= textDocument.EndPoint.AbsoluteCharOffset ? textDocument.EndPoint.AbsoluteCharOffset : cursorPosition );

Ввод выглядит примерно так:

using System;
namespace ConsoleApp13
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Вывод выглядит следующим образом:

using System;
olnamespace ConsoleApp13d {ne    class Progra            static void Main(string[] a                 Console.WriteLine("Hello Wor         }

Может ли кто-нибудь помочь мне наглядно и хорошо сравнить 2 исходных файла и вставить их в документ dte?

Заранее спасибо!

...