Hey there,

So I know if emacs is lagging I should run the profiler for a bit while it’s lagging and then review the report. However, I’m not sure what to do next.

It looks clear that company / completion is responsible for the laggy behavior here, especially a jsonrpc-request made by completion. That makes sense, there’s a slow network call somewhere in the works that’s gumming things up.

I’m using eglot for lsp and would expect that would be the source of a slow jsonrpc call, maybe eglot trying to get completion candidates on every keystroke through the LSP server? But I don’t understand the stack here well enough to know how to proceed in debugging or fixing things.

Would love any help. Knowing what to fix is great - but also I’m really interested in knowing how to know what to do next in general in this scenario.

Thanks!

https://preview.redd.it/9rbx4pm5ty2c1.png?width=1843&format=png&auto=webp&s=974bbb907f702dc775a1ef2bd34dffebc0809554

  • ckoneru@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Ok basically json-rpc and company taking >50% of compute . What is the Lsp server you are running? What version of emcas?

    • Contemplatories99@alien.topB
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      It is indeed a fast LSP for emacs. But the documentation is kinda difficult to grasp. I was trying to make it use terraform-ls but unable to get it working.

  • SnooPets20@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    I’ve found that using this configuration, the LSP can’t halt the UI anymore, resulting in a very snappy experience. The results still take a few secs to show up, but at least you aren’t typing blindly waiting for the UI to refresh.

    (setq eglot-autoshutdown t)
    (setq eglot-sync-connect 0)
    (setq eglot-events-buffer-size 0)
    (fset #'jsonrpc--log-event #'ignore)
    (add-hook 'focus-out-hook 'garbage-collect)
    

    If you don’t use eglot, then the last two are the only relevant ones, which are the ones actually doing the work I think.