Skip to content

Display LSP inlay hints at the end of the line, rather than within the line.

License

Notifications You must be signed in to change notification settings

chrisgrieser/nvim-lsp-endhints

Repository files navigation

nvim-lsp-endhints 🪧

Minimal plugin that displays LSP inlay hints at the end of the line, rather than within the line.

Showcase

Color scheme: nightfox.nvim, dawnfox variant

Table of Content

Installation

Requirements:

  • nvim >= 0.10
  • LSP client that supports inlay hints (textDocument/inlayHint)
  • Inlay hints enabled in the config of the LSP
-- lazy.nvim
{
	"chrisgrieser/nvim-lsp-endhints",
	event = "LspAttach",
	opts = {}, -- required, even if empty
},

-- packer
use {
	"chrisgrieser/nvim-lsp-endhints",
}

Configuration

The .setup() call is required.

-- default settings
require("nvim-lsp-endhints").setup {
	icons = {
		type = "󰜁 ",
		parameter = "󰏪 ",
	},
	label = {
		padding = 1,
		marginLeft = 0,
	},
	autoEnableHints = true,
}

The hints use the default highlight group LspInlayHint.

Usage

By default, the pluginautomatically enables inlay hints when attaching to an LSP, there is nothing to do other than loading the plugin.

All regular inlay hint functions like vim.lsp.inlay_hint.enable() work the same as before. Use them as described in the Neovim documentation to enable/disable/toggle hints manually.

Background

FAQ

How to display hints only for the current line?

One implementation that does not even require this plugin can be found here.

How to enable inlay hints for a language?

Note

Not all LSPs support inlay hints. The following list is not exhaustive, there are more LSPs that support inlay hints. Please refer to your LSP's documentation.

-- lua-ls
require("lspconfig").lua_ls.setup {
	settings = {
		Lua = {
			hint = { enable = true },
		},
	},
}

-- tsserver
local inlayHints = {
	includeInlayParameterNameHints = "all",
	includeInlayParameterNameHintsWhenArgumentMatchesName = false,
	includeInlayFunctionParameterTypeHints = true,
	includeInlayVariableTypeHints = true,
	includeInlayVariableTypeHintsWhenTypeMatchesName = false,
	includeInlayPropertyDeclarationTypeHints = true,
	includeInlayFunctionLikeReturnTypeHints = true,
	includeInlayEnumMemberValueHints = true,
}
require("lspconfig").tsserver.setup {
	settings = {
		typescript = {
			inlayHints = inlayHints,
		},
		javascript = {
			inlayHints = inlayHints,
		},
	},
}

-- gopls
require("lspconfig").gopls.setup {
	settings = {
		hints = {
			rangeVariableTypes = true,
			parameterNames = true,
			constantValues = true,
			assignVariableTypes = true,
			compositeLiteralFields = true,
			compositeLiteralTypes = true,
			functionTypeParameters = true,
		},
	},
}

-- clangd
require("lspconfig").clangd.setup {
	settings = {
		clangd = {
			InlayHints = {
				Designators = true,
				Enabled = true,
				ParameterNames = true,
				DeducedTypes = true,
			},
			fallbackFlags = { "-std=c++20" },
		},
	},
}

About the author

In my day job, I am a sociologist studying the social mechanisms underlying the digital economy. For my PhD project, I investigate the governance of the app economy and how software ecosystems manage the tension between innovation and compatibility. If you are interested in this subject, feel free to get in touch.

I also occasionally blog about vim: Nano Tips for Vim

Buy Me a Coffee at ko-fi.com

About

Display LSP inlay hints at the end of the line, rather than within the line.

Topics

Resources

License

Stars

Watchers

Forks

Languages