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); }
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(), }); }
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(), }); }