Skip to content

Instantly share code, notes, and snippets.

@nullchilly
Last active June 18, 2024 10:47
Show Gist options
  • Save nullchilly/91fb9d5bf410350d23dd8f4369e5183a to your computer and use it in GitHub Desktop.
Save nullchilly/91fb9d5bf410350d23dd8f4369e5183a to your computer and use it in GitHub Desktop.
Add pylance to coc.nvim

Install the pylance extension in vscode or manually download it from the marketplace

The extension path should be similar to this: ~/.vscode/extensions/ms-python.vscode-pylance-2023.11.10

In init.vim, this will automatically detect the latest pylance version because after an upgrade the old plugin might linger for a while:

call coc#config('languageserver', { "pylance": { "module": expand("~/.vscode/extensions/ms-python.vscode-pylance-*/dist/server.bundle.js", 0, 1)[0] } })

In coc-settings.json, we add these env to trick pylance into thinking we are running vscode:

{
  "languageserver": {
    "pylance": {
      "enable": true,
      "filetypes": [
        "python"
      ],
      "env": {
        "ELECTRON_RUN_AS_NODE": "0",
        "VSCODE_NLS_CONFIG": "{\"locale\": \"en\"}"
      },
      "module": "${userHome}/.vscode/extensions/ms-python.vscode-pylance-2023.11.10/dist/server.bundle.js",
      "initializationOptions": {},
      "settings": {
        "python.analysis.typeCheckingMode": "basic",
        "python.analysis.diagnosticMode": "openFilesOnly",
        "python.analysis.stubPath": "./typings",
        "python.analysis.autoSearchPaths": true,
        "python.analysis.extraPaths": [],
        "python.analysis.diagnosticSeverityOverrides": {},
        "python.analysis.useLibraryCodeForTypes": true
      }
    }
  }
}
@fusying-hwang
Copy link

@nullchilly hi, I'd like to know how to setup a native pylance, I sent you a discord connection request. my user name is KKChang. Thanks

@Fau818
Copy link

Fau818 commented Jan 9, 2024

It seems it doesn't support inlay hints.

@smackesey
Copy link

It seems it doesn't support inlay hints.

Yup, I investigated this my looking at the LSP logs. No matter what I do I can't get inlay hints to work on latest nvim nightly. I can see in the telemetry LSP notification emitted after pylance starts inlay hints are always disabled no matter my settings. My guess is it's running some kind of off-books capabilities check that nvim doesn't pass and turning it off.

I also can't configure typeCheckingMode via lang server settings, though I can with a pyright config file.

@Fau818
Copy link

Fau818 commented Jan 9, 2024

@smackesey I found the problem, and it is necessary to set the value of settings.python.pythonPath.

I used nvim-lspconfig to test it.
You can set any non-empty value to the settings.python.pythonPath field, even if it's an invalid path.

Enjoy the Inlay Hints!!!

@nullchilly
Copy link
Author

nullchilly commented Jan 9, 2024

@Fau818 Thank you so much! Here is a working config

For anyone who doesn't use virtualenv, the tldr config is just:

pylance = {
  settings = {
    python = {
      pythonPath = "/usr/bin/python3",
      analysis = {
        inlayHints = {
          variableTypes = true,
          functionReturnTypes = true,
          callArgumentNames = true,
          pytestParameters = true,
        }
      }
    }
  }
}

@Fau818
Copy link

Fau818 commented Jan 9, 2024

@nullchilly
I just looked at your configuration and found that pythonPath affects the library index.
So we can't set the value of pythonPath arbitrarily.

Thank you for providing the configuration file, which helped me find a bug!

@mochaaP
Copy link

mochaaP commented Jan 11, 2024

HTTP/1.1 410 Gone
Content-Type: text/plain
Date: Thu, 01 Jan 1970 00:00:00 GMT

@xzbdmw
Copy link

xzbdmw commented Feb 29, 2024

@nullchilly Hello I send a discord friend request to you I can't send you mesaages if I'm not your friend😥
@mochaaP what does these mean I can't open it😥

@pearagit
Copy link

has anyone tried this and basedpyright and could comment on how they compare? thank you

@igorlfs
Copy link

igorlfs commented May 10, 2024

Hey @pearagit, IMO, basedpyright's major drawback is that it's really, really slow. Everything from completion to hover just takes forever when compared to Pylance.

But hey fellas, has anyone noticed some issues with semantic highlighting when using Pylance with neovim's built-in LSP?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment