The X-Ray Mode
IntelliJ IDEA allows for displaying useful information directly in the editor, next to the code, in the form of inlay hints, that is, text that is slightly different from the actual code, but similar enough to be effortlessly read together with it. You can think of it as augmented code. You can see the line numbers, inferred result types, parameter names, indentation guidelines, and method separators. All that info doesn’t have to be typed explicitly in the Scala code – which is good because the code can be more concise, but on the other hand, if you read it for the first time, you might have trouble understanding what’s going on. In such cases, inlay hints can improve readability and greatly help the developer.
But such functionality comes at a price. Readability is a subjective issue, and instead of appreciating the help, you may feel that the editor is now too crowded and cluttered with unnecessary text. If you’re an experienced developer working on the code you already know, you may find little need for all that additional information displayed on the screen. So you decide to turn it off, and rightfully so. But it may happen after you do it that your work takes you to a place you don’t know so well, and now additional information displayed directly in the editor could be helpful again. So you need to go to the settings and re-enable it.
The constant switching between too little and too much information displayed on the screen and the fact that disabling and re-enabling the hints snaps the developer out of the coding flow is a common problem. The X-Ray mode is a way to solve it. With X-Ray, you can keep inlay hints and all the other additional information disabled or only partially enabled to the point where you feel comfortable, and then press down the Control / Command button two times and hold it – all the other hints will appear, and will be displayed only for the length of time you keep Control / Command down.
The X-Ray mode is also an alternative to two other actions: Show Implicit Hints and Type Info. In both cases, instead of memorizing the shortcuts for the respective actions, you can press Control / Command. On top of that, types displayed in hints are navigable – while pressing Control / Command down, you can hover the cursor over them and click to go to the type’s declaration.
Below, we will go through the types of additional information that X-Ray can display. You can switch them on and off in Settings | Languages & Frameworks | Scala | X-Ray Mode. But remember that each type can also be turned on permanently in Settings | Editor | Inlay Hints and in Settings | Editor | General | Appearance for methods separators and indent guides. If a given type of additional information is turned on permanently, it will be displayed regardless of your X-Ray settings.
Type hints are inlay hints showing inferred types of fields, parameters, as well as values created via destructuring, lambda expressions, or stream operations. It might be particularly useful in Scala, where variable types are not always explicitly visible in the code.
Method chain hints
Chaining methods is an idiomatic way of writing complex data transformations in Scala. Method chain hints are a great way to learn intermediate data types as you write a chain of transformations and avoid mistakes. We wrote about this feature in the past.
Scala supports implicit conversions and parameters, which can significantly reduce boilerplate code. However, this can also make it challenging to understand where values come from or how types are converted. Implicit hints show information about implicit arguments and implicit conversions that the data in question will undergo during compilation – but given their nature, they may render the code less readable. The X-Ray mode may prove to be particularly useful in this case, letting you see implicit hints only for a moment when you want to make sure what they are, and then they will disappear again.
By-name argument hints
It is a very simple hint, but it might be helpful sometimes to differentiate between regular arguments and those passed by name since, in the implementation part of the method, there is no distinction between the two in the Scala code. In such case, X-Ray will show inlay parentheses after a by-name argument.
Parameter name hints
These are the names of parameters taken from the method’s declaration. A parameter name can be valuable additional information about the role of data passed to the method, but writing them down explicitly is usually too wordy. X-Ray might turn out to be a perfect golden middle, letting you see the parameter names only when needed.
Here is a video with examples of all types of hints discussed above:
Indent guides are those delicate vertical lines showing where a given nesting level starts and ends. Together with methods separators, they might be helpful to you if you code in Scala 3 with the new brace-less syntax. But even if you use braces, you may still give it a try.
While indent guides outline nesting levels vertically, methods separators are, simply put, horizontal lines separating methods. Again, you might find it helpful in Scala 3 brace-less projects but also on the opposite end – when you have too many braces in your code.
The IntelliJ Scala plugin team
IntelliJ Scala Plugin 2023.3 Is Out!
Scala 3 As usual, the new release focused much on improving the Scala 3 support. Especially enums received much attention. The Scala plugin now recognizes that enums cannot be extended and highlights such attempts; annotations and modifiers are now propagated correctly to generated symbols; type…
IntelliJScala @ Scala Days 2023 Madrid
On September 12 – 14, the Scala Plugin team was in Madrid for the Scala Days conference. JetBrains was a Gold Sponsor for the event and we are very proud of it. We came to Madrid with a booth, merchandise, and a talk about the IntelliJ Scala Plugin. The Scala Plugin has seen a lot of improvements…
IntelliJ Scala Plugin 2023.2 Is Out!
Better Scala 3 Support IntelliJ IDEA 2023.2 brings enhanced Scala 3 support, with a focus on providing a streamlined development experience. Notable improvements include fixes for Scala 3 enum highlighting, navigation to enum definitions, and the correct resolution of enum cases in various contex…
IntelliJ Scala Plugin 2023.1 Is Out!
Improved support for braceless Scala syntax IntelliJ IDEA can now desugar braceless Scala code properly, and it handles refactorings where the “fewer braces” feature is used. It also supports braceless syntax in worksheets and correctly interprets indentation when you move extensions methods up a…