## 経緯 [[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 ```