{"id":530145,"date":"2024-12-05T17:10:39","date_gmt":"2024-12-05T16:10:39","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=scala&#038;p=530145"},"modified":"2024-12-05T17:10:45","modified_gmt":"2024-12-05T16:10:45","slug":"intellij-scala-plugin-2024-3-is-out-2","status":"publish","type":"scala","link":"https:\/\/blog.jetbrains.com\/ru\/scala\/2024\/12\/05\/intellij-scala-plugin-2024-3-is-out-2","title":{"rendered":"IntelliJ Scala Plugin 2024.3.20 Is Out!"},"content":{"rendered":"\n<p>We\u2019ve just published a maintenance update to IntelliJ Scala Plugin 2024.3. This minor release includes several bug fixes and improvements to existing features introduced in the main release.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lambda breakpoints in the debugger<\/h2>\n\n\n\n<p>We\u2019ve made improvements to how lambda expressions are handled in the debugger. Previously, setting a breakpoint on a line with a lambda (e.g. in a method parameter list) would cause the entire line to be highlighted. Starting with this release, only the lambda body is highlighted, reflecting the actual point where the breakpoint is attached.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/LambdaBreakpoint-1.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Named tuples completion<\/h2>\n\n\n\n<p>Named tuples are a new experimental feature introduced in Scala 3.5 that <a href=\"https:\/\/contributors.scala-lang.org\/t\/scala-3-6-release-thread\/6796\/15?u=makingthematrix\" target=\"_blank\" rel=\"noopener\">will become a standard feature in Scala 3.7<\/a>. You can read more about our support for named tuples in <a href=\"https:\/\/blog.jetbrains.com\/scala\/2024\/11\/13\/intellij-scala-plugin-2024-3-is-out\/#named-tuples\">the release notes for the 2024.3 release of the IntelliJ Scala Plugin<\/a>.<\/p>\n\n\n\n<p>In this minor release, we\u2019ve added another enhancement to make working with named tuples even more efficient. Suppose you have a named tuple already defined in your code, for example:<\/p>\n\n\n\n<p><code>type X = (a: Int, b: String)<\/code><\/p>\n\n\n\n<p>If you declare a value of this type, then IntelliJ IDEA will now suggest a completion that lists all the tuple\u2019s fields\u2019 names:<\/p>\n\n\n\n<p><code>val blub: X = (a = ???, b = ???)<\/code><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/NamedTuplesCompletion.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fixes to <em>Optimize imports<\/em><\/h2>\n\n\n\n<p>We fixed a bug that was causing the <em>Optimize imports<\/em> action to identify the imported <code>derived<\/code> extension method as unused and remove it. This fix ensures that your code stays functional while optimizing imports.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The AI-powered <em>Rename<\/em> refactoring no longer suggests existing names<\/h2>\n\n\n\n<p>If you\u2019ve used AI Assistant, you\u2019re likely familiar with its ability to assist in solving one of the most challenging problems in programming: giving meaningful names to your classes, methods, and fields. Until recently, though, when you wanted to rename a field, AI would occasionally suggest names that were already in use in your code, leading to potential conflicts. Since the current release, this is not going to happen anymore.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>As always, your feedback is very welcome. Please report any issues you find to <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/SCL\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>. If you have any questions, feel free to ask us on <a href=\"https:\/\/discord.com\/channels\/931170831139217469\" target=\"_blank\" rel=\"noopener\">Discord<\/a>.<\/p>\n\n\n\n<p>Happy developing!<\/p>\n\n\n\n<p class=\"has-text-align-right\">The <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/1347-scala\" target=\"_blank\" rel=\"noopener\">IntelliJ Scala Plugin<\/a> team<\/p>\n","protected":false},"author":1344,"featured_media":530226,"comment_status":"closed","ping_status":"closed","template":"","categories":[89,907,8058,6945],"tags":[40,76,6836,225],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/scala\/530145"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/scala"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/types\/scala"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/users\/1344"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/comments?post=530145"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/scala\/530145\/revisions"}],"predecessor-version":[{"id":532878,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/scala\/530145\/revisions\/532878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/media\/530226"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/media?parent=530145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/categories?post=530145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/tags?post=530145"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ru\/wp-json\/wp\/v2\/cross-post-tag?post=530145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}