Fork me on GitHub
Noah Bogart15:07:58

Is clojure-lsp sending semantic info to the client?


What do you mean with semantic info? the semantic tokens LSP feature?


yeah, it has the hability, but you need to enable manually for now

Noah Bogart15:07:29

how would i enable it?


with :semantic-tokens? t on your clojure-lsp config file


also, if you use lsp-mode, you need to enable there as well with (setq lsp-semantic-tokens-enable t)

Noah Bogart15:07:59

interesting. i’m seeing it happen without setting anything in coc.nvim


coc..nvim probably has that enabled as default on client side


but on server side, this is still disable by default (not for too long)

Noah Bogart15:07:21

so even tho it’s disabled by default in clojure-lsp, if coc.nvim asks for it, clojure-lsp will provide it?


It'll not as it's disabled on server

Noah Bogart15:07:47

huh i wonder what’s happening then


you can confirm that checking client <-> server json log


Oh, my bad, it was enabled on server side by default, I changed that a while ago


so if you want to disable it you will need to disable on client or server side


I'll update the docs fixing it mentioning it's true as default

Noah Bogart17:07:03

ah perfect, thank you so much. it’s a cool feature, just caught me off guard when all of the colors i’ve meticulously set up suddenly changed, hah


They are configurable on client side (at least lsp-mode), so you change for what you want

Noah Bogart17:07:31

yeah, i found the coc.nvim settings for disabling or configuring it. thanks for the quick responses!

👍 2
Noah Bogart17:07:45

i have feedback/questions about how the semantic data is generated. is this a good space to ask those questions?

Noah Bogart17:07:19

cool. i’m referring a defonce map from another namespace into my namespace: (:require ... [web.config :refer [server-config]] ...) and the server-config is being colored as a function (instead of a symbol). i opened the log and found the place where clojure-lsp is sending the info, and coc.nvim is interpreting as a function: "CocSem_function". if i enter the web.config namespace, the (defonce server-config ...) is correctly marked as a normal symbol.

Noah Bogart17:07:26

is this a bug? should clojure-lsp be finding out the type of a given referred symbol before marking it as a given LSP type?


this is definitely clojure-lsp setting it as a function as it's a var-usage from clj-kondo eyes, maybe we can fix that if we somehow know that the server-config is a map and not a function


there is a clojure-lsp LSP command to get the info for the current var on point


I'm not sure how to call it from vim, but it should bring info for the cursor, so we can debug and understand it

Noah Bogart18:07:57

lemme see what i can do to call that

Noah Bogart18:07:05

it seems i can’t send custom commands to the lsp through coc.nvim. is there a way i could send it through the command line?


I think that is possible via coc, @U11EL3P9U used to do that

Noah Bogart18:07:03

hm okay, must not be looking in the right place. thanks


but change the cycle-privacy with cursor-info

Noah Bogart18:07:20

excellent find, thank you


(IMO coc/nvim is so hard to configure/understand 😅 and to find docs about it)

Noah Bogart18:07:51

yeah, it’s really opaque

Noah Bogart18:07:20

okay, got it working! you’re awesome

Noah Bogart18:07:22

what info do you need?


nice, so, you can move your cursor to the server-config that has the wrong color and call cursor-info


then paste the result here

Noah Bogart18:07:58

 {:fixed-arities #{1},
  :name-end-col 41,
  :name-end-row 11,
  :name-row 11,
  :name acknowledged?,
  :filename "/Users/noah/Personal/netrunner/src/clj/web/auth.clj",
  :from web.auth,
  :col 28,
  :name-col 28,
  :bucket :var-usages,
  :row 11,
  :to monger.result},
 :definition nil}

Noah Bogart18:07:18

oops, wrong spot, lol

Noah Bogart18:07:32

 {:name-end-col 38,
  :name-end-row 15,
  :name-row 15,
  :name server-config,
  :filename "/Users/noah/Personal/netrunner/src/clj/web/auth.clj",
  :from web.auth,
  :col 25,
  :name-col 25,
  :bucket :var-usages,
  :row 15,
  :to web.config},
 {:end-row 13,
  :name-end-col 25,
  :name-end-row 13,
  :name-row 13,
  :ns web.config,
  :name server-config,
  :defined-by clojure.core/defonce,
  :filename "/Users/noah/Personal/netrunner/src/clj/web/config.clj",
  :col 3,
  :name-col 12,
  :end-col 59,
  :bucket :var-definitions,
  :row 13}} 


alright, so IMO everything looks correct, from the point of view of the definition, the server-config is a definition of something (it doesn't matter if it's a map or function)


and the usage is the same, the color should not change as it's a var-usage, it's not related with the val of the definition, but if it's a usage or not

Noah Bogart19:07:04

seems like var-usage-element->absolute-tokens is overeager in assigning everything to function?

Noah Bogart19:07:30

as a demonstration, here’s a portion of my project.clj:

Noah Bogart19:07:50

and output from hovering differ:

 {:name-end-col 25,
  :name-end-row 14,
  :name-row 14,
  :name differ,
  :filename "/Users/noah/Personal/netrunner/project.clj",
  :from user,
  :col 19,
  :name-col 19,
  :bucket :var-usages,
  :row 14,
  :to :clj-kondo/unknown-namespace},
 :definition nil}

Noah Bogart19:07:34

and hovering stylefruits/gniazdo:

{:element nil, :definition nil}


Hum, yes, in that case it should return no token or a specific one, maybe requires should be considered as symbols indeed


in this case, they are (or should be), namespace-usages, so namespace is a better token for that


oh, clj-kondo didn't find the cheshire namespace, that's why it was considered a var-ussage

:to :clj-kondo/unknown-namespace


cheshire should be cheshire.core, right?


same for differ


but agree, clojure-lsp should not return those tokens as var-usages if the :to = :clj-kondo/unknown-namespace . feel free to open an issue related to that

👍 2

also I love that semantic-tokens feature, I'd be glad to improve it 🙂

Noah Bogart19:07:58

if i put the groupId of “cheshire” in so it’s cheshire/cheshire, it stops being highlighted. however, if i change the groupId/namespace to anything a/cheshire, it also stops being highlighted

Noah Bogart19:07:27

i love it too, and i’d love to see it work better, cuz it could be really powerful


Yeah, it's a new feature, I'm sure there are improvements to be made


like those corner cases

Noah Bogart19:07:51

how much detail do you need in this issue?