From 9f7d8a99b76e5a5932a2edc4990021271fb57449 Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Thu, 25 Apr 2024 10:14:07 +0200 Subject: [PATCH] quick commit --- GLSL_Shared/Errors/SquiggleTagger.cs | 55 +++++++++++----------------- 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/GLSL_Shared/Errors/SquiggleTagger.cs b/GLSL_Shared/Errors/SquiggleTagger.cs index 504aa05..b0e78f9 100644 --- a/GLSL_Shared/Errors/SquiggleTagger.cs +++ b/GLSL_Shared/Errors/SquiggleTagger.cs @@ -1,10 +1,10 @@ -using GLSLhelper; +using DMS.GLSL.Contracts; +using GLSLhelper; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Adornments; using Microsoft.VisualStudio.Text.Tagging; using System; using System.Collections.Generic; -using System.Linq; namespace DMS.GLSL.Errors { @@ -21,51 +21,38 @@ internal SquiggleTagger(ITextBuffer buffer) } } - public IEnumerable> GetTags(NormalizedSnapshotSpanCollection inputSpans) - { - if (!errors.Any()) yield break; - //TODO: parse error.message for offending words to narrow down span - //error.Message. - foreach (var inputSpan in inputSpans) - { - foreach (var error in errors) - { - var lineNumber = inputSpan.Start.GetContainingLine().LineNumber + 1; - if (error.LineNumber == lineNumber) - { - var tag = new ErrorTag(ConvertErrorType(error.Type), error.Message); - var span = new TagSpan(inputSpan, tag); - yield return span; - } - } - } - } - - private string ConvertErrorType(MessageType type) - { - switch (type) - { - case MessageType.Error: return PredefinedErrorTypeNames.SyntaxError; - case MessageType.Warning: return PredefinedErrorTypeNames.Warning; - default: return PredefinedErrorTypeNames.Suggestion; - } - } + public IEnumerable> GetTags(NormalizedSnapshotSpanCollection inputSpans) => _tags; public void UpdateErrors(IEnumerable errorLog) { - errors = errorLog; + _tags.Clear(); ErrorList.GetInstance().Clear(); - foreach (var error in errors) + + foreach (var error in errorLog) { var lineNumber = error.LineNumber.HasValue ? error.LineNumber.Value - 1 : 0; ErrorList.GetInstance().Write(error.Message, lineNumber, filePath, error.Type); + + var lineSpan = buffer.CurrentSnapshot.GetLineFromLineNumber(lineNumber).Extent; //TODO: parse error.message for offending words to trim down span + var tag = new ErrorTag(ConvertErrorType(error.Type), error.Message); + _tags.Add(new TagSpan(lineSpan, tag)); } var span = new SnapshotSpan(buffer.CurrentSnapshot, 0, buffer.CurrentSnapshot.Length); TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(span)); } - private IEnumerable errors = new List(); + private readonly List> _tags = new List>(); private readonly ITextBuffer buffer; private readonly string filePath; + + private static string ConvertErrorType(MessageType type) + { + switch (type) + { + case MessageType.Error: return PredefinedErrorTypeNames.SyntaxError; + case MessageType.Warning: return PredefinedErrorTypeNames.Warning; + default: return PredefinedErrorTypeNames.Suggestion; + } + } } }