From c778e320ad92f5dfb3da91bfeb08375b1994bfbe Mon Sep 17 00:00:00 2001 From: hiroebe Date: Wed, 30 Mar 2022 21:26:04 +0900 Subject: [PATCH 1/2] internal/lsp: fix incorrect line and start of semantic tokens --- internal/lsp/semantic.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/lsp/semantic.go b/internal/lsp/semantic.go index 7c0419c20e8..ab63a4bf318 100644 --- a/internal/lsp/semantic.go +++ b/internal/lsp/semantic.go @@ -828,20 +828,23 @@ func (e *encoded) Data() []uint32 { // each semantic token needs five values // (see Integer Encoding for Tokens in the LSP spec) x := make([]uint32, 5*len(e.items)) - var j int + var ( + j int + last semItem + ) for i := 0; i < len(e.items); i++ { typ, ok := typeMap[e.items[i].typeStr] if !ok { continue // client doesn't want typeStr } - if i == 0 { + if j == 0 { x[0] = e.items[0].line } else { - x[j] = e.items[i].line - e.items[i-1].line + x[j] = e.items[i].line - last.line } x[j+1] = e.items[i].start - if i > 0 && e.items[i].line == e.items[i-1].line { - x[j+1] = e.items[i].start - e.items[i-1].start + if j > 0 && x[j] == 0 { + x[j+1] = e.items[i].start - last.start } x[j+2] = e.items[i].len x[j+3] = uint32(typ) @@ -852,6 +855,7 @@ func (e *encoded) Data() []uint32 { } x[j+4] = uint32(mask) j += 5 + last = e.items[i] } return x[:j] } From 6eedc7cbcc27f47ed5742b340f4438291ab70863 Mon Sep 17 00:00:00 2001 From: hiroebe Date: Thu, 31 Mar 2022 02:00:32 +0900 Subject: [PATCH 2/2] use compact way of declaration --- internal/lsp/semantic.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/lsp/semantic.go b/internal/lsp/semantic.go index ab63a4bf318..4318b7baba3 100644 --- a/internal/lsp/semantic.go +++ b/internal/lsp/semantic.go @@ -828,10 +828,8 @@ func (e *encoded) Data() []uint32 { // each semantic token needs five values // (see Integer Encoding for Tokens in the LSP spec) x := make([]uint32, 5*len(e.items)) - var ( - j int - last semItem - ) + var j int + var last semItem for i := 0; i < len(e.items); i++ { typ, ok := typeMap[e.items[i].typeStr] if !ok {