## 経緯
[[Django]]や[[Django REST framework]]の型や補完を強化するために色々調べていたら、[[basedpyright]]たるものを見つけた。
仕事では自分だけ[[Neovim]]で他の人は[[VSCode]]なため、[[Pylance]]に近しい[[basedpyright]]を入れた方が捗るのでは... と思い試してみる。
| 対象 | バージョン |
| ------------------ | --------- |
| [[macOS]] | 15.7.2 |
| [[basedpyright]] | 1.37.1 |
| [[Neovim]] | 0.11.5 |
| [[nvim-lspconfig]] | `92ee7d4` |
| [[Python]] | 3.13.11 |
## インストール
```console
mise use -g npm:basedpyright
```
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://docs.basedpyright.com/latest/img/favicon.ico" />
<span class="link-card-v2-site-name">docs.basedpyright.com</span>
</div>
<div class="link-card-v2-title">
Command-line & language server - basedpyright
</div>
<a href="https://docs.basedpyright.com/latest/installation/command-line-and-language-server/#__tabbed_2_4"></a>
</div>
## [[Neovim]]に設定
`nvim/after/lsp/basedpyright.lua`
```lua
return {
settings = {
python = {
analysis = {
diagnosticMode = "workspace",
},
},
},
}
```
`nvim/lua/lsp.lua`
```lua
vim.lsp.enable({
-- "pyright",
"basedpyright",
})
```
[[nvim-lspconfig]]の設定。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
nvim-lspconfig/doc/configs.md at master · neovim/nvim-lspconfig
</div>
<div class="link-card-v2-content">
Quickstart configs for Nvim LSP. Contribute to neovim/nvim-lspconfig development by creating an account on GitHu ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/953321704e7d405f0562a58fac02326141702a1ad022c216cbc25a886fb95d55/neovim/nvim-lspconfig" />
<a href="https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#basedpyright"></a>
</div>
## [[Django REST framework]]のプロジェクトで発生した差分
色々違いが出てきたので確認していく。
### [[virtual text (Neovim)|virtual text]]で型が表示される
![[2026-01-10-19-53-35.avif]]
[[Pyright]]でも設定変えれば出るのかもしれないけど。
### finalを要求される
```error
Type annotation for attribute `queryset` is required because this class is not decorated with `@final` [reportUnannotatedClassAttribute]
```
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝basedpyrightでfinalデコレーターがないwarningが表示される
</div>
<div class="link-card-v2-content">basedpyrightでクラス属性に型アノテーションがなく`@final`も付けないと`reportUnannotatedClassAttribute`エラーが発生した事象である。継承時の型不整合防止仕様が原因で、pyrightconfig.jsonやpyproject.tomlで`reportUnannotatedClassAttribute`をfalseに設定して警告を無効化した。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝basedpyrightでfinalデコレーターがないwarningが表示される" class="internal-link"></a>
</div>
%%[[📝basedpyrightでfinalデコレーターがないwarningが表示される]]%%
### 型を必ず要求される
同様に無視。
```toml
[tool.pyright]
reportUnannotatedClassAttribute = false
reportAny = false
reportMissingParameterType = false
```