🍑 LSP (Meet Me)

このサイトを見たな❗これでお前とも縁ができた❗ search-console

個人でやってる趣味 (暇つぶしとも言う😅) にしては、なかなか身に余る光栄です。

やあ やあ やあ!

祭りだ 祭りだ!

舟を出せ❗いざ鬼退治❗❗

☕ Previously

ちょっとだけ むか〜し、むかしのおさらい。

extensions/mason.lua

require('mason').setup {
  ui = {
    check_outdated_packages_on_open = false,
    border = 'single',
  },
}

require('mason-lspconfig').setup_handlers {
  function(server_name)
    require('lspconfig')[server_name].setup {
      capabilities = require('cmp_nvim_lsp').default_capabilities(),
    }
  end,
}

固有の設定を必要としなければ、 これだけでmason.nvimでインストールしたLSPは全てカバーできていましたね😆

Tip

このサイトではpackerと外観の統一感を持たせる目的でmasonborderを入れていました。

lazyを使う場合、これはもう無いほうが統一感が出ていいかも〜😪

require('mason').setup {
  ui = {
    check_outdated_packages_on_open = false,
-   border = 'single',
  },
}

袖振り合うも他生の縁!

躓く石も縁の端くれ!

🧠 Additional Setup

ここから一歩進めて、「固有の設定を入れてみよう」というのがこの節のおはなしです。

まず最初に、この先を簡潔に書くために、あらかじめこんなん仕込んでおきます🤫

extensions/mason.lua

+local lsp = require 'lspconfig'

 require('mason-lspconfig').setup_handlers {
   function(server_name)
     require('lspconfig')[server_name].setup {
       capabilities = require('cmp_nvim_lsp').default_capabilities(),
     }
   end,

   -- (ここに mason.nvim でインストールした lsp の固有設定を必要に応じて追加していきます)

 }

脳人

nvim-lspconfigはもうお馴染みですね😉

共に踊れば繋がる縁!

この世は楽園!

🕶️ Specific Settings

ここではlua_lsrust-analyzerを例に進めていきます。

当然ながら、これらを実際にインストールするかどうかはおまかせします😆

悩みなんざ吹っ飛ばせ!

笑え 笑え!

🐵 lua_ls (Lua)

探してた この心うっきうき暴れさせて

The Lua language server provides various language features for Lua to make development easier and faster. With nearly a million installs in Visual Studio Code, it is the most popular extension for Lua language support.

Lua 言語サーバーは、Lua の様々な言語機能を提供し、開発をより簡単かつ高速にします。 Visual Studio Code に 100万近くインストールされており、Lua 言語をサポートする最も人気のある拡張機能です。

See our website for more info.

100万とか言わないでください。1Kが霞むんで🤣

わたしも割と最近まで気づかなかったんですが、 Neovimを使う場合はこれを入れておくと楽しいです🤗

extensions/mason.lua

['lua_ls'] = function()
  lsp.lua_ls.setup {
    settings = {
      Lua = {
        runtime = {
          version = 'LuaJIT',
        },
        workspace = {
          checkThirdParty = false,
          library = {
            vim.env.VIMRUNTIME,
          },
        },
      },
    },
  }
end,

こうするとNeovim固有のAPIがlua_lsを通して補完候補に現れます😉 fidget-cmp

🐶 rust-analyzer (Rust)

冒険はいつだってワンだふる

rust-analyzer is a modular compiler frontend for the Rust language. It is a part of a larger rls-2.0 effort to create excellent IDE support for Rust.

rust-analyzer は、Rust 言語用のモジュラー・コンパイラ・フロントエンドです。 Rust の優れた IDE サポートを作成するための、より大きな rls-2.0 の取り組みの一部です。

と、いうことでRustにはこれがいいんじゃないかと思うんだけど、 どこを見て持ってきたのかが思い出せなくて見つからない...😑

extensions/mason.lua

['rust_analyzer'] = function()
  lsp.rust_analyzer.setup {
    settings = {
      ['rust-analyzer'] = {
        diagnostic = { enable = false },
        assist = { importGranularity = 'module', importPrefix = 'self' },
        cargo = { allFeatures = true, loadOutDirsFromCheck = true },
        procMacro = { enable = true },
      },
    },
  }
end,

🐦 Clippy

繋がってく縁と縁 出会いは少しトリッキー

A collection of lints to catch common mistakes and improve your Rust code.

There are over 700 lints included in this crate!

Lints are divided into categories, each with a default lint level. You can choose how much Clippy is supposed to annoy help you by changing the lint level by category

よくあるミスを発見し、あなたのRustコードを改善するための lint のコレクションです。

この crate には 700以上のリントが含まれています!

Lints はカテゴリに分かれており、 それぞれデフォルトのlint level を持っています。 カテゴリごとに lint level を変更することで、Clippy がどの程度あなたを 迷惑 手助けするかを選択できます。

これはちょっと確認してないんですが、 Clippymason.nvimからは入らないんじゃないかな❓

Rustの環境を入れると、たぶん自然にインストールされてるやつです。

extensions/mason.lua

  ['rust_analyzer'] = function()
    lsp.rust_analyzer.setup {
      settings = {
        ['rust-analyzer'] = {
          diagnostic = { enable = false },
          assist = { importGranularity = 'module', importPrefix = 'self' },
          cargo = { allFeatures = true, loadOutDirsFromCheck = true },
          procMacro = { enable = true },
+         checkOnSave = { allFeatures = true, command = 'clippy' },
        },
      },
    }
  end,
angry-clippy

こんな感じで、rustcに混じってclippyも怒るようになります😱

👹 If mason is not available

打ち解けりゃ鬼も笑う

普段使っている言語によっては、mason.nvimにないLSPを使用したいこともあると思うんですが、 nvim-lspconfigを使用しているのであれば、まあ大抵はなんとかなります😗

LSP configs provided by nvim-lspconfig are listed below. This documentation is autogenerated from the Lua files. You can view this file in Nvim by running :help lspconfig-all.

nvim-lspconfigが提供するLSPコンフィグを以下に示します。 このドキュメントは Lua ファイルから自動生成されます。 Nvim で:help lspconfig-allを実行するとこのファイルを見ることができます。

わたしの場合、 これはnvim-lspconfig.luaの末尾に置いてます。

extensions/nvim-lspconfig.lua

 vim.api.nvim_create_autocmd('LspAttach', {

   ...

 })

+local lsp = require 'lspconfig'

 (ここから先に固有の設定を追加していきます)

...で、例えば私が使っている (入っているだけとも言う😅) lspは以下です。

🐲 SourceKit-LSP (Swift)

見える景色がちょっとずつ違う

SourceKit-LSP is an implementation of the Language Server Protocol (LSP) for Swift and C-based languages. It provides features like code-completion and jump-to-definition to editors that support LSP. SourceKit-LSP is built on top of sourcekitd and clangd for high-fidelity language support, and provides a powerful source code index as well as cross-language support. SourceKit-LSP supports projects that use the Swift Package Manager.

SourceKit-LSP は、Swift と C ベースの言語のための Language Server Protocol(LSP) の実装です。 LSP をサポートするエディタにコード補完や定義へのジャンプなどの機能を提供します。 SourceKit-LSP は、sourcekitdclangdの上に構築され、忠実度の高い言語サポートを実現し、 強力なソースコードインデックスとクロスランゲージのサポートを提供します。 SourceKit-LSP は Swift Package Manager を使用するプロジェクトをサポートします。

macOSXcodeをインストールしている環境であれば、これも自然に入ってます。

extensions/nvim-lspconfig.lua

lsp.sourcekit.setup {
  filetypes = { 'swift', 'objective-c', 'objective-cpp' },
}
sourcekit-lsp

普段使ってないからなんか妙に余裕ないけど許して (その一) 😅

🐯 ccls (C/C++)

みなさまのお手を拝借

ccls, which originates from cquery, is a C/C++/Objective-C language server.

ccls はcqueryに由来する、C/C++/Objective-C 言語サーバーです。

これはbrewとかaptとか使えばお手軽ですね😉

extensions/nvim-lspconfig.lua

lsp.ccls.setup {
  init_options = {
    compilationDatabaseDirectory = 'build',
    index = {
      threads = 0,
    },
    clang = {
      extraArgs = { '--std=c++20' },
      excludeArgs = { '-frounding-math' },
    },
  },
}
ccls

普段使ってないからなんか妙に余裕ないけど許して (その二) 😅

🦈 Root Directory

ちなみになんですが...。

毎度のことながら、なんかじょーずにいかないなーと思ったらLspInfoを確認してみましょう。 root-directory

...もしroot directoryNot found.(認識されていない状態) だと、 それは "履 い て な い" らしいんです、PAAAANTS!! 🤷‍♀️ root-directory

普段使ってないからなんか妙に余裕ないけど許して (その三) 😅

🍑 Don't Boo! ドンブラザーズ

さて "立春 🌸" の前に "節分 🫘" です。色々仕切り直していきましょう❗

豆をまいて...、年の数だけ数えながら豆を食べて...。

そのあとはノーカウントで食べ放題だ😆

どこの家でもそうだろう❓😏

...違うの⁉️

Success

So, let's get the party started!

じか〜い、じかい。

なに? 王様戦xxxxングオージャーが最終回??

だったら俺たちも最終回だ。MVP を決めてやる。

🐵 🍑 🐦

🐶 🐲 👹

さようなら、ドンブラザーズ 1

MVP とは、俺のことだ!!

17.7話 「フィナーレいさみあし 2 」という おはなし。

1: 『暴太郎戦隊ドンブラザーズ』(あばたろうせんたいドンブラザーズ)は、2022年3月6日から2023年2月26日まで テレビ朝日系列で放送された東映制作の特撮テレビドラマ、および作中で主人公たちが変身するヒーローの名称。 モチーフは日本を代表するおとぎ話の一つ・『桃太郎』であり、 同作品に登場する人物・動物をモデルにした桃井タロウと 4人の個性豊かなオトモたちが、 人々を守るため、そして自分の願いを叶えるために脳人やヒトツ鬼と戦う。 「暴太郎」という名称は、「アバター戦隊」か「桃太郎戦隊」かで悩んでいた企画陣に対し、 ある人物が両方をまとめて「暴太郎」にすればいいと意見を出して採用された。 Wikipediaより

2: 実際はnvim_get_option_valueの おはなしで、このサイトの最終回まではあと 3回...か、4回❗