Inlay Hints
Inlay hints render small pieces of information directly into the editor and give developers additional code insight without disturbing the workflow. A well-known example is parameter hints that usually display the name of the function parameters as given in its declaration. They are closely related to Parameter Info which shows parameter types for all possible overloads of a function but opens as a popup overlaying the code.
Inlay hints are flexible and have a wide range of applications in the IntelliJ Platform. For instance, the following are well-known examples where inlay hints are used:
Java uses inlays to display type annotations in Java chained method calls.
Kotlin uses inlays in range expressions to show, e.g. less-than, or less-than-or-equal signs to let developers know if intervals are inclusive or exclusive.
In version-controlled projects, the author of the code is shown using inlay hints.
Implementation
The main characteristic of the inlay is the way it is displayed in the editor:
inline - inlays displayed in the code between code tokens
block - inlays displayed above a code block
Depending on the requirements and target IntelliJ Platform version, there are several extension points to choose from, when implementing inlay hints.
This section describes the available APIs and their use cases.
Inlay Parameter Hints Provider
Inlay parameter hints are simple string inline inlays placed before parameter names in method and function calls. It is not possible to provide advanced presentation and behavior of inlay parameter hints.
To provide inlay parameter hints, implement InlayParameterHintsProvider
and register it in com.intellij.codeInsight.parameterNameHints
extension point (EP). The API documentation of InlayParameterHintsProvider
explains in detail the rationale behind all methods.
Examples:
GroovyInlayParameterHintsProvider
- shows parameter hints in Groovy codeKotlinInlayParameterHintsProvider
- shows parameter hints in Kotlin code
To suppress inlay parameter hints in specific places, implement ParameterNameHintsSuppressor
and register it in com.intellij.codeInsight.parameterNameHintsSuppressor
EP.
Declarative Inlay Hints Provider
Declarative inlay hints are inline textual inlays that can hold expandable list of clickable items. Please note this API has limited presentation customization possibilities due to its UI-independent design, which allows utilizing it by different frontend technologies (not only in Swing).
To provide declarative inlay hints implement declarative InlayHintsProvider
and register it in com.intellij.codeInsight.declarativeInlayProvider
EP. See the API documentation for the details.
Examples:
JavaImplicitTypeDeclarativeInlayHintsProvider
- shows inferred type for variables declared with thevar
keyword in Java code when the inferred type may not be clearJavaMethodChainsDeclarativeInlayProvider
- shows method return types in call chains in Java code
To provide a custom configuration UI, implement InlayHintsCustomSettingsProvider
registered in com.intellij.codeInsight.declarativeInlayProviderCustomSettingsProvider
extension point.
Code Vision Provider
Code vision provider allows for providing block inlay hints for elements like class, method, field, etc. If there are multiple hints provided for a single element, all will be displayed in the same line to save vertical space.
Code vision hints can be displayed over the element, or on the right, at the end of line. It is configurable by users in Default position for metrics combo box, or by selecting Position in specific provider entries.
by choosing a value inThere are three extension points for implementing a code vision provider:
DaemonBoundCodeVisionProvider
registered incom.intellij.codeInsight.daemonBoundCodeVisionProvider
EPCodeVisionProvider
registered incom.intellij.codeInsight.codeVisionProvider
EPCodeVisionGroupSettingProvider
registered incom.intellij.config.codeVisionGroupSettingProvider
EP
DaemonBoundCodeVisionProvider
API should be used in cases when code vision entries are related to PSI, so that calculated values are invalidated and recalculated on PSI changes.
CodeVisionProvider
API should be used for cases when presented information doesn't depend on the PSI.
The CodeVisionGroupSettingProvider
is necessary for displaying the name and description of the code vision provider in the settings. The groupId
must match the value specified in the implementation of the CodeVisionProvider
; if not specified, it defaults to the id
. The groupName
is the name shown in the code vision group, and the description
will be visible in the right details panel.
Examples:
JavaInheritorsCodeVisionProvider
- shows number of Java class or method inheritors. Clicking the inlay hint opens the list of inheritors. This provider isDaemonBoundCodeVisionProvider
.JavaReferencesCodeVisionProvider
- shows number of usages of Java class or member. Clicking the inlay opens the list of usages or navigates to the usage if only one exists. This provider isDaemonBoundCodeVisionProvider
.VcsCodeVisionProvider
- shows the author of a given element, e.g., class or method, based on VCS information. This provider isCodeVisionProvider
.
Inlay Hints Provider
Inlay hints provider allows for implementing both inline and block inlay hints with custom presentation and behavior. See the API documentation for the details.
To provide inlay hints, implement InlayHintsProvider
and register it in com.intellij.codeInsight.inlayProvider
EP. See the API documentation for the details.
Examples:
GroovyLocalVariableTypeHintsInlayProvider
- shows local variable types in Groovy codeMarkdownTableInlayProvider
- decorates tables in Markdown files.For a more complex example, see
KotlinLambdasHintsProvider
, its parent class and all implementations.
Further Tips
Go to Product Help) and check out inlays that have already been implemented.
(To support multiple languages with a single type of inlay hints, see declarative
InlayHintsProviderFactory
(2023.1+) orInlayHintsProviderFactory
(pre-2023.1).For testing inlay hints, see
InlayHintsProviderTestCase
andInlayParameterHintsTest
.