public override void VisitNode(ITreeNode node, IHighlightingConsumer consumer) { if (!myInternalMode && myProcessKind != DaemonProcessKind.VISIBLE_DOCUMENT) { return; } if (myProcessKind == DaemonProcessKind.VISIBLE_DOCUMENT) { // TODO: Highlight identifiers // if (myIdentifierHighlightingEnabled) var info = myVisualElementHighlighter.CreateColorHighlightingInfo(node); if (info != null) { consumer.AddHighlighting(info.Highlighting, info.Range); } } var references = node.GetReferences(myReferenceProvider); myResolveProblemHighlighter.CheckForResolveProblems(node, consumer, references); // TODO: Move to ShaderLabSyntaxHighlightingStage // (Not Rider's syntax highlighting though!) // E.g. protobuf support has a SyntaxHighlightingStage that will do this, // plus look for simple syntax validation errors, e.g. enums must have at // least one value defined, correct value for `syntax "proto3"`, etc. // And then a separate identifier if (node is IErrorElement errorElement) { var range = errorElement.GetDocumentRange(); if (!range.IsValid()) { range = node.Parent.GetDocumentRange(); } if (range.TextRange.IsEmpty) { if (range.TextRange.EndOffset < range.Document.GetTextLength()) { range = range.ExtendRight(1); } else if (range.TextRange.StartOffset > 0) { range = range.ExtendLeft(1); } } consumer.AddHighlighting(new ShaderLabSyntaxError(errorElement.ErrorDescription, range)); } base.VisitNode(node, consumer); }
public override void VisitNode(ITreeNode node, IHighlightingConsumer context) { if (myProcessKind == DaemonProcessKind.VISIBLE_DOCUMENT) { if (myIdentifierHighlightingEnabled) { var info = myVisualElementHighlighter.CreateColorHighlightingInfo(node); if (info != null) { context.AddHighlighting(info); } } } // TODO: Resolve problem highlighter // That is, highlight problems with resolve // TODO: Move to ShaderLabSyntaxHighlightingStage // (Not Rider's syntax highlighting though!) // E.g. protobuf support has a SyntaxHighlightingStage that will do this, // plus look for simple syntax validation errors, e.g. enums must have at // least one value defined, correct value for `syntax "proto3"`, etc. // And then a separate identifier var errorElement = node as IErrorElement; if (errorElement != null) { var range = errorElement.GetDocumentRange(); if (!range.IsValid()) { range = node.Parent.GetDocumentRange(); } if (range.TextRange.IsEmpty) { if (range.TextRange.EndOffset < range.Document.GetTextLength()) { range = range.ExtendRight(1); } else if (range.TextRange.StartOffset > 0) { range = range.ExtendLeft(1); } } context.AddHighlighting(new ShaderLabSyntaxError(errorElement.ErrorDescription, range)); } base.VisitNode(node, context); }