Пример #1
0
        protected override Task Tokenize(SemanticTokensBuilder builder, ITextDocumentIdentifierParams identifier, CancellationToken cancellationToken)
        {
            var compilationContext = this.compilationManager.GetCompilation(identifier.TextDocument.Uri);

            if (compilationContext != null)
            {
                SemanticTokenVisitor.BuildSemanticTokens(builder, compilationContext);
            }

            return(Task.CompletedTask);
        }
Пример #2
0
        public object GetSemanticTokens(string content)
        {
            var lineStarts  = TextCoordinateConverter.GetLineStarts(content);
            var compilation = new Compilation(SyntaxFactory.CreateFromText(content));
            var tokens      = SemanticTokenVisitor.BuildSemanticTokens(compilation.ProgramSyntax, lineStarts);

            var           data      = new List <int>();
            SemanticToken?prevToken = null;

            foreach (var token in tokens)
            {
                if (prevToken == null)
                {
                    data.Add(token.Line);
                    data.Add(token.Character);
                    data.Add(token.Length);
                }
                else if (prevToken.Line != token.Line)
                {
                    data.Add(token.Line - prevToken.Line);
                    data.Add(token.Character);
                    data.Add(token.Length);
                }
                else
                {
                    data.Add(0);
                    data.Add(token.Character - prevToken.Character);
                    data.Add(token.Length);
                }

                data.Add((int)token.TokenType);
                data.Add(0);

                prevToken = token;
            }

            return(new {
                data = data.ToArray(),
            });
        }
Пример #3
0
        public object GetSemanticTokens(string content)
        {
            var compilation = GetCompilation(content);
            var tokens      = SemanticTokenVisitor.BuildSemanticTokens(compilation.SourceFileGrouping.EntryPoint);

            var           data      = new List <int>();
            SemanticToken?prevToken = null;

            foreach (var token in tokens)
            {
                if (prevToken == null)
                {
                    data.Add(token.Line);
                    data.Add(token.Character);
                    data.Add(token.Length);
                }
                else if (prevToken.Line != token.Line)
                {
                    data.Add(token.Line - prevToken.Line);
                    data.Add(token.Character);
                    data.Add(token.Length);
                }
                else
                {
                    data.Add(0);
                    data.Add(token.Character - prevToken.Character);
                    data.Add(token.Length);
                }

                data.Add((int)token.TokenType);
                data.Add(0);

                prevToken = token;
            }

            return(new
            {
                data = data.ToArray(),
            });
        }