public override SemanticTokensOrSemanticTokensEdits GetSemanticTokensEdits(RazorCodeDocument codeDocument, string previousResultId)
        {
            if (codeDocument is null)
            {
                throw new ArgumentNullException(nameof(codeDocument));
            }

            var semanticRanges = TagHelperSemanticRangeVisitor.VisitAllNodes(codeDocument);

            IReadOnlyList <uint> previousResults = null;

            if (previousResultId != null)
            {
                _semanticTokensCache.TryGetValue(previousResultId, out previousResults);
            }
            var newTokens = ConvertSemanticRangesToSemanticTokens(semanticRanges, codeDocument);

            if (previousResults is null)
            {
                return(newTokens);
            }

            var semanticEdits = SemanticTokensEditsDiffer.ComputeSemanticTokensEdits(newTokens, previousResults);

            return(semanticEdits);
        }
コード例 #2
0
        public static SemanticTokensFullOrDelta ComputeSemanticTokensEdits(
            SemanticTokensResponse newTokens,
            IReadOnlyList <int> previousResults)
        {
            var differ = new SemanticTokensEditsDiffer(previousResults, newTokens.Data);
            var diffs  = differ.ComputeDiff();
            var edits  = differ.ProcessEdits(diffs);
            var result = new SemanticTokensDelta
            {
                ResultId = newTokens.ResultId,
                Edits    = edits,
            };

            return(result);
        }
コード例 #3
0
        public override SemanticTokensOrSemanticTokensEdits GetSemanticTokensEdits(RazorCodeDocument codeDocument, string previousResultId)
        {
            if (codeDocument is null)
            {
                throw new ArgumentNullException(nameof(codeDocument));
            }

            var semanticRanges = TagHelperSemanticRangeVisitor.VisitAllNodes(codeDocument);

            var previousResults = previousResultId is null ? null : _semanticTokensCache.Get(previousResultId);
            var newTokens       = ConvertSemanticRangesToSemanticTokens(semanticRanges, codeDocument);

            if (previousResults is null)
            {
                return(newTokens);
            }

            var semanticEdits = SemanticTokensEditsDiffer.ComputeSemanticTokensEdits(newTokens, previousResults);

            return(semanticEdits);
        }