diff --git a/404.html b/404.html index 877b8f23727..ae24472b61b 100644 --- a/404.html +++ b/404.html @@ -10,8 +10,8 @@ - - + +
@@ -22,7 +22,7 @@
- - + + \ No newline at end of file diff --git a/assets/js/01456d3b.e43bbb25.js b/assets/js/01456d3b.d4073d51.js similarity index 59% rename from assets/js/01456d3b.e43bbb25.js rename to assets/js/01456d3b.d4073d51.js index 27eaf5ef0ca..83128967d19 100644 --- a/assets/js/01456d3b.e43bbb25.js +++ b/assets/js/01456d3b.d4073d51.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7099],{6777:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/14","page":14,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/13","nextPage":"/metals/blog/page/15","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7099],{6777:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/14","page":14,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/13","nextPage":"/metals/blog/page/15","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/022bb252.9ec3809a.js b/assets/js/022bb252.93c9cb05.js similarity index 59% rename from assets/js/022bb252.9ec3809a.js rename to assets/js/022bb252.93c9cb05.js index 5490dd4f611..4c9db11095c 100644 --- a/assets/js/022bb252.9ec3809a.js +++ b/assets/js/022bb252.93c9cb05.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5975],{685:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/51","page":51,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/50","nextPage":"/metals/blog/page/52","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5975],{685:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/51","page":51,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/50","nextPage":"/metals/blog/page/52","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/07ab39c8.faaadb83.js b/assets/js/07ab39c8.bbd04079.js similarity index 59% rename from assets/js/07ab39c8.faaadb83.js rename to assets/js/07ab39c8.bbd04079.js index de58db16ba5..4229a912a79 100644 --- a/assets/js/07ab39c8.faaadb83.js +++ b/assets/js/07ab39c8.bbd04079.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8031],{2218:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/38","page":38,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/37","nextPage":"/metals/blog/page/39","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8031],{2218:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/38","page":38,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/37","nextPage":"/metals/blog/page/39","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/07c8b2d8.303ae7a6.js b/assets/js/07c8b2d8.3c55aeb9.js similarity index 59% rename from assets/js/07c8b2d8.303ae7a6.js rename to assets/js/07c8b2d8.3c55aeb9.js index 65b719d66ff..3d29f286d2e 100644 --- a/assets/js/07c8b2d8.303ae7a6.js +++ b/assets/js/07c8b2d8.3c55aeb9.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8131],{2625:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/33","page":33,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/32","nextPage":"/metals/blog/page/34","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8131],{2625:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/33","page":33,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/32","nextPage":"/metals/blog/page/34","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0c130405.8844a722.js b/assets/js/0c130405.4befce7e.js similarity index 59% rename from assets/js/0c130405.8844a722.js rename to assets/js/0c130405.4befce7e.js index 0f0e76c5f1b..eeb4f162470 100644 --- a/assets/js/0c130405.8844a722.js +++ b/assets/js/0c130405.4befce7e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[198],{2880:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/12","page":12,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/11","nextPage":"/metals/blog/page/13","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[198],{2880:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/12","page":12,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/11","nextPage":"/metals/blog/page/13","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0d126b35.91ffccb0.js b/assets/js/0d126b35.cc470163.js similarity index 59% rename from assets/js/0d126b35.91ffccb0.js rename to assets/js/0d126b35.cc470163.js index aa2914e0358..5643e705cfd 100644 --- a/assets/js/0d126b35.91ffccb0.js +++ b/assets/js/0d126b35.cc470163.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6622],{4560:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/17","page":17,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/16","nextPage":"/metals/blog/page/18","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6622],{4560:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/17","page":17,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/16","nextPage":"/metals/blog/page/18","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0d8e09e6.31da911d.js b/assets/js/0d8e09e6.3d10b7c7.js similarity index 59% rename from assets/js/0d8e09e6.31da911d.js rename to assets/js/0d8e09e6.3d10b7c7.js index 555f6dd63e8..06c0b27a031 100644 --- a/assets/js/0d8e09e6.31da911d.js +++ b/assets/js/0d8e09e6.3d10b7c7.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2063],{9246:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/25","page":25,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/24","nextPage":"/metals/blog/page/26","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2063],{9246:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/25","page":25,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/24","nextPage":"/metals/blog/page/26","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/0e2b725e.4a8fe97b.js b/assets/js/0e2b725e.15ffae58.js similarity index 59% rename from assets/js/0e2b725e.4a8fe97b.js rename to assets/js/0e2b725e.15ffae58.js index b2930026760..f2672dec9c3 100644 --- a/assets/js/0e2b725e.4a8fe97b.js +++ b/assets/js/0e2b725e.15ffae58.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4256],{4893:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/40","page":40,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/39","nextPage":"/metals/blog/page/41","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4256],{4893:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/40","page":40,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/39","nextPage":"/metals/blog/page/41","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/143cbec3.22bd0cee.js b/assets/js/143cbec3.0e61175d.js similarity index 79% rename from assets/js/143cbec3.22bd0cee.js rename to assets/js/143cbec3.0e61175d.js index 16a9b9efbd9..7d9d86fffcc 100644 --- a/assets/js/143cbec3.22bd0cee.js +++ b/assets/js/143cbec3.0e61175d.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[119],{8681:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/3","page":3,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/2","nextPage":"/metals/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[119],{8681:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/3","page":3,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/2","nextPage":"/metals/blog/page/4","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1512f001.96ff8320.js b/assets/js/1512f001.15994868.js similarity index 59% rename from assets/js/1512f001.96ff8320.js rename to assets/js/1512f001.15994868.js index 136c6e3e4a8..ab765667638 100644 --- a/assets/js/1512f001.96ff8320.js +++ b/assets/js/1512f001.15994868.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[569],{7893:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/57","page":57,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/56","nextPage":"/metals/blog/page/58","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[569],{7893:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/57","page":57,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/56","nextPage":"/metals/blog/page/58","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/15b090c7.0f8ed7b6.js b/assets/js/15b090c7.b3921c14.js similarity index 79% rename from assets/js/15b090c7.0f8ed7b6.js rename to assets/js/15b090c7.b3921c14.js index f820a509750..d80609dfed8 100644 --- a/assets/js/15b090c7.0f8ed7b6.js +++ b/assets/js/15b090c7.b3921c14.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3214],{5359:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/5","page":5,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/4","nextPage":"/metals/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3214],{5359:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/5","page":5,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/4","nextPage":"/metals/blog/page/6","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/1a79d8f3.2b1d8809.js b/assets/js/1a79d8f3.cc0a4adf.js similarity index 59% rename from assets/js/1a79d8f3.2b1d8809.js rename to assets/js/1a79d8f3.cc0a4adf.js index bb504d1c273..6cc85665af4 100644 --- a/assets/js/1a79d8f3.2b1d8809.js +++ b/assets/js/1a79d8f3.cc0a4adf.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4167],{9536:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/41","page":41,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/40","nextPage":"/metals/blog/page/42","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4167],{9536:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/41","page":41,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/40","nextPage":"/metals/blog/page/42","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/21dcb4fb.0b48411e.js b/assets/js/21dcb4fb.112e9efc.js similarity index 59% rename from assets/js/21dcb4fb.0b48411e.js rename to assets/js/21dcb4fb.112e9efc.js index e8d2396c3cf..49338a76849 100644 --- a/assets/js/21dcb4fb.0b48411e.js +++ b/assets/js/21dcb4fb.112e9efc.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5642],{6858:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/50","page":50,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/49","nextPage":"/metals/blog/page/51","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5642],{6858:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/50","page":50,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/49","nextPage":"/metals/blog/page/51","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/22c2c9b0.f1aadbb2.js b/assets/js/22c2c9b0.9facad4d.js similarity index 79% rename from assets/js/22c2c9b0.f1aadbb2.js rename to assets/js/22c2c9b0.9facad4d.js index 7e54eb8bd94..4d4a4fb74a4 100644 --- a/assets/js/22c2c9b0.f1aadbb2.js +++ b/assets/js/22c2c9b0.9facad4d.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3980],{1940:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/4","page":4,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/3","nextPage":"/metals/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3980],{1940:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/4","page":4,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/3","nextPage":"/metals/blog/page/5","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2387c651.ed1d0c2a.js b/assets/js/2387c651.5f801935.js similarity index 59% rename from assets/js/2387c651.ed1d0c2a.js rename to assets/js/2387c651.5f801935.js index f4649b4089d..32131fa29b7 100644 --- a/assets/js/2387c651.ed1d0c2a.js +++ b/assets/js/2387c651.5f801935.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2036],{2217:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/30","page":30,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/29","nextPage":"/metals/blog/page/31","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2036],{2217:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/30","page":30,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/29","nextPage":"/metals/blog/page/31","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/28906591.ce73323a.js b/assets/js/28906591.86579b0d.js similarity index 99% rename from assets/js/28906591.ce73323a.js rename to assets/js/28906591.86579b0d.js index df769205fdf..6a448a1b5d1 100644 --- a/assets/js/28906591.ce73323a.js +++ b/assets/js/28906591.86579b0d.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),m=p(n),c=i,h=m["".concat(s,".").concat(c)]||m[c]||u[c]||o;return n?a.createElement(h,l(l({ref:t},d),{},{components:n})):a.createElement(h,l({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=c;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[m]="string"==typeof e?e:i,l[1]=r;for(var p=2;p{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>p,toc:()=>m});var a=n(7462),i=n(3366),o=(n(7294),n(3905)),l=["components"],r={id:"new-editor",title:"Integrating a new editor"},s=void 0,p={unversionedId:"integrations/new-editor",id:"integrations/new-editor",title:"Integrating a new editor",description:"Metals is a language server implemented in Scala that communicates with a single",source:"@site/target/docs/integrations/new-editor.md",sourceDirName:"integrations",slug:"/integrations/new-editor",permalink:"/metals/docs/integrations/new-editor",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/integrations/new-editor.md",tags:[],version:"current",frontMatter:{id:"new-editor",title:"Integrating a new editor"},sidebar:"docs",previous:{title:"Integrating a new build tool",permalink:"/metals/docs/integrations/new-build-tool"},next:{title:"Test Explorer",permalink:"/metals/docs/integrations/test-explorer"}},d={},m=[{value:"Requirements",id:"requirements",level:2},{value:"Starting the server",id:"starting-the-server",level:2},{value:"Configuring the server",id:"configuring-the-server",level:2},{value:"Language Server Protocol",id:"language-server-protocol",level:2},{value:"initialize",id:"initialize",level:3},{value:"InitializationOptions",id:"initializationoptions",level:4},{value:"compilerOptions.completionCommand",id:"compileroptionscompletioncommand",level:5},{value:"compilerOptions.isCompletionItemDetailEnabled",id:"compileroptionsiscompletionitemdetailenabled",level:5},{value:"compilerOptions.isCompletionItemDocumentationEnabled",id:"compileroptionsiscompletionitemdocumentationenabled",level:5},{value:"compilerOptions.isCompletionItemResolve",id:"compileroptionsiscompletionitemresolve",level:5},{value:"compilerOptions.isHoverDocumentationEnabled",id:"compileroptionsishoverdocumentationenabled",level:5},{value:"compilerOptions.isSignatureHelpDocumentationEnabled",id:"compileroptionsissignaturehelpdocumentationenabled",level:5},{value:"compilerOptions.overrideDefFormat",id:"compileroptionsoverridedefformat",level:5},{value:"compilerOptions.parameterHintsCommand",id:"compileroptionsparameterhintscommand",level:5},{value:"compilerOptions.snippetAutoIndent",id:"compileroptionssnippetautoindent",level:5},{value:"copyWorksheetOutputProvider",id:"copyworksheetoutputprovider",level:5},{value:"debuggingProvider",id:"debuggingprovider",level:5},{value:"decorationProvider",id:"decorationprovider",level:5},{value:"didFocusProvider",id:"didfocusprovider",level:5},{value:"disableColorOutput",id:"disablecoloroutput",level:5},{value:"doctorProvider",id:"doctorprovider",level:5},{value:"executeClientCommandProvider",id:"executeclientcommandprovider",level:5},{value:"globSyntax",id:"globsyntax",level:5},{value:"inlineDecorationProvider",id:"inlinedecorationprovider",level:5},{value:"icons",id:"icons",level:5},{value:"inputBoxProvider",id:"inputboxprovider",level:5},{value:"isExitOnShutdown",id:"isexitonshutdown",level:5},{value:"isHttpEnabled",id:"ishttpenabled",level:5},{value:"openFilesOnRenameProvider",id:"openfilesonrenameprovider",level:5},{value:"openNewWindowProvider",id:"opennewwindowprovider",level:5},{value:"quickPickProvider",id:"quickpickprovider",level:5},{value:"renameFileThreshold",id:"renamefilethreshold",level:5},{value:"slowTaskProvider",id:"slowtaskprovider",level:5},{value:"statusBarProvider",id:"statusbarprovider",level:5},{value:"treeViewProvider",id:"treeviewprovider",level:5},{value:"testExplorerProvider",id:"testexplorerprovider",level:5},{value:"doctorVisibilityProvider",id:"doctorvisibilityprovider",level:5},{value:"Experimental Capabilities",id:"experimental-capabilities",level:4},{value:"initialized",id:"initialized",level:3},{value:"shutdown",id:"shutdown",level:3},{value:"exit",id:"exit",level:3},{value:"$/cancelRequest",id:"cancelrequest",level:3},{value:"client/registerCapability",id:"clientregistercapability",level:3},{value:"textDocument/didOpen",id:"textdocumentdidopen",level:3},{value:"textDocument/didChange",id:"textdocumentdidchange",level:3},{value:"textDocument/didClose",id:"textdocumentdidclose",level:3},{value:"textDocument/didSave",id:"textdocumentdidsave",level:3},{value:"textDocument/publishDiagnostics",id:"textdocumentpublishdiagnostics",level:3},{value:"textDocument/definition",id:"textdocumentdefinition",level:3},{value:"textDocument/references",id:"textdocumentreferences",level:3},{value:"textDocument/documentSymbol",id:"textdocumentdocumentsymbol",level:3},{value:"textDocument/formatting",id:"textdocumentformatting",level:3},{value:"textDocument/hover",id:"textdocumenthover",level:3},{value:"workspace/didChangeWatchedFiles",id:"workspacedidchangewatchedfiles",level:3},{value:"workspace/executeCommands",id:"workspaceexecutecommands",level:3},{value:"workspace/didChangeConfiguration",id:"workspacedidchangeconfiguration",level:3},{value:"window/logMessage",id:"windowlogmessage",level:3},{value:"window/showMessage",id:"windowshowmessage",level:3},{value:"window/showMessageRequest",id:"windowshowmessagerequest",level:3},{value:"Metals server properties",id:"metals-server-properties",level:2},{value:"-Dmetals.verbose",id:"-dmetalsverbose",level:3},{value:"-Dmetals.statistics",id:"-dmetalsstatistics",level:3},{value:"-Dmetals.h2.auto-server",id:"-dmetalsh2auto-server",level:3},{value:"-Dmetals.pc.debug",id:"-dmetalspcdebug",level:3},{value:"-Dbloop.sbt.version",id:"-dbloopsbtversion",level:3},{value:"-Dmetals.bloop-port",id:"-dmetalsbloop-port",level:3},{value:"Metals user configuration",id:"metals-user-configuration",level:2},{value:"Java Home directory",id:"java-home-directory",level:3},{value:"sbt script",id:"sbt-script",level:3},{value:"Gradle script",id:"gradle-script",level:3},{value:"Maven script",id:"maven-script",level:3},{value:"Mill script",id:"mill-script",level:3},{value:"Scalafmt config path",id:"scalafmt-config-path",level:3},{value:"Scalafix config path",id:"scalafix-config-path",level:3},{value:"Ammonite JVM Properties",id:"ammonite-jvm-properties",level:3},{value:"Excluded Packages",id:"excluded-packages",level:3},{value:"Don't generate Bloop plugin file for sbt",id:"dont-generate-bloop-plugin-file-for-sbt",level:3},{value:"Version of Bloop",id:"version-of-bloop",level:3},{value:"Bloop JVM Properties",id:"bloop-jvm-properties",level:3},{value:"Should display lenses with links to super methods",id:"should-display-lenses-with-links-to-super-methods",level:3},{value:"Should display type annotations for inferred types",id:"should-display-type-annotations-for-inferred-types",level:3},{value:"Should display implicit parameter at usage sites",id:"should-display-implicit-parameter-at-usage-sites",level:3},{value:"Should display implicit conversion at usage sites",id:"should-display-implicit-conversion-at-usage-sites",level:3},{value:"Use semantic tokens highlight",id:"use-semantic-tokens-highlight",level:3},{value:"Indent snippets when pasted.",id:"indent-snippets-when-pasted",level:3},{value:"Remote language server",id:"remote-language-server",level:3},{value:"Default fallback Scala version",id:"default-fallback-scala-version",level:3},{value:"Test UI used for tests and test suites",id:"test-ui-used-for-tests-and-test-suites",level:3},{value:"Eclipse Java formatter config path",id:"eclipse-java-formatter-config-path",level:3},{value:"Eclipse Java formatting profile",id:"eclipse-java-formatting-profile",level:3},{value:"Scala CLI launcher",id:"scala-cli-launcher",level:3},{value:"Metals server commands",id:"metals-server-commands",level:2},{value:"Analyze stacktrace",id:"analyze-stacktrace",level:3},{value:"Switch build server",id:"switch-build-server",level:3},{value:"Connect to build server",id:"connect-to-build-server",level:3},{value:"Cancel compilation",id:"cancel-compilation",level:3},{value:"Cascade compile",id:"cascade-compile",level:3},{value:"Clean compile",id:"clean-compile",level:3},{value:"Convert positional arguments to named ones",id:"convert-positional-arguments-to-named-ones",level:3},{value:"Copy Worksheet Output",id:"copy-worksheet-output",level:3},{value:"Discover main classes to run and return the object",id:"discover-main-classes-to-run-and-return-the-object",level:3},{value:"Discover tests",id:"discover-tests",level:3},{value:"Extract member definition",id:"extract-member-definition",level:3},{value:"Generate BSP Config",id:"generate-bsp-config",level:3},{value:"Goto location for position",id:"goto-location-for-position",level:3},{value:"Go to super method/field definition",id:"go-to-super-methodfield-definition",level:3},{value:"Goto location for symbol",id:"goto-location-for-symbol",level:3},{value:"Import build",id:"import-build",level:3},{value:"Insert inferred type of a value",id:"insert-inferred-type-of-a-value",level:3},{value:"Inline value",id:"inline-value",level:3},{value:"Create new scala file",id:"create-new-scala-file",level:3},{value:"Create new java file",id:"create-new-java-file",level:3},{value:"New Scala Project",id:"new-scala-project",level:3},{value:"Restart presentation compiler",id:"restart-presentation-compiler",level:3},{value:"Reset Choice Popup",id:"reset-choice-popup",level:3},{value:"Reset notifications",id:"reset-notifications",level:3},{value:"Extract method from range",id:"extract-method-from-range",level:3},{value:"Restart build server",id:"restart-build-server",level:3},{value:"Run doctor",id:"run-doctor",level:3},{value:"Run all Scalafix Rules",id:"run-all-scalafix-rules",level:3},{value:"Run a set of Scalafix Rules",id:"run-a-set-of-scalafix-rules",level:3},{value:"Decode file",id:"decode-file",level:3},{value:"Disconnect from old build server",id:"disconnect-from-old-build-server",level:3},{value:"List build targets",id:"list-build-targets",level:3},{value:"Scan sources",id:"scan-sources",level:3},{value:"Start Ammonite build server",id:"start-ammonite-build-server",level:3},{value:"Start debug adapter",id:"start-debug-adapter",level:3},{value:"Start main class",id:"start-main-class",level:3},{value:"Start test suite",id:"start-test-suite",level:3},{value:"Start test suite",id:"start-test-suite-1",level:3},{value:"Attach to a running jvm process",id:"attach-to-a-running-jvm-process",level:3},{value:"Try to discover a test or main to run.",id:"try-to-discover-a-test-or-main-to-run",level:3},{value:"Stop Ammonite build server",id:"stop-ammonite-build-server",level:3},{value:"Go to super method/field definition in hierarchy",id:"go-to-super-methodfield-definition-in-hierarchy",level:3},{value:"Start Scala CLI server",id:"start-scala-cli-server",level:3},{value:"Stop Scala CLI server",id:"stop-scala-cli-server",level:3},{value:"Open an issue on GitHub",id:"open-an-issue-on-github",level:3},{value:"Open a feature request",id:"open-a-feature-request",level:3},{value:"Create a zip with error reports",id:"create-a-zip-with-error-reports",level:3},{value:"Clean and restart build server",id:"clean-and-restart-build-server",level:3},{value:"Metals client commands",id:"metals-client-commands",level:2},{value:"Open a specified folder either in the same or new window",id:"open-a-specified-folder-either-in-the-same-or-new-window",level:3},{value:"Run doctor",id:"run-doctor-1",level:3},{value:"Reload doctor",id:"reload-doctor",level:3},{value:"Toggle logs",id:"toggle-logs",level:3},{value:"Open problems",id:"open-problems",level:3},{value:"Goto location",id:"goto-location",level:3},{value:"Echo command",id:"echo-command",level:3},{value:"Refresh model",id:"refresh-model",level:3},{value:"Show the stacktrace in the client.",id:"show-the-stacktrace-in-the-client",level:3},{value:"Copy Worksheet Output",id:"copy-worksheet-output-1",level:3},{value:"Start run session",id:"start-run-session",level:3},{value:"Start debug session",id:"start-debug-session",level:3},{value:"Metals HTTP client",id:"metals-http-client",level:2},{value:"Metals LSP extensions",id:"metals-lsp-extensions",level:2},{value:"Debug Adapter Protocol",id:"debug-adapter-protocol",level:3},{value:"Tree View Protocol",id:"tree-view-protocol",level:3},{value:"Decoration Protocol",id:"decoration-protocol",level:3},{value:"metals/slowTask",id:"metalsslowtask",level:3},{value:"metals/status",id:"metalsstatus",level:3},{value:"metals/didFocusTextDocument",id:"metalsdidfocustextdocument",level:3},{value:"metals/executeClientCommand",id:"metalsexecuteclientcommand",level:3},{value:"metals/inputBox",id:"metalsinputbox",level:3},{value:"metals/quickPick",id:"metalsquickpick",level:3},{value:"metals/windowStateDidChange",id:"metalswindowstatedidchange",level:3},{value:"metals/openWindow",id:"metalsopenwindow",level:3},{value:"metals/findTextInDependencyJars",id:"metalsfindtextindependencyjars",level:3},{value:"metals/doctorVisibilityDidChange",id:"metalsdoctorvisibilitydidchange",level:3}],u={toc:m},c="wrapper";function h(e){var t=e.components,n=(0,i.Z)(e,l);return(0,o.kt)(c,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Metals is a language server implemented in Scala that communicates with a single\nclient over ",(0,o.kt)("a",{parentName:"p",href:"https://www.jsonrpc.org/specification"},"JSON-RPC"),"."),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,o.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,o.kt)("h2",{id:"starting-the-server"},"Starting the server"),(0,o.kt)("p",null,"Use ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/coursier/coursier"},"Coursier")," to obtain the JVM classpath\nof Metals:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,o.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-properties"},"Metals server properties")," for additional system\nproperties that are supported by the server."),(0,o.kt)("p",null,"JSON-RPC communication takes place over standard input/output so the Metals\nserver doesn't print anything to the console when it starts. Instead, before\nestablishing a connection with the client, Metals logs notifications to a global\ndirectory:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# macOS\n~/Library/Caches/org.scalameta.metals/global.log\n# Linux\n$XDG_CACHE_HOME/org.scalameta.metals/global.log\n# Linux (alternative)\n$HOME/.cache/org.scalameta.metals/global.log\n# Windows\n{FOLDERID_LocalApplicationData}\\.cache\\org.scalameta.metals\\global.log\n")),(0,o.kt)("p",null,"After establishing a connection with the client, Metals redirects logs to the\n",(0,o.kt)("inlineCode",{parentName:"p"},".metals/metals.log")," file in the LSP workspace root directory."),(0,o.kt)("p",null,"Metals supports two kinds of JSON-RPC endpoints:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#language-server-protocol"},"Language Server Protocol"),": for the main\nfunctionality of the server, including editor text synchronization and\nsemantic features such as goto definition."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#metals-lsp-extensions"},"Metals extensions"),": for additional functionality that\nis missing in LSP but improves the user experience.")),(0,o.kt)("h2",{id:"configuring-the-server"},"Configuring the server"),(0,o.kt)("p",null,"Over time the recommended way to configure Metals has shifted from heavily\nrelying on the ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-properties"},"Metals server properties")," to being\nfully able to be configured via ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," which are exchanged\nduring the\n",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#initialize"},(0,o.kt)("inlineCode",{parentName:"a"},"initialize")),"\nprocess. While Metals will still work being fully configured by server\nproperties, we strongly recommend that instead you rely on the\n",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," which are thoroughly covered below in the\n",(0,o.kt)("a",{parentName:"p",href:"#initialize"},(0,o.kt)("inlineCode",{parentName:"a"},"initialize"))," section."),(0,o.kt)("h2",{id:"language-server-protocol"},"Language Server Protocol"),(0,o.kt)("p",null,"Consult the\n",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification"},"LSP specification"),"\nto learn more about how LSP works. Metals uses the following endpoints from the\nspecification."),(0,o.kt)("h3",{id:"initialize"},(0,o.kt)("inlineCode",{parentName:"h3"},"initialize")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"the ",(0,o.kt)("inlineCode",{parentName:"li"},"rootUri")," field is used to configure Metals for that workspace directory.\nThe working directory for where server is started has no significant meaning."),(0,o.kt)("li",{parentName:"ul"},"at this point, Metals uses only full text synchronization. In the future, it\nwill be able to use incremental text synchronization."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"didChangeWatchedFiles")," client capability is used to determine whether to\nregister file watchers.")),(0,o.kt)("h4",{id:"initializationoptions"},(0,o.kt)("inlineCode",{parentName:"h4"},"InitializationOptions")),(0,o.kt)("p",null,"During ",(0,o.kt)("inlineCode",{parentName:"p"},"initialize")," we also have the ability to pass in ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),'.\nThis is the primary way to configure Metals. In Metals we have a few different\n"providers". Some are LSP extensions, such as ',(0,o.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," which you read\nabout below, and others used to be server properties that have been migrated to\n",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". M"),(0,o.kt)("p",null,"The currently available settings for ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," are listed below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},' interface InitializationOptions: {\n compilerOptions: {\n completionCommand?: string;\n isCompletionItemDetailEnabled?: boolean;\n isCompletionItemDocumentationEnabled?: boolean;\n isCompletionItemResolve?: boolean;\n isHoverDocumentationEnabled?: boolean;\n isSignatureHelpDocumentationEnabled?: boolean;\n overrideDefFormat?: "ascii" | "unicode";\n parameterHintsCommand?: string;\n snippetAutoIndent?: boolean;\n }\n debuggingProvider?: boolean;\n decorationProvider?: boolean;\n inlineDecorationProvider?: boolean;\n didFocusProvider?: boolean;\n doctorProvider?: "json" | "html";\n executeClientCommandProvider?: boolean;\n globSyntax?: "vscode" | "uri";\n icons?: "vscode" | "octicons" | "atom" | "unicode";\n inputBoxProvider?: boolean;\n isVirtualDocumentSupported?: boolean;\n isExitOnShutdown?: boolean;\n isHttpEnabled?: boolean;\n openFilesOnRenameProvider?: boolean;\n quickPickProvider?: boolean;\n renameFileThreshold?: number;\n slowTaskProvider?: boolean;\n statusBarProvider?: "on" | "off" | "log-message" | "show-message";\n treeViewProvider?: boolean;\n testExplorerProvider?: boolean;\n openNewWindowProvider?: boolean;\n copyWorksheetOutputProvider?: boolean;\n commandInHtmlFormat?: "vscode" | "sublime";\n doctorVisibilityProvider?: boolean;\n }\n')),(0,o.kt)("p",null,"You can also always check these in the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/blob/main/metals/src/main/scala/scala/meta/internal/metals/InitializationOptions.scala"},(0,o.kt)("inlineCode",{parentName:"a"},"InitializationOptions.scala")),"\nfile where you'll find all of the options and descriptions. Alternatively you can check out the typescript equivalent - ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-languageclient/blob/main/src/interfaces/MetalsInitializationOptions.ts"},(0,o.kt)("inlineCode",{parentName:"a"},"MetalsInitializationOptions.ts"))),(0,o.kt)("h5",{id:"compileroptionscompletioncommand"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.completionCommand")),(0,o.kt)("p",null,"An optional string value for a command identifier to trigger completion\n(",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/signatureHelp"),") in the editor."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"editor.action.triggerSuggest"'),": currently used by Visual Studio Code and\ncoc.nvim."),(0,o.kt)("li",{parentName:"ul"},"empty: for all other editors.")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemdetailenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemDetailEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.detail")," field should\nbe populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.documentation")," field\nshould be populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemresolve"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemResolve")),(0,o.kt)("p",null,"Boolean value signifying whether the client wants Metals to handle the\n",(0,o.kt)("inlineCode",{parentName:"p"},"completionItem/resolve")," request."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#completionItem_resolve"},"https://microsoft.github.io/language-server-protocol/specification#completionItem_resolve")),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsishoverdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isHoverDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether to include docstrings in a ",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/hover"),"\nrequest."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsissignaturehelpdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isSignatureHelpDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignatureHelp.documentation")," field\nshould be populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsoverridedefformat"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.overrideDefFormat")),(0,o.kt)("p",null,"Whether or not the presentation compiler overrides should show unicode icon or\njust be in ascii format."),(0,o.kt)("p",null,"Possible Values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"ascii"')," (default)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"unicode"),' show the "\ud83d\udd3c" icon in overrides.')),(0,o.kt)("h5",{id:"compileroptionsparameterhintscommand"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.parameterHintsCommand")),(0,o.kt)("p",null,"An optional string value for a command identifier to trigger parameter hints\n(",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/signatureHelp"),") in the editor. Metals uses this setting to\npopulate ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.command")," for completion items that move the cursor\ninside an argument list. For example, when completing ",(0,o.kt)("inlineCode",{parentName:"p"},'"".stripSu@@')," into\n",(0,o.kt)("inlineCode",{parentName:"p"},'"".stripSuffix(@@)'),", Metals will automatically trigger parameter hints if this\nsetting is provided by the editor."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"editor.action.triggerParameterHints"'),": Used by Visual Studio Code and\ncoc.nvim."),(0,o.kt)("li",{parentName:"ul"},"empty: for all other editors.")),(0,o.kt)("h5",{id:"compileroptionssnippetautoindent"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.snippetAutoIndent")),(0,o.kt)("p",null,'Certain editors will automatically insert indentation equal to that of the\nreference line that the operation started on. This is relevant in the case of\nmultiline textEdits such as the "implement all methods" completion.'),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": (default): the client automatically adds in the indentation. This is the\ncase for VS Code, Sublime, and coc.nvim."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off"),": the client does not add any indentation when receiving a multi-line\ntextEdit")),(0,o.kt)("h5",{id:"copyworksheetoutputprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"copyWorksheetOutputProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports running\nCopyWorksheetOutput server command and copying its results into the local\nbuffer."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"debuggingprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"debuggingProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/debug-adapter-protocol"},"Debug Adapter Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"decorationprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"decorationProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"didfocusprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"didFocusProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"#metalsdidfocustextdocument"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/didFocusTextDocument"))," extension."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"disablecoloroutput"},(0,o.kt)("inlineCode",{parentName:"h5"},"disableColorOutput")),(0,o.kt)("p",null,"Useful for certain DAP clients that are unable to handle color codes for output.\nThis will remove the color codes coming from whatever DAP server is currently\nbeing used."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"doctorprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"doctorProvider")),(0,o.kt)("p",null,"Format that you'd like Doctor to return information in."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"html"),": (default): Metals will return html that can be rendered directly in\nthe browser or web view"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"json"),": json representation of the information returned by Doctor. See the\njson format ",(0,o.kt)("a",{parentName:"li",href:"#run-doctor"},"here"),".")),(0,o.kt)("h5",{id:"executeclientcommandprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"executeClientCommandProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")," notification is not\nsupported. Client commands can still be handled by enabling\n",(0,o.kt)("inlineCode",{parentName:"li"},"-Dmetals.http=on"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")," notification is supported and all\n",(0,o.kt)("a",{parentName:"li",href:"#metals-client-commands"},"Metals client commands")," are handled.")),(0,o.kt)("h5",{id:"globsyntax"},(0,o.kt)("inlineCode",{parentName:"h5"},"globSyntax")),(0,o.kt)("p",null,"Controls the glob syntax for registering file watchers on absolute directories.\nRegistration happens via ",(0,o.kt)("inlineCode",{parentName:"p"},"client/registerCapability")," for the\n",(0,o.kt)("a",{parentName:"p",href:"#workspacedidchangewatchedfiles"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace/didChangeWatchedFiles"))," method, if\nthe editor client supports it."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"uri")," (default): URI-encoded file paths, with forward slash ",(0,o.kt)("inlineCode",{parentName:"li"},"/")," for file\nseparators regardless of the operating system. Includes ",(0,o.kt)("inlineCode",{parentName:"li"},"file://")," prefix."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vscode"),": use regular Path.toString for the absolute directory parts (",(0,o.kt)("inlineCode",{parentName:"li"},"/")," on\nmacOS+Linux and ",(0,o.kt)("inlineCode",{parentName:"li"},"\\")," on Windows) and forward slashes ",(0,o.kt)("inlineCode",{parentName:"li"},"/")," for relative parts.\nFor example, ",(0,o.kt)("inlineCode",{parentName:"li"},"C:\\Users\\IEUser\\workspace\\project/*.{scala,sbt,properties}"),".\nThis mode is used by the VS Code client.")),(0,o.kt)("h5",{id:"inlinedecorationprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"inlineDecorationProvider")),(0,o.kt)("p",null,"If the client implements the Metals Decoration Protocol ",(0,o.kt)("strong",{parentName:"p"},"and")," supports\ndecorations to be shown inline and not only at the end of a line."),(0,o.kt)("p",null,"Default: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"icons"},(0,o.kt)("inlineCode",{parentName:"h5"},"icons")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"none")," (default): don't display icons in messages."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vscode"),": use ",(0,o.kt)("a",{parentName:"li",href:"https://octicons.github.com"},"Octicons")," such as ",(0,o.kt)("inlineCode",{parentName:"li"},"$(rocket)")," for\nstatus bar messages, as supported by th\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/docs/extensionAPI/vscode-api#StatusBarItem"},"VS Code status bar"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"unicode"),": use unicode emojis like \ud83d\ude80 for status bar messages.")),(0,o.kt)("h5",{id:"inputboxprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"inputBoxProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," request is not supported. In this case,\nMetals tries to fall back to ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest")," when possible."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," request is fully supported.")),(0,o.kt)("h5",{id:"isexitonshutdown"},(0,o.kt)("inlineCode",{parentName:"h5"},"isExitOnShutdown")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): run ",(0,o.kt)("inlineCode",{parentName:"li"},"System.exit")," only on the ",(0,o.kt)("inlineCode",{parentName:"li"},"exit")," notification, as\nrequired by the LSP specification."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": run ",(0,o.kt)("inlineCode",{parentName:"li"},"System.exit")," after the ",(0,o.kt)("inlineCode",{parentName:"li"},"shutdown")," request, going against the LSP\nspecification. This option is enabled by default for Sublime Text to prevent\nthe Metals process from staying alive after Sublime Text has quit with\n",(0,o.kt)("inlineCode",{parentName:"li"},"Cmd+Q"),". It's not possible for Sublime Text packages to register a callback\nwhen the editor has quit. See\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/tomv564/LSP/issues/410"},"LSP#410")," for more details.")),(0,o.kt)("h5",{id:"ishttpenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"isHttpEnabled")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): don't start a server with the Metals HTTP client."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": start a server with the ","[Metals HTTP client]"," to interact with the server\nthrough a basic web UI. This option is needed for editor clients that don't\nsupport necessary requests such as ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest"),".")),(0,o.kt)("h5",{id:"openfilesonrenameprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"openFilesOnRenameProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client opens files when doing a\nrename."),(0,o.kt)("p",null,"Default: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"opennewwindowprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"openNewWindowProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports opening up a new\nwindow with the newly created project. Used in conjunction with the New Project\nProvider."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"quickpickprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"quickPickProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the\n",(0,o.kt)("a",{parentName:"p",href:"#metalsquickpick"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/quickPick"))," extensions."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"renamefilethreshold"},(0,o.kt)("inlineCode",{parentName:"h5"},"renameFileThreshold")),(0,o.kt)("p",null,"The max amount of files that you would like the client to open if the client is\na ",(0,o.kt)("inlineCode",{parentName:"p"},"openFilesOnRenameProvider"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"300")),(0,o.kt)("h5",{id:"slowtaskprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"slowTaskProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")," request is not supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")," request is fully supported.")),(0,o.kt)("h5",{id:"statusbarprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"statusBarProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notification is not supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notification is supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"log-message"),": translate ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notifications to ",(0,o.kt)("inlineCode",{parentName:"li"},"window/logMessage"),"\nnotifications."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"show-message"),": translate ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notifications to\n",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessage")," show notifications however the client displays messages\nto the user.")),(0,o.kt)("h5",{id:"treeviewprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"treeViewProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"testexplorerprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"testExplorerProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the Test Explorer."),(0,o.kt)("h5",{id:"doctorvisibilityprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"doctorVisibilityProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals/doctorVisibilityDidChange"'),".\nThis JSON notification is used to keep track of doctor state. If client implements this provider then Metals server\nwill send updates to the doctor view."),(0,o.kt)("h4",{id:"experimental-capabilities"},"Experimental Capabilities"),(0,o.kt)("p",null,"All of the features that used to be set with ",(0,o.kt)("inlineCode",{parentName:"p"},"experimental")," can now all be set\nvia ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". This is the preferred way to configure Metals."),(0,o.kt)("h3",{id:"initialized"},(0,o.kt)("inlineCode",{parentName:"h3"},"initialized")),(0,o.kt)("p",null,"Triggers build server initialization and workspace indexing. The ",(0,o.kt)("inlineCode",{parentName:"p"},"initialized"),"\nnotification is critical for any Metals functionality to work."),(0,o.kt)("h3",{id:"shutdown"},(0,o.kt)("inlineCode",{parentName:"h3"},"shutdown")),(0,o.kt)("p",null,"It is very important that the client sends a shutdown request in order for\nMetals to clean up open resources."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"persists incremental compilation analysis files. Without a ",(0,o.kt)("inlineCode",{parentName:"li"},"shutdown")," hook,\nMetals will need to re-compile the entire workspace on next startup."),(0,o.kt)("li",{parentName:"ul"},"stops ongoing processes such as ",(0,o.kt)("inlineCode",{parentName:"li"},"sbt bloopInstall")),(0,o.kt)("li",{parentName:"ul"},"closes database connections")),(0,o.kt)("h3",{id:"exit"},(0,o.kt)("inlineCode",{parentName:"h3"},"exit")),(0,o.kt)("p",null,"Kills the process using ",(0,o.kt)("inlineCode",{parentName:"p"},"System.exit"),"."),(0,o.kt)("h3",{id:"cancelrequest"},(0,o.kt)("inlineCode",{parentName:"h3"},"$/cancelRequest")),(0,o.kt)("p",null,"Used by ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," to notify when a long-running process has finished."),(0,o.kt)("h3",{id:"clientregistercapability"},(0,o.kt)("inlineCode",{parentName:"h3"},"client/registerCapability")),(0,o.kt)("p",null,"If the client declares the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.didChangeWatchedFiles")," capability during\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"initialize")," request, then Metals follows up with a\n",(0,o.kt)("inlineCode",{parentName:"p"},"client/registerCapability")," request to register file watchers for certain glob\npatterns."),(0,o.kt)("h3",{id:"textdocumentdidopen"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didOpen")),(0,o.kt)("p",null,"Triggers compilation in the build server for the build target containing the\nopened document. Related, see ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/didFocusTextDocument"),"."),(0,o.kt)("h3",{id:"textdocumentdidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didChange")),(0,o.kt)("p",null,"Required to know the text contents of the current unsaved buffer."),(0,o.kt)("h3",{id:"textdocumentdidclose"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didClose")),(0,o.kt)("p",null,"Cleans up resources."),(0,o.kt)("h3",{id:"textdocumentdidsave"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didSave")),(0,o.kt)("p",null,"Triggers compilation in the build server and analyses if the build needs to be\nre-imported."),(0,o.kt)("h3",{id:"textdocumentpublishdiagnostics"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/publishDiagnostics")),(0,o.kt)("p",null,"Metals forwards diagnostics from the build server to the editor client.\nAdditionally, Metals publishes ",(0,o.kt)("inlineCode",{parentName:"p"},"Information")," diagnostics for unexpected\ncompilation errors when navigating external library sources."),(0,o.kt)("h3",{id:"textdocumentdefinition"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/definition")),(0,o.kt)("p",null,"Metals supports goto definition for workspace sources in addition to external\nlibrary sources."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Library sources live under the directory ",(0,o.kt)("inlineCode",{parentName:"li"},".metals/readonly")," and they are\nmarked as read-only to prevent the user from editing them."),(0,o.kt)("li",{parentName:"ul"},"The destination location can either be a Scala or Java source file. It is\nrecommended to have a Java language server installed to navigate Java sources.")),(0,o.kt)("h3",{id:"textdocumentreferences"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/references")),(0,o.kt)("p",null,"Metals finds symbol references for workspace sources but not external library\ndependencies."),(0,o.kt)("p",null,"LSP does not support streaming references so when project sources have not been\ncompiled at the point of a request, Metals returns immediately with potentially\nincomplete results and triggers a background cascade compilation to find new\nsymbol references. If new symbol references are discovered after the background\ncompilation completes, Metals sends a notification via ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/status")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),' asking the user to run "find references" again.'),(0,o.kt)("h3",{id:"textdocumentdocumentsymbol"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/documentSymbol")),(0,o.kt)("p",null,"Returns ",(0,o.kt)("inlineCode",{parentName:"p"},"DocumentSymbol[]")," if the client declares support for hierarchical\ndocument symbol or ",(0,o.kt)("inlineCode",{parentName:"p"},"SymbolInformation[]")," otherwise."),(0,o.kt)("h3",{id:"textdocumentformatting"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/formatting")),(0,o.kt)("p",null,"Formats the sources with the ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/scalafmt/"},"Scalafmt")," version\nthat is declared in ",(0,o.kt)("inlineCode",{parentName:"p"},".scalafmt.conf"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"when ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," is missing, Metals sends a ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest"),"\nto create the file."),(0,o.kt)("li",{parentName:"ul"},"when ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," exists but doesn't declare a ",(0,o.kt)("inlineCode",{parentName:"li"},"version")," setting, Metals\nsends a ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," when supported (with fallback to\n",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest")," when unsupported) to prepend ",(0,o.kt)("inlineCode",{parentName:"li"},"version=$VERSION")," to\nthe ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," file."),(0,o.kt)("li",{parentName:"ul"},"the first format request is usually slow because Metals needs to download\nScalafmt artifacts from Maven Central. While the download happens, Metals adds\na message in the status bar via ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," and detailed download progress\ninformation is logged to ",(0,o.kt)("inlineCode",{parentName:"li"},".metals/metals.log"),".")),(0,o.kt)("h3",{id:"textdocumenthover"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/hover")),(0,o.kt)("p",null,"Returns ",(0,o.kt)("inlineCode",{parentName:"p"},"Hover")," for specified text document and position - ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_hover"},"lsp spec"),"."),(0,o.kt)("p",null,"Metals also support an extended version of this method that supports hover for selection range.\nThe extended stucture of request params is the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface HoverExtParams {\n textDocument: TextDocumentIdentifier;\n /** Either `position` or `range` should be specified */\n position?: Position;\n range?: Range;\n}\n")),(0,o.kt)("h3",{id:"workspacedidchangewatchedfiles"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/didChangeWatchedFiles")),(0,o.kt)("p",null,"Optional. Metals uses a built-in file watcher for critical functionality such as\nGoto Definition so it is OK if an editor does not send\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications."),(0,o.kt)("p",null,"Metals listens to ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications from the\neditor for nice-to-have but non-critical file watching events. Metals\nautomatically registers for the following glob patterns if the editor supports\ndynamic registration for file watching."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "watchers": [\n {\n "globPattern": {\n "left": "file:///to/workspace/*.sbt"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/pom.xml"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*.sc"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*?.gradle"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*.gradle.kts"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/*.{scala,sbt}"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/project/*.{scala,sbt}"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/build.properties"\n }\n }\n ]\n}\n')),(0,o.kt)("p",null,"The editor is responsible for manually watching these file patterns if the\neditor does not support dynamic file watching registration but can still send\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications."),(0,o.kt)("h3",{id:"workspaceexecutecommands"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/executeCommands")),(0,o.kt)("p",null,"Used to trigger a ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-commands"},"Metals server command"),"."),(0,o.kt)("h3",{id:"workspacedidchangeconfiguration"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/didChangeConfiguration")),(0,o.kt)("p",null,"Used to update ",(0,o.kt)("a",{parentName:"p",href:"#metals-user-configuration"},"Metals user configuration"),"."),(0,o.kt)("h3",{id:"windowlogmessage"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/logMessage")),(0,o.kt)("p",null,"Used to log non-critical and non-actionable information. The user is only\nexpected to use the logs for troubleshooting or finding metrics for how long\ncertain events take."),(0,o.kt)("h3",{id:"windowshowmessage"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/showMessage")),(0,o.kt)("p",null,"Used to send critical but non-actionable notifications to the user. For\nnon-critical notifications, see ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/status"),"."),(0,o.kt)("h3",{id:"windowshowmessagerequest"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/showMessageRequest")),(0,o.kt)("p",null,"Used to send critical and actionable notifications to the user. To notify the\nuser about long running tasks that can be cancelled, the extension\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," is used instead."),(0,o.kt)("h2",{id:"metals-server-properties"},"Metals server properties"),(0,o.kt)("p",null,"There are various Metals server properties that can be configured through JVM\nsystem properties. A system property is passed to the server like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# with `java` binary\njava -Dmetals.statistics=all ...\n# with `coursier bootstrap`\ncoursier bootstrap --java-opt -Dmetals.statistics=all ...\n")),(0,o.kt)("p",null,"Below are the available server properties:"),(0,o.kt)("h3",{id:"-dmetalsverbose"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.verbose")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): don't log unnecessary details."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": emit very detailed logs, should only be used when debugging problems.")),(0,o.kt)("h3",{id:"-dmetalsstatistics"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.statistics")),(0,o.kt)("p",null,"By default, Metals logs only the most relevant metrics like time it takes to run\nsbt and import a workspace. To enable further metrics, update this property\nwith a comma separated list of the following supported values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"memory"),": print memory usage of the navigation index after build import."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"definition"),": print total time to respond to ",(0,o.kt)("inlineCode",{parentName:"li"},"textDocument/definition"),"\nrequests.")),(0,o.kt)("p",null,"Set the value to ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.statistics=all")," to enable all statistics."),(0,o.kt)("h3",{id:"-dmetalsh2auto-server"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.h2.auto-server")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on")," (default): use\n",(0,o.kt)("a",{parentName:"li",href:"http://www.h2database.com/html/features.html#auto_mixed_mode"},"H2 ",(0,o.kt)("inlineCode",{parentName:"a"},"AUTO_SERVER=TRUE")," mode"),"\nto support multiple concurrent Metals servers in the same workspace. If this\noption is enabled, the Metals H2 database communicate to other concurrently\nrunning Metals servers via TCP through a free port. In case of failure to\nestablish a ",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=TRUE")," connection, Metals falls back to\n",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=FALSE"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off"),": do not use ",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=TRUE"),". By disabling this option, it's not\npossible to run concurrent Metals servers in the same workspace directory. For\nexample, it's not possible to have both VS Code and Vim installed with Metals\nrunning in the same directory. In case there are multiple Metals servers\nrunning in the same workspace directory, Metals falls back to using an\nin-memory database resulting in a degraded user experience.")),(0,o.kt)("h3",{id:"-dmetalspcdebug"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.pc.debug")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): do not log verbose debugging information for the presentation\ncompiler."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": log verbose debugging information for the presentation compiler.")),(0,o.kt)("h3",{id:"-dbloopsbtversion"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dbloop.sbt.version")),(0,o.kt)("p",null,'Version number of the sbt-bloop plugin to use for the "Install build" command.\nDefault value is ',(0,o.kt)("inlineCode",{parentName:"p"},"-Dbloop.sbt.version=1.5.11"),"."),(0,o.kt)("p",null,"The below properties are also available as user configuration options. It's\npreferable to set these there:"),(0,o.kt)("h3",{id:"-dmetalsbloop-port"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.bloop-port")),(0,o.kt)("p",null,"Port number of the Bloop server to connect to. Should only be used if Bloop\nserver was set up in a custom way. Default value is ",(0,o.kt)("inlineCode",{parentName:"p"},"8212"),"."),(0,o.kt)("p",null,"Possible values are any allowed port number that the Bloop server is able to run\non."),(0,o.kt)("h2",{id:"metals-user-configuration"},"Metals user configuration"),(0,o.kt)("p",null,"Users can customize the Metals server through the LSP\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration")," notification. Unlike server properties, it is\nnormal for regular Metals users to configure these options."),(0,o.kt)("p",null,"User configuration options can optionally be provided via server properties\nusing the ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.")," prefix. System properties may be helpful for editor\nclients that don't support ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),". In case user\nconfiguration is defined both via system properties and\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),", then ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),"\ntakes precedence."),(0,o.kt)("h3",{id:"java-home-directory"},"Java Home directory"),(0,o.kt)("p",null,"The Java Home directory used for indexing JDK sources and locating the ",(0,o.kt)("inlineCode",{parentName:"p"},"java")," binary."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable with fallback to ",(0,o.kt)("inlineCode",{parentName:"p"},"user.home")," system property."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaHome": "/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home"\n }\n}\n')),(0,o.kt)("h3",{id:"sbt-script"},"sbt script"),(0,o.kt)("p",null,"Optional absolute path to an ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall"),".\nBy default, Metals uses ",(0,o.kt)("inlineCode",{parentName:"p"},"java -jar sbt-launch.jar")," with an embedded launcher while respecting\n",(0,o.kt)("inlineCode",{parentName:"p"},".jvmopts")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".sbtopts"),". Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "sbtScript": "/usr/local/bin/sbt"\n }\n}\n')),(0,o.kt)("h3",{id:"gradle-script"},"Gradle script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle bloopInstall"),".\nBy default, Metals uses gradlew with 7.5.0 gradle version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "gradleScript": "/usr/local/bin/gradle"\n }\n}\n')),(0,o.kt)("h3",{id:"maven-script"},"Maven script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"maven")," executable to use for generating bloop config.\nBy default, Metals uses mvnw maven wrapper with 3.6.1 maven version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"maven")," script requires more customizations"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "mavenScript": "/usr/local/bin/mvn"\n }\n}\n')),(0,o.kt)("h3",{id:"mill-script"},"Mill script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"mill")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"mill mill.contrib.bloop.Bloop/install"),".\nBy default, Metals uses mill wrapper script with 0.5.0 mill version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"mill")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "millScript": "/usr/local/bin/mill"\n }\n}\n')),(0,o.kt)("h3",{id:"scalafmt-config-path"},"Scalafmt config path"),(0,o.kt)("p",null,"Optional custom path to the .scalafmt.conf file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalafmtConfigPath": "project/.scalafmt.conf"\n }\n}\n')),(0,o.kt)("h3",{id:"scalafix-config-path"},"Scalafix config path"),(0,o.kt)("p",null,"Optional custom path to the .scalafix.conf file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalafixConfigPath": "project/.scalafix.conf"\n }\n}\n')),(0,o.kt)("h3",{id:"ammonite-jvm-properties"},"Ammonite JVM Properties"),(0,o.kt)("p",null,"Optional list of JVM properties to pass along to the Ammonite server.\nEach property needs to be a separate item.\\n\\nExample: ",(0,o.kt)("inlineCode",{parentName:"p"},"-Xmx1G")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"-Xms100M"),'"'),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"[]"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "ammoniteJvmProperties": ["-Xmx1G"]\n }\n}\n')),(0,o.kt)("h3",{id:"excluded-packages"},"Excluded Packages"),(0,o.kt)("p",null,"Packages that will be excluded from completions, imports, and symbol searches."),(0,o.kt)("p",null,"Note that this is in addition to some default packages that are already excluded.\nThe default excluded packages are listed below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"META-INF\nimages\ntoolbarButtonGraphics\njdk\nsun\noracle\njava.awt.desktop\norg.jcp\norg.omg\norg.graalvm\ncom.oracle\ncom.sun\ncom.apple\napple\ncom.sourcegraph.shaded\n")),(0,o.kt)("p",null,"If there is a need to remove one of the defaults, you are able to do so by including the\npackage in your list and prepending ",(0,o.kt)("inlineCode",{parentName:"p"},"--")," to it."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},'["--sun"]\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"[]"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "excludedPackages": ["akka.actor.typed.javadsl"]\n }\n}\n')),(0,o.kt)("h3",{id:"dont-generate-bloop-plugin-file-for-sbt"},"Don't generate Bloop plugin file for sbt"),(0,o.kt)("p",null,"If true, Metals will not generate ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.sbt")," files under the assumption that sbt-bloop is already manually installed in the sbt build. Build import will fail with a 'not valid command bloopInstall' error in case Bloop is not manually installed in the build when using this option."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopSbtAlreadyInstalled": false\n }\n}\n')),(0,o.kt)("h3",{id:"version-of-bloop"},"Version of Bloop"),(0,o.kt)("p",null,"This version will be used for the Bloop build tool plugin, for any supported build tool,\nwhile importing in Metals as well as for running the embedded server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": 1.5.11"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopVersion": "1.4.0-RC1"\n }\n}\n')),(0,o.kt)("h3",{id:"bloop-jvm-properties"},"Bloop JVM Properties"),(0,o.kt)("p",null,"Optional list of JVM properties to pass along to the Bloop server.\nPlease follow this guide for the format ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/server-reference#global-settings-for-the-server%22"},'https://scalacenter.github.io/bloop/docs/server-reference#global-settings-for-the-server"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",'["-Xmx1G"]',"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopJvmProperties": ["-Xmx1G"]\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-lenses-with-links-to-super-methods"},"Should display lenses with links to super methods"),(0,o.kt)("p",null,"Super method lenses are visible above methods definition that override another methods. Clicking on a lens jumps to super method definition.\nDisabled lenses are not calculated for opened documents which might speed up document processing."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "superMethodLensesEnabled": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-type-annotations-for-inferred-types"},"Should display type annotations for inferred types"),(0,o.kt)("p",null,"When this option is enabled, each method that can have inferred types has them\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showInferredType": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-implicit-parameter-at-usage-sites"},"Should display implicit parameter at usage sites"),(0,o.kt)("p",null,"When this option is enabled, each method that has implicit arguments has them\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showImplicitArguments": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-implicit-conversion-at-usage-sites"},"Should display implicit conversion at usage sites"),(0,o.kt)("p",null,"When this option is enabled, each place where an implicit method or class is used has it\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showImplicitConversionsAndClasses": false\n }\n}\n')),(0,o.kt)("h3",{id:"use-semantic-tokens-highlight"},"Use semantic tokens highlight"),(0,o.kt)("p",null,"When this option is enabled, Metals will provide semantic tokens for clients that support it.\nThe feature should work within all supported files extensions aside from Java."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": true"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "enableSemanticHighlighting": false\n }\n}\n')),(0,o.kt)("h3",{id:"indent-snippets-when-pasted"},"Indent snippets when pasted."),(0,o.kt)("p",null,"When this option is enabled, when a snippet is pasted into a Scala file, Metals will\ntry to adjust the indentation to that of the current cursor."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "enableIndentOnPaste": false\n }\n}\n')),(0,o.kt)("h3",{id:"remote-language-server"},"Remote language server"),(0,o.kt)("p",null,"A URL pointing to an endpoint that implements a remote language server."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/remote-language-server"},"https://scalameta.org/metals/docs/integrations/remote-language-server")," for\ndocumentation on remote language servers."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "remoteLanguageServer": "https://language-server.company.com/message"\n }\n}\n')),(0,o.kt)("h3",{id:"default-fallback-scala-version"},"Default fallback Scala version"),(0,o.kt)("p",null,"The Scala compiler version that is used as the default or fallback in case a file\ndoesn't belong to any build target or the specified Scala version isn't supported by Metals.\nThis applies to standalone Scala files, worksheets, and Ammonite scripts."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": 3.3.1"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "fallbackScalaVersion": 3.3.1\n }\n}\n')),(0,o.kt)("h3",{id:"test-ui-used-for-tests-and-test-suites"},"Test UI used for tests and test suites"),(0,o.kt)("p",null,'Default way of handling tests and test suites. The only valid values are\n"code lenses" and "test explorer". See ',(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/test-explorer"},"https://scalameta.org/metals/docs/integrations/test-explorer"),"\nfor information on how to work with the test explorer."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": Code Lenses"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "testUserInterface": test explorer\n }\n}\n')),(0,o.kt)("h3",{id:"eclipse-java-formatter-config-path"},"Eclipse Java formatter config path"),(0,o.kt)("p",null,"Optional custom path to the eclipse-formatter.xml file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaFormat.eclipseConfigPath": "formatters/eclipse-formatter.xml"\n }\n}\n')),(0,o.kt)("h3",{id:"eclipse-java-formatting-profile"},"Eclipse Java formatting profile"),(0,o.kt)("p",null,"If the Eclipse formatter file contains more than one profile, this option can be used to control which is used."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaFormat.eclipseProfile": "GoogleStyle"\n }\n}\n')),(0,o.kt)("h3",{id:"scala-cli-launcher"},"Scala CLI launcher"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"scala-cli")," executable to use for running a Scala CLI BSP server.\nBy default, Metals uses the scala-cli from the PATH, or it's not found, downloads and runs Scala\nCLI on the JVM (slower than native Scala CLI). Update this if you want to use a custom Scala CLI\nlauncher, not available in PATH."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalaCliLauncher": "/usr/local/bin/scala-cli"\n }\n}\n')),(0,o.kt)("h2",{id:"metals-server-commands"},"Metals server commands"),(0,o.kt)("p",null,"The client can trigger one of the following commands through the\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/executeCommand")," request."),(0,o.kt)("h3",{id:"analyze-stacktrace"},"Analyze stacktrace"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"analyze-stacktrace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", where the string is a stacktrace."),(0,o.kt)("p",null,"Converts provided stacktrace in the parameter to a format that contains links\nto locations of places where the exception was raised."),(0,o.kt)("p",null,"If the configuration parameter of the client ",(0,o.kt)("inlineCode",{parentName:"p"},"commandInHtmlFormat")," is set\nthen client is requested to display html with links\nalready pointing to proper locations in user codebase.\nOtherwise client will display simple scala file\nbut with code lenses that direct user to proper location in codebase."),(0,o.kt)("h3",{id:"switch-build-server"},"Switch build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"bsp-switch"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Prompt the user to select a new build server to connect to."),(0,o.kt)("p",null,"This command does nothing in case there are less than two installed build\nservers on the computer. In case the user has multiple BSP servers installed\nthen Metals will prompt the user to select which server to use."),(0,o.kt)("h3",{id:"connect-to-build-server"},"Connect to build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-connect"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Establish a new connection to the build server and reindex the workspace."),(0,o.kt)("p",null,"This command can be helpful in scenarios when Metals feels unresponsive, for example\nwhen reopening Metals after the computer it has been sleeping."),(0,o.kt)("h3",{id:"cancel-compilation"},"Cancel compilation"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-cancel"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Cancel the currently ongoing compilation, if any."),(0,o.kt)("h3",{id:"cascade-compile"},"Cascade compile"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-cascade"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Compile the current open files along with all build targets in this workspace that depend on those files."),(0,o.kt)("p",null,"By default, Metals compiles only the current build target and its dependencies when saving a file.\nRun the cascade compile task to additionally compile the inverse dependencies of the current build target.\nFor example, if you change the API in main sources and run cascade compile then it will also compile the\ntest sources that depend on main."),(0,o.kt)("h3",{id:"clean-compile"},"Clean compile"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-clean"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Recompile all build targets in this workspace."),(0,o.kt)("p",null,"By default, Metals compiles the files incrementally. In case of any compile artifacts corruption\nthis command might be run to make sure everything is recompiled correctly."),(0,o.kt)("h3",{id:"convert-positional-arguments-to-named-ones"},"Convert positional arguments to named ones"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"convert-to-named-arguments"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": Object with ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentPositionParams"},"TextDocumentPositionParams")," of the target Apply and ",(0,o.kt)("inlineCode",{parentName:"p"},"numUnnamedArgs")," (int)"),(0,o.kt)("p",null,"Whenever a user chooses code action to convert to named arguments, this command is later run to\ndetermine the parameter names of all unnamed arguments and insert names at the correct locations."),(0,o.kt)("h3",{id:"copy-worksheet-output"},"Copy Worksheet Output"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"copy-worksheet-output"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", the uri of the worksheet that you'd like to copy the contents of."),(0,o.kt)("p",null,"Copy the contents of a worksheet to your local buffer."),(0,o.kt)("p",null,"Note: This command returns the contents of the worksheet, and the LSP client\nis in charge of taking that content and putting it into your local buffer."),(0,o.kt)("h3",{id:"discover-main-classes-to-run-and-return-the-object"},"Discover main classes to run and return the object"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"discover-jvm-run-command"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedTestClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "path": "path/to/file.scala",\n "runType": "run"\n}\n')),(0,o.kt)("p",null,"Response:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["id1"],\n "dataKind": "scala-main-class",\n "data": {\n "class": "Foo",\n "arguments": [],\n "jvmOptions": [],\n "environmentVariables": [],\n "shellCommand": "java ..."\n }\n}\n')),(0,o.kt)("p",null,"Gets the DebugSession object that also contains a command to run in shell based\non JVM environment including classpath, jvmOptions and environment parameters."),(0,o.kt)("h3",{id:"discover-tests"},"Discover tests"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"discover-tests"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),":\nAn object with uri, when request is meant to discover test cases for uri"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"{\n uri: file:///home/dev/foo/Bar.scala\n}\n")),(0,o.kt)("p",null,"or empty object if request is meant to discover all test suites"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"{}\n")),(0,o.kt)("p",null,"Discovers all tests in project or a file.\nSee ClientCommands.UpdateTestExplorer to see how response looks like."),(0,o.kt)("h3",{id:"extract-member-definition"},"Extract member definition"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"extract-member-definition"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses a code action to extract a definition of a Class/Trait/Object/Enum this\ncommand is later ran to extract the code and create a new file with it"),(0,o.kt)("h3",{id:"generate-bsp-config"},"Generate BSP Config"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"generate-bsp-config"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", name of the build server."),(0,o.kt)("p",null,"Checks to see if your build tool can serve as a BSP server. If so, generate\nthe necessary BSP config to connect to the server. If there is more than one\nbuild tool for a workspace, you can then choose the desired one and that\none will be used to generate the config."),(0,o.kt)("p",null,"After the config is generated, Metals will attempt to auto-connect to it."),(0,o.kt)("p",null,"The build servers that Metals knows how to detect and start:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"sbt"),(0,o.kt)("li",{parentName:"ul"},"mill-bsp")),(0,o.kt)("p",null,"Note: while Metals does know how to start Bloop, Bloop will be started when you trigger a build\nimport or when you use ",(0,o.kt)("inlineCode",{parentName:"p"},"bsp-switch")," to switch to Bloop."),(0,o.kt)("h3",{id:"goto-location-for-position"},"Goto location for position"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto-position"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[location]",", where the location is a lsp location object."),(0,o.kt)("p",null,"Move the cursor to the location provided in arguments.\nIt simply forwards request to client."),(0,o.kt)("h3",{id:"go-to-super-methodfield-definition"},"Go to super method/field definition"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto-super-method"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Jumps to super method/field definition of a symbol under cursor according to inheritance rules.\nWhen A {override def x()} <:< B <:< C {def x()} and on method 'A.x' it will jump directly to 'C.x'\nas method x() is not overridden in B.\nIf symbol is a reference of a method it will jump to a definition.\nIf symbol under cursor is invalid or does not override anything then command is ignored."),(0,o.kt)("h3",{id:"goto-location-for-symbol"},"Goto location for symbol"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", where the string is a SemanticDB symbol."),(0,o.kt)("p",null,"Move the cursor to the definition of the argument symbol."),(0,o.kt)("h3",{id:"import-build"},"Import build"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-import"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Import the latest changes from the build to for example pick up new library dependencies."),(0,o.kt)("p",null,"By default, Metals automatically prompts you to import the build when sources of the build change.\nUse this command to manually trigger an import build instead of relying on the automatic prompt."),(0,o.kt)("h3",{id:"insert-inferred-type-of-a-value"},"Insert inferred type of a value"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"insert-inferred-type"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses code action to insert the inferred type this command is later ran to\ncalculate the type and insert it in the correct location."),(0,o.kt)("h3",{id:"inline-value"},"Inline value"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"inline-value"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses code action to inline a value this command is later ran to\nfind all the references to choose the correct inline version (if possible to perform)"),(0,o.kt)("h3",{id:"create-new-scala-file"},"Create new scala file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-scala-file"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": [string[]], where the first is a directory location for the new file.\nThe second and third positions correspond to the file name and file type to allow for quick\ncreation of a file if all are present."),(0,o.kt)("p",null,"Create and open new Scala file."),(0,o.kt)("p",null,"The currently allowed Scala file types that can be passed in are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"scala-file (Empty file)"),(0,o.kt)("li",{parentName:"ul"},"scala-class (Class)"),(0,o.kt)("li",{parentName:"ul"},"scala-case-class (Case Class)"),(0,o.kt)("li",{parentName:"ul"},"scala-enum (Enum)"),(0,o.kt)("li",{parentName:"ul"},"scala-object (Object)"),(0,o.kt)("li",{parentName:"ul"},"scala-trait (Trait)"),(0,o.kt)("li",{parentName:"ul"},"scala-package-object (Package Object)"),(0,o.kt)("li",{parentName:"ul"},"scala-worksheet (Worksheet)"),(0,o.kt)("li",{parentName:"ul"},"scala-script (Scala Script(Ammonite or Scala CLI))")),(0,o.kt)("p",null,"Note: requires 'metals/inputBox' capability from language client."),(0,o.kt)("h3",{id:"create-new-java-file"},"Create new java file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-java-file"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": [string[]], where the first is a directory location for the new file.\nThe second and third positions correspond to the file name and file type to allow for quick\ncreation of a file if all are present."),(0,o.kt)("p",null,"Create and open a new Java file."),(0,o.kt)("p",null,"The currently allowed Java file types that ca be passed in are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"java-class (Class)"),(0,o.kt)("li",{parentName:"ul"},"java-interface (Interface)"),(0,o.kt)("li",{parentName:"ul"},"java-enum (Enum)"),(0,o.kt)("li",{parentName:"ul"},"java-record (Record)")),(0,o.kt)("p",null,"Note: requires 'metals/inputBox' capability from language client."),(0,o.kt)("h3",{id:"new-scala-project"},"New Scala Project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-scala-project"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Create a new Scala project using one of the available g8 templates.\nThis includes simple projects as well as samples for most of the popular Scala frameworks.\nThe command reuses the Metals quick pick extension to work and can function with ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),",\nhowever the experience will not be optimal in that case. Some editors might also offer to open the newly created\nproject via ",(0,o.kt)("inlineCode",{parentName:"p"},"openNewWindowProvider"),", but it is not necessary for the main functionality to work. "),(0,o.kt)("h3",{id:"restart-presentation-compiler"},"Restart presentation compiler"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"presentation-compiler-restart"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Restart running presentation compiler instances."),(0,o.kt)("p",null,"Metals automatically restarts the presentation compiler after every successful compilation\nin the build tool so this command should not be needed for normal usage. Please report\nan issue if you need to use this command."),(0,o.kt)("h3",{id:"reset-choice-popup"},"Reset Choice Popup"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-choice"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string?]",", where string is a choice value."),(0,o.kt)("p",null,"ResetChoicePopup command allows you to reset a decision you made about different settings.\nE.g. If you choose to import workspace with sbt you can decide to reset and change it again."),(0,o.kt)("p",null,"Provided string is optional but if present it must be one of defined in ",(0,o.kt)("inlineCode",{parentName:"p"},"PopupChoiceReset.scala"),"\nIf a choice is not provided it will execute interactive mode where user is prompt to select\nwhich choice to reset."),(0,o.kt)("h3",{id:"reset-notifications"},"Reset notifications"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-notifications"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"ResetNotifications command allows you to reset all the dismissed notifications.\nE.g. If you choose to dismiss build import forever, this command will make the notification show up again."),(0,o.kt)("h3",{id:"extract-method-from-range"},"Extract method from range"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"extract-method"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": LSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"TextDocumentIdentifier"),"]",", (",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentIdentifier"},"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentIdentifier"),"),\nLSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"Range"),"]",", range of the code you'd like to extract as method,\nLSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"Position"),"]",", position where the definition of extracted method will be created."),(0,o.kt)("p",null,"Whenever a user chooses code action to extract method, this command is later ran to\ncalculate parameters for the newly created method and create its definition."),(0,o.kt)("h3",{id:"restart-build-server"},"Restart build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-restart"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Unconditionally stop the current running Bloop server and start a new one using Bloop launcher"),(0,o.kt)("h3",{id:"run-doctor"},"Run doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"doctor-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals doctor to troubleshoot potential problems with the build."),(0,o.kt)("p",null,"This command can be helpful in scenarios where features are not working as expected such\nas compile errors are not appearing or completions are not correct."),(0,o.kt)("h3",{id:"run-all-scalafix-rules"},"Run all Scalafix Rules"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scalafix-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Run all the supported scalafix rules in your codebase."),(0,o.kt)("p",null,"If the rules are missing please add them to user configuration ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies"),".\nTheir format is the coursier one ",(0,o.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"https://get-coursier.io/")),(0,o.kt)("h3",{id:"run-a-set-of-scalafix-rules"},"Run a set of Scalafix Rules"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scalafix-run-only"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": RunScalafixRulesParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "textDocumentPositionParams": {\n "textDocument": {\n "uri": "path/to/file.scala"\n },\n "position": {\n "line": 70,\n "character": 33\n }\n },\n "rules": ["ExplicitResultTypes"]\n}\n')),(0,o.kt)("p",null,"Run a set of Scalafix rules in your codebase."),(0,o.kt)("p",null,"If no rules are specified, this command will prompt the user to select one from a list\nof their project's enabled rules."),(0,o.kt)("p",null,"If you want to run all rules, use the ",(0,o.kt)("inlineCode",{parentName:"p"},"scalafix-run")," command instead."),(0,o.kt)("h3",{id:"decode-file"},"Decode file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"file-decode"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", uri of the file with any parameters required for decoding.\nExamples:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"javap:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.java.javap\nmetalsDecode:file:///somePath/someFile.scala.javap\nmetalsDecode:file:///somePath/someFile.class.javap\nmetalsDecode:file:///somePath/someFile.java.javap-verbose\nmetalsDecode:file:///somePath/someFile.scala.javap-verbose\nmetalsDecode:file:///somePath/someFile.class.javap-verbose\n"))),(0,o.kt)("li",{parentName:"ul"},"semanticdb:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.java.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.java.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.scala.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.scala.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.java.semanticdb.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.java.semanticdb.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.scala.semanticdb.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.scala.semanticdb.semanticdb-detailed\n"))),(0,o.kt)("li",{parentName:"ul"},"tasty:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.scala.tasty-decoded\nmetalsDecode:file:///somePath/someFile.tasty.tasty-decoded\n"))),(0,o.kt)("li",{parentName:"ul"},"jar:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:jar:file:///somePath/someFile-sources.jar!/somePackage/someFile.java\n"))),(0,o.kt)("li",{parentName:"ul"},"build target:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///workspacePath/buildTargetName.metals-buildtarget\n")))),(0,o.kt)("p",null,"Response:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface DecoderResponse {\n requestedUri: string;\n value?: string;\n error?: string\n}\n")),(0,o.kt)("p",null,"Decode a file into a human readable format."),(0,o.kt)("p",null,"Compilation involves various binary files that can't be read directly\nin a text editor so they need to be decoded into a human readable format.\nExamples include ",(0,o.kt)("inlineCode",{parentName:"p"},".class")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".semanticdb"),"."),(0,o.kt)("h3",{id:"disconnect-from-old-build-server"},"Disconnect from old build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-disconnect"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Unconditionally cancel existing build server connection without reconnecting"),(0,o.kt)("h3",{id:"list-build-targets"},"List build targets"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"list-build-targets"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Retrieve a list of build targets for the workspace."),(0,o.kt)("h3",{id:"scan-sources"},"Scan sources"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"sources-scan"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Walk all files in the workspace and index where symbols are defined."),(0,o.kt)("p",null,"Is automatically run once after ",(0,o.kt)("inlineCode",{parentName:"p"},"initialized")," notification and incrementally\nupdated on file watching events. A language client that doesn't support\nfile watching can run this manually instead. It should not be much slower\nthan walking the entire file tree and reading ",(0,o.kt)("inlineCode",{parentName:"p"},"*.scala")," files to string,\nindexing itself is cheap."),(0,o.kt)("h3",{id:"start-ammonite-build-server"},"Start Ammonite build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"ammonite-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Start Ammonite build server"),(0,o.kt)("h3",{id:"start-debug-adapter"},"Start debug adapter"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Start a new debugger session with fully specified DebugSessionParams"),(0,o.kt)("h3",{id:"start-main-class"},"Start main class"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedMainClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "mainClass": "path/to/file.scala",\n "buildTarget": "metals"\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by resolving a main class by name and target"),(0,o.kt)("h3",{id:"start-test-suite"},"Start test suite"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ScalaTestSuitesDebugRequest object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "target": "metals"\n "requestData" : {\n "suites": ["com.foo.FooSuite"],\n "jvmOptions": []],\n "environmentVariables": [],\n }\n}\n')),(0,o.kt)("p",null,"Start a new debugger session for a test suite, can be used to run a single test case"),(0,o.kt)("h3",{id:"start-test-suite-1"},"Start test suite"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedTestClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "testClass": "com.foo.FooSuite"\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by resolving a test suite by name and possibly target."),(0,o.kt)("h3",{id:"attach-to-a-running-jvm-process"},"Attach to a running jvm process"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedAttachRemoteParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "hostName": "localhost",\n "port": 1234,\n "buildTarget": "metals",\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by attaching to existing jvm process."),(0,o.kt)("h3",{id:"try-to-discover-a-test-or-main-to-run"},"Try to discover a test or main to run."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugDiscoveryParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "path": "path/to/file.scala",\n "runType": "run",\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by running the discovered test or main class."),(0,o.kt)("h3",{id:"stop-ammonite-build-server"},"Stop Ammonite build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"ammonite-stop"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Stop Ammonite build server"),(0,o.kt)("h3",{id:"go-to-super-methodfield-definition-in-hierarchy"},"Go to super method/field definition in hierarchy"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"super-method-hierarchy"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"When user executes this command it will calculate inheritance hierarchy of a class that contains given method.\nThen it will filter out classes not overriding given method and a list using 'metalsQuickPick' will be\ndisplayed to which super method user would like to go to.\nCommand has no effect on other symbols than method definition.\nQuickPick will show up only if more than one result is found."),(0,o.kt)("h3",{id:"start-scala-cli-server"},"Start Scala CLI server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scala-cli-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Start Scala CLI server"),(0,o.kt)("h3",{id:"stop-scala-cli-server"},"Stop Scala CLI server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scala-cli-stop"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Stop Scala CLI server"),(0,o.kt)("h3",{id:"open-an-issue-on-github"},"Open an issue on GitHub"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"open-new-github-issue"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals repository on GitHub to ask a question or report a bug."),(0,o.kt)("h3",{id:"open-a-feature-request"},"Open a feature request"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"browser-open-url:https://github.com/scalameta/metals-feature-requests/issues/new?template=feature-request.yml"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals repository on GitHub to open a feature request."),(0,o.kt)("h3",{id:"create-a-zip-with-error-reports"},"Create a zip with error reports"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"zip-reports"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Creates a zip from incognito and bloop reports with additional information about build targets."),(0,o.kt)("h3",{id:"clean-and-restart-build-server"},"Clean and restart build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-workspace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Clean metals cache and restart build server."),(0,o.kt)("p",null,"When using Bloop, clears all directories in .bloop.\nThis will ensure that Bloop will have a fully reset state."),(0,o.kt)("h2",{id:"metals-client-commands"},"Metals client commands"),(0,o.kt)("p",null,"The Metals server can send one of the following client commands if the client\nsupports the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/executeClientCommand")," notification,"),(0,o.kt)("h3",{id:"open-a-specified-folder-either-in-the-same-or-new-window"},"Open a specified folder either in the same or new window"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-open-folder"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": An object with ",(0,o.kt)("inlineCode",{parentName:"p"},"uri")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"newWindow")," fields.\nExample: "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "uri": "file://path/to/directory",\n "newWindow": true\n}\n')),(0,o.kt)("p",null,"Open a new window with the specified directory."),(0,o.kt)("h3",{id:"run-doctor-1"},"Run doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-doctor-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the HTML to display in the focused window."),(0,o.kt)("p",null,"Focus on a window displaying troubleshooting help from the Metals doctor."),(0,o.kt)("p",null,"If ",(0,o.kt)("inlineCode",{parentName:"p"},"doctorProvider")," is set to ",(0,o.kt)("inlineCode",{parentName:"p"},'"json"')," then the schema is as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorOutput {\n /** Metals Doctor title */\n title: string;\n /** Version of the doctor json format, 0 if empty\n * The latest version is: 5\n */\n version: String;\n /**\n * Contains metals version and jdk info and a brief information about understanding\n * the Doctor placed in here as well. (since version 3 (replaces headerText))\n */\n header: DoctorHeader;\n /**\n * Troubleshooting help for each workspace folder.\n */\n folders: DoctorFolderResult[];\n}\n\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorFolderResult {\n /**\n * Contains decisions that were made about what build tool or build server\n * the user has chosen.\n */\n header: DoctorFolderHeader\n /**\n * If build targets are detected in your workspace, they will be listed here with\n * the status of related functionality of Metals for each build target.\n */\n targets?: DoctorBuildTarget[];\n /** Messages given if build targets cannot be found */\n messages?: DoctorRecommendation[];\n /** Explanations for the various statuses present in the doctor */\n explanations?: DoctorExplanation[];\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorHeader {\n /** java version and location information */\n jdkInfo?: string;\n /** the version of the server that is being used */\n serverInfo: string;\n /** small description on what a build target is */\n buildTargetDescription: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorFolderHeader {\n /** if Metals detected multiple build tools, this specifies the one the user has chosen */\n buildTool?: string;\n /** the build server that is being used */\n buildServer: string;\n /** if the user has turned the import prompt off, this will include a message on\n * how to get it back.\n */\n importBuildStatus?: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorBuildTarget {\n /** Name of the build target */\n buildTarget: string;\n /** Status of compilation for build this build target (since version 2) */\n compilationStatus: string;\n /** Can contain Scala version, sbt version or Java */\n targetType: string;\n /** Status of diagnostics */\n diagnostics: string;\n /** Status of completions, hovers and other interactive features*/\n interactive: string;\n /** Status of semanticdb indexes */\n semanticdb: string;\n /** Status of debugging */\n debugging: string;\n /** Status of java support */\n java: string;\n /** Any recommendations in how to fix any issues that are found above */\n recommendation: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorRecommendation {\n /** Title of the recommendation */\n title: string;\n /** Recommendations related to the found issue. */\n recommendations: string[]\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorExplanation {\n /** Title of the explanation */\n title: string;\n /** Explanations of statuses that can be found in the doctor */\n recommendations: string[]\n}\n")),(0,o.kt)("h3",{id:"reload-doctor"},"Reload doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-doctor-reload"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the HTML to display in the focused window."),(0,o.kt)("p",null,"Reload the HTML contents of an open Doctor window, if any. Should be ignored if there is no open doctor window.\nIf ",(0,o.kt)("inlineCode",{parentName:"p"},"doctorProvider")," is set to ",(0,o.kt)("inlineCode",{parentName:"p"},'"json"'),", then the schema is the same as found above in ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-run-doctor"')),(0,o.kt)("h3",{id:"toggle-logs"},"Toggle logs"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-logs-toggle"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Focus or remove focus on the output logs reported by the server via ",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),"."),(0,o.kt)("p",null,'In VS Code, this opens the "output" channel for the Metals extension.'),(0,o.kt)("h3",{id:"open-problems"},"Open problems"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-diagnostics-focus"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Focus on the window that lists all published diagnostics."),(0,o.kt)("p",null,'In VS Code, this opens the "problems" window.'),(0,o.kt)("h3",{id:"goto-location"},"Goto location"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-goto-location"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": First required parameter is LSP ",(0,o.kt)("inlineCode",{parentName:"p"},"Location")," object with ",(0,o.kt)("inlineCode",{parentName:"p"},"uri")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"range")," fields.\nSecond parameter is optional and has signature ",(0,o.kt)("inlineCode",{parentName:"p"},"otherWindow: Boolean"),".\nIt gives a hint to client that if possible it would be good to open location in\nanother buffer/window.\nExample: "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'[{\n "uri": "file://path/to/Definition.scala",\n "range": {\n "start": {"line": 194, "character": 0},\n "end": {"line": 194, "character": 1}\n },\n "otherWindow" : true\n},\n]\n')),(0,o.kt)("p",null,"Move the cursor focus to the provided location"),(0,o.kt)("h3",{id:"echo-command"},"Echo command"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-echo-command"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the command ID to execute on the client."),(0,o.kt)("p",null,"A client command that should be forwarded back to the Metals server."),(0,o.kt)("p",null,"Metals may register commands in client UIs like tree view nodes that should be\nforwarded back to the Metals server if the client clicks on the UI elements."),(0,o.kt)("h3",{id:"refresh-model"},"Refresh model"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-model-refresh"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note"),": This request is deprecated and Metals will favor ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/#codeLens_refresh"},"Code Lens Refresh Request")," if supported by the client."),(0,o.kt)("p",null,"Notifies the client that the model has been updated and it\nshould be refreshed (e.g. by resending code lens request)"),(0,o.kt)("h3",{id:"show-the-stacktrace-in-the-client"},"Show the stacktrace in the client."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-show-stacktrace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", the markdown representation of the stacktrace"),(0,o.kt)("p",null,"Show the stacktrace modified with links to specific files."),(0,o.kt)("h3",{id:"copy-worksheet-output-1"},"Copy Worksheet Output"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals.copy-worksheet-output"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", the uri of the worksheet that you'd like to copy the contents of."),(0,o.kt)("p",null,"Copy the contents of a worksheet to your local buffer."),(0,o.kt)("p",null,"Note: This command should execute the copy-worksheet-output\nserver command to get the output to copy into the buffer."),(0,o.kt)("p",null,"Server will attempt to create code lens with this command if ",(0,o.kt)("inlineCode",{parentName:"p"},"copyWorksheetOutputProvider")," option is set."),(0,o.kt)("h3",{id:"start-run-session"},"Start run session"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-run-session-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object. It should be forwarded\nto the debug-adapter-start command as is."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Starts a run session. The address of a new Debug Adapter can be obtained\nby using the debug-adapter-start metals server command\nwith the same arguments as provided to this command."),(0,o.kt)("h3",{id:"start-debug-session"},"Start debug session"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-debug-session-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object. It should be forwarded\nto the debug-adapter-start command as is."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Starts a debug session. The address of a new Debug Adapter can be obtained\nby using the debug-adapter-start metals server command\nwith the same arguments as provided to this command."),(0,o.kt)("h2",{id:"metals-http-client"},"Metals HTTP client"),(0,o.kt)("p",null,"Metals has an optional web interface that can be used to trigger server commands\nand respond to server requests. This interface is not intended for regular\nusers, it exists only to help editor plugin authors integrate with Metals."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/t5RJ3q6.png",alt:"Metals http client"})),(0,o.kt)("p",null,"The server is enabled by passing the ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.http=on")," system property. The\nserver runs by default at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:5031/"},(0,o.kt)("inlineCode",{parentName:"a"},"http://localhost:5031")),".\nWhen the port 5031 is taken the next free increment is chosen instead (5032,\n5033, ...)."),(0,o.kt)("h2",{id:"metals-lsp-extensions"},"Metals LSP extensions"),(0,o.kt)("p",null,"Editor clients can opt into receiving Metals-specific JSON-RPC requests and\nnotifications. Metals extensions are not defined in LSP and are not strictly\nrequired for the Metals server to function but it is recommended to implement\nthem to improve the user experience."),(0,o.kt)("p",null,"To enable Metals extensions, start the main process with the system property\n",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.extensions=true"),"."),(0,o.kt)("h3",{id:"debug-adapter-protocol"},"Debug Adapter Protocol"),(0,o.kt)("p",null,"Metals implements and additional protocol for running and debugging inside the\neditor, see the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/debug-adapter-protocol"},"Debug Adapter Protocol"),"."),(0,o.kt)("h3",{id:"tree-view-protocol"},"Tree View Protocol"),(0,o.kt)("p",null,"Metals implements several custom JSON-RPC endpoints related to rendering tree\nviews in the editor client, the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,o.kt)("h3",{id:"decoration-protocol"},"Decoration Protocol"),(0,o.kt)("p",null,"Metals implements an LSP extension to display non-editable text in the editor,\nsee the ",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,o.kt)("h3",{id:"metalsslowtask"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/slowTask")),(0,o.kt)("p",null,"The Metals slow task request is sent from the server to the client to notify the\nstart of a long running process with unknown estimated total time. A\n",(0,o.kt)("inlineCode",{parentName:"p"},"cancel: true")," response from the client cancels the task. A ",(0,o.kt)("inlineCode",{parentName:"p"},"$/cancelRequest"),"\nrequest from the server indicates that the task has completed."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/nsjWHWR.gif",alt:"Metals slow task"})),(0,o.kt)("p",null,"The difference between ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest")," is that\n",(0,o.kt)("inlineCode",{parentName:"p"},"slowTask")," is time-sensitive and the interface should display a timer for how\nlong the task has been running while ",(0,o.kt)("inlineCode",{parentName:"p"},"showMessageRequest")," is static."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsSlowTaskParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},'interface MetalsSlowTaskParams {\n /** The name of this slow task */\n message: string;\n /**\n * If true, the log output from this task does not need to be displayed to the user.\n *\n * In VS Code, the Metals "Output channel" is not toggled when this flag is true.\n */\n quietLogs?: boolean;\n /** Time that has elapsed since the begging of the task. */\n secondsElapsed?: number;\n}\n')),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Response"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsSlowTaskResponse")," defined as follows")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsSlowTaskResult {\n /**\n * If true, cancel the running task.\n * If false, the user dismissed the dialogue but want to\n * continue running the task.\n */\n cancel: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsstatus"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/status")),(0,o.kt)("p",null,"The Metals status notification is sent from the server to the client to notify\nabout non-critical and non-actionable events that are happening in the server.\nMetals status notifications are a complement to ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessage")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),". Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),", status notifications should\nalways be visible in the user interface. Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessage"),", status\nnotifications are not critical meaning that they should not demand too much\nattention from the user."),(0,o.kt)("p",null,"In general, Metals uses status notifications to update the user about ongoing\nevents in the server such as batch compilation in the build server or when a\nsuccessful connection was established with the build server."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/XX9CLRH.gif",alt:"Metals status bar"})),(0,o.kt)("p",null,'The "\ud83d\ude80 Imported build" and "\ud83d\udd04 Compiling explorer" messages at the bottom of\nthe window are ',(0,o.kt)("inlineCode",{parentName:"p"},"metals/status")," notifications."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsStatusParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsStatusParams {\n /** The text to display in the status bar. */\n text: string;\n /** If true, show the status bar. */\n show?: boolean;\n /** If true, hide the status bar. */\n hide?: boolean;\n /** If set, display this message when user hovers over the status bar. */\n tooltip?: string;\n /** If set, execute this command when the user clicks on the status bar item. */\n command?: string;\n}\n")),(0,o.kt)("h3",{id:"metalsdidfocustextdocument"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/didFocusTextDocument")),(0,o.kt)("p",null,"The Metals did focus notification is sent from the client to the server when the\neditor changes focus to a new text document. Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/didOpen"),", the\ndid focus notification is sent even when the text document is already open."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/XjTtAZK.gif",alt:"Metals did focus"})),(0,o.kt)("p",null,"Observe that the compilation error appears as soon as ",(0,o.kt)("inlineCode",{parentName:"p"},"UserTest.scala")," is\nfocused even if the text document was already open before. The LSP\n",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/didOpen")," notification is only sent the first time a document so it\nis not possible for the language server to re-trigger compilation when moves\nfocus back to ",(0,o.kt)("inlineCode",{parentName:"p"},"UserTest.scala")," that depends on APIs defined in ",(0,o.kt)("inlineCode",{parentName:"p"},"User.scala"),"."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/didFocusTextDocument")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"string"),", the URI of the document where the focused was moved to.")),(0,o.kt)("h3",{id:"metalsexecuteclientcommand"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/executeClientCommand")),(0,o.kt)("p",null,"The Metals execute client command is sent from the server to the client to\ntrigger an action inside the editor. This notification is a copy of the\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/executeCommand")," except"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"execute client command is a notification, not a request"),(0,o.kt)("li",{parentName:"ul"},"execute client command is initiated from the server, not the client")),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#metals-client-commands"},"Metals client\ncommands"),"\nfor the list of supported client commands."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"ExecuteCommandParams"),", as defined in LSP.")),(0,o.kt)("h3",{id:"metalsinputbox"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/inputBox")),(0,o.kt)("p",null,"The Metals input box request is sent from the server to the client to let the\nuser provide a string value for a given prompt. Unlike\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),", the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," request allows the user to\nprovide a custom response instead of picking a pre-selected value."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsInputBoxParams")," defined as follows. Note, matches\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#InputBoxOptions"},(0,o.kt)("inlineCode",{parentName:"a"},"InputBoxOptions")),"\nin the Visual Studio Code API:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsInputBoxParams {\n /**\n * The value to prefill in the input box.\n */\n value?: string;\n /**\n * The text to display underneath the input box.\n */\n prompt?: string;\n /**\n * An optional string to show as place holder in the input box to guide the user what to type.\n */\n placeHolder?: string;\n /**\n * Set to `true` to show a password prompt that will not show the typed value.\n */\n password?: boolean;\n /**\n * Set to `true` to keep the input box open when focus moves to another part of the editor or to another window.\n */\n ignoreFocusOut?: boolean;\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsInputBoxResult")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsInputBoxResult {\n value?: string;\n cancelled?: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsquickpick"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/quickPick")),(0,o.kt)("p",null,"The Metals quick pick request is sent from the server to the client to let the\nuser provide a string value by picking one out of a number of given options. It\nis similar to ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),", but the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/quickPick")," request\nhas richer parameters, that can be used to filter items to pick, like\n",(0,o.kt)("inlineCode",{parentName:"p"},"description")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"detail"),"."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/quickPick")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsQuickInputParams")," defined as follows. It partially matches\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#QuickPickOptions"},(0,o.kt)("inlineCode",{parentName:"a"},"QuickPickOptions")),"\nin the Visual Studio Code API, but it also contains ",(0,o.kt)("inlineCode",{parentName:"li"},"items")," of\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#QuickPickItem"},(0,o.kt)("inlineCode",{parentName:"a"},"MetalsQuickPickItem")),",\nwhich, in it's turn, partially matches ",(0,o.kt)("inlineCode",{parentName:"li"},"QuickPickItem"),", but these interfaces\ndo not contain options for picking many items:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsQuickPickParams {\n /**\n * An array of items that can be selected from.\n */\n items: MetalsQuickPickItem[];\n /**\n * An optional flag to include the description when filtering the picks.\n */\n matchOnDescription?: boolean;\n /**\n * An optional flag to include the detail when filtering the picks.\n */\n matchOnDetail?: boolean;\n /**\n * An optional string to show as place holder in the input box to guide the user what to pick on.\n */\n placeHolder?: string;\n /**\n * Set to `true` to keep the picker open when focus moves to another part of the editor or to another window.\n */\n ignoreFocusOut?: boolean;\n}\n\nexport interface MetalsQuickPickItem {\n /**\n * An id for this items that should be return as a result of the picking.\n */\n id: string;\n /**\n * A human readable string which is rendered prominent.\n */\n label: string;\n /**\n * A human readable string which is rendered less prominent.\n */\n description?: string;\n /**\n * A human readable string which is rendered less prominent.\n */\n detail?: string;\n /**\n * Always show this item.\n */\n alwaysShow?: boolean;\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsQuickPickResult")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsQuickPickResult {\n itemId?: string;\n cancelled?: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalswindowstatedidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/windowStateDidChange")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/windowStateDidChange")," notification is sent from the client to the\nserver to indicate whether the editor application window is focused or not. When\nthe editor window is not focused, Metals tries to avoid triggering expensive\ncomputation in the background such as compilation."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/windowStateDidChange")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"WindowStateDidChangeParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface WindowStateDidChangeParams( {\n /** If true, the editor application window is focused. False, otherwise. */\n focused: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsopenwindow"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/openWindow")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/openWindow")," params are used with the New Scala Project\nfunctionality. After the new project has been created, if the editor has the\nability to open the project in a new window then these params are used with the\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals-open-folder")," command."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsOpenWindowParams {\n /** Location of the newly created project. */\n uri: string;\n /** Whether or not to open the project in a new window. */\n openNewWindow: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsfindtextindependencyjars"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/findTextInDependencyJars")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"FindTextInDependencyJars")," request is sent from the client to the server to perform a search though files in the classpath\nincluding binary and sources jars. In response it returns a standard list of ",(0,o.kt)("inlineCode",{parentName:"p"},"Location")," from the ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#location"},"LSP spec"),"."),(0,o.kt)("p",null,"In case if this endpoint was called with empty ",(0,o.kt)("inlineCode",{parentName:"p"},"query.pattern")," or empty ",(0,o.kt)("inlineCode",{parentName:"p"},"options.include")," server sends ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#metalsinputbox"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/inputBox")),"\nrequest to the client to obtain these values."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/findTextInDependecyJars")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"FindTextInDependencyJarsRequest")," defined as follows.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"/**\n * Currenly, only `pattern` field is used for search.\n * See: https://github.com/scalameta/metals/issues/3234\n */\ninterface TextSearchQuery {\n /**\n * The text pattern to search for.\n */\n pattern?: string;\n /**\n * Whether or not `pattern` should be interpreted as a regular expression.\n */\n isRegExp?: boolean;\n /**\n * Whether or not the search should be case-sensitive.\n */\n isCaseSensitive?: boolean;\n /**\n * Whether or not to search for whole word matches only.\n */\n isWordMatch?: boolean;\n}\n\ninterface FindTextInFilesOptions {\n /** Include file filter. Example: `*.conf` */\n include?: string;\n /** Exclude file filter. Example: `*.conf` */\n exclude?: string;\n}\n\ninterface FindTextInDependencyJarsRequest(\n options?: FindTextInFilesOptions;\n query: TextSearchQuery\n)\n")),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Response"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"Location[]"))),(0,o.kt)("h3",{id:"metalsdoctorvisibilitydidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/doctorVisibilityDidChange")),(0,o.kt)("p",null,"When the client opens the doctor view, it will send in ",(0,o.kt)("inlineCode",{parentName:"p"},"visible: true")," to the\nserver and then ",(0,o.kt)("inlineCode",{parentName:"p"},"visible: false")," when the doctor view is closed. This will\nensure that the doctor checks aren't calculated on the server side when they\naren't needed to since they won't be seen by the client anyways."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/doctorVisibilityDidChange")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"DoctorVisibilityDidChangeParams"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface DoctorVisibilityDidChangeParams {\n visible: boolean;\n}\n")))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=r(e,["components","mdxType","originalType","parentName"]),m=p(n),c=i,h=m["".concat(s,".").concat(c)]||m[c]||u[c]||o;return n?a.createElement(h,l(l({ref:t},d),{},{components:n})):a.createElement(h,l({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=c;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[m]="string"==typeof e?e:i,l[1]=r;for(var p=2;p{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>p,toc:()=>m});var a=n(7462),i=n(3366),o=(n(7294),n(3905)),l=["components"],r={id:"new-editor",title:"Integrating a new editor"},s=void 0,p={unversionedId:"integrations/new-editor",id:"integrations/new-editor",title:"Integrating a new editor",description:"Metals is a language server implemented in Scala that communicates with a single",source:"@site/target/docs/integrations/new-editor.md",sourceDirName:"integrations",slug:"/integrations/new-editor",permalink:"/metals/docs/integrations/new-editor",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/integrations/new-editor.md",tags:[],version:"current",frontMatter:{id:"new-editor",title:"Integrating a new editor"},sidebar:"docs",previous:{title:"Integrating a new build tool",permalink:"/metals/docs/integrations/new-build-tool"},next:{title:"Test Explorer",permalink:"/metals/docs/integrations/test-explorer"}},d={},m=[{value:"Requirements",id:"requirements",level:2},{value:"Starting the server",id:"starting-the-server",level:2},{value:"Configuring the server",id:"configuring-the-server",level:2},{value:"Language Server Protocol",id:"language-server-protocol",level:2},{value:"initialize",id:"initialize",level:3},{value:"InitializationOptions",id:"initializationoptions",level:4},{value:"compilerOptions.completionCommand",id:"compileroptionscompletioncommand",level:5},{value:"compilerOptions.isCompletionItemDetailEnabled",id:"compileroptionsiscompletionitemdetailenabled",level:5},{value:"compilerOptions.isCompletionItemDocumentationEnabled",id:"compileroptionsiscompletionitemdocumentationenabled",level:5},{value:"compilerOptions.isCompletionItemResolve",id:"compileroptionsiscompletionitemresolve",level:5},{value:"compilerOptions.isHoverDocumentationEnabled",id:"compileroptionsishoverdocumentationenabled",level:5},{value:"compilerOptions.isSignatureHelpDocumentationEnabled",id:"compileroptionsissignaturehelpdocumentationenabled",level:5},{value:"compilerOptions.overrideDefFormat",id:"compileroptionsoverridedefformat",level:5},{value:"compilerOptions.parameterHintsCommand",id:"compileroptionsparameterhintscommand",level:5},{value:"compilerOptions.snippetAutoIndent",id:"compileroptionssnippetautoindent",level:5},{value:"copyWorksheetOutputProvider",id:"copyworksheetoutputprovider",level:5},{value:"debuggingProvider",id:"debuggingprovider",level:5},{value:"decorationProvider",id:"decorationprovider",level:5},{value:"didFocusProvider",id:"didfocusprovider",level:5},{value:"disableColorOutput",id:"disablecoloroutput",level:5},{value:"doctorProvider",id:"doctorprovider",level:5},{value:"executeClientCommandProvider",id:"executeclientcommandprovider",level:5},{value:"globSyntax",id:"globsyntax",level:5},{value:"inlineDecorationProvider",id:"inlinedecorationprovider",level:5},{value:"icons",id:"icons",level:5},{value:"inputBoxProvider",id:"inputboxprovider",level:5},{value:"isExitOnShutdown",id:"isexitonshutdown",level:5},{value:"isHttpEnabled",id:"ishttpenabled",level:5},{value:"openFilesOnRenameProvider",id:"openfilesonrenameprovider",level:5},{value:"openNewWindowProvider",id:"opennewwindowprovider",level:5},{value:"quickPickProvider",id:"quickpickprovider",level:5},{value:"renameFileThreshold",id:"renamefilethreshold",level:5},{value:"slowTaskProvider",id:"slowtaskprovider",level:5},{value:"statusBarProvider",id:"statusbarprovider",level:5},{value:"treeViewProvider",id:"treeviewprovider",level:5},{value:"testExplorerProvider",id:"testexplorerprovider",level:5},{value:"doctorVisibilityProvider",id:"doctorvisibilityprovider",level:5},{value:"Experimental Capabilities",id:"experimental-capabilities",level:4},{value:"initialized",id:"initialized",level:3},{value:"shutdown",id:"shutdown",level:3},{value:"exit",id:"exit",level:3},{value:"$/cancelRequest",id:"cancelrequest",level:3},{value:"client/registerCapability",id:"clientregistercapability",level:3},{value:"textDocument/didOpen",id:"textdocumentdidopen",level:3},{value:"textDocument/didChange",id:"textdocumentdidchange",level:3},{value:"textDocument/didClose",id:"textdocumentdidclose",level:3},{value:"textDocument/didSave",id:"textdocumentdidsave",level:3},{value:"textDocument/publishDiagnostics",id:"textdocumentpublishdiagnostics",level:3},{value:"textDocument/definition",id:"textdocumentdefinition",level:3},{value:"textDocument/references",id:"textdocumentreferences",level:3},{value:"textDocument/documentSymbol",id:"textdocumentdocumentsymbol",level:3},{value:"textDocument/formatting",id:"textdocumentformatting",level:3},{value:"textDocument/hover",id:"textdocumenthover",level:3},{value:"workspace/didChangeWatchedFiles",id:"workspacedidchangewatchedfiles",level:3},{value:"workspace/executeCommands",id:"workspaceexecutecommands",level:3},{value:"workspace/didChangeConfiguration",id:"workspacedidchangeconfiguration",level:3},{value:"window/logMessage",id:"windowlogmessage",level:3},{value:"window/showMessage",id:"windowshowmessage",level:3},{value:"window/showMessageRequest",id:"windowshowmessagerequest",level:3},{value:"Metals server properties",id:"metals-server-properties",level:2},{value:"-Dmetals.verbose",id:"-dmetalsverbose",level:3},{value:"-Dmetals.statistics",id:"-dmetalsstatistics",level:3},{value:"-Dmetals.h2.auto-server",id:"-dmetalsh2auto-server",level:3},{value:"-Dmetals.pc.debug",id:"-dmetalspcdebug",level:3},{value:"-Dbloop.sbt.version",id:"-dbloopsbtversion",level:3},{value:"-Dmetals.bloop-port",id:"-dmetalsbloop-port",level:3},{value:"Metals user configuration",id:"metals-user-configuration",level:2},{value:"Java Home directory",id:"java-home-directory",level:3},{value:"sbt script",id:"sbt-script",level:3},{value:"Gradle script",id:"gradle-script",level:3},{value:"Maven script",id:"maven-script",level:3},{value:"Mill script",id:"mill-script",level:3},{value:"Scalafmt config path",id:"scalafmt-config-path",level:3},{value:"Scalafix config path",id:"scalafix-config-path",level:3},{value:"Ammonite JVM Properties",id:"ammonite-jvm-properties",level:3},{value:"Excluded Packages",id:"excluded-packages",level:3},{value:"Don't generate Bloop plugin file for sbt",id:"dont-generate-bloop-plugin-file-for-sbt",level:3},{value:"Version of Bloop",id:"version-of-bloop",level:3},{value:"Bloop JVM Properties",id:"bloop-jvm-properties",level:3},{value:"Should display lenses with links to super methods",id:"should-display-lenses-with-links-to-super-methods",level:3},{value:"Should display type annotations for inferred types",id:"should-display-type-annotations-for-inferred-types",level:3},{value:"Should display implicit parameter at usage sites",id:"should-display-implicit-parameter-at-usage-sites",level:3},{value:"Should display implicit conversion at usage sites",id:"should-display-implicit-conversion-at-usage-sites",level:3},{value:"Use semantic tokens highlight",id:"use-semantic-tokens-highlight",level:3},{value:"Indent snippets when pasted.",id:"indent-snippets-when-pasted",level:3},{value:"Remote language server",id:"remote-language-server",level:3},{value:"Default fallback Scala version",id:"default-fallback-scala-version",level:3},{value:"Test UI used for tests and test suites",id:"test-ui-used-for-tests-and-test-suites",level:3},{value:"Eclipse Java formatter config path",id:"eclipse-java-formatter-config-path",level:3},{value:"Eclipse Java formatting profile",id:"eclipse-java-formatting-profile",level:3},{value:"Scala CLI launcher",id:"scala-cli-launcher",level:3},{value:"Metals server commands",id:"metals-server-commands",level:2},{value:"Analyze stacktrace",id:"analyze-stacktrace",level:3},{value:"Switch build server",id:"switch-build-server",level:3},{value:"Connect to build server",id:"connect-to-build-server",level:3},{value:"Cancel compilation",id:"cancel-compilation",level:3},{value:"Cascade compile",id:"cascade-compile",level:3},{value:"Clean compile",id:"clean-compile",level:3},{value:"Convert positional arguments to named ones",id:"convert-positional-arguments-to-named-ones",level:3},{value:"Copy Worksheet Output",id:"copy-worksheet-output",level:3},{value:"Discover main classes to run and return the object",id:"discover-main-classes-to-run-and-return-the-object",level:3},{value:"Discover tests",id:"discover-tests",level:3},{value:"Extract member definition",id:"extract-member-definition",level:3},{value:"Generate BSP Config",id:"generate-bsp-config",level:3},{value:"Goto location for position",id:"goto-location-for-position",level:3},{value:"Go to super method/field definition",id:"go-to-super-methodfield-definition",level:3},{value:"Goto location for symbol",id:"goto-location-for-symbol",level:3},{value:"Import build",id:"import-build",level:3},{value:"Insert inferred type of a value",id:"insert-inferred-type-of-a-value",level:3},{value:"Inline value",id:"inline-value",level:3},{value:"Create new scala file",id:"create-new-scala-file",level:3},{value:"Create new java file",id:"create-new-java-file",level:3},{value:"New Scala Project",id:"new-scala-project",level:3},{value:"Restart presentation compiler",id:"restart-presentation-compiler",level:3},{value:"Reset Choice Popup",id:"reset-choice-popup",level:3},{value:"Reset notifications",id:"reset-notifications",level:3},{value:"Extract method from range",id:"extract-method-from-range",level:3},{value:"Restart build server",id:"restart-build-server",level:3},{value:"Run doctor",id:"run-doctor",level:3},{value:"Run all Scalafix Rules",id:"run-all-scalafix-rules",level:3},{value:"Run a set of Scalafix Rules",id:"run-a-set-of-scalafix-rules",level:3},{value:"Decode file",id:"decode-file",level:3},{value:"Disconnect from old build server",id:"disconnect-from-old-build-server",level:3},{value:"List build targets",id:"list-build-targets",level:3},{value:"Scan sources",id:"scan-sources",level:3},{value:"Start Ammonite build server",id:"start-ammonite-build-server",level:3},{value:"Start debug adapter",id:"start-debug-adapter",level:3},{value:"Start main class",id:"start-main-class",level:3},{value:"Start test suite",id:"start-test-suite",level:3},{value:"Start test suite",id:"start-test-suite-1",level:3},{value:"Attach to a running jvm process",id:"attach-to-a-running-jvm-process",level:3},{value:"Try to discover a test or main to run.",id:"try-to-discover-a-test-or-main-to-run",level:3},{value:"Stop Ammonite build server",id:"stop-ammonite-build-server",level:3},{value:"Go to super method/field definition in hierarchy",id:"go-to-super-methodfield-definition-in-hierarchy",level:3},{value:"Start Scala CLI server",id:"start-scala-cli-server",level:3},{value:"Stop Scala CLI server",id:"stop-scala-cli-server",level:3},{value:"Open an issue on GitHub",id:"open-an-issue-on-github",level:3},{value:"Open a feature request",id:"open-a-feature-request",level:3},{value:"Create a zip with error reports",id:"create-a-zip-with-error-reports",level:3},{value:"Clean and restart build server",id:"clean-and-restart-build-server",level:3},{value:"Metals client commands",id:"metals-client-commands",level:2},{value:"Open a specified folder either in the same or new window",id:"open-a-specified-folder-either-in-the-same-or-new-window",level:3},{value:"Run doctor",id:"run-doctor-1",level:3},{value:"Reload doctor",id:"reload-doctor",level:3},{value:"Toggle logs",id:"toggle-logs",level:3},{value:"Open problems",id:"open-problems",level:3},{value:"Goto location",id:"goto-location",level:3},{value:"Echo command",id:"echo-command",level:3},{value:"Refresh model",id:"refresh-model",level:3},{value:"Show the stacktrace in the client.",id:"show-the-stacktrace-in-the-client",level:3},{value:"Copy Worksheet Output",id:"copy-worksheet-output-1",level:3},{value:"Start run session",id:"start-run-session",level:3},{value:"Start debug session",id:"start-debug-session",level:3},{value:"Metals HTTP client",id:"metals-http-client",level:2},{value:"Metals LSP extensions",id:"metals-lsp-extensions",level:2},{value:"Debug Adapter Protocol",id:"debug-adapter-protocol",level:3},{value:"Tree View Protocol",id:"tree-view-protocol",level:3},{value:"Decoration Protocol",id:"decoration-protocol",level:3},{value:"metals/slowTask",id:"metalsslowtask",level:3},{value:"metals/status",id:"metalsstatus",level:3},{value:"metals/didFocusTextDocument",id:"metalsdidfocustextdocument",level:3},{value:"metals/executeClientCommand",id:"metalsexecuteclientcommand",level:3},{value:"metals/inputBox",id:"metalsinputbox",level:3},{value:"metals/quickPick",id:"metalsquickpick",level:3},{value:"metals/windowStateDidChange",id:"metalswindowstatedidchange",level:3},{value:"metals/openWindow",id:"metalsopenwindow",level:3},{value:"metals/findTextInDependencyJars",id:"metalsfindtextindependencyjars",level:3},{value:"metals/doctorVisibilityDidChange",id:"metalsdoctorvisibilitydidchange",level:3}],u={toc:m},c="wrapper";function h(e){var t=e.components,n=(0,i.Z)(e,l);return(0,o.kt)(c,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Metals is a language server implemented in Scala that communicates with a single\nclient over ",(0,o.kt)("a",{parentName:"p",href:"https://www.jsonrpc.org/specification"},"JSON-RPC"),"."),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,o.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,o.kt)("h2",{id:"starting-the-server"},"Starting the server"),(0,o.kt)("p",null,"Use ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/coursier/coursier"},"Coursier")," to obtain the JVM classpath\nof Metals:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,o.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-properties"},"Metals server properties")," for additional system\nproperties that are supported by the server."),(0,o.kt)("p",null,"JSON-RPC communication takes place over standard input/output so the Metals\nserver doesn't print anything to the console when it starts. Instead, before\nestablishing a connection with the client, Metals logs notifications to a global\ndirectory:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# macOS\n~/Library/Caches/org.scalameta.metals/global.log\n# Linux\n$XDG_CACHE_HOME/org.scalameta.metals/global.log\n# Linux (alternative)\n$HOME/.cache/org.scalameta.metals/global.log\n# Windows\n{FOLDERID_LocalApplicationData}\\.cache\\org.scalameta.metals\\global.log\n")),(0,o.kt)("p",null,"After establishing a connection with the client, Metals redirects logs to the\n",(0,o.kt)("inlineCode",{parentName:"p"},".metals/metals.log")," file in the LSP workspace root directory."),(0,o.kt)("p",null,"Metals supports two kinds of JSON-RPC endpoints:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#language-server-protocol"},"Language Server Protocol"),": for the main\nfunctionality of the server, including editor text synchronization and\nsemantic features such as goto definition."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"#metals-lsp-extensions"},"Metals extensions"),": for additional functionality that\nis missing in LSP but improves the user experience.")),(0,o.kt)("h2",{id:"configuring-the-server"},"Configuring the server"),(0,o.kt)("p",null,"Over time the recommended way to configure Metals has shifted from heavily\nrelying on the ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-properties"},"Metals server properties")," to being\nfully able to be configured via ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," which are exchanged\nduring the\n",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#initialize"},(0,o.kt)("inlineCode",{parentName:"a"},"initialize")),"\nprocess. While Metals will still work being fully configured by server\nproperties, we strongly recommend that instead you rely on the\n",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," which are thoroughly covered below in the\n",(0,o.kt)("a",{parentName:"p",href:"#initialize"},(0,o.kt)("inlineCode",{parentName:"a"},"initialize"))," section."),(0,o.kt)("h2",{id:"language-server-protocol"},"Language Server Protocol"),(0,o.kt)("p",null,"Consult the\n",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification"},"LSP specification"),"\nto learn more about how LSP works. Metals uses the following endpoints from the\nspecification."),(0,o.kt)("h3",{id:"initialize"},(0,o.kt)("inlineCode",{parentName:"h3"},"initialize")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"the ",(0,o.kt)("inlineCode",{parentName:"li"},"rootUri")," field is used to configure Metals for that workspace directory.\nThe working directory for where server is started has no significant meaning."),(0,o.kt)("li",{parentName:"ul"},"at this point, Metals uses only full text synchronization. In the future, it\nwill be able to use incremental text synchronization."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"didChangeWatchedFiles")," client capability is used to determine whether to\nregister file watchers.")),(0,o.kt)("h4",{id:"initializationoptions"},(0,o.kt)("inlineCode",{parentName:"h4"},"InitializationOptions")),(0,o.kt)("p",null,"During ",(0,o.kt)("inlineCode",{parentName:"p"},"initialize")," we also have the ability to pass in ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),'.\nThis is the primary way to configure Metals. In Metals we have a few different\n"providers". Some are LSP extensions, such as ',(0,o.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," which you read\nabout below, and others used to be server properties that have been migrated to\n",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". M"),(0,o.kt)("p",null,"The currently available settings for ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions")," are listed below."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-typescript"},' interface InitializationOptions: {\n compilerOptions: {\n completionCommand?: string;\n isCompletionItemDetailEnabled?: boolean;\n isCompletionItemDocumentationEnabled?: boolean;\n isCompletionItemResolve?: boolean;\n isHoverDocumentationEnabled?: boolean;\n isSignatureHelpDocumentationEnabled?: boolean;\n overrideDefFormat?: "ascii" | "unicode";\n parameterHintsCommand?: string;\n snippetAutoIndent?: boolean;\n }\n debuggingProvider?: boolean;\n decorationProvider?: boolean;\n inlineDecorationProvider?: boolean;\n didFocusProvider?: boolean;\n doctorProvider?: "json" | "html";\n executeClientCommandProvider?: boolean;\n globSyntax?: "vscode" | "uri";\n icons?: "vscode" | "octicons" | "atom" | "unicode";\n inputBoxProvider?: boolean;\n isVirtualDocumentSupported?: boolean;\n isExitOnShutdown?: boolean;\n isHttpEnabled?: boolean;\n openFilesOnRenameProvider?: boolean;\n quickPickProvider?: boolean;\n renameFileThreshold?: number;\n slowTaskProvider?: boolean;\n statusBarProvider?: "on" | "off" | "log-message" | "show-message";\n treeViewProvider?: boolean;\n testExplorerProvider?: boolean;\n openNewWindowProvider?: boolean;\n copyWorksheetOutputProvider?: boolean;\n commandInHtmlFormat?: "vscode" | "sublime";\n doctorVisibilityProvider?: boolean;\n }\n')),(0,o.kt)("p",null,"You can also always check these in the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/blob/main/metals/src/main/scala/scala/meta/internal/metals/InitializationOptions.scala"},(0,o.kt)("inlineCode",{parentName:"a"},"InitializationOptions.scala")),"\nfile where you'll find all of the options and descriptions. Alternatively you can check out the typescript equivalent - ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-languageclient/blob/main/src/interfaces/MetalsInitializationOptions.ts"},(0,o.kt)("inlineCode",{parentName:"a"},"MetalsInitializationOptions.ts"))),(0,o.kt)("h5",{id:"compileroptionscompletioncommand"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.completionCommand")),(0,o.kt)("p",null,"An optional string value for a command identifier to trigger completion\n(",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/signatureHelp"),") in the editor."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"editor.action.triggerSuggest"'),": currently used by Visual Studio Code and\ncoc.nvim."),(0,o.kt)("li",{parentName:"ul"},"empty: for all other editors.")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemdetailenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemDetailEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.detail")," field should\nbe populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.documentation")," field\nshould be populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsiscompletionitemresolve"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isCompletionItemResolve")),(0,o.kt)("p",null,"Boolean value signifying whether the client wants Metals to handle the\n",(0,o.kt)("inlineCode",{parentName:"p"},"completionItem/resolve")," request."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#completionItem_resolve"},"https://microsoft.github.io/language-server-protocol/specification#completionItem_resolve")),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsishoverdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isHoverDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether to include docstrings in a ",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/hover"),"\nrequest."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsissignaturehelpdocumentationenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.isSignatureHelpDocumentationEnabled")),(0,o.kt)("p",null,"Boolean value signifying whether or not the ",(0,o.kt)("inlineCode",{parentName:"p"},"SignatureHelp.documentation")," field\nshould be populated."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"true")),(0,o.kt)("h5",{id:"compileroptionsoverridedefformat"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.overrideDefFormat")),(0,o.kt)("p",null,"Whether or not the presentation compiler overrides should show unicode icon or\njust be in ascii format."),(0,o.kt)("p",null,"Possible Values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"ascii"')," (default)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"unicode"),' show the "\ud83d\udd3c" icon in overrides.')),(0,o.kt)("h5",{id:"compileroptionsparameterhintscommand"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.parameterHintsCommand")),(0,o.kt)("p",null,"An optional string value for a command identifier to trigger parameter hints\n(",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/signatureHelp"),") in the editor. Metals uses this setting to\npopulate ",(0,o.kt)("inlineCode",{parentName:"p"},"CompletionItem.command")," for completion items that move the cursor\ninside an argument list. For example, when completing ",(0,o.kt)("inlineCode",{parentName:"p"},'"".stripSu@@')," into\n",(0,o.kt)("inlineCode",{parentName:"p"},'"".stripSuffix(@@)'),", Metals will automatically trigger parameter hints if this\nsetting is provided by the editor."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},'"editor.action.triggerParameterHints"'),": Used by Visual Studio Code and\ncoc.nvim."),(0,o.kt)("li",{parentName:"ul"},"empty: for all other editors.")),(0,o.kt)("h5",{id:"compileroptionssnippetautoindent"},(0,o.kt)("inlineCode",{parentName:"h5"},"compilerOptions.snippetAutoIndent")),(0,o.kt)("p",null,'Certain editors will automatically insert indentation equal to that of the\nreference line that the operation started on. This is relevant in the case of\nmultiline textEdits such as the "implement all methods" completion.'),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": (default): the client automatically adds in the indentation. This is the\ncase for VS Code, Sublime, and coc.nvim."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off"),": the client does not add any indentation when receiving a multi-line\ntextEdit")),(0,o.kt)("h5",{id:"copyworksheetoutputprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"copyWorksheetOutputProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports running\nCopyWorksheetOutput server command and copying its results into the local\nbuffer."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"debuggingprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"debuggingProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/debug-adapter-protocol"},"Debug Adapter Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"decorationprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"decorationProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"didfocusprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"didFocusProvider")),(0,o.kt)("p",null,"Boolean value to signify that the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"#metalsdidfocustextdocument"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/didFocusTextDocument"))," extension."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"disablecoloroutput"},(0,o.kt)("inlineCode",{parentName:"h5"},"disableColorOutput")),(0,o.kt)("p",null,"Useful for certain DAP clients that are unable to handle color codes for output.\nThis will remove the color codes coming from whatever DAP server is currently\nbeing used."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"doctorprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"doctorProvider")),(0,o.kt)("p",null,"Format that you'd like Doctor to return information in."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"html"),": (default): Metals will return html that can be rendered directly in\nthe browser or web view"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"json"),": json representation of the information returned by Doctor. See the\njson format ",(0,o.kt)("a",{parentName:"li",href:"#run-doctor"},"here"),".")),(0,o.kt)("h5",{id:"executeclientcommandprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"executeClientCommandProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")," notification is not\nsupported. Client commands can still be handled by enabling\n",(0,o.kt)("inlineCode",{parentName:"li"},"-Dmetals.http=on"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")," notification is supported and all\n",(0,o.kt)("a",{parentName:"li",href:"#metals-client-commands"},"Metals client commands")," are handled.")),(0,o.kt)("h5",{id:"globsyntax"},(0,o.kt)("inlineCode",{parentName:"h5"},"globSyntax")),(0,o.kt)("p",null,"Controls the glob syntax for registering file watchers on absolute directories.\nRegistration happens via ",(0,o.kt)("inlineCode",{parentName:"p"},"client/registerCapability")," for the\n",(0,o.kt)("a",{parentName:"p",href:"#workspacedidchangewatchedfiles"},(0,o.kt)("inlineCode",{parentName:"a"},"workspace/didChangeWatchedFiles"))," method, if\nthe editor client supports it."),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"uri")," (default): URI-encoded file paths, with forward slash ",(0,o.kt)("inlineCode",{parentName:"li"},"/")," for file\nseparators regardless of the operating system. Includes ",(0,o.kt)("inlineCode",{parentName:"li"},"file://")," prefix."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vscode"),": use regular Path.toString for the absolute directory parts (",(0,o.kt)("inlineCode",{parentName:"li"},"/")," on\nmacOS+Linux and ",(0,o.kt)("inlineCode",{parentName:"li"},"\\")," on Windows) and forward slashes ",(0,o.kt)("inlineCode",{parentName:"li"},"/")," for relative parts.\nFor example, ",(0,o.kt)("inlineCode",{parentName:"li"},"C:\\Users\\IEUser\\workspace\\project/*.{scala,sbt,properties}"),".\nThis mode is used by the VS Code client.")),(0,o.kt)("h5",{id:"inlinedecorationprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"inlineDecorationProvider")),(0,o.kt)("p",null,"If the client implements the Metals Decoration Protocol ",(0,o.kt)("strong",{parentName:"p"},"and")," supports\ndecorations to be shown inline and not only at the end of a line."),(0,o.kt)("p",null,"Default: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"icons"},(0,o.kt)("inlineCode",{parentName:"h5"},"icons")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"none")," (default): don't display icons in messages."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"vscode"),": use ",(0,o.kt)("a",{parentName:"li",href:"https://octicons.github.com"},"Octicons")," such as ",(0,o.kt)("inlineCode",{parentName:"li"},"$(rocket)")," for\nstatus bar messages, as supported by th\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/docs/extensionAPI/vscode-api#StatusBarItem"},"VS Code status bar"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"unicode"),": use unicode emojis like \ud83d\ude80 for status bar messages.")),(0,o.kt)("h5",{id:"inputboxprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"inputBoxProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," request is not supported. In this case,\nMetals tries to fall back to ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest")," when possible."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," request is fully supported.")),(0,o.kt)("h5",{id:"isexitonshutdown"},(0,o.kt)("inlineCode",{parentName:"h5"},"isExitOnShutdown")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): run ",(0,o.kt)("inlineCode",{parentName:"li"},"System.exit")," only on the ",(0,o.kt)("inlineCode",{parentName:"li"},"exit")," notification, as\nrequired by the LSP specification."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": run ",(0,o.kt)("inlineCode",{parentName:"li"},"System.exit")," after the ",(0,o.kt)("inlineCode",{parentName:"li"},"shutdown")," request, going against the LSP\nspecification. This option is enabled by default for Sublime Text to prevent\nthe Metals process from staying alive after Sublime Text has quit with\n",(0,o.kt)("inlineCode",{parentName:"li"},"Cmd+Q"),". It's not possible for Sublime Text packages to register a callback\nwhen the editor has quit. See\n",(0,o.kt)("a",{parentName:"li",href:"https://github.com/tomv564/LSP/issues/410"},"LSP#410")," for more details.")),(0,o.kt)("h5",{id:"ishttpenabled"},(0,o.kt)("inlineCode",{parentName:"h5"},"isHttpEnabled")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): don't start a server with the Metals HTTP client."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": start a server with the ","[Metals HTTP client]"," to interact with the server\nthrough a basic web UI. This option is needed for editor clients that don't\nsupport necessary requests such as ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest"),".")),(0,o.kt)("h5",{id:"openfilesonrenameprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"openFilesOnRenameProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client opens files when doing a\nrename."),(0,o.kt)("p",null,"Default: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"opennewwindowprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"openNewWindowProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports opening up a new\nwindow with the newly created project. Used in conjunction with the New Project\nProvider."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"quickpickprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"quickPickProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the\n",(0,o.kt)("a",{parentName:"p",href:"#metalsquickpick"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/quickPick"))," extensions."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"renamefilethreshold"},(0,o.kt)("inlineCode",{parentName:"h5"},"renameFileThreshold")),(0,o.kt)("p",null,"The max amount of files that you would like the client to open if the client is\na ",(0,o.kt)("inlineCode",{parentName:"p"},"openFilesOnRenameProvider"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"300")),(0,o.kt)("h5",{id:"slowtaskprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"slowTaskProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")," request is not supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")," request is fully supported.")),(0,o.kt)("h5",{id:"statusbarprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"statusBarProvider")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notification is not supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": the ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notification is supported."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"log-message"),": translate ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notifications to ",(0,o.kt)("inlineCode",{parentName:"li"},"window/logMessage"),"\nnotifications."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"show-message"),": translate ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," notifications to\n",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessage")," show notifications however the client displays messages\nto the user.")),(0,o.kt)("h5",{id:"treeviewprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"treeViewProvider")),(0,o.kt)("p",null,"Boolean value signifying whether or not the client supports the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,o.kt)("p",null,"Default value: ",(0,o.kt)("inlineCode",{parentName:"p"},"false")),(0,o.kt)("h5",{id:"testexplorerprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"testExplorerProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the Test Explorer."),(0,o.kt)("h5",{id:"doctorvisibilityprovider"},(0,o.kt)("inlineCode",{parentName:"h5"},"doctorVisibilityProvider")),(0,o.kt)("p",null,"Boolean value to signify whether or not the client implements the ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals/doctorVisibilityDidChange"'),".\nThis JSON notification is used to keep track of doctor state. If client implements this provider then Metals server\nwill send updates to the doctor view."),(0,o.kt)("h4",{id:"experimental-capabilities"},"Experimental Capabilities"),(0,o.kt)("p",null,"All of the features that used to be set with ",(0,o.kt)("inlineCode",{parentName:"p"},"experimental")," can now all be set\nvia ",(0,o.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". This is the preferred way to configure Metals."),(0,o.kt)("h3",{id:"initialized"},(0,o.kt)("inlineCode",{parentName:"h3"},"initialized")),(0,o.kt)("p",null,"Triggers build server initialization and workspace indexing. The ",(0,o.kt)("inlineCode",{parentName:"p"},"initialized"),"\nnotification is critical for any Metals functionality to work."),(0,o.kt)("h3",{id:"shutdown"},(0,o.kt)("inlineCode",{parentName:"h3"},"shutdown")),(0,o.kt)("p",null,"It is very important that the client sends a shutdown request in order for\nMetals to clean up open resources."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"persists incremental compilation analysis files. Without a ",(0,o.kt)("inlineCode",{parentName:"li"},"shutdown")," hook,\nMetals will need to re-compile the entire workspace on next startup."),(0,o.kt)("li",{parentName:"ul"},"stops ongoing processes such as ",(0,o.kt)("inlineCode",{parentName:"li"},"sbt bloopInstall")),(0,o.kt)("li",{parentName:"ul"},"closes database connections")),(0,o.kt)("h3",{id:"exit"},(0,o.kt)("inlineCode",{parentName:"h3"},"exit")),(0,o.kt)("p",null,"Kills the process using ",(0,o.kt)("inlineCode",{parentName:"p"},"System.exit"),"."),(0,o.kt)("h3",{id:"cancelrequest"},(0,o.kt)("inlineCode",{parentName:"h3"},"$/cancelRequest")),(0,o.kt)("p",null,"Used by ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," to notify when a long-running process has finished."),(0,o.kt)("h3",{id:"clientregistercapability"},(0,o.kt)("inlineCode",{parentName:"h3"},"client/registerCapability")),(0,o.kt)("p",null,"If the client declares the ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace.didChangeWatchedFiles")," capability during\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"initialize")," request, then Metals follows up with a\n",(0,o.kt)("inlineCode",{parentName:"p"},"client/registerCapability")," request to register file watchers for certain glob\npatterns."),(0,o.kt)("h3",{id:"textdocumentdidopen"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didOpen")),(0,o.kt)("p",null,"Triggers compilation in the build server for the build target containing the\nopened document. Related, see ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/didFocusTextDocument"),"."),(0,o.kt)("h3",{id:"textdocumentdidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didChange")),(0,o.kt)("p",null,"Required to know the text contents of the current unsaved buffer."),(0,o.kt)("h3",{id:"textdocumentdidclose"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didClose")),(0,o.kt)("p",null,"Cleans up resources."),(0,o.kt)("h3",{id:"textdocumentdidsave"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/didSave")),(0,o.kt)("p",null,"Triggers compilation in the build server and analyses if the build needs to be\nre-imported."),(0,o.kt)("h3",{id:"textdocumentpublishdiagnostics"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/publishDiagnostics")),(0,o.kt)("p",null,"Metals forwards diagnostics from the build server to the editor client.\nAdditionally, Metals publishes ",(0,o.kt)("inlineCode",{parentName:"p"},"Information")," diagnostics for unexpected\ncompilation errors when navigating external library sources."),(0,o.kt)("h3",{id:"textdocumentdefinition"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/definition")),(0,o.kt)("p",null,"Metals supports goto definition for workspace sources in addition to external\nlibrary sources."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Library sources live under the directory ",(0,o.kt)("inlineCode",{parentName:"li"},".metals/readonly")," and they are\nmarked as read-only to prevent the user from editing them."),(0,o.kt)("li",{parentName:"ul"},"The destination location can either be a Scala or Java source file. It is\nrecommended to have a Java language server installed to navigate Java sources.")),(0,o.kt)("h3",{id:"textdocumentreferences"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/references")),(0,o.kt)("p",null,"Metals finds symbol references for workspace sources but not external library\ndependencies."),(0,o.kt)("p",null,"LSP does not support streaming references so when project sources have not been\ncompiled at the point of a request, Metals returns immediately with potentially\nincomplete results and triggers a background cascade compilation to find new\nsymbol references. If new symbol references are discovered after the background\ncompilation completes, Metals sends a notification via ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/status")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),' asking the user to run "find references" again.'),(0,o.kt)("h3",{id:"textdocumentdocumentsymbol"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/documentSymbol")),(0,o.kt)("p",null,"Returns ",(0,o.kt)("inlineCode",{parentName:"p"},"DocumentSymbol[]")," if the client declares support for hierarchical\ndocument symbol or ",(0,o.kt)("inlineCode",{parentName:"p"},"SymbolInformation[]")," otherwise."),(0,o.kt)("h3",{id:"textdocumentformatting"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/formatting")),(0,o.kt)("p",null,"Formats the sources with the ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/scalafmt/"},"Scalafmt")," version\nthat is declared in ",(0,o.kt)("inlineCode",{parentName:"p"},".scalafmt.conf"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"when ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," is missing, Metals sends a ",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest"),"\nto create the file."),(0,o.kt)("li",{parentName:"ul"},"when ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," exists but doesn't declare a ",(0,o.kt)("inlineCode",{parentName:"li"},"version")," setting, Metals\nsends a ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")," when supported (with fallback to\n",(0,o.kt)("inlineCode",{parentName:"li"},"window/showMessageRequest")," when unsupported) to prepend ",(0,o.kt)("inlineCode",{parentName:"li"},"version=$VERSION")," to\nthe ",(0,o.kt)("inlineCode",{parentName:"li"},".scalafmt.conf")," file."),(0,o.kt)("li",{parentName:"ul"},"the first format request is usually slow because Metals needs to download\nScalafmt artifacts from Maven Central. While the download happens, Metals adds\na message in the status bar via ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")," and detailed download progress\ninformation is logged to ",(0,o.kt)("inlineCode",{parentName:"li"},".metals/metals.log"),".")),(0,o.kt)("h3",{id:"textdocumenthover"},(0,o.kt)("inlineCode",{parentName:"h3"},"textDocument/hover")),(0,o.kt)("p",null,"Returns ",(0,o.kt)("inlineCode",{parentName:"p"},"Hover")," for specified text document and position - ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_hover"},"lsp spec"),"."),(0,o.kt)("p",null,"Metals also support an extended version of this method that supports hover for selection range.\nThe extended stucture of request params is the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface HoverExtParams {\n textDocument: TextDocumentIdentifier;\n /** Either `position` or `range` should be specified */\n position?: Position;\n range?: Range;\n}\n")),(0,o.kt)("h3",{id:"workspacedidchangewatchedfiles"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/didChangeWatchedFiles")),(0,o.kt)("p",null,"Optional. Metals uses a built-in file watcher for critical functionality such as\nGoto Definition so it is OK if an editor does not send\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications."),(0,o.kt)("p",null,"Metals listens to ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications from the\neditor for nice-to-have but non-critical file watching events. Metals\nautomatically registers for the following glob patterns if the editor supports\ndynamic registration for file watching."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "watchers": [\n {\n "globPattern": {\n "left": "file:///to/workspace/*.sbt"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/pom.xml"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*.sc"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*?.gradle"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/*.gradle.kts"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/*.{scala,sbt}"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/project/*.{scala,sbt}"\n }\n },\n {\n "globPattern": {\n "left": "file:///to/workspace/project/build.properties"\n }\n }\n ]\n}\n')),(0,o.kt)("p",null,"The editor is responsible for manually watching these file patterns if the\neditor does not support dynamic file watching registration but can still send\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeWatchedFiles")," notifications."),(0,o.kt)("h3",{id:"workspaceexecutecommands"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/executeCommands")),(0,o.kt)("p",null,"Used to trigger a ",(0,o.kt)("a",{parentName:"p",href:"#metals-server-commands"},"Metals server command"),"."),(0,o.kt)("h3",{id:"workspacedidchangeconfiguration"},(0,o.kt)("inlineCode",{parentName:"h3"},"workspace/didChangeConfiguration")),(0,o.kt)("p",null,"Used to update ",(0,o.kt)("a",{parentName:"p",href:"#metals-user-configuration"},"Metals user configuration"),"."),(0,o.kt)("h3",{id:"windowlogmessage"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/logMessage")),(0,o.kt)("p",null,"Used to log non-critical and non-actionable information. The user is only\nexpected to use the logs for troubleshooting or finding metrics for how long\ncertain events take."),(0,o.kt)("h3",{id:"windowshowmessage"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/showMessage")),(0,o.kt)("p",null,"Used to send critical but non-actionable notifications to the user. For\nnon-critical notifications, see ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/status"),"."),(0,o.kt)("h3",{id:"windowshowmessagerequest"},(0,o.kt)("inlineCode",{parentName:"h3"},"window/showMessageRequest")),(0,o.kt)("p",null,"Used to send critical and actionable notifications to the user. To notify the\nuser about long running tasks that can be cancelled, the extension\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," is used instead."),(0,o.kt)("h2",{id:"metals-server-properties"},"Metals server properties"),(0,o.kt)("p",null,"There are various Metals server properties that can be configured through JVM\nsystem properties. A system property is passed to the server like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# with `java` binary\njava -Dmetals.statistics=all ...\n# with `coursier bootstrap`\ncoursier bootstrap --java-opt -Dmetals.statistics=all ...\n")),(0,o.kt)("p",null,"Below are the available server properties:"),(0,o.kt)("h3",{id:"-dmetalsverbose"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.verbose")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): don't log unnecessary details."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": emit very detailed logs, should only be used when debugging problems.")),(0,o.kt)("h3",{id:"-dmetalsstatistics"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.statistics")),(0,o.kt)("p",null,"By default, Metals logs only the most relevant metrics like time it takes to run\nsbt and import a workspace. To enable further metrics, update this property\nwith a comma separated list of the following supported values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"memory"),": print memory usage of the navigation index after build import."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"definition"),": print total time to respond to ",(0,o.kt)("inlineCode",{parentName:"li"},"textDocument/definition"),"\nrequests.")),(0,o.kt)("p",null,"Set the value to ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.statistics=all")," to enable all statistics."),(0,o.kt)("h3",{id:"-dmetalsh2auto-server"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.h2.auto-server")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on")," (default): use\n",(0,o.kt)("a",{parentName:"li",href:"http://www.h2database.com/html/features.html#auto_mixed_mode"},"H2 ",(0,o.kt)("inlineCode",{parentName:"a"},"AUTO_SERVER=TRUE")," mode"),"\nto support multiple concurrent Metals servers in the same workspace. If this\noption is enabled, the Metals H2 database communicate to other concurrently\nrunning Metals servers via TCP through a free port. In case of failure to\nestablish a ",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=TRUE")," connection, Metals falls back to\n",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=FALSE"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off"),": do not use ",(0,o.kt)("inlineCode",{parentName:"li"},"AUTO_SERVER=TRUE"),". By disabling this option, it's not\npossible to run concurrent Metals servers in the same workspace directory. For\nexample, it's not possible to have both VS Code and Vim installed with Metals\nrunning in the same directory. In case there are multiple Metals servers\nrunning in the same workspace directory, Metals falls back to using an\nin-memory database resulting in a degraded user experience.")),(0,o.kt)("h3",{id:"-dmetalspcdebug"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.pc.debug")),(0,o.kt)("p",null,"Possible values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"off")," (default): do not log verbose debugging information for the presentation\ncompiler."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"on"),": log verbose debugging information for the presentation compiler.")),(0,o.kt)("h3",{id:"-dbloopsbtversion"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dbloop.sbt.version")),(0,o.kt)("p",null,'Version number of the sbt-bloop plugin to use for the "Install build" command.\nDefault value is ',(0,o.kt)("inlineCode",{parentName:"p"},"-Dbloop.sbt.version=1.5.11"),"."),(0,o.kt)("p",null,"The below properties are also available as user configuration options. It's\npreferable to set these there:"),(0,o.kt)("h3",{id:"-dmetalsbloop-port"},(0,o.kt)("inlineCode",{parentName:"h3"},"-Dmetals.bloop-port")),(0,o.kt)("p",null,"Port number of the Bloop server to connect to. Should only be used if Bloop\nserver was set up in a custom way. Default value is ",(0,o.kt)("inlineCode",{parentName:"p"},"8212"),"."),(0,o.kt)("p",null,"Possible values are any allowed port number that the Bloop server is able to run\non."),(0,o.kt)("h2",{id:"metals-user-configuration"},"Metals user configuration"),(0,o.kt)("p",null,"Users can customize the Metals server through the LSP\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration")," notification. Unlike server properties, it is\nnormal for regular Metals users to configure these options."),(0,o.kt)("p",null,"User configuration options can optionally be provided via server properties\nusing the ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.")," prefix. System properties may be helpful for editor\nclients that don't support ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),". In case user\nconfiguration is defined both via system properties and\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),", then ",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/didChangeConfiguration"),"\ntakes precedence."),(0,o.kt)("h3",{id:"java-home-directory"},"Java Home directory"),(0,o.kt)("p",null,"The Java Home directory used for indexing JDK sources and locating the ",(0,o.kt)("inlineCode",{parentName:"p"},"java")," binary."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable with fallback to ",(0,o.kt)("inlineCode",{parentName:"p"},"user.home")," system property."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaHome": "/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home"\n }\n}\n')),(0,o.kt)("h3",{id:"sbt-script"},"sbt script"),(0,o.kt)("p",null,"Optional absolute path to an ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall"),".\nBy default, Metals uses ",(0,o.kt)("inlineCode",{parentName:"p"},"java -jar sbt-launch.jar")," with an embedded launcher while respecting\n",(0,o.kt)("inlineCode",{parentName:"p"},".jvmopts")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".sbtopts"),". Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "sbtScript": "/usr/local/bin/sbt"\n }\n}\n')),(0,o.kt)("h3",{id:"gradle-script"},"Gradle script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle bloopInstall"),".\nBy default, Metals uses gradlew with 7.5.0 gradle version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"gradle")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "gradleScript": "/usr/local/bin/gradle"\n }\n}\n')),(0,o.kt)("h3",{id:"maven-script"},"Maven script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"maven")," executable to use for generating bloop config.\nBy default, Metals uses mvnw maven wrapper with 3.6.1 maven version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"maven")," script requires more customizations"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "mavenScript": "/usr/local/bin/mvn"\n }\n}\n')),(0,o.kt)("h3",{id:"mill-script"},"Mill script"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"mill")," executable to use for running ",(0,o.kt)("inlineCode",{parentName:"p"},"mill mill.contrib.bloop.Bloop/install"),".\nBy default, Metals uses mill wrapper script with 0.5.0 mill version. Update this setting if your ",(0,o.kt)("inlineCode",{parentName:"p"},"mill")," script requires more customizations\nlike using environment variables."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "millScript": "/usr/local/bin/mill"\n }\n}\n')),(0,o.kt)("h3",{id:"scalafmt-config-path"},"Scalafmt config path"),(0,o.kt)("p",null,"Optional custom path to the .scalafmt.conf file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalafmtConfigPath": "project/.scalafmt.conf"\n }\n}\n')),(0,o.kt)("h3",{id:"scalafix-config-path"},"Scalafix config path"),(0,o.kt)("p",null,"Optional custom path to the .scalafix.conf file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalafixConfigPath": "project/.scalafix.conf"\n }\n}\n')),(0,o.kt)("h3",{id:"ammonite-jvm-properties"},"Ammonite JVM Properties"),(0,o.kt)("p",null,"Optional list of JVM properties to pass along to the Ammonite server.\nEach property needs to be a separate item.\\n\\nExample: ",(0,o.kt)("inlineCode",{parentName:"p"},"-Xmx1G")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"-Xms100M"),'"'),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"[]"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "ammoniteJvmProperties": ["-Xmx1G"]\n }\n}\n')),(0,o.kt)("h3",{id:"excluded-packages"},"Excluded Packages"),(0,o.kt)("p",null,"Packages that will be excluded from completions, imports, and symbol searches."),(0,o.kt)("p",null,"Note that this is in addition to some default packages that are already excluded.\nThe default excluded packages are listed below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},"META-INF\nimages\ntoolbarButtonGraphics\njdk\nsun\noracle\njava.awt.desktop\norg.jcp\norg.omg\norg.graalvm\ncom.oracle\ncom.sun\ncom.apple\napple\ncom.sourcegraph.shaded\n")),(0,o.kt)("p",null,"If there is a need to remove one of the defaults, you are able to do so by including the\npackage in your list and prepending ",(0,o.kt)("inlineCode",{parentName:"p"},"--")," to it."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-js"},'["--sun"]\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"[]"),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "excludedPackages": ["akka.actor.typed.javadsl"]\n }\n}\n')),(0,o.kt)("h3",{id:"dont-generate-bloop-plugin-file-for-sbt"},"Don't generate Bloop plugin file for sbt"),(0,o.kt)("p",null,"If true, Metals will not generate ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.sbt")," files under the assumption that sbt-bloop is already manually installed in the sbt build. Build import will fail with a 'not valid command bloopInstall' error in case Bloop is not manually installed in the build when using this option."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopSbtAlreadyInstalled": false\n }\n}\n')),(0,o.kt)("h3",{id:"version-of-bloop"},"Version of Bloop"),(0,o.kt)("p",null,"This version will be used for the Bloop build tool plugin, for any supported build tool,\nwhile importing in Metals as well as for running the embedded server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": 1.5.11"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopVersion": "1.4.0-RC1"\n }\n}\n')),(0,o.kt)("h3",{id:"bloop-jvm-properties"},"Bloop JVM Properties"),(0,o.kt)("p",null,"Optional list of JVM properties to pass along to the Bloop server.\nPlease follow this guide for the format ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/server-reference#global-settings-for-the-server%22"},'https://scalacenter.github.io/bloop/docs/server-reference#global-settings-for-the-server"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": ",'["-Xmx1G"]',"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "bloopJvmProperties": ["-Xmx1G"]\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-lenses-with-links-to-super-methods"},"Should display lenses with links to super methods"),(0,o.kt)("p",null,"Super method lenses are visible above methods definition that override another methods. Clicking on a lens jumps to super method definition.\nDisabled lenses are not calculated for opened documents which might speed up document processing."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "superMethodLensesEnabled": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-type-annotations-for-inferred-types"},"Should display type annotations for inferred types"),(0,o.kt)("p",null,"When this option is enabled, each method that can have inferred types has them\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showInferredType": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-implicit-parameter-at-usage-sites"},"Should display implicit parameter at usage sites"),(0,o.kt)("p",null,"When this option is enabled, each method that has implicit arguments has them\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showImplicitArguments": false\n }\n}\n')),(0,o.kt)("h3",{id:"should-display-implicit-conversion-at-usage-sites"},"Should display implicit conversion at usage sites"),(0,o.kt)("p",null,"When this option is enabled, each place where an implicit method or class is used has it\ndisplayed either as additional decorations if they are supported by the editor or\nshown in the hover."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "showImplicitConversionsAndClasses": false\n }\n}\n')),(0,o.kt)("h3",{id:"use-semantic-tokens-highlight"},"Use semantic tokens highlight"),(0,o.kt)("p",null,"When this option is enabled, Metals will provide semantic tokens for clients that support it.\nThe feature should work within all supported files extensions aside from Java."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": true"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "enableSemanticHighlighting": false\n }\n}\n')),(0,o.kt)("h3",{id:"indent-snippets-when-pasted"},"Indent snippets when pasted."),(0,o.kt)("p",null,"When this option is enabled, when a snippet is pasted into a Scala file, Metals will\ntry to adjust the indentation to that of the current cursor."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": false"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "enableIndentOnPaste": false\n }\n}\n')),(0,o.kt)("h3",{id:"remote-language-server"},"Remote language server"),(0,o.kt)("p",null,"A URL pointing to an endpoint that implements a remote language server."),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/remote-language-server"},"https://scalameta.org/metals/docs/integrations/remote-language-server")," for\ndocumentation on remote language servers."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "remoteLanguageServer": "https://language-server.company.com/message"\n }\n}\n')),(0,o.kt)("h3",{id:"default-fallback-scala-version"},"Default fallback Scala version"),(0,o.kt)("p",null,"The Scala compiler version that is used as the default or fallback in case a file\ndoesn't belong to any build target or the specified Scala version isn't supported by Metals.\nThis applies to standalone Scala files, worksheets, and Ammonite scripts."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": 3.3.1"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "fallbackScalaVersion": 3.3.1\n }\n}\n')),(0,o.kt)("h3",{id:"test-ui-used-for-tests-and-test-suites"},"Test UI used for tests and test suites"),(0,o.kt)("p",null,'Default way of handling tests and test suites. The only valid values are\n"code lenses" and "test explorer". See ',(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/test-explorer"},"https://scalameta.org/metals/docs/integrations/test-explorer"),"\nfor information on how to work with the test explorer."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": Code Lenses"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "testUserInterface": test explorer\n }\n}\n')),(0,o.kt)("h3",{id:"eclipse-java-formatter-config-path"},"Eclipse Java formatter config path"),(0,o.kt)("p",null,"Optional custom path to the eclipse-formatter.xml file.\nIt should be a path (relative or absolute - though an absolute path is recommended) and use\nforward slashes ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," for file separators (even on Windows)."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaFormat.eclipseConfigPath": "formatters/eclipse-formatter.xml"\n }\n}\n')),(0,o.kt)("h3",{id:"eclipse-java-formatting-profile"},"Eclipse Java formatting profile"),(0,o.kt)("p",null,"If the Eclipse formatter file contains more than one profile, this option can be used to control which is used."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "javaFormat.eclipseProfile": "GoogleStyle"\n }\n}\n')),(0,o.kt)("h3",{id:"scala-cli-launcher"},"Scala CLI launcher"),(0,o.kt)("p",null,"Optional absolute path to a ",(0,o.kt)("inlineCode",{parentName:"p"},"scala-cli")," executable to use for running a Scala CLI BSP server.\nBy default, Metals uses the scala-cli from the PATH, or it's not found, downloads and runs Scala\nCLI on the JVM (slower than native Scala CLI). Update this if you want to use a custom Scala CLI\nlauncher, not available in PATH."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Default"),": empty string ",(0,o.kt)("inlineCode",{parentName:"p"},'""'),"."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Example"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "metals": {\n "scalaCliLauncher": "/usr/local/bin/scala-cli"\n }\n}\n')),(0,o.kt)("h2",{id:"metals-server-commands"},"Metals server commands"),(0,o.kt)("p",null,"The client can trigger one of the following commands through the\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/executeCommand")," request."),(0,o.kt)("h3",{id:"analyze-stacktrace"},"Analyze stacktrace"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"analyze-stacktrace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", where the string is a stacktrace."),(0,o.kt)("p",null,"Converts provided stacktrace in the parameter to a format that contains links\nto locations of places where the exception was raised."),(0,o.kt)("p",null,"If the configuration parameter of the client ",(0,o.kt)("inlineCode",{parentName:"p"},"commandInHtmlFormat")," is set\nthen client is requested to display html with links\nalready pointing to proper locations in user codebase.\nOtherwise client will display simple scala file\nbut with code lenses that direct user to proper location in codebase."),(0,o.kt)("h3",{id:"switch-build-server"},"Switch build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"bsp-switch"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Prompt the user to select a new build server to connect to."),(0,o.kt)("p",null,"This command does nothing in case there are less than two installed build\nservers on the computer. In case the user has multiple BSP servers installed\nthen Metals will prompt the user to select which server to use."),(0,o.kt)("h3",{id:"connect-to-build-server"},"Connect to build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-connect"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Establish a new connection to the build server and reindex the workspace."),(0,o.kt)("p",null,"This command can be helpful in scenarios when Metals feels unresponsive, for example\nwhen reopening Metals after the computer it has been sleeping."),(0,o.kt)("h3",{id:"cancel-compilation"},"Cancel compilation"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-cancel"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Cancel the currently ongoing compilation, if any."),(0,o.kt)("h3",{id:"cascade-compile"},"Cascade compile"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-cascade"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Compile the current open files along with all build targets in this workspace that depend on those files."),(0,o.kt)("p",null,"By default, Metals compiles only the current build target and its dependencies when saving a file.\nRun the cascade compile task to additionally compile the inverse dependencies of the current build target.\nFor example, if you change the API in main sources and run cascade compile then it will also compile the\ntest sources that depend on main."),(0,o.kt)("h3",{id:"clean-compile"},"Clean compile"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"compile-clean"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Recompile all build targets in this workspace."),(0,o.kt)("p",null,"By default, Metals compiles the files incrementally. In case of any compile artifacts corruption\nthis command might be run to make sure everything is recompiled correctly."),(0,o.kt)("h3",{id:"convert-positional-arguments-to-named-ones"},"Convert positional arguments to named ones"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"convert-to-named-arguments"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": Object with ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentPositionParams"},"TextDocumentPositionParams")," of the target Apply and ",(0,o.kt)("inlineCode",{parentName:"p"},"numUnnamedArgs")," (int)"),(0,o.kt)("p",null,"Whenever a user chooses code action to convert to named arguments, this command is later run to\ndetermine the parameter names of all unnamed arguments and insert names at the correct locations."),(0,o.kt)("h3",{id:"copy-worksheet-output"},"Copy Worksheet Output"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"copy-worksheet-output"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", the uri of the worksheet that you'd like to copy the contents of."),(0,o.kt)("p",null,"Copy the contents of a worksheet to your local buffer."),(0,o.kt)("p",null,"Note: This command returns the contents of the worksheet, and the LSP client\nis in charge of taking that content and putting it into your local buffer."),(0,o.kt)("h3",{id:"discover-main-classes-to-run-and-return-the-object"},"Discover main classes to run and return the object"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"discover-jvm-run-command"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedTestClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "path": "path/to/file.scala",\n "runType": "run"\n}\n')),(0,o.kt)("p",null,"Response:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["id1"],\n "dataKind": "scala-main-class",\n "data": {\n "class": "Foo",\n "arguments": [],\n "jvmOptions": [],\n "environmentVariables": [],\n "shellCommand": "java ..."\n }\n}\n')),(0,o.kt)("p",null,"Gets the DebugSession object that also contains a command to run in shell based\non JVM environment including classpath, jvmOptions and environment parameters."),(0,o.kt)("h3",{id:"discover-tests"},"Discover tests"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"discover-tests"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),":\nAn object with uri, when request is meant to discover test cases for uri"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"{\n uri: file:///home/dev/foo/Bar.scala\n}\n")),(0,o.kt)("p",null,"or empty object if request is meant to discover all test suites"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"{}\n")),(0,o.kt)("p",null,"Discovers all tests in project or a file.\nSee ClientCommands.UpdateTestExplorer to see how response looks like."),(0,o.kt)("h3",{id:"extract-member-definition"},"Extract member definition"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"extract-member-definition"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses a code action to extract a definition of a Class/Trait/Object/Enum this\ncommand is later ran to extract the code and create a new file with it"),(0,o.kt)("h3",{id:"generate-bsp-config"},"Generate BSP Config"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"generate-bsp-config"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", name of the build server."),(0,o.kt)("p",null,"Checks to see if your build tool can serve as a BSP server. If so, generate\nthe necessary BSP config to connect to the server. If there is more than one\nbuild tool for a workspace, you can then choose the desired one and that\none will be used to generate the config."),(0,o.kt)("p",null,"After the config is generated, Metals will attempt to auto-connect to it."),(0,o.kt)("p",null,"The build servers that Metals knows how to detect and start:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"sbt"),(0,o.kt)("li",{parentName:"ul"},"mill-bsp")),(0,o.kt)("p",null,"Note: while Metals does know how to start Bloop, Bloop will be started when you trigger a build\nimport or when you use ",(0,o.kt)("inlineCode",{parentName:"p"},"bsp-switch")," to switch to Bloop."),(0,o.kt)("h3",{id:"goto-location-for-position"},"Goto location for position"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto-position"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[location]",", where the location is a lsp location object."),(0,o.kt)("p",null,"Move the cursor to the location provided in arguments.\nIt simply forwards request to client."),(0,o.kt)("h3",{id:"go-to-super-methodfield-definition"},"Go to super method/field definition"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto-super-method"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Jumps to super method/field definition of a symbol under cursor according to inheritance rules.\nWhen A {override def x()} <:< B <:< C {def x()} and on method 'A.x' it will jump directly to 'C.x'\nas method x() is not overridden in B.\nIf symbol is a reference of a method it will jump to a definition.\nIf symbol under cursor is invalid or does not override anything then command is ignored."),(0,o.kt)("h3",{id:"goto-location-for-symbol"},"Goto location for symbol"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"goto"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", where the string is a SemanticDB symbol."),(0,o.kt)("p",null,"Move the cursor to the definition of the argument symbol."),(0,o.kt)("h3",{id:"import-build"},"Import build"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-import"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Import the latest changes from the build to for example pick up new library dependencies."),(0,o.kt)("p",null,"By default, Metals automatically prompts you to import the build when sources of the build change.\nUse this command to manually trigger an import build instead of relying on the automatic prompt."),(0,o.kt)("h3",{id:"insert-inferred-type-of-a-value"},"Insert inferred type of a value"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"insert-inferred-type"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses code action to insert the inferred type this command is later ran to\ncalculate the type and insert it in the correct location."),(0,o.kt)("h3",{id:"inline-value"},"Inline value"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"inline-value"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Whenever a user chooses code action to inline a value this command is later ran to\nfind all the references to choose the correct inline version (if possible to perform)"),(0,o.kt)("h3",{id:"create-new-scala-file"},"Create new scala file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-scala-file"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": [string[]], where the first is a directory location for the new file.\nThe second and third positions correspond to the file name and file type to allow for quick\ncreation of a file if all are present."),(0,o.kt)("p",null,"Create and open new Scala file."),(0,o.kt)("p",null,"The currently allowed Scala file types that can be passed in are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"scala-file (Empty file)"),(0,o.kt)("li",{parentName:"ul"},"scala-class (Class)"),(0,o.kt)("li",{parentName:"ul"},"scala-case-class (Case Class)"),(0,o.kt)("li",{parentName:"ul"},"scala-enum (Enum)"),(0,o.kt)("li",{parentName:"ul"},"scala-object (Object)"),(0,o.kt)("li",{parentName:"ul"},"scala-trait (Trait)"),(0,o.kt)("li",{parentName:"ul"},"scala-package-object (Package Object)"),(0,o.kt)("li",{parentName:"ul"},"scala-worksheet (Worksheet)"),(0,o.kt)("li",{parentName:"ul"},"scala-script (Scala Script(Ammonite or Scala CLI))")),(0,o.kt)("p",null,"Note: requires 'metals/inputBox' capability from language client."),(0,o.kt)("h3",{id:"create-new-java-file"},"Create new java file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-java-file"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": [string[]], where the first is a directory location for the new file.\nThe second and third positions correspond to the file name and file type to allow for quick\ncreation of a file if all are present."),(0,o.kt)("p",null,"Create and open a new Java file."),(0,o.kt)("p",null,"The currently allowed Java file types that ca be passed in are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"java-class (Class)"),(0,o.kt)("li",{parentName:"ul"},"java-interface (Interface)"),(0,o.kt)("li",{parentName:"ul"},"java-enum (Enum)"),(0,o.kt)("li",{parentName:"ul"},"java-record (Record)")),(0,o.kt)("p",null,"Note: requires 'metals/inputBox' capability from language client."),(0,o.kt)("h3",{id:"new-scala-project"},"New Scala Project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"new-scala-project"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Create a new Scala project using one of the available g8 templates.\nThis includes simple projects as well as samples for most of the popular Scala frameworks.\nThe command reuses the Metals quick pick extension to work and can function with ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),",\nhowever the experience will not be optimal in that case. Some editors might also offer to open the newly created\nproject via ",(0,o.kt)("inlineCode",{parentName:"p"},"openNewWindowProvider"),", but it is not necessary for the main functionality to work. "),(0,o.kt)("h3",{id:"restart-presentation-compiler"},"Restart presentation compiler"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"presentation-compiler-restart"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Restart running presentation compiler instances."),(0,o.kt)("p",null,"Metals automatically restarts the presentation compiler after every successful compilation\nin the build tool so this command should not be needed for normal usage. Please report\nan issue if you need to use this command."),(0,o.kt)("h3",{id:"reset-choice-popup"},"Reset Choice Popup"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-choice"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string?]",", where string is a choice value."),(0,o.kt)("p",null,"ResetChoicePopup command allows you to reset a decision you made about different settings.\nE.g. If you choose to import workspace with sbt you can decide to reset and change it again."),(0,o.kt)("p",null,"Provided string is optional but if present it must be one of defined in ",(0,o.kt)("inlineCode",{parentName:"p"},"PopupChoiceReset.scala"),"\nIf a choice is not provided it will execute interactive mode where user is prompt to select\nwhich choice to reset."),(0,o.kt)("h3",{id:"reset-notifications"},"Reset notifications"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-notifications"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"ResetNotifications command allows you to reset all the dismissed notifications.\nE.g. If you choose to dismiss build import forever, this command will make the notification show up again."),(0,o.kt)("h3",{id:"extract-method-from-range"},"Extract method from range"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"extract-method"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": LSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"TextDocumentIdentifier"),"]",", (",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentIdentifier"},"https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentIdentifier"),"),\nLSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"Range"),"]",", range of the code you'd like to extract as method,\nLSP ","[",(0,o.kt)("inlineCode",{parentName:"p"},"Position"),"]",", position where the definition of extracted method will be created."),(0,o.kt)("p",null,"Whenever a user chooses code action to extract method, this command is later ran to\ncalculate parameters for the newly created method and create its definition."),(0,o.kt)("h3",{id:"restart-build-server"},"Restart build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-restart"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Unconditionally stop the current running Bloop server and start a new one using Bloop launcher"),(0,o.kt)("h3",{id:"run-doctor"},"Run doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"doctor-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals doctor to troubleshoot potential problems with the build."),(0,o.kt)("p",null,"This command can be helpful in scenarios where features are not working as expected such\nas compile errors are not appearing or completions are not correct."),(0,o.kt)("h3",{id:"run-all-scalafix-rules"},"Run all Scalafix Rules"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scalafix-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"Run all the supported scalafix rules in your codebase."),(0,o.kt)("p",null,"If the rules are missing please add them to user configuration ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies"),".\nTheir format is the coursier one ",(0,o.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"https://get-coursier.io/")),(0,o.kt)("h3",{id:"run-a-set-of-scalafix-rules"},"Run a set of Scalafix Rules"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scalafix-run-only"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": RunScalafixRulesParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "textDocumentPositionParams": {\n "textDocument": {\n "uri": "path/to/file.scala"\n },\n "position": {\n "line": 70,\n "character": 33\n }\n },\n "rules": ["ExplicitResultTypes"]\n}\n')),(0,o.kt)("p",null,"Run a set of Scalafix rules in your codebase."),(0,o.kt)("p",null,"If no rules are specified, this command will prompt the user to select one from a list\nof their project's enabled rules."),(0,o.kt)("p",null,"If you want to run all rules, use the ",(0,o.kt)("inlineCode",{parentName:"p"},"scalafix-run")," command instead."),(0,o.kt)("h3",{id:"decode-file"},"Decode file"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"file-decode"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", uri of the file with any parameters required for decoding.\nExamples:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"javap:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.java.javap\nmetalsDecode:file:///somePath/someFile.scala.javap\nmetalsDecode:file:///somePath/someFile.class.javap\nmetalsDecode:file:///somePath/someFile.java.javap-verbose\nmetalsDecode:file:///somePath/someFile.scala.javap-verbose\nmetalsDecode:file:///somePath/someFile.class.javap-verbose\n"))),(0,o.kt)("li",{parentName:"ul"},"semanticdb:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.java.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.java.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.scala.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.scala.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.java.semanticdb.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.java.semanticdb.semanticdb-detailed\nmetalsDecode:file:///somePath/someFile.scala.semanticdb.semanticdb-compact\nmetalsDecode:file:///somePath/someFile.scala.semanticdb.semanticdb-detailed\n"))),(0,o.kt)("li",{parentName:"ul"},"tasty:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///somePath/someFile.scala.tasty-decoded\nmetalsDecode:file:///somePath/someFile.tasty.tasty-decoded\n"))),(0,o.kt)("li",{parentName:"ul"},"jar:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:jar:file:///somePath/someFile-sources.jar!/somePackage/someFile.java\n"))),(0,o.kt)("li",{parentName:"ul"},"build target:",(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre"},"metalsDecode:file:///workspacePath/buildTargetName.metals-buildtarget\n")))),(0,o.kt)("p",null,"Response:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface DecoderResponse {\n requestedUri: string;\n value?: string;\n error?: string\n}\n")),(0,o.kt)("p",null,"Decode a file into a human readable format."),(0,o.kt)("p",null,"Compilation involves various binary files that can't be read directly\nin a text editor so they need to be decoded into a human readable format.\nExamples include ",(0,o.kt)("inlineCode",{parentName:"p"},".class")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".semanticdb"),"."),(0,o.kt)("h3",{id:"disconnect-from-old-build-server"},"Disconnect from old build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"build-disconnect"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Unconditionally cancel existing build server connection without reconnecting"),(0,o.kt)("h3",{id:"list-build-targets"},"List build targets"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"list-build-targets"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Retrieve a list of build targets for the workspace."),(0,o.kt)("h3",{id:"scan-sources"},"Scan sources"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"sources-scan"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Walk all files in the workspace and index where symbols are defined."),(0,o.kt)("p",null,"Is automatically run once after ",(0,o.kt)("inlineCode",{parentName:"p"},"initialized")," notification and incrementally\nupdated on file watching events. A language client that doesn't support\nfile watching can run this manually instead. It should not be much slower\nthan walking the entire file tree and reading ",(0,o.kt)("inlineCode",{parentName:"p"},"*.scala")," files to string,\nindexing itself is cheap."),(0,o.kt)("h3",{id:"start-ammonite-build-server"},"Start Ammonite build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"ammonite-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Start Ammonite build server"),(0,o.kt)("h3",{id:"start-debug-adapter"},"Start debug adapter"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Start a new debugger session with fully specified DebugSessionParams"),(0,o.kt)("h3",{id:"start-main-class"},"Start main class"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedMainClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "mainClass": "path/to/file.scala",\n "buildTarget": "metals"\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by resolving a main class by name and target"),(0,o.kt)("h3",{id:"start-test-suite"},"Start test suite"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ScalaTestSuitesDebugRequest object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "target": "metals"\n "requestData" : {\n "suites": ["com.foo.FooSuite"],\n "jvmOptions": []],\n "environmentVariables": [],\n }\n}\n')),(0,o.kt)("p",null,"Start a new debugger session for a test suite, can be used to run a single test case"),(0,o.kt)("h3",{id:"start-test-suite-1"},"Start test suite"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedTestClassParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "testClass": "com.foo.FooSuite"\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by resolving a test suite by name and possibly target."),(0,o.kt)("h3",{id:"attach-to-a-running-jvm-process"},"Attach to a running jvm process"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugUnresolvedAttachRemoteParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "hostName": "localhost",\n "port": 1234,\n "buildTarget": "metals",\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by attaching to existing jvm process."),(0,o.kt)("h3",{id:"try-to-discover-a-test-or-main-to-run"},"Try to discover a test or main to run."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"debug-adapter-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugDiscoveryParams object\nExample:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "path": "path/to/file.scala",\n "runType": "run",\n}\n')),(0,o.kt)("p",null,"Start a new debugger session by running the discovered test or main class."),(0,o.kt)("h3",{id:"stop-ammonite-build-server"},"Stop Ammonite build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"ammonite-stop"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Stop Ammonite build server"),(0,o.kt)("h3",{id:"go-to-super-methodfield-definition-in-hierarchy"},"Go to super method/field definition in hierarchy"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"super-method-hierarchy"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": This command should be sent in with the LSP ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentPositionParams"},(0,o.kt)("inlineCode",{parentName:"a"},"TextDocumentPositionParams"))),(0,o.kt)("p",null,"When user executes this command it will calculate inheritance hierarchy of a class that contains given method.\nThen it will filter out classes not overriding given method and a list using 'metalsQuickPick' will be\ndisplayed to which super method user would like to go to.\nCommand has no effect on other symbols than method definition.\nQuickPick will show up only if more than one result is found."),(0,o.kt)("h3",{id:"start-scala-cli-server"},"Start Scala CLI server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scala-cli-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Start Scala CLI server"),(0,o.kt)("h3",{id:"stop-scala-cli-server"},"Stop Scala CLI server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"scala-cli-stop"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Stop Scala CLI server"),(0,o.kt)("h3",{id:"open-an-issue-on-github"},"Open an issue on GitHub"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"open-new-github-issue"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals repository on GitHub to ask a question or report a bug."),(0,o.kt)("h3",{id:"open-a-feature-request"},"Open a feature request"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"browser-open-url:https://github.com/scalameta/metals-feature-requests/issues/new?template=feature-request.yml"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Open the Metals repository on GitHub to open a feature request."),(0,o.kt)("h3",{id:"create-a-zip-with-error-reports"},"Create a zip with error reports"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"zip-reports"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Creates a zip from incognito and bloop reports with additional information about build targets."),(0,o.kt)("h3",{id:"clean-and-restart-build-server"},"Clean and restart build server"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"reset-workspace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Clean metals cache and restart build server."),(0,o.kt)("p",null,"When using Bloop, clears all directories in .bloop.\nThis will ensure that Bloop will have a fully reset state."),(0,o.kt)("h2",{id:"metals-client-commands"},"Metals client commands"),(0,o.kt)("p",null,"The Metals server can send one of the following client commands if the client\nsupports the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/executeClientCommand")," notification,"),(0,o.kt)("h3",{id:"open-a-specified-folder-either-in-the-same-or-new-window"},"Open a specified folder either in the same or new window"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-open-folder"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": An object with ",(0,o.kt)("inlineCode",{parentName:"p"},"uri")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"newWindow")," fields.\nExample: "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "uri": "file://path/to/directory",\n "newWindow": true\n}\n')),(0,o.kt)("p",null,"Open a new window with the specified directory."),(0,o.kt)("h3",{id:"run-doctor-1"},"Run doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-doctor-run"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the HTML to display in the focused window."),(0,o.kt)("p",null,"Focus on a window displaying troubleshooting help from the Metals doctor."),(0,o.kt)("p",null,"If ",(0,o.kt)("inlineCode",{parentName:"p"},"doctorProvider")," is set to ",(0,o.kt)("inlineCode",{parentName:"p"},'"json"')," then the schema is as follows:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorOutput {\n /** Metals Doctor title */\n title: string;\n /** Version of the doctor json format, 0 if empty\n * The latest version is: 5\n */\n version: String;\n /**\n * Contains metals version and jdk info and a brief information about understanding\n * the Doctor placed in here as well. (since version 3 (replaces headerText))\n */\n header: DoctorHeader;\n /**\n * Troubleshooting help for each workspace folder.\n */\n folders: DoctorFolderResult[];\n}\n\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorFolderResult {\n /**\n * Contains decisions that were made about what build tool or build server\n * the user has chosen.\n */\n header: DoctorFolderHeader\n /**\n * If build targets are detected in your workspace, they will be listed here with\n * the status of related functionality of Metals for each build target.\n */\n targets?: DoctorBuildTarget[];\n /** Messages given if build targets cannot be found */\n messages?: DoctorRecommendation[];\n /** Explanations for the various statuses present in the doctor */\n explanations?: DoctorExplanation[];\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorHeader {\n /** java version and location information */\n jdkInfo?: string;\n /** the version of the server that is being used */\n serverInfo: string;\n /** small description on what a build target is */\n buildTargetDescription: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorFolderHeader {\n /** if Metals detected multiple build tools, this specifies the one the user has chosen */\n buildTool?: string;\n /** the build server that is being used */\n buildServer: string;\n /** if the user has turned the import prompt off, this will include a message on\n * how to get it back.\n */\n importBuildStatus?: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorBuildTarget {\n /** Name of the build target */\n buildTarget: string;\n /** Status of compilation for build this build target (since version 2) */\n compilationStatus: string;\n /** Can contain Scala version, sbt version or Java */\n targetType: string;\n /** Status of diagnostics */\n diagnostics: string;\n /** Status of completions, hovers and other interactive features*/\n interactive: string;\n /** Status of semanticdb indexes */\n semanticdb: string;\n /** Status of debugging */\n debugging: string;\n /** Status of java support */\n java: string;\n /** Any recommendations in how to fix any issues that are found above */\n recommendation: string;\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorRecommendation {\n /** Title of the recommendation */\n title: string;\n /** Recommendations related to the found issue. */\n recommendations: string[]\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"export interface DoctorExplanation {\n /** Title of the explanation */\n title: string;\n /** Explanations of statuses that can be found in the doctor */\n recommendations: string[]\n}\n")),(0,o.kt)("h3",{id:"reload-doctor"},"Reload doctor"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-doctor-reload"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the HTML to display in the focused window."),(0,o.kt)("p",null,"Reload the HTML contents of an open Doctor window, if any. Should be ignored if there is no open doctor window.\nIf ",(0,o.kt)("inlineCode",{parentName:"p"},"doctorProvider")," is set to ",(0,o.kt)("inlineCode",{parentName:"p"},'"json"'),", then the schema is the same as found above in ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-run-doctor"')),(0,o.kt)("h3",{id:"toggle-logs"},"Toggle logs"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-logs-toggle"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Focus or remove focus on the output logs reported by the server via ",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),"."),(0,o.kt)("p",null,'In VS Code, this opens the "output" channel for the Metals extension.'),(0,o.kt)("h3",{id:"open-problems"},"Open problems"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-diagnostics-focus"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,"Focus on the window that lists all published diagnostics."),(0,o.kt)("p",null,'In VS Code, this opens the "problems" window.'),(0,o.kt)("h3",{id:"goto-location"},"Goto location"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-goto-location"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": First required parameter is LSP ",(0,o.kt)("inlineCode",{parentName:"p"},"Location")," object with ",(0,o.kt)("inlineCode",{parentName:"p"},"uri")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"range")," fields.\nSecond parameter is optional and has signature ",(0,o.kt)("inlineCode",{parentName:"p"},"otherWindow: Boolean"),".\nIt gives a hint to client that if possible it would be good to open location in\nanother buffer/window.\nExample: "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'[{\n "uri": "file://path/to/Definition.scala",\n "range": {\n "start": {"line": 194, "character": 0},\n "end": {"line": 194, "character": 1}\n },\n "otherWindow" : true\n},\n]\n')),(0,o.kt)("p",null,"Move the cursor focus to the provided location"),(0,o.kt)("h3",{id:"echo-command"},"Echo command"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-echo-command"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"string"),", the command ID to execute on the client."),(0,o.kt)("p",null,"A client command that should be forwarded back to the Metals server."),(0,o.kt)("p",null,"Metals may register commands in client UIs like tree view nodes that should be\nforwarded back to the Metals server if the client clicks on the UI elements."),(0,o.kt)("h3",{id:"refresh-model"},"Refresh model"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-model-refresh"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"null")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note"),": This request is deprecated and Metals will favor ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/#codeLens_refresh"},"Code Lens Refresh Request")," if supported by the client."),(0,o.kt)("p",null,"Notifies the client that the model has been updated and it\nshould be refreshed (e.g. by resending code lens request)"),(0,o.kt)("h3",{id:"show-the-stacktrace-in-the-client"},"Show the stacktrace in the client."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-show-stacktrace"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[string]",", the markdown representation of the stacktrace"),(0,o.kt)("p",null,"Show the stacktrace modified with links to specific files."),(0,o.kt)("h3",{id:"copy-worksheet-output-1"},"Copy Worksheet Output"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals.copy-worksheet-output"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": ","[uri]",", the uri of the worksheet that you'd like to copy the contents of."),(0,o.kt)("p",null,"Copy the contents of a worksheet to your local buffer."),(0,o.kt)("p",null,"Note: This command should execute the copy-worksheet-output\nserver command to get the output to copy into the buffer."),(0,o.kt)("p",null,"Server will attempt to create code lens with this command if ",(0,o.kt)("inlineCode",{parentName:"p"},"copyWorksheetOutputProvider")," option is set."),(0,o.kt)("h3",{id:"start-run-session"},"Start run session"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-run-session-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object. It should be forwarded\nto the debug-adapter-start command as is."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Starts a run session. The address of a new Debug Adapter can be obtained\nby using the debug-adapter-start metals server command\nwith the same arguments as provided to this command."),(0,o.kt)("h3",{id:"start-debug-session"},"Start debug session"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Command"),": ",(0,o.kt)("inlineCode",{parentName:"p"},'"metals-debug-session-start"')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Arguments"),": DebugSessionParameters object. It should be forwarded\nto the debug-adapter-start command as is."),(0,o.kt)("p",null,"Example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{\n "targets": ["mybuild://workspace/foo/?id=foo"],\n dataKind: "scala-main-class",\n data: {\n className: "com.foo.App"\n }\n}\n')),(0,o.kt)("p",null,"Starts a debug session. The address of a new Debug Adapter can be obtained\nby using the debug-adapter-start metals server command\nwith the same arguments as provided to this command."),(0,o.kt)("h2",{id:"metals-http-client"},"Metals HTTP client"),(0,o.kt)("p",null,"Metals has an optional web interface that can be used to trigger server commands\nand respond to server requests. This interface is not intended for regular\nusers, it exists only to help editor plugin authors integrate with Metals."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/t5RJ3q6.png",alt:"Metals http client"})),(0,o.kt)("p",null,"The server is enabled by passing the ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.http=on")," system property. The\nserver runs by default at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:5031/"},(0,o.kt)("inlineCode",{parentName:"a"},"http://localhost:5031")),".\nWhen the port 5031 is taken the next free increment is chosen instead (5032,\n5033, ...)."),(0,o.kt)("h2",{id:"metals-lsp-extensions"},"Metals LSP extensions"),(0,o.kt)("p",null,"Editor clients can opt into receiving Metals-specific JSON-RPC requests and\nnotifications. Metals extensions are not defined in LSP and are not strictly\nrequired for the Metals server to function but it is recommended to implement\nthem to improve the user experience."),(0,o.kt)("p",null,"To enable Metals extensions, start the main process with the system property\n",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.extensions=true"),"."),(0,o.kt)("h3",{id:"debug-adapter-protocol"},"Debug Adapter Protocol"),(0,o.kt)("p",null,"Metals implements and additional protocol for running and debugging inside the\neditor, see the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/debug-adapter-protocol"},"Debug Adapter Protocol"),"."),(0,o.kt)("h3",{id:"tree-view-protocol"},"Tree View Protocol"),(0,o.kt)("p",null,"Metals implements several custom JSON-RPC endpoints related to rendering tree\nviews in the editor client, the\n",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,o.kt)("h3",{id:"decoration-protocol"},"Decoration Protocol"),(0,o.kt)("p",null,"Metals implements an LSP extension to display non-editable text in the editor,\nsee the ",(0,o.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,o.kt)("h3",{id:"metalsslowtask"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/slowTask")),(0,o.kt)("p",null,"The Metals slow task request is sent from the server to the client to notify the\nstart of a long running process with unknown estimated total time. A\n",(0,o.kt)("inlineCode",{parentName:"p"},"cancel: true")," response from the client cancels the task. A ",(0,o.kt)("inlineCode",{parentName:"p"},"$/cancelRequest"),"\nrequest from the server indicates that the task has completed."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/nsjWHWR.gif",alt:"Metals slow task"})),(0,o.kt)("p",null,"The difference between ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest")," is that\n",(0,o.kt)("inlineCode",{parentName:"p"},"slowTask")," is time-sensitive and the interface should display a timer for how\nlong the task has been running while ",(0,o.kt)("inlineCode",{parentName:"p"},"showMessageRequest")," is static."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/slowTask")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsSlowTaskParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},'interface MetalsSlowTaskParams {\n /** The name of this slow task */\n message: string;\n /**\n * If true, the log output from this task does not need to be displayed to the user.\n *\n * In VS Code, the Metals "Output channel" is not toggled when this flag is true.\n */\n quietLogs?: boolean;\n /** Time that has elapsed since the begging of the task. */\n secondsElapsed?: number;\n}\n')),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Response"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsSlowTaskResponse")," defined as follows")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsSlowTaskResult {\n /**\n * If true, cancel the running task.\n * If false, the user dismissed the dialogue but want to\n * continue running the task.\n */\n cancel: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsstatus"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/status")),(0,o.kt)("p",null,"The Metals status notification is sent from the server to the client to notify\nabout non-critical and non-actionable events that are happening in the server.\nMetals status notifications are a complement to ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessage")," and\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),". Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"window/logMessage"),", status notifications should\nalways be visible in the user interface. Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessage"),", status\nnotifications are not critical meaning that they should not demand too much\nattention from the user."),(0,o.kt)("p",null,"In general, Metals uses status notifications to update the user about ongoing\nevents in the server such as batch compilation in the build server or when a\nsuccessful connection was established with the build server."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/XX9CLRH.gif",alt:"Metals status bar"})),(0,o.kt)("p",null,'The "\ud83d\ude80 Imported build" and "\ud83d\udd04 Compiling explorer" messages at the bottom of\nthe window are ',(0,o.kt)("inlineCode",{parentName:"p"},"metals/status")," notifications."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/status")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsStatusParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsStatusParams {\n /** The text to display in the status bar. */\n text: string;\n /** If true, show the status bar. */\n show?: boolean;\n /** If true, hide the status bar. */\n hide?: boolean;\n /** If set, display this message when user hovers over the status bar. */\n tooltip?: string;\n /** If set, execute this command when the user clicks on the status bar item. */\n command?: string;\n}\n")),(0,o.kt)("h3",{id:"metalsdidfocustextdocument"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/didFocusTextDocument")),(0,o.kt)("p",null,"The Metals did focus notification is sent from the client to the server when the\neditor changes focus to a new text document. Unlike ",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/didOpen"),", the\ndid focus notification is sent even when the text document is already open."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/XjTtAZK.gif",alt:"Metals did focus"})),(0,o.kt)("p",null,"Observe that the compilation error appears as soon as ",(0,o.kt)("inlineCode",{parentName:"p"},"UserTest.scala")," is\nfocused even if the text document was already open before. The LSP\n",(0,o.kt)("inlineCode",{parentName:"p"},"textDocument/didOpen")," notification is only sent the first time a document so it\nis not possible for the language server to re-trigger compilation when moves\nfocus back to ",(0,o.kt)("inlineCode",{parentName:"p"},"UserTest.scala")," that depends on APIs defined in ",(0,o.kt)("inlineCode",{parentName:"p"},"User.scala"),"."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/didFocusTextDocument")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"string"),", the URI of the document where the focused was moved to.")),(0,o.kt)("h3",{id:"metalsexecuteclientcommand"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/executeClientCommand")),(0,o.kt)("p",null,"The Metals execute client command is sent from the server to the client to\ntrigger an action inside the editor. This notification is a copy of the\n",(0,o.kt)("inlineCode",{parentName:"p"},"workspace/executeCommand")," except"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"execute client command is a notification, not a request"),(0,o.kt)("li",{parentName:"ul"},"execute client command is initiated from the server, not the client")),(0,o.kt)("p",null,"See ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#metals-client-commands"},"Metals client\ncommands"),"\nfor the list of supported client commands."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/executeClientCommand")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"ExecuteCommandParams"),", as defined in LSP.")),(0,o.kt)("h3",{id:"metalsinputbox"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/inputBox")),(0,o.kt)("p",null,"The Metals input box request is sent from the server to the client to let the\nuser provide a string value for a given prompt. Unlike\n",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),", the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," request allows the user to\nprovide a custom response instead of picking a pre-selected value."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/inputBox")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsInputBoxParams")," defined as follows. Note, matches\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#InputBoxOptions"},(0,o.kt)("inlineCode",{parentName:"a"},"InputBoxOptions")),"\nin the Visual Studio Code API:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsInputBoxParams {\n /**\n * The value to prefill in the input box.\n */\n value?: string;\n /**\n * The text to display underneath the input box.\n */\n prompt?: string;\n /**\n * An optional string to show as place holder in the input box to guide the user what to type.\n */\n placeHolder?: string;\n /**\n * Set to `true` to show a password prompt that will not show the typed value.\n */\n password?: boolean;\n /**\n * Set to `true` to keep the input box open when focus moves to another part of the editor or to another window.\n */\n ignoreFocusOut?: boolean;\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsInputBoxResult")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsInputBoxResult {\n value?: string;\n cancelled?: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsquickpick"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/quickPick")),(0,o.kt)("p",null,"The Metals quick pick request is sent from the server to the client to let the\nuser provide a string value by picking one out of a number of given options. It\nis similar to ",(0,o.kt)("inlineCode",{parentName:"p"},"window/showMessageRequest"),", but the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/quickPick")," request\nhas richer parameters, that can be used to filter items to pick, like\n",(0,o.kt)("inlineCode",{parentName:"p"},"description")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"detail"),"."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/quickPick")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsQuickInputParams")," defined as follows. It partially matches\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#QuickPickOptions"},(0,o.kt)("inlineCode",{parentName:"a"},"QuickPickOptions")),"\nin the Visual Studio Code API, but it also contains ",(0,o.kt)("inlineCode",{parentName:"li"},"items")," of\n",(0,o.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/api/references/vscode-api#QuickPickItem"},(0,o.kt)("inlineCode",{parentName:"a"},"MetalsQuickPickItem")),",\nwhich, in it's turn, partially matches ",(0,o.kt)("inlineCode",{parentName:"li"},"QuickPickItem"),", but these interfaces\ndo not contain options for picking many items:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsQuickPickParams {\n /**\n * An array of items that can be selected from.\n */\n items: MetalsQuickPickItem[];\n /**\n * An optional flag to include the description when filtering the picks.\n */\n matchOnDescription?: boolean;\n /**\n * An optional flag to include the detail when filtering the picks.\n */\n matchOnDetail?: boolean;\n /**\n * An optional string to show as place holder in the input box to guide the user what to pick on.\n */\n placeHolder?: string;\n /**\n * Set to `true` to keep the picker open when focus moves to another part of the editor or to another window.\n */\n ignoreFocusOut?: boolean;\n}\n\nexport interface MetalsQuickPickItem {\n /**\n * An id for this items that should be return as a result of the picking.\n */\n id: string;\n /**\n * A human readable string which is rendered prominent.\n */\n label: string;\n /**\n * A human readable string which is rendered less prominent.\n */\n description?: string;\n /**\n * A human readable string which is rendered less prominent.\n */\n detail?: string;\n /**\n * Always show this item.\n */\n alwaysShow?: boolean;\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"MetalsQuickPickResult")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"export interface MetalsQuickPickResult {\n itemId?: string;\n cancelled?: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalswindowstatedidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/windowStateDidChange")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/windowStateDidChange")," notification is sent from the client to the\nserver to indicate whether the editor application window is focused or not. When\nthe editor window is not focused, Metals tries to avoid triggering expensive\ncomputation in the background such as compilation."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/windowStateDidChange")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"WindowStateDidChangeParams")," defined as follows:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface WindowStateDidChangeParams( {\n /** If true, the editor application window is focused. False, otherwise. */\n focused: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsopenwindow"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/openWindow")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"metals/openWindow")," params are used with the New Scala Project\nfunctionality. After the new project has been created, if the editor has the\nability to open the project in a new window then these params are used with the\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals-open-folder")," command."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface MetalsOpenWindowParams {\n /** Location of the newly created project. */\n uri: string;\n /** Whether or not to open the project in a new window. */\n openNewWindow: boolean;\n}\n")),(0,o.kt)("h3",{id:"metalsfindtextindependencyjars"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/findTextInDependencyJars")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"FindTextInDependencyJars")," request is sent from the client to the server to perform a search though files in the classpath\nincluding binary and sources jars. In response it returns a standard list of ",(0,o.kt)("inlineCode",{parentName:"p"},"Location")," from the ",(0,o.kt)("a",{parentName:"p",href:"https://microsoft.github.io/language-server-protocol/specification#location"},"LSP spec"),"."),(0,o.kt)("p",null,"In case if this endpoint was called with empty ",(0,o.kt)("inlineCode",{parentName:"p"},"query.pattern")," or empty ",(0,o.kt)("inlineCode",{parentName:"p"},"options.include")," server sends ",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#metalsinputbox"},(0,o.kt)("inlineCode",{parentName:"a"},"metals/inputBox")),"\nrequest to the client to obtain these values."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Request"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/findTextInDependecyJars")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"FindTextInDependencyJarsRequest")," defined as follows.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"/**\n * Currenly, only `pattern` field is used for search.\n * See: https://github.com/scalameta/metals/issues/3234\n */\ninterface TextSearchQuery {\n /**\n * The text pattern to search for.\n */\n pattern?: string;\n /**\n * Whether or not `pattern` should be interpreted as a regular expression.\n */\n isRegExp?: boolean;\n /**\n * Whether or not the search should be case-sensitive.\n */\n isCaseSensitive?: boolean;\n /**\n * Whether or not to search for whole word matches only.\n */\n isWordMatch?: boolean;\n}\n\ninterface FindTextInFilesOptions {\n /** Include file filter. Example: `*.conf` */\n include?: string;\n /** Exclude file filter. Example: `*.conf` */\n exclude?: string;\n}\n\ninterface FindTextInDependencyJarsRequest(\n options?: FindTextInFilesOptions;\n query: TextSearchQuery\n)\n")),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Response"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"result: ",(0,o.kt)("inlineCode",{parentName:"li"},"Location[]"))),(0,o.kt)("h3",{id:"metalsdoctorvisibilitydidchange"},(0,o.kt)("inlineCode",{parentName:"h3"},"metals/doctorVisibilityDidChange")),(0,o.kt)("p",null,"When the client opens the doctor view, it will send in ",(0,o.kt)("inlineCode",{parentName:"p"},"visible: true")," to the\nserver and then ",(0,o.kt)("inlineCode",{parentName:"p"},"visible: false")," when the doctor view is closed. This will\nensure that the doctor checks aren't calculated on the server side when they\naren't needed to since they won't be seen by the client anyways."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Notification"),":"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"method: ",(0,o.kt)("inlineCode",{parentName:"li"},"metals/doctorVisibilityDidChange")),(0,o.kt)("li",{parentName:"ul"},"params: ",(0,o.kt)("inlineCode",{parentName:"li"},"DoctorVisibilityDidChangeParams"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ts"},"interface DoctorVisibilityDidChangeParams {\n visible: boolean;\n}\n")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/291a747b.69c7a2cc.js b/assets/js/291a747b.0b222975.js similarity index 59% rename from assets/js/291a747b.69c7a2cc.js rename to assets/js/291a747b.0b222975.js index 5b5f2940390..be08237dd1c 100644 --- a/assets/js/291a747b.69c7a2cc.js +++ b/assets/js/291a747b.0b222975.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7205],{6116:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/18","page":18,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/17","nextPage":"/metals/blog/page/19","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7205],{6116:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/18","page":18,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/17","nextPage":"/metals/blog/page/19","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2c5862c4.c2991341.js b/assets/js/2c5862c4.861d2927.js similarity index 59% rename from assets/js/2c5862c4.c2991341.js rename to assets/js/2c5862c4.861d2927.js index 5b22c58d34b..2871b376a8c 100644 --- a/assets/js/2c5862c4.c2991341.js +++ b/assets/js/2c5862c4.861d2927.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4019],{9499:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/37","page":37,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/36","nextPage":"/metals/blog/page/38","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4019],{9499:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/37","page":37,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/36","nextPage":"/metals/blog/page/38","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/2e1ac853.12d930f3.js b/assets/js/2e1ac853.93892216.js similarity index 59% rename from assets/js/2e1ac853.12d930f3.js rename to assets/js/2e1ac853.93892216.js index f3e15ec0158..04dd9dd76a4 100644 --- a/assets/js/2e1ac853.12d930f3.js +++ b/assets/js/2e1ac853.93892216.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2041],{5023:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/20","page":20,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/19","nextPage":"/metals/blog/page/21","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2041],{5023:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/20","page":20,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/19","nextPage":"/metals/blog/page/21","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/35db43ad.fee12cbb.js b/assets/js/35db43ad.fee12cbb.js new file mode 100644 index 00000000000..789d9627be1 --- /dev/null +++ b/assets/js/35db43ad.fee12cbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[366],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=l.createContext({}),m=function(t){var e=l.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},p=function(t){var e=m(t.components);return l.createElement(o.Provider,{value:e},t.children)},u="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,o=t.parentName,p=s(t,["components","mdxType","originalType","parentName"]),u=m(a),c=r,k=u["".concat(o,".").concat(c)]||u[c]||h[c]||i;return a?l.createElement(k,n(n({ref:e},p),{},{components:a})):l.createElement(k,n({ref:e},p))}));function k(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=c;var s={};for(var o in e)hasOwnProperty.call(e,o)&&(s[o]=e[o]);s.originalType=t,s[u]="string"==typeof t?t:r,n[1]=s;for(var m=2;m{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>s,metadata:()=>m,toc:()=>u});var l=a(7462),r=a(3366),i=(a(7294),a(3905)),n=["components"],s={author:"Katarzyna Marek",title:"Metals v1.1.0 - Silver",authorImageURL:"https://github.com/kasiaMarek.png"},o=void 0,m={permalink:"/metals/blog/2023/10/17/silver",source:"@site/blog/2023-10-17-silver.md",title:"Metals v1.1.0 - Silver",description:"We're happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting.",date:"2023-10-17T00:00:00.000Z",formattedDate:"October 17, 2023",tags:[],readingTime:11.3,hasTruncateMarker:!1,authors:[{name:"Katarzyna Marek",imageURL:"https://github.com/kasiaMarek.png"}],frontMatter:{author:"Katarzyna Marek",title:"Metals v1.1.0 - Silver",authorImageURL:"https://github.com/kasiaMarek.png"},nextItem:{title:"Metals v1.0.1 - Silver",permalink:"/metals/blog/2023/08/28/silver"}},p={authorsImageUrls:[void 0]},u=[{value:"TL;DR",id:"tldr",level:2},{value:"New Scala versions support",id:"new-scala-versions-support",level:2},{value:"Support for Scala 3.3.1",id:"support-for-scala-331",level:4},{value:"Support for Scala 2.13.12",id:"support-for-scala-21312",level:4},{value:"Build server connection status",id:"build-server-connection-status",level:2},{value:"Enable run code lens for Mill build server",id:"enable-run-code-lens-for-mill-build-server",level:2},{value:"Convert single line comments to multiline",id:"convert-single-line-comments-to-multiline",level:2},{value:"Detect project root",id:"detect-project-root",level:2},{value:"Error reports in metals doctor",id:"error-reports-in-metals-doctor",level:2},{value:"Show bloop errors",id:"show-bloop-errors",level:2},{value:"Changes for plugin authors",id:"changes-for-plugin-authors",level:2},{value:"Build server status",id:"build-server-status",level:4},{value:"Doctor results v5",id:"doctor-results-v5",level:4},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.1.0 (2023-10-17)",id:"v110-2023-10-17",level:2}],h={toc:u},c="wrapper";function k(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(c,(0,l.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"We're happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting."),(0,i.kt)("table",null,(0,i.kt)("tbody",null,(0,i.kt)("tr",null,(0,i.kt)("td",null,"Commits since last release"),(0,i.kt)("td",{align:"center"},"114")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Merged PRs"),(0,i.kt)("td",{align:"center"},"104")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Contributors"),(0,i.kt)("td",{align:"center"},"13")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Closed issues"),(0,i.kt)("td",{align:"center"},"32")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"New features"),(0,i.kt)("td",{align:"center"},"2")))),(0,i.kt)("p",null,"For full details: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/60?closed=1"},"https://github.com/scalameta/metals/milestone/60?closed=1")),(0,i.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,i.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,i.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from contributors from the community."),(0,i.kt)("h2",{id:"tldr"},"TL;DR"),(0,i.kt)("p",null,"Check out ",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#new-scala-versions-support"},"New Scala versions support")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#build-server-status"},"Build server status")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#enable-run-code-lens-for-Mill-build-server"},"Enable run code lens for Mill build server")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#convert-single-line-comments-to-multiline"},"Convert single line comments to multiline")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#detect-project-root"},"Detect project root")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#error-reports-in-metals-doctor"},"Error reports in metals doctor")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#show-bloop-errors"},"Show bloop errors")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#changes-for-plugin-authors"},"Changes for plugin authors"))),(0,i.kt)("h2",{id:"new-scala-versions-support"},"New Scala versions support"),(0,i.kt)("h4",{id:"support-for-scala-331"},"Support for Scala 3.3.1"),(0,i.kt)("p",null,"Scala 3.3.1 is a new version of the Scala 3 LTS and it adds support for JDK 16 records in Java sources."),(0,i.kt)("p",null,"For more information about the release take a look at\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/lampepfl/dotty/releases/tag/3.3.1"},"https://github.com/lampepfl/dotty/releases/tag/3.3.1")),(0,i.kt)("h4",{id:"support-for-scala-21312"},"Support for Scala 2.13.12"),(0,i.kt)("p",null,"The main improvement of Scala 2.13.12 are actionable diagnostics. They are compiler suggested fixes for some errors and warnings. Actionable diagnostics are available in metals as code actions coming directly from the compiler."),(0,i.kt)("p",null,"For more information about the release take a look at\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scala/scala/releases/tag/v2.13.12"},"https://github.com/scala/scala/releases/tag/v2.13.12")),(0,i.kt)("h2",{id:"build-server-connection-status"},"Build server connection status"),(0,i.kt)("p",null,"Since the previous release metals detects and reports when the build server stops responding. Over the last months this feature was stabilized and the information about the build server connection is now visible in the status bar. For clients that don't support this status bar yet, the error message will be displayed as before."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/26606662/274277861-de46ff62-db71-4990-ba1d-bfaaadf03499.png",alt:"bsp-status-conn"}),"\n",(0,i.kt)("em",{parentName:"p"},"Build server connection status in VSCode, when metals is successfully connected to ",(0,i.kt)("inlineCode",{parentName:"em"},"sbt")," build server.")),(0,i.kt)("p",null,"If you are a maintainer of a metals' client and want to know how to add support for build server status see ",(0,i.kt)("a",{parentName:"p",href:"#changes-for-clients"},"Changes for clients"),"."),(0,i.kt)("h2",{id:"enable-run-code-lens-for-mill-build-server"},"Enable run code lens for Mill build server"),(0,i.kt)("p",null,"Thanks to ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"Tomasz Godzik")," now we have run code lens when using Mill build server. As a reminder, it's possible to start using it by running ",(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Switch build server")," command for a Mill project."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/5drObNP.gif",alt:"mill-run-lens"})),(0,i.kt)("h2",{id:"convert-single-line-comments-to-multiline"},"Convert single line comments to multiline"),(0,i.kt)("p",null,"Thanks to ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/ghostbuster91"},"Kasper Kondzielski")," we have a new code action that converts a block of single line comments into a multiline comment. "),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/tu3B25s.gif",alt:"convert-to-multiline"})),(0,i.kt)("h2",{id:"detect-project-root"},"Detect project root"),(0,i.kt)("p",null,"Sometimes your Scala project root is not in the same folder that you open your editor in. Now metals will also detect the Scala project root when it is a child of the workspace/workspace folder root."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},". *workspace root*\n\u251c\u2500\u2500 scalaProject *detected project root*\n\u2502 \u251c\u2500\u2500 .sbt\n\u2502 \u251c\u2500\u2500 src/main/scala\n\u2502 \u2502 \u251c\u2500\u2500 Main.scala\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 someOtherProject\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 .gitignore\n\u2514\u2500\u2500 ...\n")),(0,i.kt)("h2",{id:"error-reports-in-metals-doctor"},"Error reports in metals doctor"),(0,i.kt)("p",null,"Error reports are now visible in the metals doctor to help users diagnose the cause of any potential issue. Previously, they would only exist in the ",(0,i.kt)("inlineCode",{parentName:"p"},".metals/.reports")," folder."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/26606662/270966990-86cbd199-8621-4d04-a4ae-41f4bb598668.gif",alt:"show-error-reports"})),(0,i.kt)("h2",{id:"show-bloop-errors"},"Show bloop errors"),(0,i.kt)("p",null,"Before this release Bloop build server errors would only be logged silently into ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.log")," and the Metals output. Now for the sake of visibility Bloop errors are also shown to the users in form of error messages. The message can be dismissed for the current session of Metals or you can turn off all messages in a workspace."),(0,i.kt)("h2",{id:"changes-for-plugin-authors"},"Changes for plugin authors"),(0,i.kt)("h4",{id:"build-server-status"},"Build server status"),(0,i.kt)("p",null,"We added ",(0,i.kt)("inlineCode",{parentName:"p"},"bspStatusBarProvider")," field to initialization parameters. Similarly to ",(0,i.kt)("inlineCode",{parentName:"p"},"statusBarProvider")," it can have one of the following values: ",(0,i.kt)("inlineCode",{parentName:"p"},'"on"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"off"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"log-message"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"show-message"')," (default)."),(0,i.kt)("p",null,"When ",(0,i.kt)("inlineCode",{parentName:"p"},"bspStatusBarProvider")," is set to ",(0,i.kt)("inlineCode",{parentName:"p"},'"on"'),", the build server status is send via ",(0,i.kt)("inlineCode",{parentName:"p"},"metals/status")," with new field ",(0,i.kt)("inlineCode",{parentName:"p"},'"statusType"')," set to ",(0,i.kt)("inlineCode",{parentName:"p"},'"bsp"'),"."),(0,i.kt)("p",null,"New fields in ",(0,i.kt)("inlineCode",{parentName:"p"},"MetalsStatusParams"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"statusType"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},'"bsp"')," for build server status"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},'"metals"')," for metals status (default)"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"level")," - severity level of the message, possible values: ",(0,i.kt)("inlineCode",{parentName:"li"},'"info"'),", ",(0,i.kt)("inlineCode",{parentName:"li"},'"warn"'),", ",(0,i.kt)("inlineCode",{parentName:"li"},'"error"')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"commandTooltip")," - command tooltip, which can be appended to the status tooltip if the status bar supports commands")),(0,i.kt)("p",null,"For more details refer to the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5660"},"PR"),"."),(0,i.kt)("h4",{id:"doctor-results-v5"},"Doctor results v5"),(0,i.kt)("p",null,"New ",(0,i.kt)("inlineCode",{parentName:"p"},"errorReports")," field in ",(0,i.kt)("inlineCode",{parentName:"p"},"DoctorFolderResults")," containing an array of ",(0,i.kt)("inlineCode",{parentName:"p"},"ErrorReportInfo"),", which has the following fields:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"name")," string - display name of the error,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"timestamp")," long - timestamp of the report creation date,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"uri")," string - error report file uri,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buildTarget")," nullable string - optional build target that the error is associated with,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"shortSummary")," string - short error summary,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"errorReportType"),' string - one of "metals", "metals-full", "bloop".\nFor more details refer to the ',(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5683"},"PR"),".")),(0,i.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bugfix: incorrect docstring completions when not directly over definition (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: don't use cache directory when incorrectly resolved path (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: skip empty lines when calculating indentation for auto import (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: update ranges on Scala CLI actionable diagnostics for files with non-saved changes (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/LaurenceWarne"},"LaurenceWarne"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: correctly choose the folder to use for a command (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: extract member with associated comments (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle EOF in java completions (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: workaround for missing span in reference to an extension method defined in the companion object (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: automatically calculate last supported versions for semanticdb (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: escape special chars in test names (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: add ",(0,i.kt)("inlineCode",{parentName:"li"},"moduleClass")," imported symbols in ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexedContext")," (fix for insert type annotation) (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix resolving main class/ test suite for multi-root projects (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: wait longer to connect to build tools other than Bloop (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: don't create service for folders with non-Scala projects (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: semantic tokens for multiline strings in Scala3 worksheets (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: incorrect docstring on parameters (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: trim hover body (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"feature: user configuration per workspace folder (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: named args completions with default values (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: exhaustive match on stale symbols (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix docstring regex in semantic highlighting (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add timeout to fix java version for sbt request (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},'bugfix: fix reporting "no response error" after laptop in sleep mode (',(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: match completions for type aliases in Scala 3 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle created build server config before all content written (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: only log mtgas resolve messages on resolution (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: dependency completions with double colon before version (using directives) (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: semantic highlighting in worksheets starting with an empty line (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: don't read file for InteractiveSemanticdbdb if it doesn't exist (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")),(0,i.kt)("h2",{id:"contributors"},"Contributors"),(0,i.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.1..v1.1.0\n 34 Katarzyna Marek\n 24 Scalameta Bot\n 22 Tomasz Godzik\n 10 Jakub Ciesluk\n 6 dependabot[bot]\n 4 rochala\n 4 scalameta-bot\n 4 tgodzik\n 2 Laurence Warne\n 1 Chris Kipp\n 1 Ethan Atkins\n 1 Jack Koenig\n 1 Kasper Kondzielski\n")),(0,i.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,i.kt)("h2",{id:"v110-2023-10-17"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.1.0"},"v1.1.0")," (2023-10-17)"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.1...v1.1.0"},"Full Changelog")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bugfix: add user config promise\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5751"},"#","5751"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Bump Scalameta to 4.8.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5753"},"#","5753"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Don't read file for InteractiveSemanticdbdb if it doesn't exist\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5749"},"#","5749"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Semantic highlighting in worksheets starting with empty line\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5746"},"#","5746"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Dependency completions with double colon before version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5724"},"#","5724"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"docs: Move acknowledgements/team to the website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5747"},"#","5747"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/ckipp01"},"ckipp01"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.2-jre to 32.1.3-jre\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5741"},"#","5741"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.10.Final to 3.8.11.Final\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5743"},"#","5743"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.2 to 9.22.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5742"},"#","5742"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: Only log messages on resolution\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5740"},"#","5740"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Add error reports info to metals doctor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5683"},"#","5683"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle created build server config before all content written\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5734"},"#","5734"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: match completions for type aliases scala 3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5714"},"#","5714"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: hang on ",(0,i.kt)("inlineCode",{parentName:"li"},"initialize"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5735"},"#","5735"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},'bugfix: fix reporting "no response error" after laptop in sleep mode\n',(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5716"},"#","5716"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add timeout to fix java version for sbt request\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5715"},"#","5715"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Fix docstring regex in semantic highlighting\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5729"},"#","5729"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: exhaustive match on stale symbols\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5733"},"#","5733"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update metaconfig-core from 0.11.1 to 0.12.0\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5719"},"#","5719"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Update Scalameta to 4.8.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5681"},"#","5681"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Named args completions with default values\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5657"},"#","5657"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update bsp4j from 2.1.0-M5 to 2.1.0-M7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5718"},"#","5718"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"User configuration per workspace folder\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5709"},"#","5709"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Try to fix Mill flaky test\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5661"},"#","5661"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Fix completions tests after a new artifact starting with io.circ showed up\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5723"},"#","5723"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update ammonite-util from 3.0.0-M0-55-8ef21714 to 3.0.0-M0-56-1bcbe7f6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5721"},"#","5721"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.3 to 3.24.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5720"},"#","5720"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.4 to 0.11.5\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5722"},"#","5722"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: show bsp as connected after the first message from build server\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5707"},"#","5707"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: try to fix ",(0,i.kt)("inlineCode",{parentName:"li"},"cancel-compile")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"BillLspSuite"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5713"},"#","5713"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add do not show bsp errors option\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5678"},"#","5678"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: move cancel compile test to sbt\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5711"},"#","5711"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Add and adjust test according to changes in dotty\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5710"},"#","5710"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: trim hover body\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5694"},"#","5694"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Incorrect docstring on parameters\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5656"},"#","5656"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Update ammonite to the newest snaphot\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5697"},"#","5697"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens for multiline strings in Scala3 worksheets\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5691"},"#","5691"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: don't create service for folders w/ non-Scala projects\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5562"},"#","5562"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: cancel current request in batched functions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5432"},"#","5432"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: fix ",(0,i.kt)("inlineCode",{parentName:"li"},"ScalaCliSuite.connecting-scalacli"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5698"},"#","5698"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: add debug logs to server liveness monitor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5693"},"#","5693"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/plugin-client-redirects from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5703"},"#","5703"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump coursier/setup-action from 1.3.3 to 1.3.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5701"},"#","5701"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @easyops-cn/docusaurus-search-local from 0.35.0 to 0.36.0 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5704"},"#","5704"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump actions/checkout from 3 to 4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5702"},"#","5702"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/preset-classic from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5705"},"#","5705"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/core from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5706"},"#","5706"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Wait longer to connect to build tools other than Bloop\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5696"},"#","5696"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix resolving main class/ test suite for multi-root projects\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5596"},"#","5596"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"docs: Document AnyVal as not supported in worksheets\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5695"},"#","5695"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: add ",(0,i.kt)("inlineCode",{parentName:"li"},"moduleClass")," imported symbols in ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexedContext"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5690"},"#","5690"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: move bsp responsiveness into status\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5660"},"#","5660"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update interface from 1.0.18 to 1.0.19\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5688"},"#","5688"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: escape special chars in test names\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5676"},"#","5676"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Add code action to convert single line comment into multiline comment\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5633"},"#","5633"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/ghostbuster91"},"ghostbuster91"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Make sure we are using latest known scalameta version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5675"},"#","5675"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: Automatically calculate last supported versions for semanticdb\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5671"},"#","5671"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Fix nightly CI\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5673"},"#","5673"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.6 to 2.1.7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5635"},"#","5635"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.3 to 0.11.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5666"},"#","5666"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: auto detect project root\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5576"},"#","5576"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: workaround for missing span in reference to an extension method defined in the companion object\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5640"},"#","5640"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.1 to 9.22.2\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5668"},"#","5668"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update file-tree-views from 2.1.11 to 2.1.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5667"},"#","5667"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: deduplicate auto connect requests for scala-cli\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5645"},"#","5645"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Bump swoval to v2.1.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5659"},"#","5659"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/eatkins"},"eatkins"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle EOF in java completions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5644"},"#","5644"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.2 to 0.11.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5652"},"#","5652"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update munit from 1.0.0-M9 to 1.0.0-M10\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5655"},"#","5655"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update ujson from 3.1.2 to 3.1.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5653"},"#","5653"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.4 to 1.9.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5654"},"#","5654"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update munit from 1.0.0-M8 to 1.0.0-M9\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5648"},"#","5648"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.0 to 9.22.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5647"},"#","5647"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt-scalafix, scalafix-interfaces from 0.11.0 to 0.11.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5646"},"#","5646"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: extract member with associated comments\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5639"},"#","5639"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: ",(0,i.kt)("inlineCode",{parentName:"li"},"single-file-config"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5641"},"#","5641"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: have ",(0,i.kt)("inlineCode",{parentName:"li"},"Dismiss.")," remember the bsp error and don't show it again\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5631"},"#","5631"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: adjust tests for 2.13.13\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5638"},"#","5638"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.5 to 0.9.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5634"},"#","5634"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: start liveness monitor only for main bsp connection\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5608"},"#","5608"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Unignore suites related to coursier shadowing\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5626"},"#","5626"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 2.13.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5624"},"#","5624"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.2 to 3.24.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5627"},"#","5627"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt-jmh from 0.4.5 to 0.4.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5628"},"#","5628"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5620"},"#","5620"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.9 to 3.12.2\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5615"},"#","5615"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Correctly choose the folder to use for a command\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5612"},"#","5612"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.13 to 3.7.14\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5616"},"#","5616"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update bloop-launcher-core from 1.5.8 to 1.5.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5613"},"#","5613"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: log awaiting user response in BloopInstall\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5597"},"#","5597"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jackkoenig"},"jackkoenig"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: update minimum supported gradle version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5609"},"#","5609"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.2 to 9.22.0\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5605"},"#","5605"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.12 to 3.7.13\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5606"},"#","5606"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"Update ranges on Scala CLI actionable diagnostics for ",(0,i.kt)("inlineCode",{parentName:"li"},"didChange"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5487"},"#","5487"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/LaurenceWarne"},"LaurenceWarne"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5601"},"#","5601"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Fix wrapper constructor, add missing constructor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5600"},"#","5600"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Allow run in Mill BSP and remove non working test lenses\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5566"},"#","5566"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Release mtagsShared together with mtags when running single version release\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5598"},"#","5598"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: show bsp errors to the user\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5267"},"#","5267"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: skip empty lines when calculating indent for auto import\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5570"},"#","5570"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Don't use cache directory with ",(0,i.kt)("inlineCode",{parentName:"li"},"null")," in it's path\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5595"},"#","5595"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Incorrect docstring completions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5593"},"#","5593"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5587"},"#","5587"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Add release notes 1.0.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5575"},"#","5575"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36958d65.ec9defd0.js b/assets/js/36958d65.b1f5f9a8.js similarity index 59% rename from assets/js/36958d65.ec9defd0.js rename to assets/js/36958d65.b1f5f9a8.js index c73a16cd777..c15b12bf082 100644 --- a/assets/js/36958d65.ec9defd0.js +++ b/assets/js/36958d65.b1f5f9a8.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7429],{3121:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/16","page":16,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/15","nextPage":"/metals/blog/page/17","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7429],{3121:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/16","page":16,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/15","nextPage":"/metals/blog/page/17","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/404bab64.0c826d4b.js b/assets/js/404bab64.aaa341dc.js similarity index 59% rename from assets/js/404bab64.0c826d4b.js rename to assets/js/404bab64.aaa341dc.js index a2a28490cbf..fa2b56a8b2d 100644 --- a/assets/js/404bab64.0c826d4b.js +++ b/assets/js/404bab64.aaa341dc.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2240],{1681:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/54","page":54,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/53","nextPage":"/metals/blog/page/55","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2240],{1681:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/54","page":54,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/53","nextPage":"/metals/blog/page/55","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/43bfba49.fc4cfda0.js b/assets/js/43bfba49.fc4cfda0.js new file mode 100644 index 00000000000..19c98837aa7 --- /dev/null +++ b/assets/js/43bfba49.fc4cfda0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8988],{2266:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/59","page":59,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/58","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/49773175.a8e49606.js b/assets/js/49773175.a8e49606.js new file mode 100644 index 00000000000..f4f53f87f9a --- /dev/null +++ b/assets/js/49773175.a8e49606.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4100],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o=a.createContext({}),p=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,h=u["".concat(o,".").concat(d)]||u[d]||c[d]||r;return n?a.createElement(h,l(l({ref:t},m),{},{components:n})):a.createElement(h,l({ref:t},m))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:i,l[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var a=n(7462),i=n(3366),r=(n(7294),n(3905)),l=["components"],s={id:"vim",sidebar_label:"Vim",title:"Vim"},o=void 0,p={unversionedId:"editors/vim",id:"editors/vim",title:"Vim",description:"nvim-metals demo",source:"@site/target/docs/editors/vim.md",sourceDirName:"editors",slug:"/editors/vim",permalink:"/metals/docs/editors/vim",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/vim.md",tags:[],version:"current",frontMatter:{id:"vim",sidebar_label:"Vim",title:"Vim"},sidebar:"docs",previous:{title:"VS Code",permalink:"/metals/docs/editors/vscode"},next:{title:"Sublime Text",permalink:"/metals/docs/editors/sublime"}},m={},u=[{value:"Requirements",id:"requirements",level:2},{value:"nvim-metals",id:"nvim-metals",level:2},{value:"Vim alternatives",id:"vim-alternatives",level:2},{value:"Using an alternative LSP Client",id:"using-an-alternative-lsp-client",level:3},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2},{value:"Getting help",id:"getting-help",level:2}],c={toc:u},d="wrapper";function h(e){var t=e.components,n=(0,i.Z)(e,l);return(0,r.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/BglIFli.gif",alt:"nvim-metals demo"})),(0,r.kt)("p",null,"While Metals works with most LSP clients for ",(0,r.kt)("a",{parentName:"p",href:"https://www.vim.org/"},"Vim")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://neovim.io/"},"Neovim"),", we recommend using the dedicated Neovim plugin to\nget the best Metals support. Metals has many specific commands and LSP\nextensions that won't be available when not using the extension."),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,r.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,r.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,r.kt)("h2",{id:"nvim-metals"},"nvim-metals"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals"},(0,r.kt)("inlineCode",{parentName:"a"},"nvim-metals"))," Is the the dedicated\nMetals extension for the ",(0,r.kt)("a",{parentName:"p",href:"https://neovim.io/doc/user/lsp.html"},"built-in LSP\nsupport")," in Neovim."),(0,r.kt)("p",null,"To get started with installation please see the ",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals#prerequisites"},"prerequisites")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals#installation"},"installation steps"),"."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("th",null,"Version"),(0,r.kt)("th",null,"Published"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.1.0"),(0,r.kt)("td",null,"17 Oct 2023 11:43")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.1.0+1-4afaa354-SNAPSHOT"),(0,r.kt)("td",null,"17 Oct 2023 12:57")))),(0,r.kt)("p",null,"Keep in mind that by default Neovim doesn't have default mappings for the\nfunctionality you'll want like, hovers, goto definition, method signatures, etc.\nYou can find a full example configuration of these in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/39"},"example\nconfiguration"),"."),(0,r.kt)("p",null,"For a guide on all the available features in ",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals"),", refer to the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/279"},"features list"),"."),(0,r.kt)("h2",{id:"vim-alternatives"},"Vim alternatives"),(0,r.kt)("p",null,"There are multiple Vim alternatives if you're not a Neovim user. Metals did have\na Metals-specific plugin that worked with Vim,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/coc-metals"},(0,r.kt)("inlineCode",{parentName:"a"},"coc-metals")),", but it doesn't work\nwith the newest versions of Metals and is currently ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/coc-metals/issues/460"},"deprecated and\nunmaintained"),"."),(0,r.kt)("h3",{id:"using-an-alternative-lsp-client"},"Using an alternative LSP Client"),(0,r.kt)("p",null,"There are multiple other LSP clients that work with Vim. Here are a few:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/natebosch/vim-lsc/"},(0,r.kt)("inlineCode",{parentName:"a"},"natebosch/vim-lsc")),": simple installation and written in Vimscript."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/prabirshrestha/vim-lsp"},(0,r.kt)("inlineCode",{parentName:"a"},"vim-lsp")),": simple installation and written in\nVimscript."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/yegappan/lsp"},(0,r.kt)("inlineCode",{parentName:"a"},"yegappan/lsp")),": Very new and targeting\nVim9.")),(0,r.kt)("p",null,"Keep in mind that they have varying levels of LSP support, don't support Metals\nspecific commands (like build import), or Metals specific LSP extensions (like\ntree view), and you need to manage the Metals installation yourself."),(0,r.kt)("p",null,"There are two ways to install Metals yourself in order to work with an\nalternative client."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Most easily is to just use ",(0,r.kt)("a",{parentName:"li",href:"https://get-coursier.io/"},"Coursier")," to do a ",(0,r.kt)("inlineCode",{parentName:"li"},"cs\ninstall metals"),"."),(0,r.kt)("li",{parentName:"ol"},"Generating a Metals binary yourself.")),(0,r.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,r.kt)("p",null,"The Metals server places logs and other files in the ",(0,r.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,r.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,r.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,r.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,r.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,r.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,r.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,r.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,r.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,r.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"-Dmetals.client=vim-lsc")," flag is there just as a helper to match your\npotential client. So make sure it matches your client name. This line isn't\nmandatory though as your client should be able to fully be configured via\n",(0,r.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". You can read more about his\n",(0,r.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2020/07/23/configuring-a-client#initializationoptions"},"here"),"."),(0,r.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,r.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,r.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,r.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,r.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,r.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,r.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,r.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,r.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,r.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')),(0,r.kt)("h2",{id:"getting-help"},"Getting help"),(0,r.kt)("p",null,"There is an active community using Vim and Metals. Apart from ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/issues/new/choose"},"creating an\nissue")," or ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions"},"starting\na discussion")," for\n",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals")," users, you can also ask questions in our ",(0,r.kt)("inlineCode",{parentName:"p"},"#vim-users")," ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/FaVDrJegEh"},"Discord\nChannel")," or ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#scalameta:vim-users"},"Matrix\nBridge"),"."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/49773175.b9fab415.js b/assets/js/49773175.b9fab415.js deleted file mode 100644 index d79672adf9e..00000000000 --- a/assets/js/49773175.b9fab415.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4100],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>h});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o=a.createContext({}),p=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,h=u["".concat(o,".").concat(d)]||u[d]||c[d]||r;return n?a.createElement(h,l(l({ref:t},m),{},{components:n})):a.createElement(h,l({ref:t},m))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:i,l[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var a=n(7462),i=n(3366),r=(n(7294),n(3905)),l=["components"],s={id:"vim",sidebar_label:"Vim",title:"Vim"},o=void 0,p={unversionedId:"editors/vim",id:"editors/vim",title:"Vim",description:"nvim-metals demo",source:"@site/target/docs/editors/vim.md",sourceDirName:"editors",slug:"/editors/vim",permalink:"/metals/docs/editors/vim",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/vim.md",tags:[],version:"current",frontMatter:{id:"vim",sidebar_label:"Vim",title:"Vim"},sidebar:"docs",previous:{title:"VS Code",permalink:"/metals/docs/editors/vscode"},next:{title:"Sublime Text",permalink:"/metals/docs/editors/sublime"}},m={},u=[{value:"Requirements",id:"requirements",level:2},{value:"nvim-metals",id:"nvim-metals",level:2},{value:"Vim alternatives",id:"vim-alternatives",level:2},{value:"Using an alternative LSP Client",id:"using-an-alternative-lsp-client",level:3},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2},{value:"Getting help",id:"getting-help",level:2}],c={toc:u},d="wrapper";function h(e){var t=e.components,n=(0,i.Z)(e,l);return(0,r.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/BglIFli.gif",alt:"nvim-metals demo"})),(0,r.kt)("p",null,"While Metals works with most LSP clients for ",(0,r.kt)("a",{parentName:"p",href:"https://www.vim.org/"},"Vim")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://neovim.io/"},"Neovim"),", we recommend using the dedicated Neovim plugin to\nget the best Metals support. Metals has many specific commands and LSP\nextensions that won't be available when not using the extension."),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,r.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,r.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,r.kt)("h2",{id:"nvim-metals"},"nvim-metals"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals"},(0,r.kt)("inlineCode",{parentName:"a"},"nvim-metals"))," Is the the dedicated\nMetals extension for the ",(0,r.kt)("a",{parentName:"p",href:"https://neovim.io/doc/user/lsp.html"},"built-in LSP\nsupport")," in Neovim."),(0,r.kt)("p",null,"To get started with installation please see the ",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals"),"\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals#prerequisites"},"prerequisites")," and\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals#installation"},"installation steps"),"."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("th",null,"Version"),(0,r.kt)("th",null,"Published"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.0.1"),(0,r.kt)("td",null,"28 Aug 2023 14:46")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.0.1+114-a2d4ebcc-SNAPSHOT"),(0,r.kt)("td",null,"17 Oct 2023 10:32")))),(0,r.kt)("p",null,"Keep in mind that by default Neovim doesn't have default mappings for the\nfunctionality you'll want like, hovers, goto definition, method signatures, etc.\nYou can find a full example configuration of these in the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/39"},"example\nconfiguration"),"."),(0,r.kt)("p",null,"For a guide on all the available features in ",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals"),", refer to the\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/279"},"features list"),"."),(0,r.kt)("h2",{id:"vim-alternatives"},"Vim alternatives"),(0,r.kt)("p",null,"There are multiple Vim alternatives if you're not a Neovim user. Metals did have\na Metals-specific plugin that worked with Vim,\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/coc-metals"},(0,r.kt)("inlineCode",{parentName:"a"},"coc-metals")),", but it doesn't work\nwith the newest versions of Metals and is currently ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/coc-metals/issues/460"},"deprecated and\nunmaintained"),"."),(0,r.kt)("h3",{id:"using-an-alternative-lsp-client"},"Using an alternative LSP Client"),(0,r.kt)("p",null,"There are multiple other LSP clients that work with Vim. Here are a few:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/natebosch/vim-lsc/"},(0,r.kt)("inlineCode",{parentName:"a"},"natebosch/vim-lsc")),": simple installation and written in Vimscript."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/prabirshrestha/vim-lsp"},(0,r.kt)("inlineCode",{parentName:"a"},"vim-lsp")),": simple installation and written in\nVimscript."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/yegappan/lsp"},(0,r.kt)("inlineCode",{parentName:"a"},"yegappan/lsp")),": Very new and targeting\nVim9.")),(0,r.kt)("p",null,"Keep in mind that they have varying levels of LSP support, don't support Metals\nspecific commands (like build import), or Metals specific LSP extensions (like\ntree view), and you need to manage the Metals installation yourself."),(0,r.kt)("p",null,"There are two ways to install Metals yourself in order to work with an\nalternative client."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Most easily is to just use ",(0,r.kt)("a",{parentName:"li",href:"https://get-coursier.io/"},"Coursier")," to do a ",(0,r.kt)("inlineCode",{parentName:"li"},"cs\ninstall metals"),"."),(0,r.kt)("li",{parentName:"ol"},"Generating a Metals binary yourself.")),(0,r.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,r.kt)("p",null,"The Metals server places logs and other files in the ",(0,r.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,r.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,r.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,r.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,r.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,r.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,r.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,r.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,r.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,r.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"-Dmetals.client=vim-lsc")," flag is there just as a helper to match your\npotential client. So make sure it matches your client name. This line isn't\nmandatory though as your client should be able to fully be configured via\n",(0,r.kt)("inlineCode",{parentName:"p"},"InitializationOptions"),". You can read more about his\n",(0,r.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2020/07/23/configuring-a-client#initializationoptions"},"here"),"."),(0,r.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,r.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,r.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,r.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,r.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,r.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,r.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,r.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,r.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,r.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')),(0,r.kt)("h2",{id:"getting-help"},"Getting help"),(0,r.kt)("p",null,"There is an active community using Vim and Metals. Apart from ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/issues/new/choose"},"creating an\nissue")," or ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions"},"starting\na discussion")," for\n",(0,r.kt)("inlineCode",{parentName:"p"},"nvim-metals")," users, you can also ask questions in our ",(0,r.kt)("inlineCode",{parentName:"p"},"#vim-users")," ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/FaVDrJegEh"},"Discord\nChannel")," or ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.to/#/#scalameta:vim-users"},"Matrix\nBridge"),"."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4ad5693c.6f3a7d80.js b/assets/js/4ad5693c.3ac6cf58.js similarity index 79% rename from assets/js/4ad5693c.6f3a7d80.js rename to assets/js/4ad5693c.3ac6cf58.js index 21e105b52ec..e6e87b1be94 100644 --- a/assets/js/4ad5693c.6f3a7d80.js +++ b/assets/js/4ad5693c.3ac6cf58.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2859],{1277:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/6","page":6,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/5","nextPage":"/metals/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2859],{1277:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/6","page":6,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/5","nextPage":"/metals/blog/page/7","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4af6d88b.187465d9.js b/assets/js/4af6d88b.f4ad3d6c.js similarity index 59% rename from assets/js/4af6d88b.187465d9.js rename to assets/js/4af6d88b.f4ad3d6c.js index 69d0760d2bd..78402c27d55 100644 --- a/assets/js/4af6d88b.187465d9.js +++ b/assets/js/4af6d88b.f4ad3d6c.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8476],{4247:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/56","page":56,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/55","nextPage":"/metals/blog/page/57","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8476],{4247:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/56","page":56,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/55","nextPage":"/metals/blog/page/57","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/515fa385.6306d56f.js b/assets/js/515fa385.d70b2be1.js similarity index 59% rename from assets/js/515fa385.6306d56f.js rename to assets/js/515fa385.d70b2be1.js index 33c4f84d555..f5e9ba5b9d4 100644 --- a/assets/js/515fa385.6306d56f.js +++ b/assets/js/515fa385.d70b2be1.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3333],{9035:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/15","page":15,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/14","nextPage":"/metals/blog/page/16","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3333],{9035:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/15","page":15,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/14","nextPage":"/metals/blog/page/16","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/57d9d0fa.4f974089.js b/assets/js/57d9d0fa.ea08c93b.js similarity index 59% rename from assets/js/57d9d0fa.4f974089.js rename to assets/js/57d9d0fa.ea08c93b.js index af2f32df8e6..97c05007c7e 100644 --- a/assets/js/57d9d0fa.4f974089.js +++ b/assets/js/57d9d0fa.ea08c93b.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5865],{9775:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/24","page":24,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/23","nextPage":"/metals/blog/page/25","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5865],{9775:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/24","page":24,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/23","nextPage":"/metals/blog/page/25","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5980cb66.63c770ce.js b/assets/js/5980cb66.22816828.js similarity index 59% rename from assets/js/5980cb66.63c770ce.js rename to assets/js/5980cb66.22816828.js index 2df8403bf82..8b04514b8aa 100644 --- a/assets/js/5980cb66.63c770ce.js +++ b/assets/js/5980cb66.22816828.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9707],{9479:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/13","page":13,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/12","nextPage":"/metals/blog/page/14","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9707],{9479:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/13","page":13,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/12","nextPage":"/metals/blog/page/14","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/5d99d17c.cae130d2.js b/assets/js/5d99d17c.da416f4c.js similarity index 99% rename from assets/js/5d99d17c.cae130d2.js rename to assets/js/5d99d17c.da416f4c.js index 9da2771dffc..d1c739e341b 100644 --- a/assets/js/5d99d17c.cae130d2.js +++ b/assets/js/5d99d17c.da416f4c.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9820],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var o=n.createContext({}),p=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,l=e.originalType,o=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=i,h=c["".concat(o,".").concat(d)]||c[d]||m[d]||l;return a?n.createElement(h,r(r({ref:t},u),{},{components:a})):n.createElement(h,r({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=a.length,r=new Array(l);r[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:i,r[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(7462),i=a(3366),l=(a(7294),a(3905)),r=["components"],s={id:"getting-started",title:"Contributing to Metals"},o=void 0,p={unversionedId:"contributors/getting-started",id:"contributors/getting-started",title:"Contributing to Metals",description:"Whenever you are stuck or unsure, please open an issue or [ask us on",source:"@site/target/docs/contributors/getting-started.md",sourceDirName:"contributors",slug:"/contributors/getting-started",permalink:"/metals/docs/contributors/getting-started",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/contributors/getting-started.md",tags:[],version:"current",frontMatter:{id:"getting-started",title:"Contributing to Metals"},sidebar:"docs",previous:{title:"Project Goals",permalink:"/metals/docs/contributors/project-goals"},next:{title:"Contributing to the website",permalink:"/metals/docs/contributors/updating-website"}},u={},c=[{value:"Requirements",id:"requirements",level:2},{value:"Project structure",id:"project-structure",level:2},{value:"Related projects",id:"related-projects",level:2},{value:"Common development workflow",id:"common-development-workflow",level:2},{value:"Commit messages",id:"commit-messages",level:2},{value:"Debugging through logging",id:"debugging-through-logging",level:3},{value:"Classic debugging",id:"classic-debugging",level:3},{value:"Unit tests",id:"unit-tests",level:2},{value:"Manually testing an LspSuite",id:"manually-testing-an-lspsuite",level:3},{value:"Cross tests",id:"cross-tests",level:2},{value:"Manual tests",id:"manual-tests",level:2},{value:"Visual Studio Code",id:"visual-studio-code",level:3},{value:"Vim/Neovim",id:"vimneovim",level:3},{value:"Workspace logs",id:"workspace-logs",level:2},{value:"JSON-RPC trace",id:"json-rpc-trace",level:2},{value:"JVM Debugging",id:"jvm-debugging",level:2},{value:"Updating build tool launcher/wrappers",id:"updating-build-tool-launcherwrappers",level:2},{value:"Updating sbt-launcher",id:"updating-sbt-launcher",level:3},{value:"Updating maven wrappers",id:"updating-maven-wrappers",level:3},{value:"Git hooks",id:"git-hooks",level:2}],m={toc:c},d="wrapper";function h(e){var t=e.components,a=(0,i.Z)(e,r);return(0,l.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Whenever you are stuck or unsure, please open an issue or ",(0,l.kt)("a",{parentName:"p",href:"https://discord.gg/DwTc8xbNDd"},"ask us on\nDiscord")," or ",(0,l.kt)("a",{parentName:"p",href:"https://matrix.to/#/#scalameta:metals-contributors"},"on our Matrix\nbridge"),". This project\nfollows ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/scalameta/blob/master/CONTRIBUTING.md"},"Scalameta's contribution\nguidelines"),"\nand the ",(0,l.kt)("a",{parentName:"p",href:"https://scala-lang.org/conduct/"},"Scala CoC"),"."),(0,l.kt)("h2",{id:"requirements"},"Requirements"),(0,l.kt)("p",null,"You will need the following applications installed:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Java 17, 11 or 8 - Make sure ",(0,l.kt)("inlineCode",{parentName:"li"},"JAVA_HOME")," points to a Java 17, 11 or 8 installation.\nMetals will need to build and run on ",(0,l.kt)("em",{parentName:"li"},"all of them"),", with support for 8\nprobably being dropped in the near future."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"git")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"sbt")," (for building a local version of the server)")),(0,l.kt)("h2",{id:"project-structure"},"Project structure"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metals")," the main project with sources of the Metals language server."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"mtags")," Scala version specific module used to interact with the Scala\npresentation compiler. It's a dependency of the ",(0,l.kt)("inlineCode",{parentName:"li"},"metals")," project and can\nadditionally be used by via ",(0,l.kt)("inlineCode",{parentName:"li"},"mtags-interfaces")," to support multiple Scala\nversions inside the Metals server. It's also used by other projects like\n",(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metabrowse"},"Metabrowse"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"mtags-interfaces")," - java interfaces for the presentation compiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/unit")," moderately fast-running unit tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/cross")," - tests targeting cross builds for common features such as\nhover, completions, signatures etc."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/input")," example Scala code that is used as testing data for unit tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/slow")," slow integration tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"sbt-metals")," the sbt plugin used when users are using the BSP support from\nsbt to ensure semanticDB is being produced by sbt."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"docs")," documentation markdown for the Metals website."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metals-docs")," methods used for generating documentation across multiple pages\nin ",(0,l.kt)("inlineCode",{parentName:"li"},"docs"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"website")," holds the static site configuration, style and blogs posts for the\nMetals website.")),(0,l.kt)("p",null,"Below diagram shows project structure and dependencies among modules. Note that\n",(0,l.kt)("inlineCode",{parentName:"p"},"default-")," is a ",(0,l.kt)("a",{parentName:"p",href:"https://www.scala-sbt.org/1.x/docs/Multi-Project.html#Default+root+project"},"default root project"),"\ncreated implicitly by sbt.\n",(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/oIhXd5l.png",alt:"Projects diagram"})),(0,l.kt)("h2",{id:"related-projects"},"Related projects"),(0,l.kt)("p",null,"The improvement you are looking to contribute may belong in a separate\nrepository:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals-vscode/"},"scalameta/metals-vscode"),": the\nVisual Studio Code extension for Metals."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/nvim-metals/"},"scalameta/nvim-metals"),": the Neovim\nextension for Metals using the built-in LSP support of Neovim."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalameta/"},"scalameta/scalameta"),": SemanticDB,\nparsing, tokenization."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/munit/"},"scalameta/munit"),": Test framework used in\nthe main Metals repository"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalacenter/bloop/"},"scalacenter/bloop"),": build server for\ncompilation."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scala/scala/"},"scala/scala"),": Scala 2 presentation compiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/lampepfl/dotty"},"lampepfl/dotty"),": Scala 3 presentation\ncompiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalafmt/"},"scalameta/scalafmt"),": code formatting."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalacenter/scalafix/"},"scalacenter/scalafix"),": code\nrefactoring and linting.")),(0,l.kt)("h2",{id:"common-development-workflow"},"Common development workflow"),(0,l.kt)("p",null,"Most of the time development in Metals looks like:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"do some changes"),(0,l.kt)("li",{parentName:"ul"},"write tests which check if your changes work"),(0,l.kt)("li",{parentName:"ul"},"publish Metals server locally and test changes manually")),(0,l.kt)("p",null,"When diving into part of the code without any prior knowledge it might be hard\nto comprehend what's going on and what part of the code is responsible for\nspecific behavior. There are several ways to debug Metals, but most popular are:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"debugging through logging (recommended option)"),(0,l.kt)("li",{parentName:"ul"},"classic debugging with breakpoints")),(0,l.kt)("h2",{id:"commit-messages"},"Commit messages"),(0,l.kt)("p",null,"Try to follow the\n",(0,l.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits specification"),",\nwhich means your commits should be of form:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"[optional scope]: \n\n[optional body]\n\n[optional footer(s)]\n")),(0,l.kt)("p",null,"It's important to over-communicate in your commit messages. Be thorough. It's\nimportant to ensure you outline the problem you're trying to solve, or the\nfeature you're introducing, and then explain the fix or implementation. This will\nhelp the reviewers with their review and also future contributors to get the\nfull context of your changes."),(0,l.kt)("p",null,"For example, this message can be take a form of:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"Previously, this bug was happening due to invalid handling of URIs. Now, we handle them correctly using a dedicated class.\n")),(0,l.kt)("p",null,"Ideally, each PR would only have one commit and the title with body would be the\nsame for the pull requests. However, sometimes a PR might require more changes\nand commits, in that case please try to keep them self contained, which means\neach change pertains to a specific bug or feature and can be reverted\nseparately."),(0,l.kt)("h3",{id:"debugging-through-logging"},"Debugging through logging"),(0,l.kt)("p",null,"This approach provides very quick iterations and short feedback loop.\nIt depends on placing multiple ",(0,l.kt)("inlineCode",{parentName:"p"},"pprint.log()")," calls which will log\nmessages in ",(0,l.kt)("inlineCode",{parentName:"p"},".metals.log")," file. Logged output can be watched by ",(0,l.kt)("inlineCode",{parentName:"p"},"tail -f .metals/metals.log"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},'MetalsLanguageServer.scala:1841 params: DebugSessionParams [\n targets = SingletonList (\n BuildTargetIdentifier [\n uri = "file:/HappyMetalsUser/metals/#metals/Compile"\n ]\n )\n dataKind = "scala-attach-remote"\n data = {}\n]\n')),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#workspace-logs"},"workspace logs")," for more information."),(0,l.kt)("p",null,"This approach can be used in 2 variants:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"together with ",(0,l.kt)("a",{parentName:"li",href:"#manual-tests"},"manual testing")," when it's hard to write test\nfor some changes."),(0,l.kt)("li",{parentName:"ul"},"with ",(0,l.kt)("a",{parentName:"li",href:"#unit-tests"},"unit tests"))),(0,l.kt)("h3",{id:"classic-debugging"},"Classic debugging"),(0,l.kt)("p",null,"Classic debugging is possible by the ",(0,l.kt)("a",{parentName:"p",href:"#jvm-debugging"},"JVM debugging mechanism"),".\nPublish Metals locally, open a new project and configure debug settings.\nThen you can attach IDE with opened Metals repository to the debugged instance:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"VSCode - add attach configuration to yours ",(0,l.kt)("a",{parentName:"p",href:"../editors/vscode#via-a-launchjson-configuration"},"launch.json")),(0,l.kt)("pre",{parentName:"li"},(0,l.kt)("code",{parentName:"pre"},'{\n "version": "0.2.0",\n "configurations": [\n // Attach debugger when running via:\n // `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:5005`\n {\n "type": "scala",\n "request": "attach",\n "name": "Attach debugger to Metals server",\n "buildTarget": "metals",\n "hostName": "localhost",\n "port": 5005\n }\n ]\n}\n')),(0,l.kt)("p",{parentName:"li"},"Then pick such a defined configuration and run debug."),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/ySAo6Um.png",alt:"Attach debugger"}))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"IntelliJ - Select Attach to the process and pick proper process from the list"),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/lHSl57l.png",alt:"Attach to the process"})))),(0,l.kt)("h2",{id:"unit-tests"},"Unit tests"),(0,l.kt)("p",null,"To run the unit tests open an sbt shell and run ",(0,l.kt)("inlineCode",{parentName:"p"},"unit/test"),". However, this command will\nrun all of the unit tests declared in ",(0,l.kt)("inlineCode",{parentName:"p"},"unit")," module."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sbt\n\n# (recommended) run a specific test suite, great for edit/test/debug workflows.\n> unit/testOnly tests.DefinitionSuite\n\n# run a specific test case inside the suite.\n> unit/testOnly tests.DefinitionSuite -- \n\n# run unit tests, moderately fast but still a bit too slow for edit/test/debug workflows.\n> unit/test\n\n# run slow integration tests, takes several minutes.\n> slow/test\n\n# (not recommended) run all tests, slow. It's better to target individual projects.\n> test\n")),(0,l.kt)("h3",{id:"manually-testing-an-lspsuite"},"Manually testing an ",(0,l.kt)("inlineCode",{parentName:"h3"},"LspSuite")),(0,l.kt)("p",null,"Every test suite that extends ",(0,l.kt)("inlineCode",{parentName:"p"},"LspSuite")," generates a workspace directory under\n",(0,l.kt)("inlineCode",{parentName:"p"},"tests/unit/target/e2e//"),". To debug why a ",(0,l.kt)("inlineCode",{parentName:"p"},"LspSuite")," might be\nfailing, run the test once and then open it directly in the editor. For\nexample, for the test case ",(0,l.kt)("inlineCode",{parentName:"p"},'"deprecated-scala"')," in ",(0,l.kt)("inlineCode",{parentName:"p"},"WarningsLspSuite")," run the\nfollowing command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"code tests/unit/target/e2e/warnings/deprecated-scala\n")),(0,l.kt)("p",null,"This will open Visual Studio Code in directory with test project and it'll be\npossible to investigate why test is failing manually."),(0,l.kt)("h2",{id:"cross-tests"},"Cross tests"),(0,l.kt)("p",null,"These tests check common features such as hover, completions or signatures for\ndifferent Scala version."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sbt\n\n# run presentation compiler tests, these are the quickest tests to run.\n> cross/test\n\n run presentation compiler tests for all Scala versions.\n> +cross/test\n")),(0,l.kt)("h2",{id:"manual-tests"},"Manual tests"),(0,l.kt)("p",null,"Some functionality is best to manually test through an editor. A common workflow\nwhile iterating on a new feature is to run ",(0,l.kt)("inlineCode",{parentName:"p"},"publishLocal")," and then open an\neditor in a small demo build."),(0,l.kt)("p",null,"It's important to note that ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal")," will create artifacts only for\nthe Scala version currently used in Metals and trying to use the snapshot\nversion with any other Scala version will not work. This may be fine if you're\nworking on a generic feature that isn't using the presentation compiler\n(anything in mtags), if not then you need to publish the specific version of\nmtags that you're trying to test"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"`publishLocal; ++3.1.1 mtags/publishLocal`\n")),(0,l.kt)("p",null,"You can also do a full cross publish with ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt +publishLocal"),", however this will\ntake quite some time, so it's often better to only target the version you need."),(0,l.kt)("h3",{id:"visual-studio-code"},"Visual Studio Code"),(0,l.kt)("p",null,'Install the Metals extension from the Marketplace by searching for "Metals".'),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"vscode:extension/scalameta.metals"},"Click here to install the Metals VS Code plugin")),(0,l.kt)("p",null,'Next, update the "Server version" setting under preferences to point to the\nversion you published locally via ',(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal"),". You'll notice that version has the format\n",(0,l.kt)("inlineCode",{parentName:"p"},"-SNAPSHOT"),"."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/ogVWI1t.png",alt:"Metals server version setting"})),(0,l.kt)("p",null,"When you make changes in the Metals Scala codebase"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"publish metals binary as described above."),(0,l.kt)("li",{parentName:"ul"},'execute the "Metals: Restart server" command in Visual Studio Code (via\ncommand palette)')),(0,l.kt)("h3",{id:"vimneovim"},"Vim/Neovim"),(0,l.kt)("p",null,"If using ",(0,l.kt)("inlineCode",{parentName:"p"},"nvim-metals"),":"),(0,l.kt)("p",null,"You'll want to make sure to read the docs\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/blob/main/doc/metals.txt"},"here")," and\ntake a look at the example configuration\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/39"},"here")," if you haven't\nalready set everything up."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"publish the metals binary as described above."),(0,l.kt)("li",{parentName:"ul"},"set the ",(0,l.kt)("inlineCode",{parentName:"li"},"serverVersion")," in your ",(0,l.kt)("inlineCode",{parentName:"li"},"settings")," table that you pass in to your\nmetals config."),(0,l.kt)("li",{parentName:"ul"},"Open your workspace and trigger a ",(0,l.kt)("inlineCode",{parentName:"li"},":MetalsUpdate")," followed by a\n",(0,l.kt)("inlineCode",{parentName:"li"},":MetalsRestart"),". NOTE: that every time you publish locally you'll want to\ntrigger this again.")),(0,l.kt)("p",null,"If you are using another Vim client, write a ",(0,l.kt)("inlineCode",{parentName:"p"},"new-metals-vim")," script that builds\na new ",(0,l.kt)("inlineCode",{parentName:"p"},"metals-vim")," bootstrap script using the locally published version."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -Dmetals.client=<> \\\n org.scalameta:metals_2.13:1.0.2-SNAPSHOT \\ # double-check version here\n -r bintray:scalacenter/releases \\\n -o /usr/local/bin/metals-vim -f\n")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"NOTE")," if you're able to configure your client using initialization options,\nthen the ",(0,l.kt)("inlineCode",{parentName:"p"},"client")," property is not necessary. You can see all the options\n",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#initializationoptions"},"here"),"."),(0,l.kt)("p",null,"Finally, start Vim with the local Metals version"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"cd test-workspace # any directory you want to manually test Metals\nnew-metals-vim && vim build.sbt # remember to have the script in your $PATH\n")),(0,l.kt)("p",null,"When you make changes in the Metals Scala codebase, run ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal"),", quit\nvim and re-run ",(0,l.kt)("inlineCode",{parentName:"p"},"new-metals-vim && vim build.sbt"),"."),(0,l.kt)("h2",{id:"workspace-logs"},"Workspace logs"),(0,l.kt)("p",null,"Metals logs workspace-specific information to the\n",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/metals.log")," file."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"tail -f .metals/metals.log\n")),(0,l.kt)("p",null,"These logs contain information that may be relevant for regular users."),(0,l.kt)("h2",{id:"json-rpc-trace"},"JSON-RPC trace"),(0,l.kt)("p",null,"To see the trace of incoming/outgoing JSON communication with the text editor\nor build server, create empty files in ",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/")," or your machine cache\ndirectory."),(0,l.kt)("p",null,"However, we do not recommend using your machine cache directory because\ntrace files located there are shared between all Metals instances, hence multiple\nservers can override the same file. Using ",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/")," solves this issue and\nalso allows user to have more precise control over which metals instances log\ntheir JSON-RPC communication."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Linux and macOS\ntouch $WORKSPACE/.metals/lsp.trace.json # text editor\ntouch $WORKSPACE/.metals/bsp.trace.json # build server\ntouch $WORKSPACE/.metals/dap-server.trace.json # debug adapter\ntouch $WORKSPACE/.metals/dap-client.trace.json # debug adapter\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Windows\ntype nul > $WORKSPACE/.metals/lsp.trace.json # text editor\ntype nul > $WORKSPACE/.metals/bsp.trace.json # build server\ntype nul > $WORKSPACE/.metals/dap-server.trace.json # debug adapter\ntype nul > $WORKSPACE/.metals/dap-client.trace.json # debug adapter\n")),(0,l.kt)("p",null,"Next when you start Metals, watch the logs with ",(0,l.kt)("inlineCode",{parentName:"p"},"tail -f"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Linux and macOS\ntail -f $WORKSPACE/.metals/lsp.trace.json\n")),(0,l.kt)("p",null,"The traces are very verbose so it's recommended to delete the files if you are\nnot interested in debugging the JSON communication."),(0,l.kt)("h2",{id:"jvm-debugging"},"JVM Debugging"),(0,l.kt)("p",null,"To debug the JVM with the Metals server, add a property to your\n",(0,l.kt)("inlineCode",{parentName:"p"},"Server Properties")," with the usual Java debugging flags, making sure you have\nthe ",(0,l.kt)("inlineCode",{parentName:"p"},"quiet")," option on. It's important to remember about the flag, as the server\nuses standard input/output to communicate with the client, and the default\noutput of the debugger interferes with that."),(0,l.kt)("p",null,"This property will make your server run in debug mode on port 5005 without\nwaiting for the debugger to connect:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y\n")),(0,l.kt)("h2",{id:"updating-build-tool-launcherwrappers"},"Updating build tool launcher/wrappers"),(0,l.kt)("p",null,"Metals uses various wrappers or launchers for each build tool that it supports.\nThis makes sure that when your in a workspace for you build tool that metals is\nable to correctly launch that build tool, even if it doesn't exist on the users\n",(0,l.kt)("inlineCode",{parentName:"p"},"$PATH"),". You can see their usages in ",(0,l.kt)("inlineCode",{parentName:"p"},"BuildTool.scala"),"."),(0,l.kt)("h3",{id:"updating-sbt-launcher"},"Updating sbt-launcher"),(0,l.kt)("p",null,"The easiest way to update the sbt-launcher is with the following coursier\ncommand:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'cp "$(cs fetch org.scala-sbt:sbt-launch:)" sbt-launch.jar\n')),(0,l.kt)("p",null,"This will allow you to not have to do some of the manual steps with the launcher\nproperties file listed ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/sbt/launcher"},"here"),"."),(0,l.kt)("h3",{id:"updating-maven-wrappers"},"Updating maven wrappers"),(0,l.kt)("p",null,"For Maven we use the ",(0,l.kt)("a",{parentName:"p",href:"https://maven.apache.org/wrapper/maven-wrapper/index.html"},"Maven\nWrapper"),". In order to\nupdate this you'll want to do the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Run the ",(0,l.kt)("inlineCode",{parentName:"li"},"./bin/update-maven-wrapper.sh")," script"),(0,l.kt)("li",{parentName:"ul"},"Update the ",(0,l.kt)("inlineCode",{parentName:"li"},"def version")," in ",(0,l.kt)("inlineCode",{parentName:"li"},"MavenBuildTool.scala")," to the latest version\nthat you just updated to."),(0,l.kt)("li",{parentName:"ul"},"Run the specific maven tests and ensure they pass: ",(0,l.kt)("inlineCode",{parentName:"li"},"./bin/test.sh\n 'slow/testOnly -- tests.maven.*"))),(0,l.kt)("h2",{id:"git-hooks"},"Git hooks"),(0,l.kt)("p",null,"This git repository has a pre-push hook to run Scalafmt."),(0,l.kt)("p",null,"The CI also uses Scalafix to assert that there a no unused imports. To\nautomatically remove unused imports run ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt scalafixAll"),". We don't run Scalafix\nas a pre-push git hook since starting sbt takes a long time."))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9820],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var o=n.createContext({}),p=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,l=e.originalType,o=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=i,h=c["".concat(o,".").concat(d)]||c[d]||m[d]||l;return a?n.createElement(h,r(r({ref:t},u),{},{components:a})):n.createElement(h,r({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=a.length,r=new Array(l);r[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:i,r[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(7462),i=a(3366),l=(a(7294),a(3905)),r=["components"],s={id:"getting-started",title:"Contributing to Metals"},o=void 0,p={unversionedId:"contributors/getting-started",id:"contributors/getting-started",title:"Contributing to Metals",description:"Whenever you are stuck or unsure, please open an issue or [ask us on",source:"@site/target/docs/contributors/getting-started.md",sourceDirName:"contributors",slug:"/contributors/getting-started",permalink:"/metals/docs/contributors/getting-started",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/contributors/getting-started.md",tags:[],version:"current",frontMatter:{id:"getting-started",title:"Contributing to Metals"},sidebar:"docs",previous:{title:"Project Goals",permalink:"/metals/docs/contributors/project-goals"},next:{title:"Contributing to the website",permalink:"/metals/docs/contributors/updating-website"}},u={},c=[{value:"Requirements",id:"requirements",level:2},{value:"Project structure",id:"project-structure",level:2},{value:"Related projects",id:"related-projects",level:2},{value:"Common development workflow",id:"common-development-workflow",level:2},{value:"Commit messages",id:"commit-messages",level:2},{value:"Debugging through logging",id:"debugging-through-logging",level:3},{value:"Classic debugging",id:"classic-debugging",level:3},{value:"Unit tests",id:"unit-tests",level:2},{value:"Manually testing an LspSuite",id:"manually-testing-an-lspsuite",level:3},{value:"Cross tests",id:"cross-tests",level:2},{value:"Manual tests",id:"manual-tests",level:2},{value:"Visual Studio Code",id:"visual-studio-code",level:3},{value:"Vim/Neovim",id:"vimneovim",level:3},{value:"Workspace logs",id:"workspace-logs",level:2},{value:"JSON-RPC trace",id:"json-rpc-trace",level:2},{value:"JVM Debugging",id:"jvm-debugging",level:2},{value:"Updating build tool launcher/wrappers",id:"updating-build-tool-launcherwrappers",level:2},{value:"Updating sbt-launcher",id:"updating-sbt-launcher",level:3},{value:"Updating maven wrappers",id:"updating-maven-wrappers",level:3},{value:"Git hooks",id:"git-hooks",level:2}],m={toc:c},d="wrapper";function h(e){var t=e.components,a=(0,i.Z)(e,r);return(0,l.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Whenever you are stuck or unsure, please open an issue or ",(0,l.kt)("a",{parentName:"p",href:"https://discord.gg/DwTc8xbNDd"},"ask us on\nDiscord")," or ",(0,l.kt)("a",{parentName:"p",href:"https://matrix.to/#/#scalameta:metals-contributors"},"on our Matrix\nbridge"),". This project\nfollows ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/scalameta/blob/master/CONTRIBUTING.md"},"Scalameta's contribution\nguidelines"),"\nand the ",(0,l.kt)("a",{parentName:"p",href:"https://scala-lang.org/conduct/"},"Scala CoC"),"."),(0,l.kt)("h2",{id:"requirements"},"Requirements"),(0,l.kt)("p",null,"You will need the following applications installed:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Java 17, 11 or 8 - Make sure ",(0,l.kt)("inlineCode",{parentName:"li"},"JAVA_HOME")," points to a Java 17, 11 or 8 installation.\nMetals will need to build and run on ",(0,l.kt)("em",{parentName:"li"},"all of them"),", with support for 8\nprobably being dropped in the near future."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"git")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"sbt")," (for building a local version of the server)")),(0,l.kt)("h2",{id:"project-structure"},"Project structure"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metals")," the main project with sources of the Metals language server."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"mtags")," Scala version specific module used to interact with the Scala\npresentation compiler. It's a dependency of the ",(0,l.kt)("inlineCode",{parentName:"li"},"metals")," project and can\nadditionally be used by via ",(0,l.kt)("inlineCode",{parentName:"li"},"mtags-interfaces")," to support multiple Scala\nversions inside the Metals server. It's also used by other projects like\n",(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metabrowse"},"Metabrowse"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"mtags-interfaces")," - java interfaces for the presentation compiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/unit")," moderately fast-running unit tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/cross")," - tests targeting cross builds for common features such as\nhover, completions, signatures etc."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/input")," example Scala code that is used as testing data for unit tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"tests/slow")," slow integration tests."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"sbt-metals")," the sbt plugin used when users are using the BSP support from\nsbt to ensure semanticDB is being produced by sbt."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"docs")," documentation markdown for the Metals website."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metals-docs")," methods used for generating documentation across multiple pages\nin ",(0,l.kt)("inlineCode",{parentName:"li"},"docs"),"."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"website")," holds the static site configuration, style and blogs posts for the\nMetals website.")),(0,l.kt)("p",null,"Below diagram shows project structure and dependencies among modules. Note that\n",(0,l.kt)("inlineCode",{parentName:"p"},"default-")," is a ",(0,l.kt)("a",{parentName:"p",href:"https://www.scala-sbt.org/1.x/docs/Multi-Project.html#Default+root+project"},"default root project"),"\ncreated implicitly by sbt.\n",(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/oIhXd5l.png",alt:"Projects diagram"})),(0,l.kt)("h2",{id:"related-projects"},"Related projects"),(0,l.kt)("p",null,"The improvement you are looking to contribute may belong in a separate\nrepository:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals-vscode/"},"scalameta/metals-vscode"),": the\nVisual Studio Code extension for Metals."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/nvim-metals/"},"scalameta/nvim-metals"),": the Neovim\nextension for Metals using the built-in LSP support of Neovim."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalameta/"},"scalameta/scalameta"),": SemanticDB,\nparsing, tokenization."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/munit/"},"scalameta/munit"),": Test framework used in\nthe main Metals repository"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalacenter/bloop/"},"scalacenter/bloop"),": build server for\ncompilation."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scala/scala/"},"scala/scala"),": Scala 2 presentation compiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/lampepfl/dotty"},"lampepfl/dotty"),": Scala 3 presentation\ncompiler."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalafmt/"},"scalameta/scalafmt"),": code formatting."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/scalacenter/scalafix/"},"scalacenter/scalafix"),": code\nrefactoring and linting.")),(0,l.kt)("h2",{id:"common-development-workflow"},"Common development workflow"),(0,l.kt)("p",null,"Most of the time development in Metals looks like:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"do some changes"),(0,l.kt)("li",{parentName:"ul"},"write tests which check if your changes work"),(0,l.kt)("li",{parentName:"ul"},"publish Metals server locally and test changes manually")),(0,l.kt)("p",null,"When diving into part of the code without any prior knowledge it might be hard\nto comprehend what's going on and what part of the code is responsible for\nspecific behavior. There are several ways to debug Metals, but most popular are:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"debugging through logging (recommended option)"),(0,l.kt)("li",{parentName:"ul"},"classic debugging with breakpoints")),(0,l.kt)("h2",{id:"commit-messages"},"Commit messages"),(0,l.kt)("p",null,"Try to follow the\n",(0,l.kt)("a",{parentName:"p",href:"https://www.conventionalcommits.org/en/v1.0.0/"},"conventional commits specification"),",\nwhich means your commits should be of form:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"[optional scope]: \n\n[optional body]\n\n[optional footer(s)]\n")),(0,l.kt)("p",null,"It's important to over-communicate in your commit messages. Be thorough. It's\nimportant to ensure you outline the problem you're trying to solve, or the\nfeature you're introducing, and then explain the fix or implementation. This will\nhelp the reviewers with their review and also future contributors to get the\nfull context of your changes."),(0,l.kt)("p",null,"For example, this message can be take a form of:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"Previously, this bug was happening due to invalid handling of URIs. Now, we handle them correctly using a dedicated class.\n")),(0,l.kt)("p",null,"Ideally, each PR would only have one commit and the title with body would be the\nsame for the pull requests. However, sometimes a PR might require more changes\nand commits, in that case please try to keep them self contained, which means\neach change pertains to a specific bug or feature and can be reverted\nseparately."),(0,l.kt)("h3",{id:"debugging-through-logging"},"Debugging through logging"),(0,l.kt)("p",null,"This approach provides very quick iterations and short feedback loop.\nIt depends on placing multiple ",(0,l.kt)("inlineCode",{parentName:"p"},"pprint.log()")," calls which will log\nmessages in ",(0,l.kt)("inlineCode",{parentName:"p"},".metals.log")," file. Logged output can be watched by ",(0,l.kt)("inlineCode",{parentName:"p"},"tail -f .metals/metals.log"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},'MetalsLanguageServer.scala:1841 params: DebugSessionParams [\n targets = SingletonList (\n BuildTargetIdentifier [\n uri = "file:/HappyMetalsUser/metals/#metals/Compile"\n ]\n )\n dataKind = "scala-attach-remote"\n data = {}\n]\n')),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#workspace-logs"},"workspace logs")," for more information."),(0,l.kt)("p",null,"This approach can be used in 2 variants:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"together with ",(0,l.kt)("a",{parentName:"li",href:"#manual-tests"},"manual testing")," when it's hard to write test\nfor some changes."),(0,l.kt)("li",{parentName:"ul"},"with ",(0,l.kt)("a",{parentName:"li",href:"#unit-tests"},"unit tests"))),(0,l.kt)("h3",{id:"classic-debugging"},"Classic debugging"),(0,l.kt)("p",null,"Classic debugging is possible by the ",(0,l.kt)("a",{parentName:"p",href:"#jvm-debugging"},"JVM debugging mechanism"),".\nPublish Metals locally, open a new project and configure debug settings.\nThen you can attach IDE with opened Metals repository to the debugged instance:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"VSCode - add attach configuration to yours ",(0,l.kt)("a",{parentName:"p",href:"../editors/vscode#via-a-launchjson-configuration"},"launch.json")),(0,l.kt)("pre",{parentName:"li"},(0,l.kt)("code",{parentName:"pre"},'{\n "version": "0.2.0",\n "configurations": [\n // Attach debugger when running via:\n // `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:5005`\n {\n "type": "scala",\n "request": "attach",\n "name": "Attach debugger to Metals server",\n "buildTarget": "metals",\n "hostName": "localhost",\n "port": 5005\n }\n ]\n}\n')),(0,l.kt)("p",{parentName:"li"},"Then pick such a defined configuration and run debug."),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/ySAo6Um.png",alt:"Attach debugger"}))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"IntelliJ - Select Attach to the process and pick proper process from the list"),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://imgur.com/lHSl57l.png",alt:"Attach to the process"})))),(0,l.kt)("h2",{id:"unit-tests"},"Unit tests"),(0,l.kt)("p",null,"To run the unit tests open an sbt shell and run ",(0,l.kt)("inlineCode",{parentName:"p"},"unit/test"),". However, this command will\nrun all of the unit tests declared in ",(0,l.kt)("inlineCode",{parentName:"p"},"unit")," module."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sbt\n\n# (recommended) run a specific test suite, great for edit/test/debug workflows.\n> unit/testOnly tests.DefinitionSuite\n\n# run a specific test case inside the suite.\n> unit/testOnly tests.DefinitionSuite -- \n\n# run unit tests, moderately fast but still a bit too slow for edit/test/debug workflows.\n> unit/test\n\n# run slow integration tests, takes several minutes.\n> slow/test\n\n# (not recommended) run all tests, slow. It's better to target individual projects.\n> test\n")),(0,l.kt)("h3",{id:"manually-testing-an-lspsuite"},"Manually testing an ",(0,l.kt)("inlineCode",{parentName:"h3"},"LspSuite")),(0,l.kt)("p",null,"Every test suite that extends ",(0,l.kt)("inlineCode",{parentName:"p"},"LspSuite")," generates a workspace directory under\n",(0,l.kt)("inlineCode",{parentName:"p"},"tests/unit/target/e2e//"),". To debug why a ",(0,l.kt)("inlineCode",{parentName:"p"},"LspSuite")," might be\nfailing, run the test once and then open it directly in the editor. For\nexample, for the test case ",(0,l.kt)("inlineCode",{parentName:"p"},'"deprecated-scala"')," in ",(0,l.kt)("inlineCode",{parentName:"p"},"WarningsLspSuite")," run the\nfollowing command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"code tests/unit/target/e2e/warnings/deprecated-scala\n")),(0,l.kt)("p",null,"This will open Visual Studio Code in directory with test project and it'll be\npossible to investigate why test is failing manually."),(0,l.kt)("h2",{id:"cross-tests"},"Cross tests"),(0,l.kt)("p",null,"These tests check common features such as hover, completions or signatures for\ndifferent Scala version."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"sbt\n\n# run presentation compiler tests, these are the quickest tests to run.\n> cross/test\n\n run presentation compiler tests for all Scala versions.\n> +cross/test\n")),(0,l.kt)("h2",{id:"manual-tests"},"Manual tests"),(0,l.kt)("p",null,"Some functionality is best to manually test through an editor. A common workflow\nwhile iterating on a new feature is to run ",(0,l.kt)("inlineCode",{parentName:"p"},"publishLocal")," and then open an\neditor in a small demo build."),(0,l.kt)("p",null,"It's important to note that ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal")," will create artifacts only for\nthe Scala version currently used in Metals and trying to use the snapshot\nversion with any other Scala version will not work. This may be fine if you're\nworking on a generic feature that isn't using the presentation compiler\n(anything in mtags), if not then you need to publish the specific version of\nmtags that you're trying to test"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"`publishLocal; ++3.1.1 mtags/publishLocal`\n")),(0,l.kt)("p",null,"You can also do a full cross publish with ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt +publishLocal"),", however this will\ntake quite some time, so it's often better to only target the version you need."),(0,l.kt)("h3",{id:"visual-studio-code"},"Visual Studio Code"),(0,l.kt)("p",null,'Install the Metals extension from the Marketplace by searching for "Metals".'),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"vscode:extension/scalameta.metals"},"Click here to install the Metals VS Code plugin")),(0,l.kt)("p",null,'Next, update the "Server version" setting under preferences to point to the\nversion you published locally via ',(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal"),". You'll notice that version has the format\n",(0,l.kt)("inlineCode",{parentName:"p"},"-SNAPSHOT"),"."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/ogVWI1t.png",alt:"Metals server version setting"})),(0,l.kt)("p",null,"When you make changes in the Metals Scala codebase"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"publish metals binary as described above."),(0,l.kt)("li",{parentName:"ul"},'execute the "Metals: Restart server" command in Visual Studio Code (via\ncommand palette)')),(0,l.kt)("h3",{id:"vimneovim"},"Vim/Neovim"),(0,l.kt)("p",null,"If using ",(0,l.kt)("inlineCode",{parentName:"p"},"nvim-metals"),":"),(0,l.kt)("p",null,"You'll want to make sure to read the docs\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/blob/main/doc/metals.txt"},"here")," and\ntake a look at the example configuration\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/nvim-metals/discussions/39"},"here")," if you haven't\nalready set everything up."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"publish the metals binary as described above."),(0,l.kt)("li",{parentName:"ul"},"set the ",(0,l.kt)("inlineCode",{parentName:"li"},"serverVersion")," in your ",(0,l.kt)("inlineCode",{parentName:"li"},"settings")," table that you pass in to your\nmetals config."),(0,l.kt)("li",{parentName:"ul"},"Open your workspace and trigger a ",(0,l.kt)("inlineCode",{parentName:"li"},":MetalsUpdate")," followed by a\n",(0,l.kt)("inlineCode",{parentName:"li"},":MetalsRestart"),". NOTE: that every time you publish locally you'll want to\ntrigger this again.")),(0,l.kt)("p",null,"If you are using another Vim client, write a ",(0,l.kt)("inlineCode",{parentName:"p"},"new-metals-vim")," script that builds\na new ",(0,l.kt)("inlineCode",{parentName:"p"},"metals-vim")," bootstrap script using the locally published version."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -Dmetals.client=<> \\\n org.scalameta:metals_2.13:1.1.1-SNAPSHOT \\ # double-check version here\n -r bintray:scalacenter/releases \\\n -o /usr/local/bin/metals-vim -f\n")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"NOTE")," if you're able to configure your client using initialization options,\nthen the ",(0,l.kt)("inlineCode",{parentName:"p"},"client")," property is not necessary. You can see all the options\n",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/integrations/new-editor#initializationoptions"},"here"),"."),(0,l.kt)("p",null,"Finally, start Vim with the local Metals version"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"cd test-workspace # any directory you want to manually test Metals\nnew-metals-vim && vim build.sbt # remember to have the script in your $PATH\n")),(0,l.kt)("p",null,"When you make changes in the Metals Scala codebase, run ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt publishLocal"),", quit\nvim and re-run ",(0,l.kt)("inlineCode",{parentName:"p"},"new-metals-vim && vim build.sbt"),"."),(0,l.kt)("h2",{id:"workspace-logs"},"Workspace logs"),(0,l.kt)("p",null,"Metals logs workspace-specific information to the\n",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/metals.log")," file."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"tail -f .metals/metals.log\n")),(0,l.kt)("p",null,"These logs contain information that may be relevant for regular users."),(0,l.kt)("h2",{id:"json-rpc-trace"},"JSON-RPC trace"),(0,l.kt)("p",null,"To see the trace of incoming/outgoing JSON communication with the text editor\nor build server, create empty files in ",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/")," or your machine cache\ndirectory."),(0,l.kt)("p",null,"However, we do not recommend using your machine cache directory because\ntrace files located there are shared between all Metals instances, hence multiple\nservers can override the same file. Using ",(0,l.kt)("inlineCode",{parentName:"p"},"$WORKSPACE/.metals/")," solves this issue and\nalso allows user to have more precise control over which metals instances log\ntheir JSON-RPC communication."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Linux and macOS\ntouch $WORKSPACE/.metals/lsp.trace.json # text editor\ntouch $WORKSPACE/.metals/bsp.trace.json # build server\ntouch $WORKSPACE/.metals/dap-server.trace.json # debug adapter\ntouch $WORKSPACE/.metals/dap-client.trace.json # debug adapter\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Windows\ntype nul > $WORKSPACE/.metals/lsp.trace.json # text editor\ntype nul > $WORKSPACE/.metals/bsp.trace.json # build server\ntype nul > $WORKSPACE/.metals/dap-server.trace.json # debug adapter\ntype nul > $WORKSPACE/.metals/dap-client.trace.json # debug adapter\n")),(0,l.kt)("p",null,"Next when you start Metals, watch the logs with ",(0,l.kt)("inlineCode",{parentName:"p"},"tail -f"),"."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# Linux and macOS\ntail -f $WORKSPACE/.metals/lsp.trace.json\n")),(0,l.kt)("p",null,"The traces are very verbose so it's recommended to delete the files if you are\nnot interested in debugging the JSON communication."),(0,l.kt)("h2",{id:"jvm-debugging"},"JVM Debugging"),(0,l.kt)("p",null,"To debug the JVM with the Metals server, add a property to your\n",(0,l.kt)("inlineCode",{parentName:"p"},"Server Properties")," with the usual Java debugging flags, making sure you have\nthe ",(0,l.kt)("inlineCode",{parentName:"p"},"quiet")," option on. It's important to remember about the flag, as the server\nuses standard input/output to communicate with the client, and the default\noutput of the debugger interferes with that."),(0,l.kt)("p",null,"This property will make your server run in debug mode on port 5005 without\nwaiting for the debugger to connect:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y\n")),(0,l.kt)("h2",{id:"updating-build-tool-launcherwrappers"},"Updating build tool launcher/wrappers"),(0,l.kt)("p",null,"Metals uses various wrappers or launchers for each build tool that it supports.\nThis makes sure that when your in a workspace for you build tool that metals is\nable to correctly launch that build tool, even if it doesn't exist on the users\n",(0,l.kt)("inlineCode",{parentName:"p"},"$PATH"),". You can see their usages in ",(0,l.kt)("inlineCode",{parentName:"p"},"BuildTool.scala"),"."),(0,l.kt)("h3",{id:"updating-sbt-launcher"},"Updating sbt-launcher"),(0,l.kt)("p",null,"The easiest way to update the sbt-launcher is with the following coursier\ncommand:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},'cp "$(cs fetch org.scala-sbt:sbt-launch:)" sbt-launch.jar\n')),(0,l.kt)("p",null,"This will allow you to not have to do some of the manual steps with the launcher\nproperties file listed ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/sbt/launcher"},"here"),"."),(0,l.kt)("h3",{id:"updating-maven-wrappers"},"Updating maven wrappers"),(0,l.kt)("p",null,"For Maven we use the ",(0,l.kt)("a",{parentName:"p",href:"https://maven.apache.org/wrapper/maven-wrapper/index.html"},"Maven\nWrapper"),". In order to\nupdate this you'll want to do the following:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Run the ",(0,l.kt)("inlineCode",{parentName:"li"},"./bin/update-maven-wrapper.sh")," script"),(0,l.kt)("li",{parentName:"ul"},"Update the ",(0,l.kt)("inlineCode",{parentName:"li"},"def version")," in ",(0,l.kt)("inlineCode",{parentName:"li"},"MavenBuildTool.scala")," to the latest version\nthat you just updated to."),(0,l.kt)("li",{parentName:"ul"},"Run the specific maven tests and ensure they pass: ",(0,l.kt)("inlineCode",{parentName:"li"},"./bin/test.sh\n 'slow/testOnly -- tests.maven.*"))),(0,l.kt)("h2",{id:"git-hooks"},"Git hooks"),(0,l.kt)("p",null,"This git repository has a pre-push hook to run Scalafmt."),(0,l.kt)("p",null,"The CI also uses Scalafix to assert that there a no unused imports. To\nautomatically remove unused imports run ",(0,l.kt)("inlineCode",{parentName:"p"},"sbt scalafixAll"),". We don't run Scalafix\nas a pre-push git hook since starting sbt takes a long time."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/64912a2b.a32b5afc.js b/assets/js/64912a2b.07624ced.js similarity index 59% rename from assets/js/64912a2b.a32b5afc.js rename to assets/js/64912a2b.07624ced.js index 3a70e3fbacd..7c093c0524d 100644 --- a/assets/js/64912a2b.a32b5afc.js +++ b/assets/js/64912a2b.07624ced.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3104],{3813:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/28","page":28,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/27","nextPage":"/metals/blog/page/29","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3104],{3813:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/28","page":28,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/27","nextPage":"/metals/blog/page/29","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6722346e.7e2fb2cc.js b/assets/js/6722346e.23caaa2a.js similarity index 59% rename from assets/js/6722346e.7e2fb2cc.js rename to assets/js/6722346e.23caaa2a.js index d36c821505f..83bbc1c555b 100644 --- a/assets/js/6722346e.7e2fb2cc.js +++ b/assets/js/6722346e.23caaa2a.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[833],{7489:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/26","page":26,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/25","nextPage":"/metals/blog/page/27","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[833],{7489:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/26","page":26,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/25","nextPage":"/metals/blog/page/27","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/674a37b6.8f22902a.js b/assets/js/674a37b6.014c22c9.js similarity index 59% rename from assets/js/674a37b6.8f22902a.js rename to assets/js/674a37b6.014c22c9.js index 3916909bdbb..ebd4d205787 100644 --- a/assets/js/674a37b6.8f22902a.js +++ b/assets/js/674a37b6.014c22c9.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7472],{3330:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/32","page":32,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/31","nextPage":"/metals/blog/page/33","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7472],{3330:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/32","page":32,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/31","nextPage":"/metals/blog/page/33","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6a60bac4.e63d93a5.js b/assets/js/6a60bac4.678e5615.js similarity index 79% rename from assets/js/6a60bac4.e63d93a5.js rename to assets/js/6a60bac4.678e5615.js index 29e06d62517..d980ee7173a 100644 --- a/assets/js/6a60bac4.e63d93a5.js +++ b/assets/js/6a60bac4.678e5615.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6162],{815:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/9","page":9,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/8","nextPage":"/metals/blog/page/10","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6162],{815:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/9","page":9,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/8","nextPage":"/metals/blog/page/10","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/6ed4e313.259dbea3.js b/assets/js/6ed4e313.eb2bdc64.js similarity index 79% rename from assets/js/6ed4e313.259dbea3.js rename to assets/js/6ed4e313.eb2bdc64.js index f1021cbb581..21b9a3e4a09 100644 --- a/assets/js/6ed4e313.259dbea3.js +++ b/assets/js/6ed4e313.eb2bdc64.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8607],{6711:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/7","page":7,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/6","nextPage":"/metals/blog/page/8","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8607],{6711:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/7","page":7,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/6","nextPage":"/metals/blog/page/8","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/73043cbc.a2ea6f5e.js b/assets/js/73043cbc.fd900b2a.js similarity index 59% rename from assets/js/73043cbc.a2ea6f5e.js rename to assets/js/73043cbc.fd900b2a.js index d49cff702f0..e965c9b02cd 100644 --- a/assets/js/73043cbc.a2ea6f5e.js +++ b/assets/js/73043cbc.fd900b2a.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[224],{3381:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/53","page":53,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/52","nextPage":"/metals/blog/page/54","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[224],{3381:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/53","page":53,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/52","nextPage":"/metals/blog/page/54","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/786192e2.12030222.js b/assets/js/786192e2.12030222.js deleted file mode 100644 index dc471d64571..00000000000 --- a/assets/js/786192e2.12030222.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1557],{4100:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/58","page":58,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/57","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/786192e2.95300729.js b/assets/js/786192e2.95300729.js new file mode 100644 index 00000000000..9a9ebd9cb7d --- /dev/null +++ b/assets/js/786192e2.95300729.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1557],{4100:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/58","page":58,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/57","nextPage":"/metals/blog/page/59","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/79920604.2f3d5ab8.js b/assets/js/79920604.8d37f710.js similarity index 59% rename from assets/js/79920604.2f3d5ab8.js rename to assets/js/79920604.8d37f710.js index 6c396c41e6f..0aa23068c0a 100644 --- a/assets/js/79920604.2f3d5ab8.js +++ b/assets/js/79920604.8d37f710.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7785],{8064:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/35","page":35,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/34","nextPage":"/metals/blog/page/36","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7785],{8064:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/35","page":35,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/34","nextPage":"/metals/blog/page/36","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7af95c3c.3f8ee58c.js b/assets/js/7af95c3c.3b7f563d.js similarity index 59% rename from assets/js/7af95c3c.3f8ee58c.js rename to assets/js/7af95c3c.3b7f563d.js index 2a04507e882..9d81e800bcc 100644 --- a/assets/js/7af95c3c.3f8ee58c.js +++ b/assets/js/7af95c3c.3b7f563d.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3470],{6708:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/19","page":19,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/18","nextPage":"/metals/blog/page/20","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3470],{6708:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/19","page":19,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/18","nextPage":"/metals/blog/page/20","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7c0269a6.4d1ee307.js b/assets/js/7c0269a6.e740a831.js similarity index 59% rename from assets/js/7c0269a6.4d1ee307.js rename to assets/js/7c0269a6.e740a831.js index aa934223d4e..f9f4359449e 100644 --- a/assets/js/7c0269a6.4d1ee307.js +++ b/assets/js/7c0269a6.e740a831.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5430],{1494:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/34","page":34,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/33","nextPage":"/metals/blog/page/35","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5430],{1494:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/34","page":34,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/33","nextPage":"/metals/blog/page/35","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/7ea62e57.82c54f0c.js b/assets/js/7ea62e57.8412949f.js similarity index 59% rename from assets/js/7ea62e57.82c54f0c.js rename to assets/js/7ea62e57.8412949f.js index c826b8126fe..519e33f36f2 100644 --- a/assets/js/7ea62e57.82c54f0c.js +++ b/assets/js/7ea62e57.8412949f.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9774],{9375:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/10","page":10,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/9","nextPage":"/metals/blog/page/11","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9774],{9375:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/10","page":10,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/9","nextPage":"/metals/blog/page/11","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.75f341ff.js b/assets/js/814f3328.75f341ff.js deleted file mode 100644 index f657465ccb3..00000000000 --- a/assets/js/814f3328.75f341ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2535],{5641:l=>{l.exports=JSON.parse('{"title":"All Blog Posts","items":[{"title":"Metals v1.0.1 - Silver","permalink":"/metals/blog/2023/08/28/silver"},{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"},{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"},{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"},{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"},{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"},{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"},{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"},{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"},{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"},{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"},{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"},{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"},{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"},{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"},{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"},{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"},{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"},{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"},{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"},{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"},{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"},{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"},{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"},{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"},{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"},{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"},{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"},{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"},{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"},{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"},{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"},{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"},{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"},{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"},{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"},{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"},{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"},{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"},{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"},{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"},{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"},{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"},{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"},{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"},{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"},{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"},{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"},{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"},{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"},{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"},{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"},{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"},{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"},{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"},{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"},{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"},{"title":"Metals v0.3 - Iron","permalink":"/metals/blog/2018/12/06/iron"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.c86c995e.js b/assets/js/814f3328.c86c995e.js new file mode 100644 index 00000000000..a6d08b63aaa --- /dev/null +++ b/assets/js/814f3328.c86c995e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2535],{5641:l=>{l.exports=JSON.parse('{"title":"All Blog Posts","items":[{"title":"Metals v1.1.0 - Silver","permalink":"/metals/blog/2023/10/17/silver"},{"title":"Metals v1.0.1 - Silver","permalink":"/metals/blog/2023/08/28/silver"},{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"},{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"},{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"},{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"},{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"},{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"},{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"},{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"},{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"},{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"},{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"},{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"},{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"},{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"},{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"},{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"},{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"},{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"},{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"},{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"},{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"},{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"},{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"},{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"},{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"},{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"},{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"},{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"},{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"},{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"},{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"},{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"},{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"},{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"},{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"},{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"},{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"},{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"},{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"},{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"},{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"},{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"},{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"},{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"},{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"},{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"},{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"},{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"},{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"},{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"},{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"},{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"},{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"},{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"},{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"},{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"},{"title":"Metals v0.3 - Iron","permalink":"/metals/blog/2018/12/06/iron"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8a0b8ece.b9ea63e3.js b/assets/js/8a0b8ece.f802f42e.js similarity index 68% rename from assets/js/8a0b8ece.b9ea63e3.js rename to assets/js/8a0b8ece.f802f42e.js index 09640ae6558..c15b0f06b45 100644 --- a/assets/js/8a0b8ece.b9ea63e3.js +++ b/assets/js/8a0b8ece.f802f42e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4782],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,m=r(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,k=u["".concat(s,".").concat(d)]||u[d]||c[d]||l;return n?a.createElement(k,o(o({ref:t},m),{},{components:n})):a.createElement(k,o({ref:t},m))}));function k(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=d;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[u]="string"==typeof e?e:i,o[1]=r;for(var p=2;p{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>k,frontMatter:()=>r,metadata:()=>p,toc:()=>u});var a=n(7462),i=n(3366),l=(n(7294),n(3905)),o=["components"],r={id:"sublime",title:"Sublime Text"},s=void 0,p={unversionedId:"editors/sublime",id:"editors/sublime",title:"Sublime Text",description:"Metals works with Sublime Text (build 4000 or later) thanks to the",source:"@site/target/docs/editors/sublime.md",sourceDirName:"editors",slug:"/editors/sublime",permalink:"/metals/docs/editors/sublime",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/sublime.md",tags:[],version:"current",frontMatter:{id:"sublime",title:"Sublime Text"},sidebar:"docs",previous:{title:"Vim",permalink:"/metals/docs/editors/vim"},next:{title:"Emacs",permalink:"/metals/docs/editors/emacs"}},m={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the plugins",id:"installing-the-plugins",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Server logs",id:"server-logs",level:2},{value:"Find symbol references",id:"find-symbol-references",level:2},{value:"Goto symbol in workspace",id:"goto-symbol-in-workspace",level:2},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:2},{value:"Tweaking Sublime Text for a better productivity",id:"tweaking-sublime-text-for-a-better-productivity",level:2},{value:"Optional LSP client tweaks",id:"optional-lsp-client-tweaks",level:3},{value:"Additional key mappings",id:"additional-key-mappings",level:3},{value:"Keymapping for formatting document via scalafmt",id:"keymapping-for-formatting-document-via-scalafmt",level:4},{value:"Add key mapping for Goto symbol in workspace",id:"add-key-mapping-for-goto-symbol-in-workspace",level:3},{value:"Enabling auto-import on completion",id:"enabling-auto-import-on-completion",level:3},{value:"Using latest Metals SNAPSHOT",id:"using-latest-metals-snapshot",level:2},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2}],c={toc:u},d="wrapper";function k(e){var t=e.components,n=(0,i.Z)(e,o);return(0,l.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Metals works with Sublime Text (build 4000 or later) thanks to the\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/sublimelsp/LSP"},"sublimelsp/LSP")," and ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-sublime"},"scalameta/metals-sublime")," plugins."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/vJKP0T3.gif",alt:"Sublime Text demo"})),(0,l.kt)("h2",{id:"requirements"},"Requirements"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,l.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,l.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,l.kt)("h2",{id:"installing-the-plugins"},"Installing the plugins"),(0,l.kt)("p",null,"Install the following packages:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("a",{parentName:"p",href:"https://github.com/sublimelsp/LSP"},"sublimelsp/LSP"),": Language Server Protocol support for Sublime Text.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"Command Palette (Cmd + Shift + P) > Install package > LSP"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-sublime"},"scalameta/metals-sublime"),": For automatic installation of metals and custom commands.\n",(0,l.kt)("inlineCode",{parentName:"p"},"Command Palette (Cmd + Shift + P) > Install package > LSP-metals")))),(0,l.kt)("p",null,"Finally restart sublime text."),(0,l.kt)("p",null,'Next, open "Preferences > Key Binding" and register ',(0,l.kt)("inlineCode",{parentName:"p"},"F12")," to trigger goto\ndefinition."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n {\n "keys": ["f12"],\n "command": "lsp_symbol_definition"\n }\n]\n')),(0,l.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/eUk30Zy.png",alt:"Build Import"})),(0,l.kt)("p",null,"Open Sublime in the base directory of your Scala project and it will then prompt you to import the build as long as you're using one of the ",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/build-tools/overview.html"},"supported build tools"),'. Click "Import build" to start the installation step.'),(0,l.kt)("p",null,"This starts the Metal language server but no functionality will work yet because the\nbuild has not been imported. "),(0,l.kt)("p",null,"This step can take a long time, especially the first time you run it in a new\nworkspace. The exact time depends on the complexity of the build and if the library dependencies are cached or need to be downloaded. For example, this step can take anywhere from 10 seconds in small cached builds up to 10-15 minutes in large un-cached builds."),(0,l.kt)("h2",{id:"server-logs"},"Server logs"),(0,l.kt)("p",null,"For more detailed information about what is happening behind the scenes during\n",(0,l.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall")," run ",(0,l.kt)("inlineCode",{parentName:"p"},"lsp toggle server panel")," in the command palette. You can optionally add key binding for this command."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/PilER2E.png",alt:"Server logs"})),(0,l.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,l.kt)("inlineCode",{parentName:"p"},"*.scala"),'\nfiles. Once the sources have compiled successfully, you can navigate the\nsources with "Goto definition" by pressing ',(0,l.kt)("inlineCode",{parentName:"p"},"F12"),"."),(0,l.kt)("h2",{id:"find-symbol-references"},"Find symbol references"),(0,l.kt)("p",null,"The default key binding is ",(0,l.kt)("inlineCode",{parentName:"p"},"shift+F12"),". If you use vim-bindings, you need to be\nin insert-mode."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/BJDkczD.gif",alt:"Find references"})),(0,l.kt)("h2",{id:"goto-symbol-in-workspace"},"Goto symbol in workspace"),(0,l.kt)("p",null,"You can search for symbols in your dependency source using the command palette."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/8X0XNi2.gif",alt:"workspace symbols"})),(0,l.kt)("h2",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/LViPc95.png",alt:"Import build command"})),(0,l.kt)("p",null,"You can optionally register a key binding for the command."),(0,l.kt)("h2",{id:"tweaking-sublime-text-for-a-better-productivity"},"Tweaking Sublime Text for a better productivity"),(0,l.kt)("p",null,"This paragraph contains a few tips & trick that can improve your daily productivity with Metals."),(0,l.kt)("h3",{id:"optional-lsp-client-tweaks"},"Optional LSP client tweaks"),(0,l.kt)("p",null,'If you prefer to only enable Metals completions\n(without mixing them with the default ones from Sublime) set the following setting\nin the "Preferences > Preferences: LSP Settings":'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n // ...\n "only_show_lsp_completions": true,\n}\n')),(0,l.kt)("p",null,'Also, if you prefer to show symbol references in Sublime\'s quick panel instead of the bottom panel\nset following setting in the "Preferences > Preferences: LSP Settings":'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n // ...\n "show_references_in_quick_panel": true,\n}\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/7tSiEfX.gif",alt:"Symbol references in the popup"})),(0,l.kt)("h3",{id:"additional-key-mappings"},"Additional key mappings"),(0,l.kt)("p",null,"You can set a few optional key mappings for enable useful action shortcuts and perform some tweaks for the completion popup."),(0,l.kt)("h4",{id:"keymapping-for-formatting-document-via-scalafmt"},"Keymapping for formatting document via scalafmt"),(0,l.kt)("p",null,'Open "Preferences > Key Binding" and register ',(0,l.kt)("inlineCode",{parentName:"p"},"ctrl+alt+l")," to trigger formatting document.\ndefinition."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n {\n "keys": ["ctrl+alt+l"],\n "command": "lsp_format_document"\n }\n]\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/wVjC1Ij.gif",alt:"Add key mapping for formatting document via scalafmt"})),(0,l.kt)("h3",{id:"add-key-mapping-for-goto-symbol-in-workspace"},"Add key mapping for Goto symbol in workspace"),(0,l.kt)("p",null,'This an optional step if you want to have a shortcut for looking up symbols in the workspace.\nOpen "Preferences > Key Binding" and add:'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n { \n "keys": ["ctrl+t"], \n "command": "show_overlay",\n "args": {"overlay": "command_palette", "command": "lsp_workspace_symbols" }\n }\n]\n')),(0,l.kt)("h3",{id:"enabling-auto-import-on-completion"},"Enabling auto-import on completion"),(0,l.kt)("p",null,'Metals can complete symbols from your workspace scope and automatically import them.\nBy default, however, if you hit "Enter" to select a completion, the LSP client will\ncomplete the class without importing it, but you can easy remap to use also "Enter" key.\nOpen "Preferences > Key Binding" and add:'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[ \n // ...\n { "keys": ["enter"], "command": "commit_completion", "context": [{ "key": "auto_complete_visible" } ] },\n { "keys": ["tab"], "command": "commit_completion", "context": [{ "key": "auto_complete_visible" } ] }\n]\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/RDYx9mB.gif",alt:"Import after Enter key was hit"})),(0,l.kt)("h2",{id:"using-latest-metals-snapshot"},"Using latest Metals SNAPSHOT"),(0,l.kt)("p",null,'Update the "server_version" setting to try out the latest pending Metals\nfeatures by accessing ',(0,l.kt)("inlineCode",{parentName:"p"},"Preferences > Package Settings > LSP > Servers > LSP-metals")),(0,l.kt)("table",null,(0,l.kt)("thead",null,(0,l.kt)("tr",null,(0,l.kt)("th",null,"Version"),(0,l.kt)("th",null,"Published"))),(0,l.kt)("tbody",null,(0,l.kt)("tr",null,(0,l.kt)("td",null,"1.0.1"),(0,l.kt)("td",null,"28 Aug 2023 14:46")),(0,l.kt)("tr",null,(0,l.kt)("td",null,"1.0.1+114-a2d4ebcc-SNAPSHOT"),(0,l.kt)("td",null,"17 Oct 2023 10:32")))),(0,l.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,l.kt)("p",null,"The Metals server places logs and other files in the ",(0,l.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,l.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,l.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,l.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,l.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,l.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,l.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,l.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,l.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,l.kt)("h2",{id:"worksheets"},"Worksheets"),(0,l.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,l.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,l.kt)("p",null,"To get started with a worksheet you can either use the ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,l.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,l.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,l.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,l.kt)("h3",{id:"evaluations"},"Evaluations"),(0,l.kt)("p",null,"After saving you'll see the result of the expression as a comment as the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the comment to expand."),(0,l.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,l.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,l.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,l.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,l.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,l.kt)("p",null,"You can also import ",(0,l.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,l.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,l.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,l.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,l.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,l.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,l.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,l.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,l.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,l.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,l.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,l.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,l.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,l.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')))}k.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4782],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,m=r(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,k=u["".concat(s,".").concat(d)]||u[d]||c[d]||l;return n?a.createElement(k,o(o({ref:t},m),{},{components:n})):a.createElement(k,o({ref:t},m))}));function k(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=d;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[u]="string"==typeof e?e:i,o[1]=r;for(var p=2;p{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>k,frontMatter:()=>r,metadata:()=>p,toc:()=>u});var a=n(7462),i=n(3366),l=(n(7294),n(3905)),o=["components"],r={id:"sublime",title:"Sublime Text"},s=void 0,p={unversionedId:"editors/sublime",id:"editors/sublime",title:"Sublime Text",description:"Metals works with Sublime Text (build 4000 or later) thanks to the",source:"@site/target/docs/editors/sublime.md",sourceDirName:"editors",slug:"/editors/sublime",permalink:"/metals/docs/editors/sublime",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/sublime.md",tags:[],version:"current",frontMatter:{id:"sublime",title:"Sublime Text"},sidebar:"docs",previous:{title:"Vim",permalink:"/metals/docs/editors/vim"},next:{title:"Emacs",permalink:"/metals/docs/editors/emacs"}},m={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installing the plugins",id:"installing-the-plugins",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Server logs",id:"server-logs",level:2},{value:"Find symbol references",id:"find-symbol-references",level:2},{value:"Goto symbol in workspace",id:"goto-symbol-in-workspace",level:2},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:2},{value:"Tweaking Sublime Text for a better productivity",id:"tweaking-sublime-text-for-a-better-productivity",level:2},{value:"Optional LSP client tweaks",id:"optional-lsp-client-tweaks",level:3},{value:"Additional key mappings",id:"additional-key-mappings",level:3},{value:"Keymapping for formatting document via scalafmt",id:"keymapping-for-formatting-document-via-scalafmt",level:4},{value:"Add key mapping for Goto symbol in workspace",id:"add-key-mapping-for-goto-symbol-in-workspace",level:3},{value:"Enabling auto-import on completion",id:"enabling-auto-import-on-completion",level:3},{value:"Using latest Metals SNAPSHOT",id:"using-latest-metals-snapshot",level:2},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2}],c={toc:u},d="wrapper";function k(e){var t=e.components,n=(0,i.Z)(e,o);return(0,l.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Metals works with Sublime Text (build 4000 or later) thanks to the\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/sublimelsp/LSP"},"sublimelsp/LSP")," and ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-sublime"},"scalameta/metals-sublime")," plugins."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/vJKP0T3.gif",alt:"Sublime Text demo"})),(0,l.kt)("h2",{id:"requirements"},"Requirements"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,l.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,l.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,l.kt)("h2",{id:"installing-the-plugins"},"Installing the plugins"),(0,l.kt)("p",null,"Install the following packages:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("a",{parentName:"p",href:"https://github.com/sublimelsp/LSP"},"sublimelsp/LSP"),": Language Server Protocol support for Sublime Text.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"Command Palette (Cmd + Shift + P) > Install package > LSP"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals-sublime"},"scalameta/metals-sublime"),": For automatic installation of metals and custom commands.\n",(0,l.kt)("inlineCode",{parentName:"p"},"Command Palette (Cmd + Shift + P) > Install package > LSP-metals")))),(0,l.kt)("p",null,"Finally restart sublime text."),(0,l.kt)("p",null,'Next, open "Preferences > Key Binding" and register ',(0,l.kt)("inlineCode",{parentName:"p"},"F12")," to trigger goto\ndefinition."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n {\n "keys": ["f12"],\n "command": "lsp_symbol_definition"\n }\n]\n')),(0,l.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/eUk30Zy.png",alt:"Build Import"})),(0,l.kt)("p",null,"Open Sublime in the base directory of your Scala project and it will then prompt you to import the build as long as you're using one of the ",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/build-tools/overview.html"},"supported build tools"),'. Click "Import build" to start the installation step.'),(0,l.kt)("p",null,"This starts the Metal language server but no functionality will work yet because the\nbuild has not been imported. "),(0,l.kt)("p",null,"This step can take a long time, especially the first time you run it in a new\nworkspace. The exact time depends on the complexity of the build and if the library dependencies are cached or need to be downloaded. For example, this step can take anywhere from 10 seconds in small cached builds up to 10-15 minutes in large un-cached builds."),(0,l.kt)("h2",{id:"server-logs"},"Server logs"),(0,l.kt)("p",null,"For more detailed information about what is happening behind the scenes during\n",(0,l.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall")," run ",(0,l.kt)("inlineCode",{parentName:"p"},"lsp toggle server panel")," in the command palette. You can optionally add key binding for this command."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/PilER2E.png",alt:"Server logs"})),(0,l.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,l.kt)("inlineCode",{parentName:"p"},"*.scala"),'\nfiles. Once the sources have compiled successfully, you can navigate the\nsources with "Goto definition" by pressing ',(0,l.kt)("inlineCode",{parentName:"p"},"F12"),"."),(0,l.kt)("h2",{id:"find-symbol-references"},"Find symbol references"),(0,l.kt)("p",null,"The default key binding is ",(0,l.kt)("inlineCode",{parentName:"p"},"shift+F12"),". If you use vim-bindings, you need to be\nin insert-mode."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/BJDkczD.gif",alt:"Find references"})),(0,l.kt)("h2",{id:"goto-symbol-in-workspace"},"Goto symbol in workspace"),(0,l.kt)("p",null,"You can search for symbols in your dependency source using the command palette."),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/8X0XNi2.gif",alt:"workspace symbols"})),(0,l.kt)("h2",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/LViPc95.png",alt:"Import build command"})),(0,l.kt)("p",null,"You can optionally register a key binding for the command."),(0,l.kt)("h2",{id:"tweaking-sublime-text-for-a-better-productivity"},"Tweaking Sublime Text for a better productivity"),(0,l.kt)("p",null,"This paragraph contains a few tips & trick that can improve your daily productivity with Metals."),(0,l.kt)("h3",{id:"optional-lsp-client-tweaks"},"Optional LSP client tweaks"),(0,l.kt)("p",null,'If you prefer to only enable Metals completions\n(without mixing them with the default ones from Sublime) set the following setting\nin the "Preferences > Preferences: LSP Settings":'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n // ...\n "only_show_lsp_completions": true,\n}\n')),(0,l.kt)("p",null,'Also, if you prefer to show symbol references in Sublime\'s quick panel instead of the bottom panel\nset following setting in the "Preferences > Preferences: LSP Settings":'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n // ...\n "show_references_in_quick_panel": true,\n}\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/7tSiEfX.gif",alt:"Symbol references in the popup"})),(0,l.kt)("h3",{id:"additional-key-mappings"},"Additional key mappings"),(0,l.kt)("p",null,"You can set a few optional key mappings for enable useful action shortcuts and perform some tweaks for the completion popup."),(0,l.kt)("h4",{id:"keymapping-for-formatting-document-via-scalafmt"},"Keymapping for formatting document via scalafmt"),(0,l.kt)("p",null,'Open "Preferences > Key Binding" and register ',(0,l.kt)("inlineCode",{parentName:"p"},"ctrl+alt+l")," to trigger formatting document.\ndefinition."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n {\n "keys": ["ctrl+alt+l"],\n "command": "lsp_format_document"\n }\n]\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/wVjC1Ij.gif",alt:"Add key mapping for formatting document via scalafmt"})),(0,l.kt)("h3",{id:"add-key-mapping-for-goto-symbol-in-workspace"},"Add key mapping for Goto symbol in workspace"),(0,l.kt)("p",null,'This an optional step if you want to have a shortcut for looking up symbols in the workspace.\nOpen "Preferences > Key Binding" and add:'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n // ...\n { \n "keys": ["ctrl+t"], \n "command": "show_overlay",\n "args": {"overlay": "command_palette", "command": "lsp_workspace_symbols" }\n }\n]\n')),(0,l.kt)("h3",{id:"enabling-auto-import-on-completion"},"Enabling auto-import on completion"),(0,l.kt)("p",null,'Metals can complete symbols from your workspace scope and automatically import them.\nBy default, however, if you hit "Enter" to select a completion, the LSP client will\ncomplete the class without importing it, but you can easy remap to use also "Enter" key.\nOpen "Preferences > Key Binding" and add:'),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[ \n // ...\n { "keys": ["enter"], "command": "commit_completion", "context": [{ "key": "auto_complete_visible" } ] },\n { "keys": ["tab"], "command": "commit_completion", "context": [{ "key": "auto_complete_visible" } ] }\n]\n')),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/RDYx9mB.gif",alt:"Import after Enter key was hit"})),(0,l.kt)("h2",{id:"using-latest-metals-snapshot"},"Using latest Metals SNAPSHOT"),(0,l.kt)("p",null,'Update the "server_version" setting to try out the latest pending Metals\nfeatures by accessing ',(0,l.kt)("inlineCode",{parentName:"p"},"Preferences > Package Settings > LSP > Servers > LSP-metals")),(0,l.kt)("table",null,(0,l.kt)("thead",null,(0,l.kt)("tr",null,(0,l.kt)("th",null,"Version"),(0,l.kt)("th",null,"Published"))),(0,l.kt)("tbody",null,(0,l.kt)("tr",null,(0,l.kt)("td",null,"1.1.0"),(0,l.kt)("td",null,"17 Oct 2023 11:43")),(0,l.kt)("tr",null,(0,l.kt)("td",null,"1.1.0+1-4afaa354-SNAPSHOT"),(0,l.kt)("td",null,"17 Oct 2023 12:57")))),(0,l.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,l.kt)("p",null,"The Metals server places logs and other files in the ",(0,l.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,l.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,l.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,l.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,l.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,l.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,l.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,l.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,l.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,l.kt)("h2",{id:"worksheets"},"Worksheets"),(0,l.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,l.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,l.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,l.kt)("p",null,"To get started with a worksheet you can either use the ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,l.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,l.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,l.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,l.kt)("h3",{id:"evaluations"},"Evaluations"),(0,l.kt)("p",null,"After saving you'll see the result of the expression as a comment as the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the comment to expand."),(0,l.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,l.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,l.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,l.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,l.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,l.kt)("p",null,"You can also import ",(0,l.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,l.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,l.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,l.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,l.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,l.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,l.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,l.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,l.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,l.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,l.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,l.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,l.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,l.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,l.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8ac2579a.392e4e3d.js b/assets/js/8ac2579a.392e4e3d.js new file mode 100644 index 00000000000..4d1d5ea4269 --- /dev/null +++ b/assets/js/8ac2579a.392e4e3d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5358],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=l.createContext({}),m=function(t){var e=l.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},p=function(t){var e=m(t.components);return l.createElement(o.Provider,{value:e},t.children)},u="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,o=t.parentName,p=s(t,["components","mdxType","originalType","parentName"]),u=m(a),c=r,k=u["".concat(o,".").concat(c)]||u[c]||h[c]||i;return a?l.createElement(k,n(n({ref:e},p),{},{components:a})):l.createElement(k,n({ref:e},p))}));function k(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,n=new Array(i);n[0]=c;var s={};for(var o in e)hasOwnProperty.call(e,o)&&(s[o]=e[o]);s.originalType=t,s[u]="string"==typeof t?t:r,n[1]=s;for(var m=2;m{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>s,metadata:()=>m,toc:()=>u});var l=a(7462),r=a(3366),i=(a(7294),a(3905)),n=["components"],s={author:"Katarzyna Marek",title:"Metals v1.1.0 - Silver",authorImageURL:"https://github.com/kasiaMarek.png"},o=void 0,m={permalink:"/metals/blog/2023/10/17/silver",source:"@site/blog/2023-10-17-silver.md",title:"Metals v1.1.0 - Silver",description:"We're happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting.",date:"2023-10-17T00:00:00.000Z",formattedDate:"October 17, 2023",tags:[],readingTime:11.3,hasTruncateMarker:!1,authors:[{name:"Katarzyna Marek",imageURL:"https://github.com/kasiaMarek.png"}],frontMatter:{author:"Katarzyna Marek",title:"Metals v1.1.0 - Silver",authorImageURL:"https://github.com/kasiaMarek.png"},nextItem:{title:"Metals v1.0.1 - Silver",permalink:"/metals/blog/2023/08/28/silver"}},p={authorsImageUrls:[void 0]},u=[{value:"TL;DR",id:"tldr",level:2},{value:"New Scala versions support",id:"new-scala-versions-support",level:2},{value:"Support for Scala 3.3.1",id:"support-for-scala-331",level:4},{value:"Support for Scala 2.13.12",id:"support-for-scala-21312",level:4},{value:"Build server connection status",id:"build-server-connection-status",level:2},{value:"Enable run code lens for Mill build server",id:"enable-run-code-lens-for-mill-build-server",level:2},{value:"Convert single line comments to multiline",id:"convert-single-line-comments-to-multiline",level:2},{value:"Detect project root",id:"detect-project-root",level:2},{value:"Error reports in metals doctor",id:"error-reports-in-metals-doctor",level:2},{value:"Show bloop errors",id:"show-bloop-errors",level:2},{value:"Changes for plugin authors",id:"changes-for-plugin-authors",level:2},{value:"Build server status",id:"build-server-status",level:4},{value:"Doctor results v5",id:"doctor-results-v5",level:4},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.1.0 (2023-10-17)",id:"v110-2023-10-17",level:2}],h={toc:u},c="wrapper";function k(t){var e=t.components,a=(0,r.Z)(t,n);return(0,i.kt)(c,(0,l.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"We're happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting."),(0,i.kt)("table",null,(0,i.kt)("tbody",null,(0,i.kt)("tr",null,(0,i.kt)("td",null,"Commits since last release"),(0,i.kt)("td",{align:"center"},"114")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Merged PRs"),(0,i.kt)("td",{align:"center"},"104")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Contributors"),(0,i.kt)("td",{align:"center"},"13")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"Closed issues"),(0,i.kt)("td",{align:"center"},"32")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"New features"),(0,i.kt)("td",{align:"center"},"2")))),(0,i.kt)("p",null,"For full details: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/60?closed=1"},"https://github.com/scalameta/metals/milestone/60?closed=1")),(0,i.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,i.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,i.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from contributors from the community."),(0,i.kt)("h2",{id:"tldr"},"TL;DR"),(0,i.kt)("p",null,"Check out ",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#new-scala-versions-support"},"New Scala versions support")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#build-server-status"},"Build server status")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#enable-run-code-lens-for-Mill-build-server"},"Enable run code lens for Mill build server")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#convert-single-line-comments-to-multiline"},"Convert single line comments to multiline")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#detect-project-root"},"Detect project root")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#error-reports-in-metals-doctor"},"Error reports in metals doctor")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#show-bloop-errors"},"Show bloop errors")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#changes-for-plugin-authors"},"Changes for plugin authors"))),(0,i.kt)("h2",{id:"new-scala-versions-support"},"New Scala versions support"),(0,i.kt)("h4",{id:"support-for-scala-331"},"Support for Scala 3.3.1"),(0,i.kt)("p",null,"Scala 3.3.1 is a new version of the Scala 3 LTS and it adds support for JDK 16 records in Java sources."),(0,i.kt)("p",null,"For more information about the release take a look at\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/lampepfl/dotty/releases/tag/3.3.1"},"https://github.com/lampepfl/dotty/releases/tag/3.3.1")),(0,i.kt)("h4",{id:"support-for-scala-21312"},"Support for Scala 2.13.12"),(0,i.kt)("p",null,"The main improvement of Scala 2.13.12 are actionable diagnostics. They are compiler suggested fixes for some errors and warnings. Actionable diagnostics are available in metals as code actions coming directly from the compiler."),(0,i.kt)("p",null,"For more information about the release take a look at\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scala/scala/releases/tag/v2.13.12"},"https://github.com/scala/scala/releases/tag/v2.13.12")),(0,i.kt)("h2",{id:"build-server-connection-status"},"Build server connection status"),(0,i.kt)("p",null,"Since the previous release metals detects and reports when the build server stops responding. Over the last months this feature was stabilized and the information about the build server connection is now visible in the status bar. For clients that don't support this status bar yet, the error message will be displayed as before."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/26606662/274277861-de46ff62-db71-4990-ba1d-bfaaadf03499.png",alt:"bsp-status-conn"}),"\n",(0,i.kt)("em",{parentName:"p"},"Build server connection status in VSCode, when metals is successfully connected to ",(0,i.kt)("inlineCode",{parentName:"em"},"sbt")," build server.")),(0,i.kt)("p",null,"If you are a maintainer of a metals' client and want to know how to add support for build server status see ",(0,i.kt)("a",{parentName:"p",href:"#changes-for-clients"},"Changes for clients"),"."),(0,i.kt)("h2",{id:"enable-run-code-lens-for-mill-build-server"},"Enable run code lens for Mill build server"),(0,i.kt)("p",null,"Thanks to ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"Tomasz Godzik")," now we have run code lens when using Mill build server. As a reminder, it's possible to start using it by running ",(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Switch build server")," command for a Mill project."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/5drObNP.gif",alt:"mill-run-lens"})),(0,i.kt)("h2",{id:"convert-single-line-comments-to-multiline"},"Convert single line comments to multiline"),(0,i.kt)("p",null,"Thanks to ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/ghostbuster91"},"Kasper Kondzielski")," we have a new code action that converts a block of single line comments into a multiline comment. "),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/tu3B25s.gif",alt:"convert-to-multiline"})),(0,i.kt)("h2",{id:"detect-project-root"},"Detect project root"),(0,i.kt)("p",null,"Sometimes your Scala project root is not in the same folder that you open your editor in. Now metals will also detect the Scala project root when it is a child of the workspace/workspace folder root."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},". *workspace root*\n\u251c\u2500\u2500 scalaProject *detected project root*\n\u2502 \u251c\u2500\u2500 .sbt\n\u2502 \u251c\u2500\u2500 src/main/scala\n\u2502 \u2502 \u251c\u2500\u2500 Main.scala\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 someOtherProject\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 .gitignore\n\u2514\u2500\u2500 ...\n")),(0,i.kt)("h2",{id:"error-reports-in-metals-doctor"},"Error reports in metals doctor"),(0,i.kt)("p",null,"Error reports are now visible in the metals doctor to help users diagnose the cause of any potential issue. Previously, they would only exist in the ",(0,i.kt)("inlineCode",{parentName:"p"},".metals/.reports")," folder."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/26606662/270966990-86cbd199-8621-4d04-a4ae-41f4bb598668.gif",alt:"show-error-reports"})),(0,i.kt)("h2",{id:"show-bloop-errors"},"Show bloop errors"),(0,i.kt)("p",null,"Before this release Bloop build server errors would only be logged silently into ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.log")," and the Metals output. Now for the sake of visibility Bloop errors are also shown to the users in form of error messages. The message can be dismissed for the current session of Metals or you can turn off all messages in a workspace."),(0,i.kt)("h2",{id:"changes-for-plugin-authors"},"Changes for plugin authors"),(0,i.kt)("h4",{id:"build-server-status"},"Build server status"),(0,i.kt)("p",null,"We added ",(0,i.kt)("inlineCode",{parentName:"p"},"bspStatusBarProvider")," field to initialization parameters. Similarly to ",(0,i.kt)("inlineCode",{parentName:"p"},"statusBarProvider")," it can have one of the following values: ",(0,i.kt)("inlineCode",{parentName:"p"},'"on"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"off"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"log-message"'),", ",(0,i.kt)("inlineCode",{parentName:"p"},'"show-message"')," (default)."),(0,i.kt)("p",null,"When ",(0,i.kt)("inlineCode",{parentName:"p"},"bspStatusBarProvider")," is set to ",(0,i.kt)("inlineCode",{parentName:"p"},'"on"'),", the build server status is send via ",(0,i.kt)("inlineCode",{parentName:"p"},"metals/status")," with new field ",(0,i.kt)("inlineCode",{parentName:"p"},'"statusType"')," set to ",(0,i.kt)("inlineCode",{parentName:"p"},'"bsp"'),"."),(0,i.kt)("p",null,"New fields in ",(0,i.kt)("inlineCode",{parentName:"p"},"MetalsStatusParams"),":"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"statusType"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},'"bsp"')," for build server status"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},'"metals"')," for metals status (default)"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"level")," - severity level of the message, possible values: ",(0,i.kt)("inlineCode",{parentName:"li"},'"info"'),", ",(0,i.kt)("inlineCode",{parentName:"li"},'"warn"'),", ",(0,i.kt)("inlineCode",{parentName:"li"},'"error"')),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"commandTooltip")," - command tooltip, which can be appended to the status tooltip if the status bar supports commands")),(0,i.kt)("p",null,"For more details refer to the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5660"},"PR"),"."),(0,i.kt)("h4",{id:"doctor-results-v5"},"Doctor results v5"),(0,i.kt)("p",null,"New ",(0,i.kt)("inlineCode",{parentName:"p"},"errorReports")," field in ",(0,i.kt)("inlineCode",{parentName:"p"},"DoctorFolderResults")," containing an array of ",(0,i.kt)("inlineCode",{parentName:"p"},"ErrorReportInfo"),", which has the following fields:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"name")," string - display name of the error,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"timestamp")," long - timestamp of the report creation date,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"uri")," string - error report file uri,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"buildTarget")," nullable string - optional build target that the error is associated with,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"shortSummary")," string - short error summary,"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"errorReportType"),' string - one of "metals", "metals-full", "bloop".\nFor more details refer to the ',(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5683"},"PR"),".")),(0,i.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bugfix: incorrect docstring completions when not directly over definition (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: don't use cache directory when incorrectly resolved path (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: skip empty lines when calculating indentation for auto import (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: update ranges on Scala CLI actionable diagnostics for files with non-saved changes (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/LaurenceWarne"},"LaurenceWarne"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: correctly choose the folder to use for a command (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: extract member with associated comments (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle EOF in java completions (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: workaround for missing span in reference to an extension method defined in the companion object (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: automatically calculate last supported versions for semanticdb (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: escape special chars in test names (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: add ",(0,i.kt)("inlineCode",{parentName:"li"},"moduleClass")," imported symbols in ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexedContext")," (fix for insert type annotation) (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix resolving main class/ test suite for multi-root projects (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: wait longer to connect to build tools other than Bloop (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: don't create service for folders with non-Scala projects (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: semantic tokens for multiline strings in Scala3 worksheets (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: incorrect docstring on parameters (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: trim hover body (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"feature: user configuration per workspace folder (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: named args completions with default values (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: exhaustive match on stale symbols (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix docstring regex in semantic highlighting (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add timeout to fix java version for sbt request (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},'bugfix: fix reporting "no response error" after laptop in sleep mode (',(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: match completions for type aliases in Scala 3 (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle created build server config before all content written (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: only log mtgas resolve messages on resolution (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: dependency completions with double colon before version (using directives) (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: semantic highlighting in worksheets starting with an empty line (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: don't read file for InteractiveSemanticdbdb if it doesn't exist (",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")),(0,i.kt)("h2",{id:"contributors"},"Contributors"),(0,i.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.1..v1.1.0\n 34 Katarzyna Marek\n 24 Scalameta Bot\n 22 Tomasz Godzik\n 10 Jakub Ciesluk\n 6 dependabot[bot]\n 4 rochala\n 4 scalameta-bot\n 4 tgodzik\n 2 Laurence Warne\n 1 Chris Kipp\n 1 Ethan Atkins\n 1 Jack Koenig\n 1 Kasper Kondzielski\n")),(0,i.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,i.kt)("h2",{id:"v110-2023-10-17"},(0,i.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.1.0"},"v1.1.0")," (2023-10-17)"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.1...v1.1.0"},"Full Changelog")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bugfix: add user config promise\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5751"},"#","5751"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Bump Scalameta to 4.8.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5753"},"#","5753"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Don't read file for InteractiveSemanticdbdb if it doesn't exist\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5749"},"#","5749"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Semantic highlighting in worksheets starting with empty line\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5746"},"#","5746"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Dependency completions with double colon before version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5724"},"#","5724"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"docs: Move acknowledgements/team to the website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5747"},"#","5747"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/ckipp01"},"ckipp01"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.2-jre to 32.1.3-jre\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5741"},"#","5741"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.10.Final to 3.8.11.Final\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5743"},"#","5743"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.2 to 9.22.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5742"},"#","5742"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: Only log messages on resolution\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5740"},"#","5740"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Add error reports info to metals doctor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5683"},"#","5683"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle created build server config before all content written\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5734"},"#","5734"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: match completions for type aliases scala 3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5714"},"#","5714"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: hang on ",(0,i.kt)("inlineCode",{parentName:"li"},"initialize"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5735"},"#","5735"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},'bugfix: fix reporting "no response error" after laptop in sleep mode\n',(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5716"},"#","5716"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add timeout to fix java version for sbt request\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5715"},"#","5715"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Fix docstring regex in semantic highlighting\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5729"},"#","5729"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: exhaustive match on stale symbols\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5733"},"#","5733"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update metaconfig-core from 0.11.1 to 0.12.0\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5719"},"#","5719"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Update Scalameta to 4.8.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5681"},"#","5681"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Named args completions with default values\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5657"},"#","5657"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update bsp4j from 2.1.0-M5 to 2.1.0-M7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5718"},"#","5718"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"User configuration per workspace folder\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5709"},"#","5709"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Try to fix Mill flaky test\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5661"},"#","5661"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Fix completions tests after a new artifact starting with io.circ showed up\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5723"},"#","5723"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update ammonite-util from 3.0.0-M0-55-8ef21714 to 3.0.0-M0-56-1bcbe7f6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5721"},"#","5721"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.3 to 3.24.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5720"},"#","5720"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.4 to 0.11.5\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5722"},"#","5722"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: show bsp as connected after the first message from build server\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5707"},"#","5707"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: try to fix ",(0,i.kt)("inlineCode",{parentName:"li"},"cancel-compile")," in ",(0,i.kt)("inlineCode",{parentName:"li"},"BillLspSuite"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5713"},"#","5713"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: add do not show bsp errors option\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5678"},"#","5678"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: move cancel compile test to sbt\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5711"},"#","5711"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Add and adjust test according to changes in dotty\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5710"},"#","5710"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: trim hover body\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5694"},"#","5694"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Incorrect docstring on parameters\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5656"},"#","5656"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Update ammonite to the newest snaphot\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5697"},"#","5697"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens for multiline strings in Scala3 worksheets\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5691"},"#","5691"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: don't create service for folders w/ non-Scala projects\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5562"},"#","5562"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: cancel current request in batched functions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5432"},"#","5432"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: fix ",(0,i.kt)("inlineCode",{parentName:"li"},"ScalaCliSuite.connecting-scalacli"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5698"},"#","5698"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: add debug logs to server liveness monitor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5693"},"#","5693"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/plugin-client-redirects from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5703"},"#","5703"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump coursier/setup-action from 1.3.3 to 1.3.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5701"},"#","5701"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @easyops-cn/docusaurus-search-local from 0.35.0 to 0.36.0 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5704"},"#","5704"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump actions/checkout from 3 to 4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5702"},"#","5702"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/preset-classic from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5705"},"#","5705"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): bump @docusaurus/core from 2.4.1 to 2.4.3 in /website\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5706"},"#","5706"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Wait longer to connect to build tools other than Bloop\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5696"},"#","5696"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: fix resolving main class/ test suite for multi-root projects\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5596"},"#","5596"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"docs: Document AnyVal as not supported in worksheets\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5695"},"#","5695"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: add ",(0,i.kt)("inlineCode",{parentName:"li"},"moduleClass")," imported symbols in ",(0,i.kt)("inlineCode",{parentName:"li"},"IndexedContext"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5690"},"#","5690"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: move bsp responsiveness into status\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5660"},"#","5660"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update interface from 1.0.18 to 1.0.19\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5688"},"#","5688"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: escape special chars in test names\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5676"},"#","5676"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Add code action to convert single line comment into multiline comment\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5633"},"#","5633"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/ghostbuster91"},"ghostbuster91"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Make sure we are using latest known scalameta version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5675"},"#","5675"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: Automatically calculate last supported versions for semanticdb\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5671"},"#","5671"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Fix nightly CI\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5673"},"#","5673"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.6 to 2.1.7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5635"},"#","5635"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.3 to 0.11.4\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5666"},"#","5666"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: auto detect project root\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5576"},"#","5576"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: workaround for missing span in reference to an extension method defined in the companion object\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5640"},"#","5640"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.1 to 9.22.2\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5668"},"#","5668"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update file-tree-views from 2.1.11 to 2.1.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5667"},"#","5667"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: deduplicate auto connect requests for scala-cli\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5645"},"#","5645"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"Bump swoval to v2.1.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5659"},"#","5659"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/eatkins"},"eatkins"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: handle EOF in java completions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5644"},"#","5644"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update mill-contrib-testng from 0.11.2 to 0.11.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5652"},"#","5652"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update munit from 1.0.0-M9 to 1.0.0-M10\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5655"},"#","5655"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update ujson from 3.1.2 to 3.1.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5653"},"#","5653"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.4 to 1.9.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5654"},"#","5654"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update munit from 1.0.0-M8 to 1.0.0-M9\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5648"},"#","5648"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.22.0 to 9.22.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5647"},"#","5647"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt-scalafix, scalafix-interfaces from 0.11.0 to 0.11.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5646"},"#","5646"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: extract member with associated comments\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5639"},"#","5639"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"test: ",(0,i.kt)("inlineCode",{parentName:"li"},"single-file-config"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5641"},"#","5641"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: have ",(0,i.kt)("inlineCode",{parentName:"li"},"Dismiss.")," remember the bsp error and don't show it again\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5631"},"#","5631"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: adjust tests for 2.13.13\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5638"},"#","5638"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.5 to 0.9.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5634"},"#","5634"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: start liveness monitor only for main bsp connection\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5608"},"#","5608"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Unignore suites related to coursier shadowing\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5626"},"#","5626"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 2.13.12\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5624"},"#","5624"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.2 to 3.24.3\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5627"},"#","5627"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update sbt-jmh from 0.4.5 to 0.4.6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5628"},"#","5628"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5620"},"#","5620"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.9 to 3.12.2\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5615"},"#","5615"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Correctly choose the folder to use for a command\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5612"},"#","5612"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.13 to 3.7.14\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5616"},"#","5616"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update bloop-launcher-core from 1.5.8 to 1.5.11\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5613"},"#","5613"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: log awaiting user response in BloopInstall\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5597"},"#","5597"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jackkoenig"},"jackkoenig"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: update minimum supported gradle version\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5609"},"#","5609"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.2 to 9.22.0\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5605"},"#","5605"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.12 to 3.7.13\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5606"},"#","5606"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,i.kt)("li",{parentName:"ul"},"Update ranges on Scala CLI actionable diagnostics for ",(0,i.kt)("inlineCode",{parentName:"li"},"didChange"),(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5487"},"#","5487"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/LaurenceWarne"},"LaurenceWarne"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC7\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5601"},"#","5601"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Fix wrapper constructor, add missing constructor\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5600"},"#","5600"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Allow run in Mill BSP and remove non working test lenses\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5566"},"#","5566"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Release mtagsShared together with mtags when running single version release\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5598"},"#","5598"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"improvement: show bsp errors to the user\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5267"},"#","5267"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: skip empty lines when calculating indent for auto import\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5570"},"#","5570"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Don't use cache directory with ",(0,i.kt)("inlineCode",{parentName:"li"},"null")," in it's path\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5595"},"#","5595"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"bugfix: Incorrect docstring completions\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5593"},"#","5593"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,i.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC6\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5587"},"#","5587"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,i.kt)("li",{parentName:"ul"},"Add release notes 1.0.1\n",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5575"},"#","5575"),"\n(",(0,i.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/94015cb6.afcd422e.js b/assets/js/94015cb6.06d64522.js similarity index 99% rename from assets/js/94015cb6.afcd422e.js rename to assets/js/94015cb6.06d64522.js index 025c90aa9f3..d8368939476 100644 --- a/assets/js/94015cb6.afcd422e.js +++ b/assets/js/94015cb6.06d64522.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6520],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}var r=a.createContext({}),p=function(e){var t=a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(r.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,s=e.mdxType,o=e.originalType,r=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),m=s,h=u["".concat(r,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var r in t)hasOwnProperty.call(t,r)&&(i[r]=t[r]);i.originalType=e,i[u]="string"==typeof e?e:s,l[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var a=n(7462),s=n(3366),o=(n(7294),n(3905)),l=["components"],i={id:"emacs",title:"Emacs"},r=void 0,p={unversionedId:"editors/emacs",id:"editors/emacs",title:"Emacs",description:"Metals works in Emacs thanks to the",source:"@site/target/docs/editors/emacs.md",sourceDirName:"editors",slug:"/editors/emacs",permalink:"/metals/docs/editors/emacs",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/emacs.md",tags:[],version:"current",frontMatter:{id:"emacs",title:"Emacs"},sidebar:"docs",previous:{title:"Sublime Text",permalink:"/metals/docs/editors/sublime"},next:{title:"Online IDEs",permalink:"/metals/docs/editors/online-ides"}},c={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Custom sbt launcher",id:"custom-sbt-launcher",level:3},{value:"Speeding up import",id:"speeding-up-import",level:3},{value:"Importing changes",id:"importing-changes",level:3},{value:"LSP Tips",id:"lsp-tips",level:2},{value:"Show navigable stack trace",id:"show-navigable-stack-trace",level:3},{value:"Reference",id:"reference",level:3},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:2},{value:"Run doctor",id:"run-doctor",level:2},{value:"eglot",id:"eglot",level:3},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2}],d={toc:u},m="wrapper";function h(e){var t=e.components,n=(0,s.Z)(e,l);return(0,o.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Metals works in Emacs thanks to the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/emacs-lsp/lsp-mode"},(0,o.kt)("inlineCode",{parentName:"a"},"lsp-mode"))," package (another option is the ",(0,o.kt)("a",{parentName:"p",href:"#eglot"},"Eglot")," package)."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/KJQLMZ7.gif",alt:"Emacs demo"})),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,o.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"To use Metals in Emacs, place this snippet in your Emacs configuration (for example .emacs.d/init.el) to load\n",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode")," along with its dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},'(require \'package)\n\n;; Add melpa to your packages repositories\n(add-to-list \'package-archives \'("melpa" . "https://melpa.org/packages/") t)\n\n(package-initialize)\n\n;; Install use-package if not already installed\n(unless (package-installed-p \'use-package)\n (package-refresh-contents)\n (package-install \'use-package))\n\n(require \'use-package)\n\n;; Enable defer and ensure by default for use-package\n;; Keep auto-save/backup files separate from source code: https://github.com/scalameta/metals/issues/1027\n(setq use-package-always-defer t\n use-package-always-ensure t\n backup-directory-alist `((".*" . ,temporary-file-directory))\n auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))\n\n;; Enable scala-mode for highlighting, indentation and motion commands\n(use-package scala-mode\n :interpreter ("scala" . scala-mode))\n\n;; Enable sbt mode for executing sbt commands\n(use-package sbt-mode\n :commands sbt-start sbt-command\n :config\n ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31\n ;; allows using SPACE when in the minibuffer\n (substitute-key-definition\n \'minibuffer-complete-word\n \'self-insert-command\n minibuffer-local-completion-map)\n ;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152\n (setq sbt:program-options \'("-Dsbt.supershell=false")))\n\n;; Enable nice rendering of diagnostics like compile errors.\n(use-package flycheck\n :init (global-flycheck-mode))\n\n(use-package lsp-mode\n ;; Optional - enable lsp-mode automatically in scala files\n ;; You could also swap out lsp for lsp-deffered in order to defer loading\n :hook (scala-mode . lsp)\n (lsp-mode . lsp-lens-mode)\n :config\n ;; Uncomment following section if you would like to tune lsp-mode performance according to\n ;; https://emacs-lsp.github.io/lsp-mode/page/performance/\n ;; (setq gc-cons-threshold 100000000) ;; 100mb\n ;; (setq read-process-output-max (* 1024 1024)) ;; 1mb\n ;; (setq lsp-idle-delay 0.500)\n ;; (setq lsp-log-io nil)\n ;; (setq lsp-completion-provider :capf)\n (setq lsp-prefer-flymake nil)\n ;; Makes LSP shutdown the metals server when all buffers in the project are closed.\n ;; https://emacs-lsp.github.io/lsp-mode/page/settings/mode/#lsp-keep-workspace-alive\n (setq lsp-keep-workspace-alive nil))\n\n;; Add metals backend for lsp-mode\n(use-package lsp-metals)\n\n;; Enable nice rendering of documentation on hover\n;; Warning: on some systems this package can reduce your emacs responsiveness significally.\n;; (See: https://emacs-lsp.github.io/lsp-mode/page/performance/)\n;; In that case you have to not only disable this but also remove from the packages since\n;; lsp-mode can activate it automatically.\n(use-package lsp-ui)\n\n;; lsp-mode supports snippets, but in order for them to work you need to use yasnippet\n;; If you don\'t want to use snippets set lsp-enable-snippet to nil in your lsp-mode settings\n;; to avoid odd behavior with snippets and indentation\n(use-package yasnippet)\n\n;; Use company-capf as a completion provider.\n;;\n;; To Company-lsp users:\n;; Company-lsp is no longer maintained and has been removed from MELPA.\n;; Please migrate to company-capf.\n(use-package company\n :hook (scala-mode . company-mode)\n :config\n (setq lsp-completion-provider :capf))\n\n;; Posframe is a pop-up tool that must be manually installed for dap-mode\n(use-package posframe)\n\n;; Use the Debug Adapter Protocol for running tests and debugging\n(use-package dap-mode\n :hook\n (lsp-mode . dap-mode)\n (lsp-mode . dap-ui-mode))\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"You may need to disable other packages like ",(0,o.kt)("inlineCode",{parentName:"p"},"ensime")," or sbt server to prevent\nconflicts with Metals.")),(0,o.kt)("p",null,"Next you have to install metals server. Emacs can do it for you when ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode"),"\nis enabled in a scala buffer or via ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-install-server")," command. Also you can\ndo it manually executing ",(0,o.kt)("inlineCode",{parentName:"p"},"coursier install metals")," and configuring ",(0,o.kt)("inlineCode",{parentName:"p"},"$PATH"),"\nvariable properly."),(0,o.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,o.kt)("p",null,'The first time you open Metals in a new workspace it prompts you to import the build.\nType "Import build" or press ',(0,o.kt)("inlineCode",{parentName:"p"},"Tab"),' and select "Import build" to start the installation step.'),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/UdwMQFk.png",alt:"Import build"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},'"Not now" disables this prompt for 2 minutes.'),(0,o.kt)("li",{parentName:"ul"},'"Don\'t show again" disables this prompt forever, use ',(0,o.kt)("inlineCode",{parentName:"li"},"rm -rf .metals/")," to re-enable\nthe prompt."),(0,o.kt)("li",{parentName:"ul"},"Use ",(0,o.kt)("inlineCode",{parentName:"li"},"tail -f .metals/metals.log")," to watch the build import progress."),(0,o.kt)("li",{parentName:"ul"},"Behind the scenes, Metals uses ",(0,o.kt)("a",{parentName:"li",href:"https://scalacenter.github.io/bloop/"},"Bloop")," to\nimport sbt builds, but you don't need Bloop installed on your machine to run this step.")),(0,o.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,o.kt)("inlineCode",{parentName:"p"},"*.scala"),"\nfiles."),(0,o.kt)("p",null,"Once the sources have compiled successfully, you can navigate the codebase with\ngoto definition."),(0,o.kt)("h3",{id:"custom-sbt-launcher"},"Custom sbt launcher"),(0,o.kt)("p",null,"By default, Metals runs an embedded ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt-launch.jar")," launcher that respects ",(0,o.kt)("inlineCode",{parentName:"p"},".sbtopts")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".jvmopts"),".\nHowever, the environment variables ",(0,o.kt)("inlineCode",{parentName:"p"},"SBT_OPTS")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_OPTS")," are not respected."),(0,o.kt)("p",null,"Update the server property ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.sbt-script=/path/to/sbt")," to use a custom\n",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," script instead of the default Metals launcher if you need further\ncustomizations like reading environment variables."),(0,o.kt)("h3",{id:"speeding-up-import"},"Speeding up import"),(0,o.kt)("p",null,'The "Import build" step can take a long time, especially the first time you\nrun it in a new build. The exact time depends on the complexity of the build and\nif library dependencies need to be downloaded. For example, this step can take\neverything from 10 seconds in small cached builds up to 10-15 minutes in large\nuncached builds.'),(0,o.kt)("p",null,"Consult the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/build-tools/sbt#speeding-up-build-export"},"Bloop documentation"),"\nto learn how to speed up build import."),(0,o.kt)("h3",{id:"importing-changes"},"Importing changes"),(0,o.kt)("p",null,"When you change ",(0,o.kt)("inlineCode",{parentName:"p"},"build.sbt")," or sources under ",(0,o.kt)("inlineCode",{parentName:"p"},"project/"),", you will be prompted to\nre-import the build."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/UFK0p8i.png",alt:"Import sbt changes"})),(0,o.kt)("h2",{id:"lsp-tips"},"LSP Tips"),(0,o.kt)("h3",{id:"show-navigable-stack-trace"},"Show navigable stack trace"),(0,o.kt)("p",null,"You can annotate your stack trace with code lenses (which requires the\nfollowing bit of configuration mentioned earlier: ",(0,o.kt)("inlineCode",{parentName:"p"},"(lsp-mode . lsp-lens-mode)"),").\nThese allow you to run actions from your code."),(0,o.kt)("p",null,"One of these actions allow you to navigate your stack trace."),(0,o.kt)("p",null,"You can annotate any stack trace by marking a stack trace with your\nregion and using ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-analyze-stacktrace")," on it."),(0,o.kt)("p",null,'This will open a new Scala buffer that has code lenses annotations:\njust click on the small "open" annotation to navigate to the source\ncode relative to your stack trace.'),(0,o.kt)("p",null,"This will work as long as the buffer you are marking your stack trace\non exists within the project directory tracked by ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode"),", because\n",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-metals-analyze-stacktrace")," needs the ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp")," workspace to find the\nlocation of your errors."),(0,o.kt)("p",null,"Note that if you try to do that from ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt-mode"),", you may get an error\nunless you patch ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-find-workspace")," with the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},'(defun lsp-find-workspace (server-id &optional file-name)\n "Find workspace for SERVER-ID for FILE-NAME."\n (-when-let* ((session (lsp-session))\n (folder->servers (lsp-session-folder->servers session))\n (workspaces (if file-name\n (let* ((folder (lsp-find-session-folder session file-name))\n (folder-last-char (substring folder (- (length folder) 1) (length folder)))\n (key (if (string= folder-last-char "/") (substring folder 0 (- (length folder) 1)) folder)))\n (gethash key folder->servers))\n (lsp--session-workspaces session))))\n\n (--first (eq (lsp--client-server-id (lsp--workspace-client it)) server-id) workspaces)))\n')),(0,o.kt)("p",null,"The above shall become unnecessary once ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/emacs-lsp/lsp-mode/issues/2610"},"this issue")," is solved."),(0,o.kt)("h3",{id:"reference"},"Reference"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=x7ey0ifcqAg&feature=youtu.be"},"Yurii Ostapchuk at #ScalaUA\u200b - How I learned to stop worrying and love LSP (and Emacs :))"))),(0,o.kt)("h2",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,o.kt)("p",null,"To manually trigger a build import, run ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-build-import"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/SvGXJDK.png",alt:"Import build command"})),(0,o.kt)("h2",{id:"run-doctor"},"Run doctor"),(0,o.kt)("p",null,"Run ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-doctor-run")," to troubleshoot potential configuration problems\nin your build."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/yelm0jd.png",alt:"Run doctor command"})),(0,o.kt)("h3",{id:"eglot"},"eglot"),(0,o.kt)("p",null,"There is an alternative LSP client called\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/joaotavora/eglot"},"eglot")," that might be worth trying out if\nyou want to use an alternative to lsp-mode."),(0,o.kt)("p",null,"To configure Eglot with Metals:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},"(require 'package)\n\n;; Add melpa-stable to your packages repositories\n(add-to-list 'package-archives '(\"melpa-stable\" . \"https://stable.melpa.org/packages/\") t)\n\n(package-initialize)\n\n;; Install use-package if not already installed\n(unless (package-installed-p 'use-package)\n (package-refresh-contents)\n (package-install 'use-package))\n\n(require 'use-package)\n\n;; Enable defer and ensure by default for use-package\n(setq use-package-always-defer t\n use-package-always-ensure t)\n\n;; Enable scala-mode and sbt-mode\n(use-package scala-mode\n :interpreter (\"scala\" . scala-mode))\n\n;; Enable sbt mode for executing sbt commands\n(use-package sbt-mode\n :commands sbt-start sbt-command\n :config\n ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31\n ;; allows using SPACE when in the minibuffer\n (substitute-key-definition\n 'minibuffer-complete-word\n 'self-insert-command\n minibuffer-local-completion-map)\n ;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152\n (setq sbt:program-options '(\"-Dsbt.supershell=false\")))\n\n(use-package eglot\n :pin melpa-stable\n ;; (optional) Automatically start metals for Scala files.\n :hook (scala-mode . eglot-ensure))\n")),(0,o.kt)("p",null,"If you start Emacs now then it will fail since the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals-emacs")," binary does\nnot exist yet."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,o.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.0.1 -o metals -f\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.client=emacs")," flag is important since it configures Metals for\nusage with Emacs."),(0,o.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,o.kt)("p",null,"The Metals server places logs and other files in the ",(0,o.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,o.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,o.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,o.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,o.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,o.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,o.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,o.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,o.kt)("h2",{id:"worksheets"},"Worksheets"),(0,o.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,o.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,o.kt)("p",null,"To get started with a worksheet you can either use the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,o.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,o.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,o.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,o.kt)("h3",{id:"evaluations"},"Evaluations"),(0,o.kt)("p",null,"After saving you'll see the result of the expression as a comment as the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the comment to expand."),(0,o.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,o.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,o.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,o.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,o.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,o.kt)("p",null,"You can also import ",(0,o.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,o.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,o.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,o.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,o.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,o.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,o.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,o.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,o.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,o.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,o.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6520],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}var r=a.createContext({}),p=function(e){var t=a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(r.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,s=e.mdxType,o=e.originalType,r=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),m=s,h=u["".concat(r,".").concat(m)]||u[m]||d[m]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var r in t)hasOwnProperty.call(t,r)&&(i[r]=t[r]);i.originalType=e,i[u]="string"==typeof e?e:s,l[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>p,toc:()=>u});var a=n(7462),s=n(3366),o=(n(7294),n(3905)),l=["components"],i={id:"emacs",title:"Emacs"},r=void 0,p={unversionedId:"editors/emacs",id:"editors/emacs",title:"Emacs",description:"Metals works in Emacs thanks to the",source:"@site/target/docs/editors/emacs.md",sourceDirName:"editors",slug:"/editors/emacs",permalink:"/metals/docs/editors/emacs",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/emacs.md",tags:[],version:"current",frontMatter:{id:"emacs",title:"Emacs"},sidebar:"docs",previous:{title:"Sublime Text",permalink:"/metals/docs/editors/sublime"},next:{title:"Online IDEs",permalink:"/metals/docs/editors/online-ides"}},c={},u=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Custom sbt launcher",id:"custom-sbt-launcher",level:3},{value:"Speeding up import",id:"speeding-up-import",level:3},{value:"Importing changes",id:"importing-changes",level:3},{value:"LSP Tips",id:"lsp-tips",level:2},{value:"Show navigable stack trace",id:"show-navigable-stack-trace",level:3},{value:"Reference",id:"reference",level:3},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:2},{value:"Run doctor",id:"run-doctor",level:2},{value:"eglot",id:"eglot",level:3},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2}],d={toc:u},m="wrapper";function h(e){var t=e.components,n=(0,s.Z)(e,l);return(0,o.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Metals works in Emacs thanks to the\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/emacs-lsp/lsp-mode"},(0,o.kt)("inlineCode",{parentName:"a"},"lsp-mode"))," package (another option is the ",(0,o.kt)("a",{parentName:"p",href:"#eglot"},"Eglot")," package)."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/KJQLMZ7.gif",alt:"Emacs demo"})),(0,o.kt)("h2",{id:"requirements"},"Requirements"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,o.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"To use Metals in Emacs, place this snippet in your Emacs configuration (for example .emacs.d/init.el) to load\n",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode")," along with its dependencies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},'(require \'package)\n\n;; Add melpa to your packages repositories\n(add-to-list \'package-archives \'("melpa" . "https://melpa.org/packages/") t)\n\n(package-initialize)\n\n;; Install use-package if not already installed\n(unless (package-installed-p \'use-package)\n (package-refresh-contents)\n (package-install \'use-package))\n\n(require \'use-package)\n\n;; Enable defer and ensure by default for use-package\n;; Keep auto-save/backup files separate from source code: https://github.com/scalameta/metals/issues/1027\n(setq use-package-always-defer t\n use-package-always-ensure t\n backup-directory-alist `((".*" . ,temporary-file-directory))\n auto-save-file-name-transforms `((".*" ,temporary-file-directory t)))\n\n;; Enable scala-mode for highlighting, indentation and motion commands\n(use-package scala-mode\n :interpreter ("scala" . scala-mode))\n\n;; Enable sbt mode for executing sbt commands\n(use-package sbt-mode\n :commands sbt-start sbt-command\n :config\n ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31\n ;; allows using SPACE when in the minibuffer\n (substitute-key-definition\n \'minibuffer-complete-word\n \'self-insert-command\n minibuffer-local-completion-map)\n ;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152\n (setq sbt:program-options \'("-Dsbt.supershell=false")))\n\n;; Enable nice rendering of diagnostics like compile errors.\n(use-package flycheck\n :init (global-flycheck-mode))\n\n(use-package lsp-mode\n ;; Optional - enable lsp-mode automatically in scala files\n ;; You could also swap out lsp for lsp-deffered in order to defer loading\n :hook (scala-mode . lsp)\n (lsp-mode . lsp-lens-mode)\n :config\n ;; Uncomment following section if you would like to tune lsp-mode performance according to\n ;; https://emacs-lsp.github.io/lsp-mode/page/performance/\n ;; (setq gc-cons-threshold 100000000) ;; 100mb\n ;; (setq read-process-output-max (* 1024 1024)) ;; 1mb\n ;; (setq lsp-idle-delay 0.500)\n ;; (setq lsp-log-io nil)\n ;; (setq lsp-completion-provider :capf)\n (setq lsp-prefer-flymake nil)\n ;; Makes LSP shutdown the metals server when all buffers in the project are closed.\n ;; https://emacs-lsp.github.io/lsp-mode/page/settings/mode/#lsp-keep-workspace-alive\n (setq lsp-keep-workspace-alive nil))\n\n;; Add metals backend for lsp-mode\n(use-package lsp-metals)\n\n;; Enable nice rendering of documentation on hover\n;; Warning: on some systems this package can reduce your emacs responsiveness significally.\n;; (See: https://emacs-lsp.github.io/lsp-mode/page/performance/)\n;; In that case you have to not only disable this but also remove from the packages since\n;; lsp-mode can activate it automatically.\n(use-package lsp-ui)\n\n;; lsp-mode supports snippets, but in order for them to work you need to use yasnippet\n;; If you don\'t want to use snippets set lsp-enable-snippet to nil in your lsp-mode settings\n;; to avoid odd behavior with snippets and indentation\n(use-package yasnippet)\n\n;; Use company-capf as a completion provider.\n;;\n;; To Company-lsp users:\n;; Company-lsp is no longer maintained and has been removed from MELPA.\n;; Please migrate to company-capf.\n(use-package company\n :hook (scala-mode . company-mode)\n :config\n (setq lsp-completion-provider :capf))\n\n;; Posframe is a pop-up tool that must be manually installed for dap-mode\n(use-package posframe)\n\n;; Use the Debug Adapter Protocol for running tests and debugging\n(use-package dap-mode\n :hook\n (lsp-mode . dap-mode)\n (lsp-mode . dap-ui-mode))\n')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"You may need to disable other packages like ",(0,o.kt)("inlineCode",{parentName:"p"},"ensime")," or sbt server to prevent\nconflicts with Metals.")),(0,o.kt)("p",null,"Next you have to install metals server. Emacs can do it for you when ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode"),"\nis enabled in a scala buffer or via ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-install-server")," command. Also you can\ndo it manually executing ",(0,o.kt)("inlineCode",{parentName:"p"},"coursier install metals")," and configuring ",(0,o.kt)("inlineCode",{parentName:"p"},"$PATH"),"\nvariable properly."),(0,o.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,o.kt)("p",null,'The first time you open Metals in a new workspace it prompts you to import the build.\nType "Import build" or press ',(0,o.kt)("inlineCode",{parentName:"p"},"Tab"),' and select "Import build" to start the installation step.'),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/UdwMQFk.png",alt:"Import build"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},'"Not now" disables this prompt for 2 minutes.'),(0,o.kt)("li",{parentName:"ul"},'"Don\'t show again" disables this prompt forever, use ',(0,o.kt)("inlineCode",{parentName:"li"},"rm -rf .metals/")," to re-enable\nthe prompt."),(0,o.kt)("li",{parentName:"ul"},"Use ",(0,o.kt)("inlineCode",{parentName:"li"},"tail -f .metals/metals.log")," to watch the build import progress."),(0,o.kt)("li",{parentName:"ul"},"Behind the scenes, Metals uses ",(0,o.kt)("a",{parentName:"li",href:"https://scalacenter.github.io/bloop/"},"Bloop")," to\nimport sbt builds, but you don't need Bloop installed on your machine to run this step.")),(0,o.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,o.kt)("inlineCode",{parentName:"p"},"*.scala"),"\nfiles."),(0,o.kt)("p",null,"Once the sources have compiled successfully, you can navigate the codebase with\ngoto definition."),(0,o.kt)("h3",{id:"custom-sbt-launcher"},"Custom sbt launcher"),(0,o.kt)("p",null,"By default, Metals runs an embedded ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt-launch.jar")," launcher that respects ",(0,o.kt)("inlineCode",{parentName:"p"},".sbtopts")," and ",(0,o.kt)("inlineCode",{parentName:"p"},".jvmopts"),".\nHowever, the environment variables ",(0,o.kt)("inlineCode",{parentName:"p"},"SBT_OPTS")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_OPTS")," are not respected."),(0,o.kt)("p",null,"Update the server property ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.sbt-script=/path/to/sbt")," to use a custom\n",(0,o.kt)("inlineCode",{parentName:"p"},"sbt")," script instead of the default Metals launcher if you need further\ncustomizations like reading environment variables."),(0,o.kt)("h3",{id:"speeding-up-import"},"Speeding up import"),(0,o.kt)("p",null,'The "Import build" step can take a long time, especially the first time you\nrun it in a new build. The exact time depends on the complexity of the build and\nif library dependencies need to be downloaded. For example, this step can take\neverything from 10 seconds in small cached builds up to 10-15 minutes in large\nuncached builds.'),(0,o.kt)("p",null,"Consult the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/build-tools/sbt#speeding-up-build-export"},"Bloop documentation"),"\nto learn how to speed up build import."),(0,o.kt)("h3",{id:"importing-changes"},"Importing changes"),(0,o.kt)("p",null,"When you change ",(0,o.kt)("inlineCode",{parentName:"p"},"build.sbt")," or sources under ",(0,o.kt)("inlineCode",{parentName:"p"},"project/"),", you will be prompted to\nre-import the build."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/UFK0p8i.png",alt:"Import sbt changes"})),(0,o.kt)("h2",{id:"lsp-tips"},"LSP Tips"),(0,o.kt)("h3",{id:"show-navigable-stack-trace"},"Show navigable stack trace"),(0,o.kt)("p",null,"You can annotate your stack trace with code lenses (which requires the\nfollowing bit of configuration mentioned earlier: ",(0,o.kt)("inlineCode",{parentName:"p"},"(lsp-mode . lsp-lens-mode)"),").\nThese allow you to run actions from your code."),(0,o.kt)("p",null,"One of these actions allow you to navigate your stack trace."),(0,o.kt)("p",null,"You can annotate any stack trace by marking a stack trace with your\nregion and using ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-analyze-stacktrace")," on it."),(0,o.kt)("p",null,'This will open a new Scala buffer that has code lenses annotations:\njust click on the small "open" annotation to navigate to the source\ncode relative to your stack trace.'),(0,o.kt)("p",null,"This will work as long as the buffer you are marking your stack trace\non exists within the project directory tracked by ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-mode"),", because\n",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-metals-analyze-stacktrace")," needs the ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp")," workspace to find the\nlocation of your errors."),(0,o.kt)("p",null,"Note that if you try to do that from ",(0,o.kt)("inlineCode",{parentName:"p"},"sbt-mode"),", you may get an error\nunless you patch ",(0,o.kt)("inlineCode",{parentName:"p"},"lsp-find-workspace")," with the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},'(defun lsp-find-workspace (server-id &optional file-name)\n "Find workspace for SERVER-ID for FILE-NAME."\n (-when-let* ((session (lsp-session))\n (folder->servers (lsp-session-folder->servers session))\n (workspaces (if file-name\n (let* ((folder (lsp-find-session-folder session file-name))\n (folder-last-char (substring folder (- (length folder) 1) (length folder)))\n (key (if (string= folder-last-char "/") (substring folder 0 (- (length folder) 1)) folder)))\n (gethash key folder->servers))\n (lsp--session-workspaces session))))\n\n (--first (eq (lsp--client-server-id (lsp--workspace-client it)) server-id) workspaces)))\n')),(0,o.kt)("p",null,"The above shall become unnecessary once ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/emacs-lsp/lsp-mode/issues/2610"},"this issue")," is solved."),(0,o.kt)("h3",{id:"reference"},"Reference"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=x7ey0ifcqAg&feature=youtu.be"},"Yurii Ostapchuk at #ScalaUA\u200b - How I learned to stop worrying and love LSP (and Emacs :))"))),(0,o.kt)("h2",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,o.kt)("p",null,"To manually trigger a build import, run ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-build-import"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/SvGXJDK.png",alt:"Import build command"})),(0,o.kt)("h2",{id:"run-doctor"},"Run doctor"),(0,o.kt)("p",null,"Run ",(0,o.kt)("inlineCode",{parentName:"p"},"M-x lsp-metals-doctor-run")," to troubleshoot potential configuration problems\nin your build."),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://i.imgur.com/yelm0jd.png",alt:"Run doctor command"})),(0,o.kt)("h3",{id:"eglot"},"eglot"),(0,o.kt)("p",null,"There is an alternative LSP client called\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/joaotavora/eglot"},"eglot")," that might be worth trying out if\nyou want to use an alternative to lsp-mode."),(0,o.kt)("p",null,"To configure Eglot with Metals:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-elisp"},"(require 'package)\n\n;; Add melpa-stable to your packages repositories\n(add-to-list 'package-archives '(\"melpa-stable\" . \"https://stable.melpa.org/packages/\") t)\n\n(package-initialize)\n\n;; Install use-package if not already installed\n(unless (package-installed-p 'use-package)\n (package-refresh-contents)\n (package-install 'use-package))\n\n(require 'use-package)\n\n;; Enable defer and ensure by default for use-package\n(setq use-package-always-defer t\n use-package-always-ensure t)\n\n;; Enable scala-mode and sbt-mode\n(use-package scala-mode\n :interpreter (\"scala\" . scala-mode))\n\n;; Enable sbt mode for executing sbt commands\n(use-package sbt-mode\n :commands sbt-start sbt-command\n :config\n ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31\n ;; allows using SPACE when in the minibuffer\n (substitute-key-definition\n 'minibuffer-complete-word\n 'self-insert-command\n minibuffer-local-completion-map)\n ;; sbt-supershell kills sbt-mode: https://github.com/hvesalai/emacs-sbt-mode/issues/152\n (setq sbt:program-options '(\"-Dsbt.supershell=false\")))\n\n(use-package eglot\n :pin melpa-stable\n ;; (optional) Automatically start metals for Scala files.\n :hook (scala-mode . eglot-ensure))\n")),(0,o.kt)("p",null,"If you start Emacs now then it will fail since the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals-emacs")," binary does\nnot exist yet."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,o.kt)("p",null,"(optional) It's recommended to enable JVM string de-duplication and provide a\ngenerous stack size and memory options."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"coursier bootstrap \\\n --java-opt -XX:+UseG1GC \\\n --java-opt -XX:+UseStringDeduplication \\\n --java-opt -Xss4m \\\n --java-opt -Xms100m \\\n org.scalameta:metals_2.13:1.1.0 -o metals -f\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"-Dmetals.client=emacs")," flag is important since it configures Metals for\nusage with Emacs."),(0,o.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,o.kt)("p",null,"The Metals server places logs and other files in the ",(0,o.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,o.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,o.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,o.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,o.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,o.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,o.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,o.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,o.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,o.kt)("h2",{id:"worksheets"},"Worksheets"),(0,o.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,o.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,o.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,o.kt)("p",null,"To get started with a worksheet you can either use the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,o.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,o.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,o.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,o.kt)("h3",{id:"evaluations"},"Evaluations"),(0,o.kt)("p",null,"After saving you'll see the result of the expression as a comment as the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the comment to expand."),(0,o.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,o.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,o.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,o.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,o.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,o.kt)("p",null,"You can also import ",(0,o.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,o.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,o.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,o.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,o.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,o.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,o.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),".\nThis should run all the rules defined in your ",(0,o.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,o.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,o.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,o.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,o.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,o.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/970a5f4e.a17fc660.js b/assets/js/970a5f4e.a17fc660.js new file mode 100644 index 00000000000..15e19c89dd7 --- /dev/null +++ b/assets/js/970a5f4e.a17fc660.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6561],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),c=o,h=d["".concat(s,".").concat(c)]||d[c]||m[c]||i;return n?a.createElement(h,r(r({ref:t},u),{},{components:n})):a.createElement(h,r({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>d});var a=n(7462),o=n(3366),i=(n(7294),n(3905)),r=["components"],l={id:"vscode",sidebar_label:"VS Code",title:"Visual Studio Code"},s=void 0,p={unversionedId:"editors/vscode",id:"editors/vscode",title:"Visual Studio Code",description:"Goto Definition",source:"@site/target/docs/editors/vscode.md",sourceDirName:"editors",slug:"/editors/vscode",permalink:"/metals/docs/editors/vscode",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/vscode.md",tags:[],version:"current",frontMatter:{id:"vscode",sidebar_label:"VS Code",title:"Visual Studio Code"},sidebar:"docs",previous:{title:"Overview",permalink:"/metals/docs/"},next:{title:"Vim",permalink:"/metals/docs/editors/vim"}},u={},d=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Custom sbt launcher",id:"custom-sbt-launcher",level:3},{value:"Speeding up import",id:"speeding-up-import",level:3},{value:"Importing changes",id:"importing-changes",level:3},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:3},{value:"Run doctor",id:"run-doctor",level:2},{value:"Configure Java version",id:"configure-java-version",level:2},{value:"macOS",id:"macos",level:3},{value:"Custom artifact repositories (Maven or Ivy resolvers)",id:"custom-artifact-repositories-maven-or-ivy-resolvers",level:2},{value:"HTTP proxy",id:"http-proxy",level:2},{value:'Using latest Metals SNAPSHOT',id:"using-latest-metals-snapshot",level:2},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Show document symbols",id:"show-document-symbols",level:2},{value:"Go to parent code lenses",id:"go-to-parent-code-lenses",level:2},{value:"Create new project from template",id:"create-new-project-from-template",level:2},{value:"Running and debugging your code",id:"running-and-debugging-your-code",level:2},{value:"via code lenses",id:"via-code-lenses",level:3},{value:"via a launch.json configuration",id:"via-a-launchjson-configuration",level:3},{value:"via Metals' commands",id:"via-metals-commands",level:3},{value:"On type formatting for multiline string formatting",id:"on-type-formatting-for-multiline-string-formatting",level:2},{value:"Formatting on paste for multiline strings",id:"formatting-on-paste-for-multiline-strings",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2},{value:"Searching a symbol in the workspace",id:"searching-a-symbol-in-the-workspace",level:2},{value:"Test Explorer",id:"test-explorer",level:2},{value:"Coming from IntelliJ",id:"coming-from-intellij",level:2},{value:"GitHub Codespaces and GitHub.dev support",id:"github-codespaces-and-githubdev-support",level:2}],m={toc:d},c="wrapper";function h(e){var t=e.components,n=(0,o.Z)(e,r);return(0,i.kt)(c,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48776422-1f764f00-ecd0-11e8-96d1-170f2354d50e.gif",alt:"Goto Definition"})),(0,i.kt)("h2",{id:"requirements"},"Requirements"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,i.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,i.kt)("h2",{id:"installation"},"Installation"),(0,i.kt)("p",null,"Install the Metals extension from the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=scalameta.metals"},"Marketplace")," by clicking on this badge ",(0,i.kt)("a",{parentName:"p",href:"vscode:extension/scalameta.metals"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/badge/metals-vscode-blue.png",alt:"Install Metals extension"}))," or via the VS Code editor:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/Qew0fNH.png",alt:"install stable version"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Make sure to disable the extensions\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=dragos.scala-lsp"},"Scala Language Server"),"\nand\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=lightbend.vscode-sbt-scala"},"Scala (sbt)"),"\nif they are installed. The\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=lampepfl.dotty"},"Dotty Language Server"),"\ndoes ",(0,i.kt)("strong",{parentName:"p"},"not")," need to be disabled because the Metals and Dotty extensions don't\nconflict with each other. However, if you want to work on Scala 3 code in a\nworkspace that was previously opened with ",(0,i.kt)("inlineCode",{parentName:"p"},"Dotty Language Server")," you need to\nfirst remove ",(0,i.kt)("inlineCode",{parentName:"p"},".dotty-ide-artifact")," before opening the workspace with Metals.")),(0,i.kt)("p",null,"Next, open a directory containing your Scala code. The extension activates when\nthe main directory contains ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sbt")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sc")," file, a Scala file is\nopened, which includes ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"*.scala")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sc")," file, or a standard Scala\ndirectory structure ",(0,i.kt)("inlineCode",{parentName:"p"},"src/main/scala")," is detected."),(0,i.kt)("p",null,"It is also possible to opt in to install the pre-release version and try out the latest cutting edge features from Metals server.\nApart from new features, pre-release versions also include many bugfixes. It's encouraged to use them with ",(0,i.kt)("a",{parentName:"p",href:"#SNAPSHOT"},"SNAPSHOT")," releases of Metals server. Using pre-release versions may result in less stable experience and it is not indented for beginners.\nPre-release versions follow ",(0,i.kt)("inlineCode",{parentName:"p"},"major.minor.PATCH")," versioning."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/CzOTleE.png",alt:"Install the pre-release extension"})),(0,i.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,i.kt)("p",null,'The first time you open Metals in a new workspace it prompts you to import the build.\nClick "Import build" to start the installation step.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/0VqZWay.png",alt:"Import build"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'"Not now" disables this prompt for 2 minutes.'),(0,i.kt)("li",{parentName:"ul"},'"Don\'t show again" disables this prompt forever, use ',(0,i.kt)("inlineCode",{parentName:"li"},"rm -rf .metals/")," to re-enable\nthe prompt."),(0,i.kt)("li",{parentName:"ul"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"tail -f .metals/metals.log")," to watch the build import progress."),(0,i.kt)("li",{parentName:"ul"},"Behind the scenes, Metals uses ",(0,i.kt)("a",{parentName:"li",href:"https://scalacenter.github.io/bloop/"},"Bloop")," to\nimport sbt builds, but you don't need Bloop installed on your machine to run this step.")),(0,i.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,i.kt)("inlineCode",{parentName:"p"},"*.scala"),"\nfiles."),(0,i.kt)("p",null,"Once the sources have compiled successfully, you can navigate the codebase with\ngoto definition."),(0,i.kt)("h3",{id:"custom-sbt-launcher"},"Custom sbt launcher"),(0,i.kt)("p",null,"By default, Metals runs an embedded ",(0,i.kt)("inlineCode",{parentName:"p"},"sbt-launch.jar")," launcher that respects ",(0,i.kt)("inlineCode",{parentName:"p"},".sbtopts")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".jvmopts"),".\nHowever, the environment variables ",(0,i.kt)("inlineCode",{parentName:"p"},"SBT_OPTS")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_OPTS")," are not respected."),(0,i.kt)("p",null,'Update the "Sbt Script" setting to use a custom ',(0,i.kt)("inlineCode",{parentName:"p"},"sbt")," script instead of the\ndefault Metals launcher if you need further customizations like reading environment\nvariables."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/NuwEBe4.png",alt:"Sbt Launcher"})),(0,i.kt)("h3",{id:"speeding-up-import"},"Speeding up import"),(0,i.kt)("p",null,'The "Import build" step can take a long time, especially the first time you\nrun it in a new build. The exact time depends on the complexity of the build and\nif library dependencies need to be downloaded. For example, this step can take\neverything from 10 seconds in small cached builds up to 10-15 minutes in large\nuncached builds.'),(0,i.kt)("p",null,"Consult the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/build-tools/sbt#speeding-up-build-export"},"Bloop documentation"),"\nto learn how to speed up build import."),(0,i.kt)("h3",{id:"importing-changes"},"Importing changes"),(0,i.kt)("p",null,"When you change ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sbt")," or sources under ",(0,i.kt)("inlineCode",{parentName:"p"},"project/"),", you will be prompted to\nre-import the build."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/72kdZkL.png",alt:"Import sbt changes"})),(0,i.kt)("h3",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,i.kt)("p",null,'To manually trigger a build import, execute the "Import build" command through\nthe command palette (',(0,i.kt)("inlineCode",{parentName:"p"},"Cmd + Shift + P"),")."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/QHLKt8u.png",alt:"Import build command"})),(0,i.kt)("h2",{id:"run-doctor"},"Run doctor"),(0,i.kt)("p",null,'Execute the "Run Doctor" through the command palette to troubleshoot potential\nconfiguration problems in your workspace.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/K02g0UM.png",alt:"Run doctor command"})),(0,i.kt)("h2",{id:"configure-java-version"},"Configure Java version"),(0,i.kt)("p",null,"The VS Code plugin uses by default the ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable (via\n",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/locate-java-home"},(0,i.kt)("inlineCode",{parentName:"a"},"locate-java-home")),") to locate\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"java"),' executable. To override the default Java home location, update the\n"Java Home" variable in the settings menu.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/sKrPKk2.png",alt:"Java Home setting"})),(0,i.kt)("p",null,"If this setting is defined, the VS Code plugin uses the custom path instead of\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable."),(0,i.kt)("h3",{id:"macos"},"macOS"),(0,i.kt)("p",null,"To globally configure ",(0,i.kt)("inlineCode",{parentName:"p"},"$JAVA_HOME")," for all GUI applications, see\n",(0,i.kt)("a",{parentName:"p",href:"https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x"},"this Stackoverflow answer"),"."),(0,i.kt)("p",null,"If you prefer to manually configure Java home through VS Code, run the following\ncommand to copy the Java 8 home path."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"/usr/libexec/java_home -v 1.8 | pbcopy\n")),(0,i.kt)("h2",{id:"custom-artifact-repositories-maven-or-ivy-resolvers"},"Custom artifact repositories (Maven or Ivy resolvers)"),(0,i.kt)("p",null,"Use the 'Custom Repositories' setting for the Metals VS Code extension to tell\n",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/docs/other-proxy"},"Coursier")," to try to download Metals\nartifacts from your private artifact repository."),(0,i.kt)("p",null,"Use ",(0,i.kt)("inlineCode",{parentName:"p"},".jvmopts")," to set sbt options\n(",(0,i.kt)("a",{parentName:"p",href:"https://www.scala-sbt.org/1.0/docs/Proxy-Repositories.html"},"https://www.scala-sbt.org/1.0/docs/Proxy-Repositories.html"),") for\n",(0,i.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall")," which resolves library dependencies. You can also provide a\ncustom sbt script (see 'Custom sbt launcher')."),(0,i.kt)("h2",{id:"http-proxy"},"HTTP proxy"),(0,i.kt)("p",null,"Metals uses ",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/docs/other-proxy"},"Coursier")," to download\nartifacts from Maven Central. To use Metals behind an HTTP proxy, configure the\nsystem properties ",(0,i.kt)("inlineCode",{parentName:"p"},"-Dhttps.proxyHost=\u2026 -Dhttps.proxyPort=\u2026")," in one of the\nfollowing locations:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".jvmopts")," file in the workspace directory."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"JAVA_OPTS")," environment variable, make sure to start ",(0,i.kt)("inlineCode",{parentName:"li"},"code")," from your terminal\nwhen using this option since environment variables don't always propagate\ncorrectly when opening VS Code as a GUI application outside a terminal."),(0,i.kt)("li",{parentName:"ul"},'"Server Properties" setting for the Metals VS Code extension, which can be\nconfigured per-workspace or per-user.')),(0,i.kt)("h2",{id:"using-latest-metals-snapshot"},"Using latest Metals ",(0,i.kt)("a",{name:"SNAPSHOT"},"SNAPSHOT")),(0,i.kt)("p",null,'Update the "Server Version" setting to try out the latest pending Metals\nfeatures.'),(0,i.kt)("table",null,(0,i.kt)("thead",null,(0,i.kt)("tr",null,(0,i.kt)("th",null,"Version"),(0,i.kt)("th",null,"Published"))),(0,i.kt)("tbody",null,(0,i.kt)("tr",null,(0,i.kt)("td",null,"1.1.0"),(0,i.kt)("td",null,"17 Oct 2023 11:43")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"1.1.0+1-4afaa354-SNAPSHOT"),(0,i.kt)("td",null,"17 Oct 2023 12:57")))),'Run the "Reload Window" command after updating the setting for the new version to take effect.',(0,i.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,i.kt)("p",null,"The Metals server places logs and other files in the ",(0,i.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,i.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,i.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,i.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,i.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,i.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,i.kt)("h2",{id:"show-document-symbols"},"Show document symbols"),(0,i.kt)("p",null,'Run the "Explorer: Focus on Outline View" command to open the symbol outline for\nthe current file in the sidebar.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/T0kVJsr.gif",alt:"Document Symbols Outline"})),(0,i.kt)("p",null,'Run the "Open Symbol in File" command to search for a symbol in the current file\nwithout opening the sidebar.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/0PJ4brd.png",alt:"Document Symbols Command"})),(0,i.kt)("p",null,"As you type, the symbol outline is also visible at the top of the file.\n",(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/L217n4q.png",alt:"Document Symbols Outline"})),(0,i.kt)("h2",{id:"go-to-parent-code-lenses"},"Go to parent code lenses"),(0,i.kt)("p",null,"Metals has the ability to display code lenses that, when invoked,\nwill go to the parent class that contains the definition of the method or symbol.\nUnfortunately, it might cause some lag in larger code bases,\nwhich is why it is not enabled currently by default."),(0,i.kt)("p",null,"To enable the feature you need to modify the setting ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.superMethodLensesEnabled")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"Even without using the code lenses it's still possible to navigate the method hierarchy\nusing two commands:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Go to super method")," - immediately goes to the parent of the method the cursor is pointing to")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Reveal super method hierachy")," - displays the full method hierachy and enables to move to any parent,\nit is best used with the Metals Quick Pick extension."))),(0,i.kt)("p",null,"You can also bind those commands to a shortcut."),(0,i.kt)("h2",{id:"create-new-project-from-template"},"Create new project from template"),(0,i.kt)("p",null,"It is possible using Metals to easily setup a new project using the exiting ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/foundweekends/giter8/wiki/giter8-templates"},"giter8")," templates.\nThis is an equivalent to the ",(0,i.kt)("inlineCode",{parentName:"p"},"sbt new")," command, which uses the same mechanism.\nThere is a great number of templates already available and it should be easy to find something for yourself.\nTo start the setup you can use the Metals: New Scala project command, which works as following:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose the template and then:"),(0,i.kt)("ol",{parentName:"li"},(0,i.kt)("li",{parentName:"ol"},"Use the proposed templates."),(0,i.kt)("li",{parentName:"ol"},'Choose "Discover more" and then choose from the list downloaded from the Giter8 wiki page.'),(0,i.kt)("li",{parentName:"ol"},"Input a custom Github repository following the ",(0,i.kt)("inlineCode",{parentName:"li"},"organization/repo")," schema."))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Navigate to the parent directory that you want to create your new project in.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose the name or accept the default one.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose whether to open a new window for the created project or use the existing one."))),(0,i.kt)("p",null,'The same command will be invoked when clicking the "New Scala Project" button in the Metals view.'),(0,i.kt)("p",null,"If you feel like a template should be included in the default displayed ones do not hesitate to create a\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/blob/cda5b8c2029e5f201fb8d0636e0365d796407bd9/metals/src/main/scala/scala/meta/internal/builds/NewProjectProvider.scala#L308"},"PR"),"\nor file an issue."),(0,i.kt)("h2",{id:"running-and-debugging-your-code"},"Running and debugging your code"),(0,i.kt)("p",null,"Metals supports running and debugging tests and main methods via the\n",(0,i.kt)("a",{parentName:"p",href:"https://microsoft.github.io/debug-adapter-protocol/"},"Debug Adapter Protocol"),".\nThe protocol is used to communicate between the editor and debugger, which means\nthat applications can be run the same as for any other language in the natively\nsupported ",(0,i.kt)("inlineCode",{parentName:"p"},"Run")," view. When using Metals the debugger itself is\n",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/"},"Bloop"),", which is also responsible for\nstarting the actual process."),(0,i.kt)("p",null,"Users can begin the debugging session in two ways:"),(0,i.kt)("h3",{id:"via-code-lenses"},"via code lenses"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/5nTnrcS.png",alt:"lenses"})),(0,i.kt)("p",null,"For each main or test class Metals shows two code lenses ",(0,i.kt)("inlineCode",{parentName:"p"},"run | debug")," or\n",(0,i.kt)("inlineCode",{parentName:"p"},"test | test debug"),", which show up above the definition as a kind of virtual\ntext. Clicking ",(0,i.kt)("inlineCode",{parentName:"p"},"run")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"test")," will start running the main class or test without\nstopping at any breakpoints, while clicking ",(0,i.kt)("inlineCode",{parentName:"p"},"debug")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"test debug")," will pause\nonce any of them are hit. It's not possible to add any arguments or java\nproperties when running using this method."),(0,i.kt)("h3",{id:"via-a-launchjson-configuration"},"via a ",(0,i.kt)("inlineCode",{parentName:"h3"},"launch.json")," configuration"),(0,i.kt)("p",null,"Visual Studio Code uses ",(0,i.kt)("inlineCode",{parentName:"p"},".vscode/launch.json")," to store user defined\nconfigurations, which can be run using:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Run -> Start Debugging")," menu item or ",(0,i.kt)("inlineCode",{parentName:"li"},"workbench.action.debug.start"),"\nshortcut."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Run -> Run Without Debugging")," menu item or ",(0,i.kt)("inlineCode",{parentName:"li"},"workbench.action.debug.run"),"\nshortcut.")),(0,i.kt)("p",null,"If a user doesn't have anything yet saved, a configuration wizard will pop up to\nguide them. In the end users should end up with something like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},'{\n "version": "0.2.0",\n "configurations": [\n // Main class configuration\n {\n "type": "scala",\n "request": "launch",\n // configuration name visible for the user\n "name": "Launch Main",\n // full name of the class to run\n "mainClass": "com.example.Main",\n // optional arguments for the main class\n "args": [],\n // optional jvm properties to use\n "jvmOptions": []\n },\n // Test class configuration\n {\n "type": "scala",\n "request": "launch",\n // configuration name visible for the user\n "name": "Launch Test",\n // full name of the class to run\n "testClass": "com.example.Test"\n },\n // Attach debugger when running via:\n // `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:5005`\n {\n "type": "scala",\n "request": "attach",\n "name": "Attach debugger",\n // name of the module that is being debugging\n "buildTarget": "root",\n // Host of the jvm to connect to\n "hostName": "localhost",\n // Port to connect to\n "port": 5005\n }\n ]\n}\n')),(0,i.kt)("p",null,"You can also add an optional build target name, which is needed in case there\nare more than one class with the same name or when launching a class from\noutside the project. Inside ",(0,i.kt)("inlineCode",{parentName:"p"},'"configurations":')," add the key ",(0,i.kt)("inlineCode",{parentName:"p"},"buildTarget")," with\nyour target name, e.g. ",(0,i.kt)("inlineCode",{parentName:"p"},"root"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},' "buildTarget": "root"\n')),(0,i.kt)("p",null,"The build target name corresponds to your project name. For example in sbt for\n",(0,i.kt)("inlineCode",{parentName:"p"},"lazy val interfaces = project")," the name of the build target will be\n",(0,i.kt)("inlineCode",{parentName:"p"},"interfaces")," for sources and ",(0,i.kt)("inlineCode",{parentName:"p"},"interfaces-test")," for tests. To make sure you have\nthe correct target names please run the command ",(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Run Doctor"),"."),(0,i.kt)("p",null,"Multiple configurations can be stored in that file and can be chosen either\nmanually in the ",(0,i.kt)("inlineCode",{parentName:"p"},"Run")," view or can be picked by invoking a shortcut defined under\n",(0,i.kt)("inlineCode",{parentName:"p"},"workbench.action.debug.selectandstart"),"."),(0,i.kt)("h3",{id:"via-metals-commands"},"via Metals' commands"),(0,i.kt)("p",null,"You can also use commands that can be easily bound to shortcuts:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.run-current-file")," - Run main class in the current file."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.test-current-file")," - Run test class in the current file"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.test-current-target")," - Run all tests in the current project.")),(0,i.kt)("p",null,"To assign shortcuts just go to the Keyboard Shortcuts page (",(0,i.kt)("inlineCode",{parentName:"p"},"File")," ->\n",(0,i.kt)("inlineCode",{parentName:"p"},"Preferences")," -> ",(0,i.kt)("inlineCode",{parentName:"p"},"Keyboard Shortcuts"),") and search for a command, click on it and\nuse your preferred shortcut."),(0,i.kt)("h2",{id:"on-type-formatting-for-multiline-string-formatting"},"On type formatting for multiline string formatting"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/a0O2vCs.gif",alt:"on-type"})),(0,i.kt)("p",null,"To properly support adding ",(0,i.kt)("inlineCode",{parentName:"p"},"|")," in multiline strings we are using the\n",(0,i.kt)("inlineCode",{parentName:"p"},"onTypeFormatting")," method. The functionality is enabled by default, but you can\ndisable/enable ",(0,i.kt)("inlineCode",{parentName:"p"},"onTypeFormatting")," inside Visual Studio Code settings by checking\n",(0,i.kt)("inlineCode",{parentName:"p"},"Editor: Format On Type"),":"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/s6nT9rC.png",alt:"on-type-setting"})),(0,i.kt)("h2",{id:"formatting-on-paste-for-multiline-strings"},"Formatting on paste for multiline strings"),(0,i.kt)("p",null,"Whenever text is paste into a multiline string with ",(0,i.kt)("inlineCode",{parentName:"p"},"|")," it will be properly\nformatted by Metals:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/fF0XWYC.gif",alt:"format-on-paste"})),(0,i.kt)("p",null,"This feature is enabled by default. If you need to disable/enable formatting on\npaste in Visual Studio Code you can check the ",(0,i.kt)("inlineCode",{parentName:"p"},"Editor: Format On Paste")," setting:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/rMrk27F.png",alt:"format-on-paste-setting"})),(0,i.kt)("h2",{id:"worksheets"},"Worksheets"),(0,i.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,i.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,i.kt)("p",null,"To get started with a worksheet you can either use the ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,i.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,i.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,i.kt)("h3",{id:"evaluations"},"Evaluations"),(0,i.kt)("p",null,"After saving you'll see the result of the expression as a decoration at the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the decoration to expand the decoration."),(0,i.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,i.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,i.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,i.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,i.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,i.kt)("p",null,"You can also import ",(0,i.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,i.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,i.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,i.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,i.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,i.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,i.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,i.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),". In VS Code can be also run using the default shortcut of ",(0,i.kt)("inlineCode",{parentName:"p"},"shift + alt + ctrl + o"),".\nThis should run all the rules defined in your ",(0,i.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,i.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,i.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')),(0,i.kt)("h2",{id:"searching-a-symbol-in-the-workspace"},"Searching a symbol in the workspace"),(0,i.kt)("p",null,'Metals provides an alternative command to the native "Go to symbol in workspace..." command, in order to work around some VS Code limitations (see ',(0,i.kt)("a",{parentName:"p",href:"https://github.com/microsoft/vscode/issues/98125"},"this issue")," for more context) and provide richer search capabilities."),(0,i.kt)("p",null,'You can invoke this command from the command palette (look for "Metals: Search symbol in workspace").\nOptionally you can also bind this command to a shortcut. For example, if you want to replace the native command with the Metals one you can configure this shortcut:'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},' {\n "key": "ctrl+t", // or "cmd+t" if you\'re on macOS\n "command": "metals.symbol-search",\n "when": "editorLangId == scala"\n }\n')),(0,i.kt)("h2",{id:"test-explorer"},"Test Explorer"),(0,i.kt)("p",null,"Metals 0.11.0 implements Visual Studio Code's ",(0,i.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/api/extension-guides/testing"},"Testing API"),". "),(0,i.kt)("p",null,"Test Explorer UI is a new default way to run/debug test suites and replaces Code\nLenses. The new UI adds a testing view, which shows all test suites declared in\nproject's modules. From this panel it's possible to"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"view all discovered test suites grouped by build targets (modules) and filter them"),(0,i.kt)("li",{parentName:"ul"},"run/debug test"),(0,i.kt)("li",{parentName:"ul"},"navigate to test's definition.")),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/Z3VtS0O.gif",alt:"test-explorer"})),(0,i.kt)("p",null,"NOTE: While Metals detects test suites for most of existing testing\nframeworks, support for recognizing individual tests is more limited.\nMetals supports the current set of test frameworks when it comes to\nindividual test discovery:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Junit"),(0,i.kt)("li",{parentName:"ul"},"MUnit"),(0,i.kt)("li",{parentName:"ul"},"ScalatestIf you encounter an error, create an ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/issues"},"issue"),".")),(0,i.kt)("h2",{id:"coming-from-intellij"},"Coming from IntelliJ"),(0,i.kt)("p",null,"Install the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings"},"IntelliJ IDEA Keybindings"),"\nextension to use default IntelliJ shortcuts with VS Code."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"IntelliJ"),(0,i.kt)("th",{parentName:"tr",align:null},"VS Code"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Go to class"),(0,i.kt)("td",{parentName:"tr",align:null},"Go to symbol in workspace")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Parameter info"),(0,i.kt)("td",{parentName:"tr",align:null},"Trigger parameter hints")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Basic completion"),(0,i.kt)("td",{parentName:"tr",align:null},"Trigger suggest")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Type info"),(0,i.kt)("td",{parentName:"tr",align:null},"Show hover")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Expand"),(0,i.kt)("td",{parentName:"tr",align:null},"Fold")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Extend Selection"),(0,i.kt)("td",{parentName:"tr",align:null},"Expand selection")))),(0,i.kt)("h2",{id:"github-codespaces-and-githubdev-support"},"GitHub Codespaces and GitHub.dev support"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/editors/online-ides#github-codespaces-and-githubdev"},"https://scalameta.org/metals/docs/editors/online-ides#github-codespaces-and-githubdev")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/970a5f4e.f653e048.js b/assets/js/970a5f4e.f653e048.js deleted file mode 100644 index e8f7882c6db..00000000000 --- a/assets/js/970a5f4e.f653e048.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6561],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),c=o,h=d["".concat(s,".").concat(c)]||d[c]||m[c]||i;return n?a.createElement(h,r(r({ref:t},u),{},{components:n})):a.createElement(h,r({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>d});var a=n(7462),o=n(3366),i=(n(7294),n(3905)),r=["components"],l={id:"vscode",sidebar_label:"VS Code",title:"Visual Studio Code"},s=void 0,p={unversionedId:"editors/vscode",id:"editors/vscode",title:"Visual Studio Code",description:"Goto Definition",source:"@site/target/docs/editors/vscode.md",sourceDirName:"editors",slug:"/editors/vscode",permalink:"/metals/docs/editors/vscode",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/vscode.md",tags:[],version:"current",frontMatter:{id:"vscode",sidebar_label:"VS Code",title:"Visual Studio Code"},sidebar:"docs",previous:{title:"Overview",permalink:"/metals/docs/"},next:{title:"Vim",permalink:"/metals/docs/editors/vim"}},u={},d=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Importing a build",id:"importing-a-build",level:2},{value:"Custom sbt launcher",id:"custom-sbt-launcher",level:3},{value:"Speeding up import",id:"speeding-up-import",level:3},{value:"Importing changes",id:"importing-changes",level:3},{value:"Manually trigger build import",id:"manually-trigger-build-import",level:3},{value:"Run doctor",id:"run-doctor",level:2},{value:"Configure Java version",id:"configure-java-version",level:2},{value:"macOS",id:"macos",level:3},{value:"Custom artifact repositories (Maven or Ivy resolvers)",id:"custom-artifact-repositories-maven-or-ivy-resolvers",level:2},{value:"HTTP proxy",id:"http-proxy",level:2},{value:'Using latest Metals SNAPSHOT',id:"using-latest-metals-snapshot",level:2},{value:"Files and Directories to include in your Gitignore",id:"files-and-directories-to-include-in-your-gitignore",level:2},{value:"Show document symbols",id:"show-document-symbols",level:2},{value:"Go to parent code lenses",id:"go-to-parent-code-lenses",level:2},{value:"Create new project from template",id:"create-new-project-from-template",level:2},{value:"Running and debugging your code",id:"running-and-debugging-your-code",level:2},{value:"via code lenses",id:"via-code-lenses",level:3},{value:"via a launch.json configuration",id:"via-a-launchjson-configuration",level:3},{value:"via Metals' commands",id:"via-metals-commands",level:3},{value:"On type formatting for multiline string formatting",id:"on-type-formatting-for-multiline-string-formatting",level:2},{value:"Formatting on paste for multiline strings",id:"formatting-on-paste-for-multiline-strings",level:2},{value:"Worksheets",id:"worksheets",level:2},{value:"Getting started with Worksheets",id:"getting-started-with-worksheets",level:3},{value:"Evaluations",id:"evaluations",level:3},{value:"Using dependencies in worksheets",id:"using-dependencies-in-worksheets",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Running scalafix rules",id:"running-scalafix-rules",level:2},{value:"Searching a symbol in the workspace",id:"searching-a-symbol-in-the-workspace",level:2},{value:"Test Explorer",id:"test-explorer",level:2},{value:"Coming from IntelliJ",id:"coming-from-intellij",level:2},{value:"GitHub Codespaces and GitHub.dev support",id:"github-codespaces-and-githubdev-support",level:2}],m={toc:d},c="wrapper";function h(e){var t=e.components,n=(0,o.Z)(e,r);return(0,i.kt)(c,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48776422-1f764f00-ecd0-11e8-96d1-170f2354d50e.gif",alt:"Goto Definition"})),(0,i.kt)("h2",{id:"requirements"},"Requirements"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Java 8, 11, 17 provided by OpenJDK or Oracle"),". Eclipse OpenJ9 is not\nsupported, please make sure the ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable\npoints to a valid Java 8, 11 or 17 installation."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"macOS, Linux or Windows"),". Metals is developed on many operating systems and\nevery PR is tested on Ubuntu, Windows and MacOS."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Scala 2.13, 2.12, 2.11 and Scala 3"),". Metals supports these Scala versions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.13"),":\n2.13.12, 2.13.11, 2.13.10, 2.13.9, 2.13.8, 2.13.7, 2.13.6, 2.13.5")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.12"),":\n2.12.18, 2.12.17, 2.12.16, 2.12.15, 2.12.14, 2.12.13, 2.12.12, 2.12.11")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 2.11"),":\n2.11.12")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Scala 3"),":\n3.3.1, 3.3.0, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0"))),(0,i.kt)("p",null,"Note that 2.11.x support is deprecated and it will be removed in future releases.\nIt's recommended to upgrade to Scala 2.12 or Scala 2.13"),(0,i.kt)("h2",{id:"installation"},"Installation"),(0,i.kt)("p",null,"Install the Metals extension from the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=scalameta.metals"},"Marketplace")," by clicking on this badge ",(0,i.kt)("a",{parentName:"p",href:"vscode:extension/scalameta.metals"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/badge/metals-vscode-blue.png",alt:"Install Metals extension"}))," or via the VS Code editor:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/Qew0fNH.png",alt:"install stable version"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"Make sure to disable the extensions\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=dragos.scala-lsp"},"Scala Language Server"),"\nand\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=lightbend.vscode-sbt-scala"},"Scala (sbt)"),"\nif they are installed. The\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=lampepfl.dotty"},"Dotty Language Server"),"\ndoes ",(0,i.kt)("strong",{parentName:"p"},"not")," need to be disabled because the Metals and Dotty extensions don't\nconflict with each other. However, if you want to work on Scala 3 code in a\nworkspace that was previously opened with ",(0,i.kt)("inlineCode",{parentName:"p"},"Dotty Language Server")," you need to\nfirst remove ",(0,i.kt)("inlineCode",{parentName:"p"},".dotty-ide-artifact")," before opening the workspace with Metals.")),(0,i.kt)("p",null,"Next, open a directory containing your Scala code. The extension activates when\nthe main directory contains ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sbt")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sc")," file, a Scala file is\nopened, which includes ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"*.scala")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sc")," file, or a standard Scala\ndirectory structure ",(0,i.kt)("inlineCode",{parentName:"p"},"src/main/scala")," is detected."),(0,i.kt)("p",null,"It is also possible to opt in to install the pre-release version and try out the latest cutting edge features from Metals server.\nApart from new features, pre-release versions also include many bugfixes. It's encouraged to use them with ",(0,i.kt)("a",{parentName:"p",href:"#SNAPSHOT"},"SNAPSHOT")," releases of Metals server. Using pre-release versions may result in less stable experience and it is not indented for beginners.\nPre-release versions follow ",(0,i.kt)("inlineCode",{parentName:"p"},"major.minor.PATCH")," versioning."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/CzOTleE.png",alt:"Install the pre-release extension"})),(0,i.kt)("h2",{id:"importing-a-build"},"Importing a build"),(0,i.kt)("p",null,'The first time you open Metals in a new workspace it prompts you to import the build.\nClick "Import build" to start the installation step.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/0VqZWay.png",alt:"Import build"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'"Not now" disables this prompt for 2 minutes.'),(0,i.kt)("li",{parentName:"ul"},'"Don\'t show again" disables this prompt forever, use ',(0,i.kt)("inlineCode",{parentName:"li"},"rm -rf .metals/")," to re-enable\nthe prompt."),(0,i.kt)("li",{parentName:"ul"},"Use ",(0,i.kt)("inlineCode",{parentName:"li"},"tail -f .metals/metals.log")," to watch the build import progress."),(0,i.kt)("li",{parentName:"ul"},"Behind the scenes, Metals uses ",(0,i.kt)("a",{parentName:"li",href:"https://scalacenter.github.io/bloop/"},"Bloop")," to\nimport sbt builds, but you don't need Bloop installed on your machine to run this step.")),(0,i.kt)("p",null,"Once the import step completes, compilation starts for your open ",(0,i.kt)("inlineCode",{parentName:"p"},"*.scala"),"\nfiles."),(0,i.kt)("p",null,"Once the sources have compiled successfully, you can navigate the codebase with\ngoto definition."),(0,i.kt)("h3",{id:"custom-sbt-launcher"},"Custom sbt launcher"),(0,i.kt)("p",null,"By default, Metals runs an embedded ",(0,i.kt)("inlineCode",{parentName:"p"},"sbt-launch.jar")," launcher that respects ",(0,i.kt)("inlineCode",{parentName:"p"},".sbtopts")," and ",(0,i.kt)("inlineCode",{parentName:"p"},".jvmopts"),".\nHowever, the environment variables ",(0,i.kt)("inlineCode",{parentName:"p"},"SBT_OPTS")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_OPTS")," are not respected."),(0,i.kt)("p",null,'Update the "Sbt Script" setting to use a custom ',(0,i.kt)("inlineCode",{parentName:"p"},"sbt")," script instead of the\ndefault Metals launcher if you need further customizations like reading environment\nvariables."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/NuwEBe4.png",alt:"Sbt Launcher"})),(0,i.kt)("h3",{id:"speeding-up-import"},"Speeding up import"),(0,i.kt)("p",null,'The "Import build" step can take a long time, especially the first time you\nrun it in a new build. The exact time depends on the complexity of the build and\nif library dependencies need to be downloaded. For example, this step can take\neverything from 10 seconds in small cached builds up to 10-15 minutes in large\nuncached builds.'),(0,i.kt)("p",null,"Consult the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/docs/build-tools/sbt#speeding-up-build-export"},"Bloop documentation"),"\nto learn how to speed up build import."),(0,i.kt)("h3",{id:"importing-changes"},"Importing changes"),(0,i.kt)("p",null,"When you change ",(0,i.kt)("inlineCode",{parentName:"p"},"build.sbt")," or sources under ",(0,i.kt)("inlineCode",{parentName:"p"},"project/"),", you will be prompted to\nre-import the build."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/72kdZkL.png",alt:"Import sbt changes"})),(0,i.kt)("h3",{id:"manually-trigger-build-import"},"Manually trigger build import"),(0,i.kt)("p",null,'To manually trigger a build import, execute the "Import build" command through\nthe command palette (',(0,i.kt)("inlineCode",{parentName:"p"},"Cmd + Shift + P"),")."),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/QHLKt8u.png",alt:"Import build command"})),(0,i.kt)("h2",{id:"run-doctor"},"Run doctor"),(0,i.kt)("p",null,'Execute the "Run Doctor" through the command palette to troubleshoot potential\nconfiguration problems in your workspace.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/K02g0UM.png",alt:"Run doctor command"})),(0,i.kt)("h2",{id:"configure-java-version"},"Configure Java version"),(0,i.kt)("p",null,"The VS Code plugin uses by default the ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable (via\n",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/locate-java-home"},(0,i.kt)("inlineCode",{parentName:"a"},"locate-java-home")),") to locate\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"java"),' executable. To override the default Java home location, update the\n"Java Home" variable in the settings menu.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/sKrPKk2.png",alt:"Java Home setting"})),(0,i.kt)("p",null,"If this setting is defined, the VS Code plugin uses the custom path instead of\nthe ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," environment variable."),(0,i.kt)("h3",{id:"macos"},"macOS"),(0,i.kt)("p",null,"To globally configure ",(0,i.kt)("inlineCode",{parentName:"p"},"$JAVA_HOME")," for all GUI applications, see\n",(0,i.kt)("a",{parentName:"p",href:"https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x"},"this Stackoverflow answer"),"."),(0,i.kt)("p",null,"If you prefer to manually configure Java home through VS Code, run the following\ncommand to copy the Java 8 home path."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"/usr/libexec/java_home -v 1.8 | pbcopy\n")),(0,i.kt)("h2",{id:"custom-artifact-repositories-maven-or-ivy-resolvers"},"Custom artifact repositories (Maven or Ivy resolvers)"),(0,i.kt)("p",null,"Use the 'Custom Repositories' setting for the Metals VS Code extension to tell\n",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/docs/other-proxy"},"Coursier")," to try to download Metals\nartifacts from your private artifact repository."),(0,i.kt)("p",null,"Use ",(0,i.kt)("inlineCode",{parentName:"p"},".jvmopts")," to set sbt options\n(",(0,i.kt)("a",{parentName:"p",href:"https://www.scala-sbt.org/1.0/docs/Proxy-Repositories.html"},"https://www.scala-sbt.org/1.0/docs/Proxy-Repositories.html"),") for\n",(0,i.kt)("inlineCode",{parentName:"p"},"sbt bloopInstall")," which resolves library dependencies. You can also provide a\ncustom sbt script (see 'Custom sbt launcher')."),(0,i.kt)("h2",{id:"http-proxy"},"HTTP proxy"),(0,i.kt)("p",null,"Metals uses ",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/docs/other-proxy"},"Coursier")," to download\nartifacts from Maven Central. To use Metals behind an HTTP proxy, configure the\nsystem properties ",(0,i.kt)("inlineCode",{parentName:"p"},"-Dhttps.proxyHost=\u2026 -Dhttps.proxyPort=\u2026")," in one of the\nfollowing locations:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".jvmopts")," file in the workspace directory."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"JAVA_OPTS")," environment variable, make sure to start ",(0,i.kt)("inlineCode",{parentName:"li"},"code")," from your terminal\nwhen using this option since environment variables don't always propagate\ncorrectly when opening VS Code as a GUI application outside a terminal."),(0,i.kt)("li",{parentName:"ul"},'"Server Properties" setting for the Metals VS Code extension, which can be\nconfigured per-workspace or per-user.')),(0,i.kt)("h2",{id:"using-latest-metals-snapshot"},"Using latest Metals ",(0,i.kt)("a",{name:"SNAPSHOT"},"SNAPSHOT")),(0,i.kt)("p",null,'Update the "Server Version" setting to try out the latest pending Metals\nfeatures.'),(0,i.kt)("table",null,(0,i.kt)("thead",null,(0,i.kt)("tr",null,(0,i.kt)("th",null,"Version"),(0,i.kt)("th",null,"Published"))),(0,i.kt)("tbody",null,(0,i.kt)("tr",null,(0,i.kt)("td",null,"1.0.1"),(0,i.kt)("td",null,"28 Aug 2023 14:46")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"1.0.1+114-a2d4ebcc-SNAPSHOT"),(0,i.kt)("td",null,"17 Oct 2023 10:32")))),'Run the "Reload Window" command after updating the setting for the new version to take effect.',(0,i.kt)("h2",{id:"files-and-directories-to-include-in-your-gitignore"},"Files and Directories to include in your Gitignore"),(0,i.kt)("p",null,"The Metals server places logs and other files in the ",(0,i.kt)("inlineCode",{parentName:"p"},".metals")," directory. The\nBloop compile server places logs and compilation artifacts in the ",(0,i.kt)("inlineCode",{parentName:"p"},".bloop"),"\ndirectory. The Bloop plugin that generates Bloop configuration is added in the\n",(0,i.kt)("inlineCode",{parentName:"p"},"metals.sbt")," file, which is added at ",(0,i.kt)("inlineCode",{parentName:"p"},"project/metals.sbt")," as well as further\n",(0,i.kt)("inlineCode",{parentName:"p"},"project")," directories depending on how deep ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt")," files need to be supported.\nTo support each ",(0,i.kt)("inlineCode",{parentName:"p"},"*.sbt")," file Metals needs to create an additional file at\n",(0,i.kt)("inlineCode",{parentName:"p"},"./project/project/metals.sbt")," relative to the sbt file.\nWorking with Ammonite scripts will place compiled scripts into the ",(0,i.kt)("inlineCode",{parentName:"p"},".ammonite")," directory.\nIt's recommended to exclude these directories and files\nfrom version control systems like git."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sh"},"# ~/.gitignore\n.metals/\n.bloop/\n.ammonite/\nmetals.sbt\n")),(0,i.kt)("h2",{id:"show-document-symbols"},"Show document symbols"),(0,i.kt)("p",null,'Run the "Explorer: Focus on Outline View" command to open the symbol outline for\nthe current file in the sidebar.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/T0kVJsr.gif",alt:"Document Symbols Outline"})),(0,i.kt)("p",null,'Run the "Open Symbol in File" command to search for a symbol in the current file\nwithout opening the sidebar.'),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/0PJ4brd.png",alt:"Document Symbols Command"})),(0,i.kt)("p",null,"As you type, the symbol outline is also visible at the top of the file.\n",(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/L217n4q.png",alt:"Document Symbols Outline"})),(0,i.kt)("h2",{id:"go-to-parent-code-lenses"},"Go to parent code lenses"),(0,i.kt)("p",null,"Metals has the ability to display code lenses that, when invoked,\nwill go to the parent class that contains the definition of the method or symbol.\nUnfortunately, it might cause some lag in larger code bases,\nwhich is why it is not enabled currently by default."),(0,i.kt)("p",null,"To enable the feature you need to modify the setting ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.superMethodLensesEnabled")," to ",(0,i.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,i.kt)("p",null,"Even without using the code lenses it's still possible to navigate the method hierarchy\nusing two commands:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Go to super method")," - immediately goes to the parent of the method the cursor is pointing to")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Reveal super method hierachy")," - displays the full method hierachy and enables to move to any parent,\nit is best used with the Metals Quick Pick extension."))),(0,i.kt)("p",null,"You can also bind those commands to a shortcut."),(0,i.kt)("h2",{id:"create-new-project-from-template"},"Create new project from template"),(0,i.kt)("p",null,"It is possible using Metals to easily setup a new project using the exiting ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/foundweekends/giter8/wiki/giter8-templates"},"giter8")," templates.\nThis is an equivalent to the ",(0,i.kt)("inlineCode",{parentName:"p"},"sbt new")," command, which uses the same mechanism.\nThere is a great number of templates already available and it should be easy to find something for yourself.\nTo start the setup you can use the Metals: New Scala project command, which works as following:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose the template and then:"),(0,i.kt)("ol",{parentName:"li"},(0,i.kt)("li",{parentName:"ol"},"Use the proposed templates."),(0,i.kt)("li",{parentName:"ol"},'Choose "Discover more" and then choose from the list downloaded from the Giter8 wiki page.'),(0,i.kt)("li",{parentName:"ol"},"Input a custom Github repository following the ",(0,i.kt)("inlineCode",{parentName:"li"},"organization/repo")," schema."))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Navigate to the parent directory that you want to create your new project in.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose the name or accept the default one.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Choose whether to open a new window for the created project or use the existing one."))),(0,i.kt)("p",null,'The same command will be invoked when clicking the "New Scala Project" button in the Metals view.'),(0,i.kt)("p",null,"If you feel like a template should be included in the default displayed ones do not hesitate to create a\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/blob/cda5b8c2029e5f201fb8d0636e0365d796407bd9/metals/src/main/scala/scala/meta/internal/builds/NewProjectProvider.scala#L308"},"PR"),"\nor file an issue."),(0,i.kt)("h2",{id:"running-and-debugging-your-code"},"Running and debugging your code"),(0,i.kt)("p",null,"Metals supports running and debugging tests and main methods via the\n",(0,i.kt)("a",{parentName:"p",href:"https://microsoft.github.io/debug-adapter-protocol/"},"Debug Adapter Protocol"),".\nThe protocol is used to communicate between the editor and debugger, which means\nthat applications can be run the same as for any other language in the natively\nsupported ",(0,i.kt)("inlineCode",{parentName:"p"},"Run")," view. When using Metals the debugger itself is\n",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/bloop/"},"Bloop"),", which is also responsible for\nstarting the actual process."),(0,i.kt)("p",null,"Users can begin the debugging session in two ways:"),(0,i.kt)("h3",{id:"via-code-lenses"},"via code lenses"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/5nTnrcS.png",alt:"lenses"})),(0,i.kt)("p",null,"For each main or test class Metals shows two code lenses ",(0,i.kt)("inlineCode",{parentName:"p"},"run | debug")," or\n",(0,i.kt)("inlineCode",{parentName:"p"},"test | test debug"),", which show up above the definition as a kind of virtual\ntext. Clicking ",(0,i.kt)("inlineCode",{parentName:"p"},"run")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"test")," will start running the main class or test without\nstopping at any breakpoints, while clicking ",(0,i.kt)("inlineCode",{parentName:"p"},"debug")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"test debug")," will pause\nonce any of them are hit. It's not possible to add any arguments or java\nproperties when running using this method."),(0,i.kt)("h3",{id:"via-a-launchjson-configuration"},"via a ",(0,i.kt)("inlineCode",{parentName:"h3"},"launch.json")," configuration"),(0,i.kt)("p",null,"Visual Studio Code uses ",(0,i.kt)("inlineCode",{parentName:"p"},".vscode/launch.json")," to store user defined\nconfigurations, which can be run using:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Run -> Start Debugging")," menu item or ",(0,i.kt)("inlineCode",{parentName:"li"},"workbench.action.debug.start"),"\nshortcut."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Run -> Run Without Debugging")," menu item or ",(0,i.kt)("inlineCode",{parentName:"li"},"workbench.action.debug.run"),"\nshortcut.")),(0,i.kt)("p",null,"If a user doesn't have anything yet saved, a configuration wizard will pop up to\nguide them. In the end users should end up with something like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},'{\n "version": "0.2.0",\n "configurations": [\n // Main class configuration\n {\n "type": "scala",\n "request": "launch",\n // configuration name visible for the user\n "name": "Launch Main",\n // full name of the class to run\n "mainClass": "com.example.Main",\n // optional arguments for the main class\n "args": [],\n // optional jvm properties to use\n "jvmOptions": []\n },\n // Test class configuration\n {\n "type": "scala",\n "request": "launch",\n // configuration name visible for the user\n "name": "Launch Test",\n // full name of the class to run\n "testClass": "com.example.Test"\n },\n // Attach debugger when running via:\n // `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:5005`\n {\n "type": "scala",\n "request": "attach",\n "name": "Attach debugger",\n // name of the module that is being debugging\n "buildTarget": "root",\n // Host of the jvm to connect to\n "hostName": "localhost",\n // Port to connect to\n "port": 5005\n }\n ]\n}\n')),(0,i.kt)("p",null,"You can also add an optional build target name, which is needed in case there\nare more than one class with the same name or when launching a class from\noutside the project. Inside ",(0,i.kt)("inlineCode",{parentName:"p"},'"configurations":')," add the key ",(0,i.kt)("inlineCode",{parentName:"p"},"buildTarget")," with\nyour target name, e.g. ",(0,i.kt)("inlineCode",{parentName:"p"},"root"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json"},' "buildTarget": "root"\n')),(0,i.kt)("p",null,"The build target name corresponds to your project name. For example in sbt for\n",(0,i.kt)("inlineCode",{parentName:"p"},"lazy val interfaces = project")," the name of the build target will be\n",(0,i.kt)("inlineCode",{parentName:"p"},"interfaces")," for sources and ",(0,i.kt)("inlineCode",{parentName:"p"},"interfaces-test")," for tests. To make sure you have\nthe correct target names please run the command ",(0,i.kt)("inlineCode",{parentName:"p"},"Metals: Run Doctor"),"."),(0,i.kt)("p",null,"Multiple configurations can be stored in that file and can be chosen either\nmanually in the ",(0,i.kt)("inlineCode",{parentName:"p"},"Run")," view or can be picked by invoking a shortcut defined under\n",(0,i.kt)("inlineCode",{parentName:"p"},"workbench.action.debug.selectandstart"),"."),(0,i.kt)("h3",{id:"via-metals-commands"},"via Metals' commands"),(0,i.kt)("p",null,"You can also use commands that can be easily bound to shortcuts:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.run-current-file")," - Run main class in the current file."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.test-current-file")," - Run test class in the current file"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"metals.test-current-target")," - Run all tests in the current project.")),(0,i.kt)("p",null,"To assign shortcuts just go to the Keyboard Shortcuts page (",(0,i.kt)("inlineCode",{parentName:"p"},"File")," ->\n",(0,i.kt)("inlineCode",{parentName:"p"},"Preferences")," -> ",(0,i.kt)("inlineCode",{parentName:"p"},"Keyboard Shortcuts"),") and search for a command, click on it and\nuse your preferred shortcut."),(0,i.kt)("h2",{id:"on-type-formatting-for-multiline-string-formatting"},"On type formatting for multiline string formatting"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://imgur.com/a0O2vCs.gif",alt:"on-type"})),(0,i.kt)("p",null,"To properly support adding ",(0,i.kt)("inlineCode",{parentName:"p"},"|")," in multiline strings we are using the\n",(0,i.kt)("inlineCode",{parentName:"p"},"onTypeFormatting")," method. The functionality is enabled by default, but you can\ndisable/enable ",(0,i.kt)("inlineCode",{parentName:"p"},"onTypeFormatting")," inside Visual Studio Code settings by checking\n",(0,i.kt)("inlineCode",{parentName:"p"},"Editor: Format On Type"),":"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/s6nT9rC.png",alt:"on-type-setting"})),(0,i.kt)("h2",{id:"formatting-on-paste-for-multiline-strings"},"Formatting on paste for multiline strings"),(0,i.kt)("p",null,"Whenever text is paste into a multiline string with ",(0,i.kt)("inlineCode",{parentName:"p"},"|")," it will be properly\nformatted by Metals:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/fF0XWYC.gif",alt:"format-on-paste"})),(0,i.kt)("p",null,"This feature is enabled by default. If you need to disable/enable formatting on\npaste in Visual Studio Code you can check the ",(0,i.kt)("inlineCode",{parentName:"p"},"Editor: Format On Paste")," setting:"),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/rMrk27F.png",alt:"format-on-paste-setting"})),(0,i.kt)("h2",{id:"worksheets"},"Worksheets"),(0,i.kt)("p",null,"Worksheets are a great way to explore an api, try out an idea, or code\nup an example and quickly see the evaluated expression or result. Behind\nthe scenes worksheets are powered by the great work done in\n",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/mdoc/"},"mdoc"),"."),(0,i.kt)("h3",{id:"getting-started-with-worksheets"},"Getting started with Worksheets"),(0,i.kt)("p",null,"To get started with a worksheet you can either use the ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.new-scala-file"),"\ncommand and select ",(0,i.kt)("em",{parentName:"p"},"Worksheet")," or create a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"*.worksheet.sc"),".\nThis format is important since this is what tells Metals that it's meant to be\ntreated as a worksheet and not just a Scala script. Where you create the\nscript also matters. If you'd like to use classes and values from your\nproject, you need to make sure the worksheet is created inside of your ",(0,i.kt)("inlineCode",{parentName:"p"},"src"),"\ndirectory. You can still create a worksheet in other places, but you will\nonly have access to the standard library and your dependencies."),(0,i.kt)("h3",{id:"evaluations"},"Evaluations"),(0,i.kt)("p",null,"After saving you'll see the result of the expression as a decoration at the end of the line.\nYou may not see the full result for example if it's too long, so you are also\nable to hover on the decoration to expand the decoration."),(0,i.kt)("p",null,"Keep in mind that you don't need to wrap your code in an ",(0,i.kt)("inlineCode",{parentName:"p"},"object"),". In worksheets\neverything can be evaluated at the top level."),(0,i.kt)("h3",{id:"using-dependencies-in-worksheets"},"Using dependencies in worksheets"),(0,i.kt)("p",null,"You are able to include an external dependency in your worksheet by including\nit in one of the following two ways."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-scala"},"// $dep.`organisation`::artifact:version` style\nimport $dep.`com.lihaoyi::scalatags:0.7.0`\n\n// $ivy.`organisation::artifact:version` style\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"::")," is the same as ",(0,i.kt)("inlineCode",{parentName:"p"},"%%")," in sbt, which will append the current Scala binary version\nto the artifact name."),(0,i.kt)("p",null,"You can also import ",(0,i.kt)("inlineCode",{parentName:"p"},"scalac")," options in a special ",(0,i.kt)("inlineCode",{parentName:"p"},"$scalac")," import like below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-scala"},"import $scalac.`-Ywarn-unused`\n")),(0,i.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,i.kt)("p",null,"Since worksheets are not standard Scala files, you may run into issues with some constructs.\nFor example, you may see an error like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"value classes may not be a member of another class - mdoc\n")),(0,i.kt)("p",null,"This means that one of the classes defined in the worksheet extends AnyVal, which is\nnot currently supported. You can work around this by moving the class to a separate file or removing\nthe AnyVal parent."),(0,i.kt)("h2",{id:"running-scalafix-rules"},"Running scalafix rules"),(0,i.kt)("p",null,"Scalafix allows users to specify some refactoring and linting rules that can be applied to your\ncodebase. Please checkout the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix"},"scalafix website")," for more information."),(0,i.kt)("p",null,"Since Metals v0.11.7 it's now possible to run scalafix rules using a special\ncommand ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.scalafix-run"),". In VS Code can be also run using the default shortcut of ",(0,i.kt)("inlineCode",{parentName:"p"},"shift + alt + ctrl + o"),".\nThis should run all the rules defined in your ",(0,i.kt)("inlineCode",{parentName:"p"},".scalafix.conf")," file. All built-in rules\nand the ",(0,i.kt)("a",{parentName:"p",href:"https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules"},"community hygiene ones")," can\nbe run without any additional settings. However, for all the other rules users need to\nadd an additional dependency in the ",(0,i.kt)("inlineCode",{parentName:"p"},"metals.scalafixRulesDependencies")," user setting.\nThose rules need to be in form of strings such as ",(0,i.kt)("inlineCode",{parentName:"p"},"com.github.liancheng::organize-imports:0.6.0"),", which\nfollows the same convention as ",(0,i.kt)("a",{parentName:"p",href:"https://get-coursier.io/"},"coursier dependencies"),"."),(0,i.kt)("p",null,"A sample scalafix configuration can be seen below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-hocon"},'rules = [\n OrganizeImports,\n ExplicitResultTypes,\n RemoveUnused\n]\n\nRemoveUnused.imports = false\n\nOrganizeImports.groupedImports = Explode\nOrganizeImports.expandRelative = true\nOrganizeImports.removeUnused = true\nOrganizeImports.groups = [\n "re:javax?\\."\n "scala."\n "scala.meta."\n "*"\n]\n\n')),(0,i.kt)("h2",{id:"searching-a-symbol-in-the-workspace"},"Searching a symbol in the workspace"),(0,i.kt)("p",null,'Metals provides an alternative command to the native "Go to symbol in workspace..." command, in order to work around some VS Code limitations (see ',(0,i.kt)("a",{parentName:"p",href:"https://github.com/microsoft/vscode/issues/98125"},"this issue")," for more context) and provide richer search capabilities."),(0,i.kt)("p",null,'You can invoke this command from the command palette (look for "Metals: Search symbol in workspace").\nOptionally you can also bind this command to a shortcut. For example, if you want to replace the native command with the Metals one you can configure this shortcut:'),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-js"},' {\n "key": "ctrl+t", // or "cmd+t" if you\'re on macOS\n "command": "metals.symbol-search",\n "when": "editorLangId == scala"\n }\n')),(0,i.kt)("h2",{id:"test-explorer"},"Test Explorer"),(0,i.kt)("p",null,"Metals 0.11.0 implements Visual Studio Code's ",(0,i.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/api/extension-guides/testing"},"Testing API"),". "),(0,i.kt)("p",null,"Test Explorer UI is a new default way to run/debug test suites and replaces Code\nLenses. The new UI adds a testing view, which shows all test suites declared in\nproject's modules. From this panel it's possible to"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"view all discovered test suites grouped by build targets (modules) and filter them"),(0,i.kt)("li",{parentName:"ul"},"run/debug test"),(0,i.kt)("li",{parentName:"ul"},"navigate to test's definition.")),(0,i.kt)("p",null,(0,i.kt)("img",{parentName:"p",src:"https://i.imgur.com/Z3VtS0O.gif",alt:"test-explorer"})),(0,i.kt)("p",null,"NOTE: While Metals detects test suites for most of existing testing\nframeworks, support for recognizing individual tests is more limited.\nMetals supports the current set of test frameworks when it comes to\nindividual test discovery:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Junit"),(0,i.kt)("li",{parentName:"ul"},"MUnit"),(0,i.kt)("li",{parentName:"ul"},"ScalatestIf you encounter an error, create an ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/issues"},"issue"),".")),(0,i.kt)("h2",{id:"coming-from-intellij"},"Coming from IntelliJ"),(0,i.kt)("p",null,"Install the\n",(0,i.kt)("a",{parentName:"p",href:"https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings"},"IntelliJ IDEA Keybindings"),"\nextension to use default IntelliJ shortcuts with VS Code."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"IntelliJ"),(0,i.kt)("th",{parentName:"tr",align:null},"VS Code"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Go to class"),(0,i.kt)("td",{parentName:"tr",align:null},"Go to symbol in workspace")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Parameter info"),(0,i.kt)("td",{parentName:"tr",align:null},"Trigger parameter hints")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Basic completion"),(0,i.kt)("td",{parentName:"tr",align:null},"Trigger suggest")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Type info"),(0,i.kt)("td",{parentName:"tr",align:null},"Show hover")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Expand"),(0,i.kt)("td",{parentName:"tr",align:null},"Fold")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Extend Selection"),(0,i.kt)("td",{parentName:"tr",align:null},"Expand selection")))),(0,i.kt)("h2",{id:"github-codespaces-and-githubdev-support"},"GitHub Codespaces and GitHub.dev support"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/docs/editors/online-ides#github-codespaces-and-githubdev"},"https://scalameta.org/metals/docs/editors/online-ides#github-codespaces-and-githubdev")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/97ce67ef.b624faa8.js b/assets/js/97ce67ef.c3695cb2.js similarity index 59% rename from assets/js/97ce67ef.b624faa8.js rename to assets/js/97ce67ef.c3695cb2.js index 10145edac14..d6c6c386047 100644 --- a/assets/js/97ce67ef.b624faa8.js +++ b/assets/js/97ce67ef.c3695cb2.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4839],{8076:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/44","page":44,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/43","nextPage":"/metals/blog/page/45","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4839],{8076:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/44","page":44,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/43","nextPage":"/metals/blog/page/45","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/995bfa6d.86c4d576.js b/assets/js/995bfa6d.eabad777.js similarity index 59% rename from assets/js/995bfa6d.86c4d576.js rename to assets/js/995bfa6d.eabad777.js index 9cf68ea39e5..033c2a3f8fb 100644 --- a/assets/js/995bfa6d.86c4d576.js +++ b/assets/js/995bfa6d.eabad777.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9242],{7851:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/31","page":31,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/30","nextPage":"/metals/blog/page/32","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9242],{7851:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/31","page":31,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/30","nextPage":"/metals/blog/page/32","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9a7faebf.6298d95c.js b/assets/js/9a7faebf.3aa6e3cc.js similarity index 79% rename from assets/js/9a7faebf.6298d95c.js rename to assets/js/9a7faebf.3aa6e3cc.js index 0cbd48ed43c..ed943adb12b 100644 --- a/assets/js/9a7faebf.6298d95c.js +++ b/assets/js/9a7faebf.3aa6e3cc.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2174],{3704:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/2","page":2,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog","nextPage":"/metals/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2174],{3704:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/2","page":2,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog","nextPage":"/metals/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/9b4a23be.9a7f3dc3.js b/assets/js/9b4a23be.9a7f3dc3.js deleted file mode 100644 index ccf38850a20..00000000000 --- a/assets/js/9b4a23be.9a7f3dc3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5688],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>m});var l=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function a(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var s=l.createContext({}),d=function(t){var e=l.useContext(s),n=e;return t&&(n="function"==typeof t?t(e):a(a({},e),t)),n},c=function(t){var e=d(t.components);return l.createElement(s.Provider,{value:e},t.children)},k="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},p=l.forwardRef((function(t,e){var n=t.components,i=t.mdxType,r=t.originalType,s=t.parentName,c=o(t,["components","mdxType","originalType","parentName"]),k=d(n),p=i,m=k["".concat(s,".").concat(p)]||k[p]||u[p]||r;return n?l.createElement(m,a(a({ref:e},c),{},{components:n})):l.createElement(m,a({ref:e},c))}));function m(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var r=n.length,a=new Array(r);a[0]=p;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[k]="string"==typeof t?t:i,a[1]=o;for(var d=2;d{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>k});var l=n(7462),i=n(3366),r=(n(7294),n(3905)),a=["components"],o={id:"overview",title:"Text Editors",sidebar_label:"Overview",slug:"/"},s=void 0,d={unversionedId:"editors/overview",id:"editors/overview",title:"Text Editors",description:"Latest Metals server versions",source:"@site/target/docs/editors/overview.md",sourceDirName:"editors",slug:"/",permalink:"/metals/docs/",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Text Editors",sidebar_label:"Overview",slug:"/"},sidebar:"docs",next:{title:"VS Code",permalink:"/metals/docs/editors/vscode"}},c={},k=[{value:"Latest Metals server versions",id:"latest-metals-server-versions",level:2},{value:"Editor support",id:"editor-support",level:2},{value:"Installation",id:"installation",level:2},{value:"Build import",id:"build-import",level:2},{value:"Diagnostics",id:"diagnostics",level:2},{value:"Known limitations",id:"known-limitations",level:3},{value:"Goto definition",id:"goto-definition",level:2},{value:"Known limitations",id:"known-limitations-1",level:3},{value:"Completions",id:"completions",level:2},{value:"Known limitations",id:"known-limitations-2",level:3},{value:"Hover (aka. type at point)",id:"hover-aka-type-at-point",level:2},{value:"Signature help (aka. parameter hints)",id:"signature-help-aka-parameter-hints",level:2},{value:"Find references",id:"find-references",level:2},{value:"Known limitations",id:"known-limitations-3",level:3},{value:"Worksheets",id:"worksheets",level:2},{value:"Document symbols",id:"document-symbols",level:2},{value:"Workspace symbols",id:"workspace-symbols",level:2},{value:"Formatting",id:"formatting",level:2},{value:"Code folding",id:"code-folding",level:2},{value:"Document highlight",id:"document-highlight",level:2},{value:"Package explorer",id:"package-explorer",level:2},{value:"Test Explorer",id:"test-explorer",level:2},{value:"Running Tests",id:"running-tests",level:3},{value:"Metals Extensions",id:"metals-extensions",level:2},{value:"Implicit decorations",id:"implicit-decorations",level:2},{value:"Additional file types",id:"additional-file-types",level:2}],u={toc:k},p="wrapper";function m(t){var e=t.components,n=(0,i.Z)(t,a);return(0,r.kt)(p,(0,l.Z)({},u,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"latest-metals-server-versions"},"Latest Metals server versions"),(0,r.kt)("p",null,"To find out how to set the version in your editor please check out the editor\nspecific sections."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("th",null,"Version"),(0,r.kt)("th",null,"Published"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.0.1"),(0,r.kt)("td",null,"28 Aug 2023 14:46")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.0.1+114-a2d4ebcc-SNAPSHOT"),(0,r.kt)("td",null,"17 Oct 2023 10:32")))),"Snapshot releases are not guaranteed to work.",(0,r.kt)("h2",{id:"editor-support"},"Editor support"),(0,r.kt)("p",null,"Metals works with the following text editors with varying degree of\nfunctionality."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("td",null),(0,r.kt)("td",{align:"center"},"Visual Studio Code"),(0,r.kt)("td",{align:"center"},"Vim"),(0,r.kt)("td",{align:"center"},"Sublime Text"),(0,r.kt)("td",{align:"center"},"Emacs"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"Installation"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Build import"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Diagnostics"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto type definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Completions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705*"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover for selection"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u274c")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Parameter hints"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find references"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run/Debug"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find implementations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Rename symbol"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Code actions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Worksheets"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Document symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Flat"),(0,r.kt)("td",{align:"center"},"Flat"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Workspace symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Formatting"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Folding"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}," "),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Highlight"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Metals Extensions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Status bar, Input box, Decoration protocol, Did focus"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Organize imports"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Implicit decorations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Shown in hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Source file analyzer"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find text in dependency JAR files"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u274c")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run scalafix rules"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")))),(0,r.kt)("h2",{id:"installation"},"Installation"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Single click"),": Metals is easy to install and requires minimal configuration\nout-of-the-box."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Few steps"),": installing Metals requires a few custom steps and minimal\nconfiguration to work."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"You can find instructions on how to install Metals for your editor on its\nspecific page.")),(0,r.kt)("h2",{id:"build-import"},"Build import"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": it is possible to import a build such as an sbt project directly from\nthe editor."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Requires browser"),": importing a build requires additional steps in a web\nbrowser using a localhost server. It is not possible to import a build within\nthe editor."),(0,r.kt)("h2",{id:"diagnostics"},"Diagnostics"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Diagnostics are correctly published on compile."),(0,r.kt)("p",null,"Compile errors are reported as red squiggles in the editor. Compilation is\ntriggered on file save for the build target (project/module) containing the\nfocused text file."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48774587-f4d5c780-ecca-11e8-8087-acca5a05ca78.png",alt:"Diagnostics"})),(0,r.kt)("h3",{id:"known-limitations"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Slow feedback for type errors. Syntax errors are published as you type but\ntype errors are handled by the build tool, meaning diagnostics may take a\nwhile to publish for large projects.")),(0,r.kt)("h2",{id:"goto-definition"},"Goto definition"),(0,r.kt)("p",null,"Navigate to symbol definitions for project sources and Scala/Java library\ndependencies."),(0,r.kt)("p",null,"Symbols are resolved according to the last successful compilation in the build\ntool and navigation continues to work despite syntax errors in the open unsaved\nbuffer."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48776422-1f764f00-ecd0-11e8-96d1-170f2354d50e.gif",alt:"Goto Definition"})),(0,r.kt)("h3",{id:"known-limitations-1"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Navigation does not work for buffers that do not tokenize, for example due to\nunclosed string literals."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalameta/issues/1802"},"scalameta/scalameta#1802"),"\nreflective invocations (methods calls on structural types) do not resolve to a\ndefinition.")),(0,r.kt)("h2",{id:"completions"},"Completions"),(0,r.kt)("p",null,"Use code completions to explore APIs, implement interfaces, generate exhaustive\npattern matches and more."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/56036958-725bac00-5d2e-11e9-9cf7-46249125494a.gif",alt:"2019-04-12 14 19 39"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Auto-import"),": imports are inserted at the bottom of the global import list.\nImports still need to be sorted and grouped manually, we are exploring ways to\nautomate this workflow in the future."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Override def"),": implement methods from the super class."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Exhaustive match"),": generate an exhaustive pattern match for sealed types."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"String interpolator"),": automatically convert string literals into string\ninterpolators."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Filename"),": complete classnames based on the enclosing file."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Documentation"),": read the docstring for method symbols by pressing\nctrl+space in VS Code.")),(0,r.kt)("h3",{id:"known-limitations-2"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"completion results don't include symbols that have just been typed in separate\nfiles without a successful compilation in the build tool.")),(0,r.kt)("h2",{id:"hover-aka-type-at-point"},"Hover (aka. type at point)"),(0,r.kt)("p",null,"See the expression type and symbol signature under the cursor."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/2MfQvsM.gif",alt:null})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Expression type"),": shows the non-generic type of the highlighted expression."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Symbol signature"),": shows the generic signature of symbol under the cursor\nalong with its docstring, if available.")),(0,r.kt)("h2",{id:"signature-help-aka-parameter-hints"},"Signature help (aka. parameter hints)"),(0,r.kt)("p",null,"View a method signature and method overloads as you fill in the arguments."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/DAWIrHu.gif",alt:null})),(0,r.kt)("h2",{id:"find-references"},"Find references"),(0,r.kt)("p",null,"Find symbol references in project sources. References include implicits,\ninferred ",(0,r.kt)("inlineCode",{parentName:"p"},".apply"),", desugared ",(0,r.kt)("inlineCode",{parentName:"p"},".flatMap")," from for comprehensions and other\nsymbols that may not be explicitly written in source, making it possible to\ndiscover usages of difficult-to-grep symbols. The Metals navigation index is\nlow-overhead and should only require a few megabytes of memory even for large\nprojects."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/51089190-75fc8880-1769-11e9-819c-95262205e95c.png",alt:"Find references"})),(0,r.kt)("h3",{id:"known-limitations-3"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'References to overridden methods are not included in the results. For example,\nif you run "find references" on the method ',(0,r.kt)("inlineCode",{parentName:"li"},"Dog.name()")," then it won't include\nreferences to the super method ",(0,r.kt)("inlineCode",{parentName:"li"},"Animal.name()"),".")),(0,r.kt)("h2",{id:"worksheets"},"Worksheets"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Worksheets work via the Decoration protocol and are added as a\nnon-editable side decoration."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Comments"),": Worksheets work via ",(0,r.kt)("inlineCode",{parentName:"p"},"workspace/applyEdit")," by adding comments to\nthe source code and support hover to show larger output. You can find more\ninformation about worksheets under the editor specific worksheet section. For\nexample, ",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/editors/vscode#worksheets"},"here for VS Code"),"."),(0,r.kt)("h2",{id:"document-symbols"},"Document symbols"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Document symbols are displayed in a hierarchical outline."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Flat"),": Document symbols are displayed in a flat outline."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/50635569-014c7180-0f53-11e9-8898-62803898781c.gif",alt:"Document Symbols"})),(0,r.kt)("h2",{id:"workspace-symbols"},"Workspace symbols"),(0,r.kt)("p",null,"Fuzzy search a symbol in the workspace of library dependencies by its name."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All-lowercase queries are treated as case-insensitive searches."),(0,r.kt)("li",{parentName:"ul"},"Queries ending with a dot ",(0,r.kt)("inlineCode",{parentName:"li"},".")," list nested symbols."),(0,r.kt)("li",{parentName:"ul"},"Queries containing a semicolon ",(0,r.kt)("inlineCode",{parentName:"li"},";")," search library dependencies.")),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/w5yrK1w.gif",alt:"Fuzzy symbol search example"})),(0,r.kt)("h2",{id:"formatting"},"Formatting"),(0,r.kt)("p",null,"Metals uses Scalafmt to respond to formatting requests from the editor,\naccording to the configuration defined in ",(0,r.kt)("inlineCode",{parentName:"p"},".scalafmt.conf"),"."),(0,r.kt)("p",null,"Learn how to configure Scalafmt at\n",(0,r.kt)("a",{parentName:"p",href:"https://scalameta.org/scalafmt/docs/configuration.html"},"https://scalameta.org/scalafmt/docs/configuration.html"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/50635748-b0894880-0f53-11e9-913b-acfd5f505351.gif",alt:"Formatting"})),(0,r.kt)("h2",{id:"code-folding"},"Code folding"),(0,r.kt)("p",null,"Fold ranges such as large multi-line expressions, import groups and comments."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://camo.githubusercontent.com/3fdd7ae28907ac61c0a1ac5fdc07d085245957aa/68747470733a2f2f692e696d6775722e636f6d2f667149554a54472e676966",alt:null})),(0,r.kt)("h2",{id:"document-highlight"},"Document highlight"),(0,r.kt)("p",null,"Highlight references to the same symbol in the open file."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/0uhc9P5.gif",alt:null})),(0,r.kt)("h2",{id:"package-explorer"},"Package explorer"),(0,r.kt)("p",null,"Browse packages, classes and methods in the workspace and library dependencies\nusing the Metals sidebar. This feature is only implemented in VS Code."),(0,r.kt)("h2",{id:"test-explorer"},"Test Explorer"),(0,r.kt)("p",null,"Test Explorer is a feature that allows editors to display tests as a separate\ntree representation of tests. Although it was implemented in order to use Visual\nStudio Code's\n",(0,r.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/api/extension-guides/testing"},"Testing API"),". The Test\nExplorer API is editor agnostic and can be used by other editors than just VS\nCode. ",(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/Z3VtS0O.gif",alt:"test-explorer"})),(0,r.kt)("p",null,"Work on the Test Explorer is still in progress and the feature has some known\nlimitations:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Test Explorer is able to discover single test cases only for JUnit4 test\nclasses. Support for other test frameworks is being worked on."),(0,r.kt)("li",{parentName:"ul"},"detecting suites in cross scala-version projects is inconsistent, see\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/issues/3503"},"this issue"),"."),(0,r.kt)("li",{parentName:"ul"},"there is no support for JS and Native platforms. For any changes subscribe to\nthe related\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals-feature-requests/issues/256"},"feature request"),".")),(0,r.kt)("p",null,"You can find more information about Test Explorer under the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/editors/vscode#test-explorer"},"VS Code")," specific section."),(0,r.kt)("h3",{id:"running-tests"},"Running Tests"),(0,r.kt)("p",null,"Both run and debug under the hood use BSP's debug request. More information\nabout it can be found at\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalacenter/bloop/blob/master/docs/assets/dap-example-metals.png"},"Bloop DAP diagram"),"\nor\n",(0,r.kt)("a",{parentName:"p",href:"https://build-server-protocol.github.io/docs/specification.html#debug-request"},"BSP specification"),"\nwebsite."),(0,r.kt)("h2",{id:"metals-extensions"},"Metals Extensions"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Status bar"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/status")," notification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Decoration protocol"),": Editor client implements the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Tree view"),": Editor client implements the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Did focus"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/didFocusTextDocument"),"\nnotification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Slow task"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Input box"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Quick pick"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/quickPick")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Window state"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/windowStateDidChange"),"\nnotification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Editor implements all Metals extension endpoints."),(0,r.kt)("p",null,"The Metals language server supports custom extensions that are not part of the\nLanguage Server Protocol (LSP). These extensions are not necessary for Metals to\nfunction but they improve the user experience. To learn more about Metals\nextensions, see ",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/new-editor"},"integrating a new editor"),"."),(0,r.kt)("h2",{id:"implicit-decorations"},"Implicit decorations"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Additional information inferred from the code can be show within the\ncode using virtual text."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Shown in hover"),": Additional information inferred from the code can be show\nwhen hovering over a specific line. That hover only shows the additional symbols\non the current line."),(0,r.kt)("h2",{id:"additional-file-types"},"Additional file types"),(0,r.kt)("p",null,"Not all features are supported in all possible scenarios, especially when it\ncomes to non-standard Scala files like Ammonite scripts, worksheets or sbt\nscripts."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("td",null),(0,r.kt)("td",{align:"center"},"sbt scripts"),(0,r.kt)("td",{align:"center"},"Worksheets"),(0,r.kt)("td",{align:"center"},"Ammonite scripts*"),(0,r.kt)("td",{align:"center"},"Standalone Scala files"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"Diagnostics"),(0,r.kt)("td",{align:"center"},"\u2705*"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705*")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Completions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Parameter hints"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find references"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run/Debug"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find implementations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Rename symbol"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Code actions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Document symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Workspace symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"All symbols are local"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Formatting"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Folding"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Highlight"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Organize imports"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Implicit decorations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Decode file (cfr, semanticdb, tasty, javap)"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})))),(0,r.kt)("p",null,"*"," Note that there are some specific Ammonite features that aren't supported\nlike ",(0,r.kt)("a",{parentName:"p",href:"https://ammonite.io/#Multi-stageScripts"},"multi-stage")," scripts. Currently\nAmmonite support is also limited to Scala 2."),(0,r.kt)("p",null,"*"," Diagnostics for sbt script and standalone Scala files will only show parsing\nerrors, but not diagnostics coming from the compiler."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9b4a23be.e4c3f8b6.js b/assets/js/9b4a23be.e4c3f8b6.js new file mode 100644 index 00000000000..3cce37d166f --- /dev/null +++ b/assets/js/9b4a23be.e4c3f8b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5688],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>m});var l=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function a(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var s=l.createContext({}),d=function(t){var e=l.useContext(s),n=e;return t&&(n="function"==typeof t?t(e):a(a({},e),t)),n},c=function(t){var e=d(t.components);return l.createElement(s.Provider,{value:e},t.children)},k="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},p=l.forwardRef((function(t,e){var n=t.components,i=t.mdxType,r=t.originalType,s=t.parentName,c=o(t,["components","mdxType","originalType","parentName"]),k=d(n),p=i,m=k["".concat(s,".").concat(p)]||k[p]||u[p]||r;return n?l.createElement(m,a(a({ref:e},c),{},{components:n})):l.createElement(m,a({ref:e},c))}));function m(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var r=n.length,a=new Array(r);a[0]=p;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=t,o[k]="string"==typeof t?t:i,a[1]=o;for(var d=2;d{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>k});var l=n(7462),i=n(3366),r=(n(7294),n(3905)),a=["components"],o={id:"overview",title:"Text Editors",sidebar_label:"Overview",slug:"/"},s=void 0,d={unversionedId:"editors/overview",id:"editors/overview",title:"Text Editors",description:"Latest Metals server versions",source:"@site/target/docs/editors/overview.md",sourceDirName:"editors",slug:"/",permalink:"/metals/docs/",draft:!1,editUrl:"https://github.com/scalameta/metals/edit/main/docs/editors/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Text Editors",sidebar_label:"Overview",slug:"/"},sidebar:"docs",next:{title:"VS Code",permalink:"/metals/docs/editors/vscode"}},c={},k=[{value:"Latest Metals server versions",id:"latest-metals-server-versions",level:2},{value:"Editor support",id:"editor-support",level:2},{value:"Installation",id:"installation",level:2},{value:"Build import",id:"build-import",level:2},{value:"Diagnostics",id:"diagnostics",level:2},{value:"Known limitations",id:"known-limitations",level:3},{value:"Goto definition",id:"goto-definition",level:2},{value:"Known limitations",id:"known-limitations-1",level:3},{value:"Completions",id:"completions",level:2},{value:"Known limitations",id:"known-limitations-2",level:3},{value:"Hover (aka. type at point)",id:"hover-aka-type-at-point",level:2},{value:"Signature help (aka. parameter hints)",id:"signature-help-aka-parameter-hints",level:2},{value:"Find references",id:"find-references",level:2},{value:"Known limitations",id:"known-limitations-3",level:3},{value:"Worksheets",id:"worksheets",level:2},{value:"Document symbols",id:"document-symbols",level:2},{value:"Workspace symbols",id:"workspace-symbols",level:2},{value:"Formatting",id:"formatting",level:2},{value:"Code folding",id:"code-folding",level:2},{value:"Document highlight",id:"document-highlight",level:2},{value:"Package explorer",id:"package-explorer",level:2},{value:"Test Explorer",id:"test-explorer",level:2},{value:"Running Tests",id:"running-tests",level:3},{value:"Metals Extensions",id:"metals-extensions",level:2},{value:"Implicit decorations",id:"implicit-decorations",level:2},{value:"Additional file types",id:"additional-file-types",level:2}],u={toc:k},p="wrapper";function m(t){var e=t.components,n=(0,i.Z)(t,a);return(0,r.kt)(p,(0,l.Z)({},u,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"latest-metals-server-versions"},"Latest Metals server versions"),(0,r.kt)("p",null,"To find out how to set the version in your editor please check out the editor\nspecific sections."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("th",null,"Version"),(0,r.kt)("th",null,"Published"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.1.0"),(0,r.kt)("td",null,"17 Oct 2023 11:43")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"1.1.0+1-4afaa354-SNAPSHOT"),(0,r.kt)("td",null,"17 Oct 2023 12:57")))),"Snapshot releases are not guaranteed to work.",(0,r.kt)("h2",{id:"editor-support"},"Editor support"),(0,r.kt)("p",null,"Metals works with the following text editors with varying degree of\nfunctionality."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("td",null),(0,r.kt)("td",{align:"center"},"Visual Studio Code"),(0,r.kt)("td",{align:"center"},"Vim"),(0,r.kt)("td",{align:"center"},"Sublime Text"),(0,r.kt)("td",{align:"center"},"Emacs"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"Installation"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click"),(0,r.kt)("td",{align:"center"},"Single click")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Build import"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Diagnostics"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto type definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Completions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705*"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover for selection"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u274c")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Parameter hints"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find references"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run/Debug"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find implementations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Rename symbol"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Code actions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Worksheets"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Document symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Flat"),(0,r.kt)("td",{align:"center"},"Flat"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Workspace symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Formatting"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Folding"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}," "),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Highlight"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Metals Extensions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Status bar, Input box, Decoration protocol, Did focus"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Organize imports"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Implicit decorations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"Shown in hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Source file analyzer"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find text in dependency JAR files"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u274c")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run scalafix rules"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")))),(0,r.kt)("h2",{id:"installation"},"Installation"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Single click"),": Metals is easy to install and requires minimal configuration\nout-of-the-box."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Few steps"),": installing Metals requires a few custom steps and minimal\nconfiguration to work."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"You can find instructions on how to install Metals for your editor on its\nspecific page.")),(0,r.kt)("h2",{id:"build-import"},"Build import"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": it is possible to import a build such as an sbt project directly from\nthe editor."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Requires browser"),": importing a build requires additional steps in a web\nbrowser using a localhost server. It is not possible to import a build within\nthe editor."),(0,r.kt)("h2",{id:"diagnostics"},"Diagnostics"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Diagnostics are correctly published on compile."),(0,r.kt)("p",null,"Compile errors are reported as red squiggles in the editor. Compilation is\ntriggered on file save for the build target (project/module) containing the\nfocused text file."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48774587-f4d5c780-ecca-11e8-8087-acca5a05ca78.png",alt:"Diagnostics"})),(0,r.kt)("h3",{id:"known-limitations"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Slow feedback for type errors. Syntax errors are published as you type but\ntype errors are handled by the build tool, meaning diagnostics may take a\nwhile to publish for large projects.")),(0,r.kt)("h2",{id:"goto-definition"},"Goto definition"),(0,r.kt)("p",null,"Navigate to symbol definitions for project sources and Scala/Java library\ndependencies."),(0,r.kt)("p",null,"Symbols are resolved according to the last successful compilation in the build\ntool and navigation continues to work despite syntax errors in the open unsaved\nbuffer."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/48776422-1f764f00-ecd0-11e8-96d1-170f2354d50e.gif",alt:"Goto Definition"})),(0,r.kt)("h3",{id:"known-limitations-1"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Navigation does not work for buffers that do not tokenize, for example due to\nunclosed string literals."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/scalameta/issues/1802"},"scalameta/scalameta#1802"),"\nreflective invocations (methods calls on structural types) do not resolve to a\ndefinition.")),(0,r.kt)("h2",{id:"completions"},"Completions"),(0,r.kt)("p",null,"Use code completions to explore APIs, implement interfaces, generate exhaustive\npattern matches and more."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/56036958-725bac00-5d2e-11e9-9cf7-46249125494a.gif",alt:"2019-04-12 14 19 39"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Auto-import"),": imports are inserted at the bottom of the global import list.\nImports still need to be sorted and grouped manually, we are exploring ways to\nautomate this workflow in the future."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Override def"),": implement methods from the super class."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Exhaustive match"),": generate an exhaustive pattern match for sealed types."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"String interpolator"),": automatically convert string literals into string\ninterpolators."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Filename"),": complete classnames based on the enclosing file."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Documentation"),": read the docstring for method symbols by pressing\nctrl+space in VS Code.")),(0,r.kt)("h3",{id:"known-limitations-2"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"completion results don't include symbols that have just been typed in separate\nfiles without a successful compilation in the build tool.")),(0,r.kt)("h2",{id:"hover-aka-type-at-point"},"Hover (aka. type at point)"),(0,r.kt)("p",null,"See the expression type and symbol signature under the cursor."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/2MfQvsM.gif",alt:null})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Expression type"),": shows the non-generic type of the highlighted expression."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Symbol signature"),": shows the generic signature of symbol under the cursor\nalong with its docstring, if available.")),(0,r.kt)("h2",{id:"signature-help-aka-parameter-hints"},"Signature help (aka. parameter hints)"),(0,r.kt)("p",null,"View a method signature and method overloads as you fill in the arguments."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/DAWIrHu.gif",alt:null})),(0,r.kt)("h2",{id:"find-references"},"Find references"),(0,r.kt)("p",null,"Find symbol references in project sources. References include implicits,\ninferred ",(0,r.kt)("inlineCode",{parentName:"p"},".apply"),", desugared ",(0,r.kt)("inlineCode",{parentName:"p"},".flatMap")," from for comprehensions and other\nsymbols that may not be explicitly written in source, making it possible to\ndiscover usages of difficult-to-grep symbols. The Metals navigation index is\nlow-overhead and should only require a few megabytes of memory even for large\nprojects."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/51089190-75fc8880-1769-11e9-819c-95262205e95c.png",alt:"Find references"})),(0,r.kt)("h3",{id:"known-limitations-3"},"Known limitations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'References to overridden methods are not included in the results. For example,\nif you run "find references" on the method ',(0,r.kt)("inlineCode",{parentName:"li"},"Dog.name()")," then it won't include\nreferences to the super method ",(0,r.kt)("inlineCode",{parentName:"li"},"Animal.name()"),".")),(0,r.kt)("h2",{id:"worksheets"},"Worksheets"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Worksheets work via the Decoration protocol and are added as a\nnon-editable side decoration."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Comments"),": Worksheets work via ",(0,r.kt)("inlineCode",{parentName:"p"},"workspace/applyEdit")," by adding comments to\nthe source code and support hover to show larger output. You can find more\ninformation about worksheets under the editor specific worksheet section. For\nexample, ",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/editors/vscode#worksheets"},"here for VS Code"),"."),(0,r.kt)("h2",{id:"document-symbols"},"Document symbols"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Document symbols are displayed in a hierarchical outline."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Flat"),": Document symbols are displayed in a flat outline."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/50635569-014c7180-0f53-11e9-8898-62803898781c.gif",alt:"Document Symbols"})),(0,r.kt)("h2",{id:"workspace-symbols"},"Workspace symbols"),(0,r.kt)("p",null,"Fuzzy search a symbol in the workspace of library dependencies by its name."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All-lowercase queries are treated as case-insensitive searches."),(0,r.kt)("li",{parentName:"ul"},"Queries ending with a dot ",(0,r.kt)("inlineCode",{parentName:"li"},".")," list nested symbols."),(0,r.kt)("li",{parentName:"ul"},"Queries containing a semicolon ",(0,r.kt)("inlineCode",{parentName:"li"},";")," search library dependencies.")),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/w5yrK1w.gif",alt:"Fuzzy symbol search example"})),(0,r.kt)("h2",{id:"formatting"},"Formatting"),(0,r.kt)("p",null,"Metals uses Scalafmt to respond to formatting requests from the editor,\naccording to the configuration defined in ",(0,r.kt)("inlineCode",{parentName:"p"},".scalafmt.conf"),"."),(0,r.kt)("p",null,"Learn how to configure Scalafmt at\n",(0,r.kt)("a",{parentName:"p",href:"https://scalameta.org/scalafmt/docs/configuration.html"},"https://scalameta.org/scalafmt/docs/configuration.html"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://user-images.githubusercontent.com/1408093/50635748-b0894880-0f53-11e9-913b-acfd5f505351.gif",alt:"Formatting"})),(0,r.kt)("h2",{id:"code-folding"},"Code folding"),(0,r.kt)("p",null,"Fold ranges such as large multi-line expressions, import groups and comments."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://camo.githubusercontent.com/3fdd7ae28907ac61c0a1ac5fdc07d085245957aa/68747470733a2f2f692e696d6775722e636f6d2f667149554a54472e676966",alt:null})),(0,r.kt)("h2",{id:"document-highlight"},"Document highlight"),(0,r.kt)("p",null,"Highlight references to the same symbol in the open file."),(0,r.kt)("p",null,(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/0uhc9P5.gif",alt:null})),(0,r.kt)("h2",{id:"package-explorer"},"Package explorer"),(0,r.kt)("p",null,"Browse packages, classes and methods in the workspace and library dependencies\nusing the Metals sidebar. This feature is only implemented in VS Code."),(0,r.kt)("h2",{id:"test-explorer"},"Test Explorer"),(0,r.kt)("p",null,"Test Explorer is a feature that allows editors to display tests as a separate\ntree representation of tests. Although it was implemented in order to use Visual\nStudio Code's\n",(0,r.kt)("a",{parentName:"p",href:"https://code.visualstudio.com/api/extension-guides/testing"},"Testing API"),". The Test\nExplorer API is editor agnostic and can be used by other editors than just VS\nCode. ",(0,r.kt)("img",{parentName:"p",src:"https://i.imgur.com/Z3VtS0O.gif",alt:"test-explorer"})),(0,r.kt)("p",null,"Work on the Test Explorer is still in progress and the feature has some known\nlimitations:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Test Explorer is able to discover single test cases only for JUnit4 test\nclasses. Support for other test frameworks is being worked on."),(0,r.kt)("li",{parentName:"ul"},"detecting suites in cross scala-version projects is inconsistent, see\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/issues/3503"},"this issue"),"."),(0,r.kt)("li",{parentName:"ul"},"there is no support for JS and Native platforms. For any changes subscribe to\nthe related\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals-feature-requests/issues/256"},"feature request"),".")),(0,r.kt)("p",null,"You can find more information about Test Explorer under the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/editors/vscode#test-explorer"},"VS Code")," specific section."),(0,r.kt)("h3",{id:"running-tests"},"Running Tests"),(0,r.kt)("p",null,"Both run and debug under the hood use BSP's debug request. More information\nabout it can be found at\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/scalacenter/bloop/blob/master/docs/assets/dap-example-metals.png"},"Bloop DAP diagram"),"\nor\n",(0,r.kt)("a",{parentName:"p",href:"https://build-server-protocol.github.io/docs/specification.html#debug-request"},"BSP specification"),"\nwebsite."),(0,r.kt)("h2",{id:"metals-extensions"},"Metals Extensions"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Status bar"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/status")," notification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Decoration protocol"),": Editor client implements the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/decoration-protocol"},"Decoration Protocol"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Tree view"),": Editor client implements the\n",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/tree-view-protocol"},"Tree View Protocol"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Did focus"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/didFocusTextDocument"),"\nnotification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Slow task"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/slowTask")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Input box"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/inputBox")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Quick pick"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/quickPick")," request."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Window state"),": Editor client implements the ",(0,r.kt)("inlineCode",{parentName:"p"},"metals/windowStateDidChange"),"\nnotification."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Editor implements all Metals extension endpoints."),(0,r.kt)("p",null,"The Metals language server supports custom extensions that are not part of the\nLanguage Server Protocol (LSP). These extensions are not necessary for Metals to\nfunction but they improve the user experience. To learn more about Metals\nextensions, see ",(0,r.kt)("a",{parentName:"p",href:"/metals/docs/integrations/new-editor"},"integrating a new editor"),"."),(0,r.kt)("h2",{id:"implicit-decorations"},"Implicit decorations"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u2705"),": Additional information inferred from the code can be show within the\ncode using virtual text."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Shown in hover"),": Additional information inferred from the code can be show\nwhen hovering over a specific line. That hover only shows the additional symbols\non the current line."),(0,r.kt)("h2",{id:"additional-file-types"},"Additional file types"),(0,r.kt)("p",null,"Not all features are supported in all possible scenarios, especially when it\ncomes to non-standard Scala files like Ammonite scripts, worksheets or sbt\nscripts."),(0,r.kt)("table",null,(0,r.kt)("thead",null,(0,r.kt)("tr",null,(0,r.kt)("td",null),(0,r.kt)("td",{align:"center"},"sbt scripts"),(0,r.kt)("td",{align:"center"},"Worksheets"),(0,r.kt)("td",{align:"center"},"Ammonite scripts*"),(0,r.kt)("td",{align:"center"},"Standalone Scala files"))),(0,r.kt)("tbody",null,(0,r.kt)("tr",null,(0,r.kt)("td",null,"Diagnostics"),(0,r.kt)("td",{align:"center"},"\u2705*"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705*")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Goto definition"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Completions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Hover"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Parameter hints"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find references"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Run/Debug"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Find implementations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Rename symbol"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Code actions"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Document symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Workspace symbols"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"All symbols are local"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Formatting"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Folding"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Highlight"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Organize imports"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Implicit decorations"),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"},"\u2705"),(0,r.kt)("td",{align:"center"},"\u2705")),(0,r.kt)("tr",null,(0,r.kt)("td",null,"Decode file (cfr, semanticdb, tasty, javap)"),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"}),(0,r.kt)("td",{align:"center"})))),(0,r.kt)("p",null,"*"," Note that there are some specific Ammonite features that aren't supported\nlike ",(0,r.kt)("a",{parentName:"p",href:"https://ammonite.io/#Multi-stageScripts"},"multi-stage")," scripts. Currently\nAmmonite support is also limited to Scala 2."),(0,r.kt)("p",null,"*"," Diagnostics for sbt script and standalone Scala files will only show parsing\nerrors, but not diagnostics coming from the compiler."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a4b63d05.be2b0d2c.js b/assets/js/a4b63d05.7d64216e.js similarity index 59% rename from assets/js/a4b63d05.be2b0d2c.js rename to assets/js/a4b63d05.7d64216e.js index c347de7cc49..ca4ba5db082 100644 --- a/assets/js/a4b63d05.be2b0d2c.js +++ b/assets/js/a4b63d05.7d64216e.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3733],{4236:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/43","page":43,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/42","nextPage":"/metals/blog/page/44","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3733],{4236:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/43","page":43,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/42","nextPage":"/metals/blog/page/44","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a81ab01c.9c51edd7.js b/assets/js/a81ab01c.f5f3cf76.js similarity index 79% rename from assets/js/a81ab01c.9c51edd7.js rename to assets/js/a81ab01c.f5f3cf76.js index 096eabeb630..0ea451c816c 100644 --- a/assets/js/a81ab01c.9c51edd7.js +++ b/assets/js/a81ab01c.f5f3cf76.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9981],{793:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/8","page":8,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/7","nextPage":"/metals/blog/page/9","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9981],{793:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/8","page":8,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/7","nextPage":"/metals/blog/page/9","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a91b50a6.e314bf11.js b/assets/js/a91b50a6.3dd7d625.js similarity index 59% rename from assets/js/a91b50a6.e314bf11.js rename to assets/js/a91b50a6.3dd7d625.js index 6204d7b1a9f..2f041e3a2a9 100644 --- a/assets/js/a91b50a6.e314bf11.js +++ b/assets/js/a91b50a6.3dd7d625.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9641],{5646:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/55","page":55,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/54","nextPage":"/metals/blog/page/56","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9641],{5646:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/55","page":55,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/54","nextPage":"/metals/blog/page/56","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a935f661.bfb78b2b.js b/assets/js/a935f661.54ca023f.js similarity index 59% rename from assets/js/a935f661.bfb78b2b.js rename to assets/js/a935f661.54ca023f.js index efd03796461..387b5dbca52 100644 --- a/assets/js/a935f661.bfb78b2b.js +++ b/assets/js/a935f661.54ca023f.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1239],{1612:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/46","page":46,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/45","nextPage":"/metals/blog/page/47","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1239],{1612:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/46","page":46,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/45","nextPage":"/metals/blog/page/47","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/adce20d1.6fb16053.js b/assets/js/adce20d1.bc8ace66.js similarity index 59% rename from assets/js/adce20d1.6fb16053.js rename to assets/js/adce20d1.bc8ace66.js index 033225042e6..830c40efec7 100644 --- a/assets/js/adce20d1.6fb16053.js +++ b/assets/js/adce20d1.bc8ace66.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9505],{1050:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/39","page":39,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/38","nextPage":"/metals/blog/page/40","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9505],{1050:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/39","page":39,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/38","nextPage":"/metals/blog/page/40","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b54e7820.ab84cd03.js b/assets/js/b54e7820.ebba03db.js similarity index 59% rename from assets/js/b54e7820.ab84cd03.js rename to assets/js/b54e7820.ebba03db.js index 31af656c781..5a3ac470bc8 100644 --- a/assets/js/b54e7820.ab84cd03.js +++ b/assets/js/b54e7820.ebba03db.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9766],{6717:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/23","page":23,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/22","nextPage":"/metals/blog/page/24","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9766],{6717:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/23","page":23,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/22","nextPage":"/metals/blog/page/24","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bd78ee39.1bd3ba8f.js b/assets/js/bd78ee39.26292ca6.js similarity index 76% rename from assets/js/bd78ee39.1bd3ba8f.js rename to assets/js/bd78ee39.26292ca6.js index 342803a3de9..2a4e1452368 100644 --- a/assets/js/bd78ee39.1bd3ba8f.js +++ b/assets/js/bd78ee39.26292ca6.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9732],{1529:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog","page":1,"postsPerPage":1,"totalPages":58,"totalCount":58,"nextPage":"/metals/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9732],{1529:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog","page":1,"postsPerPage":1,"totalPages":59,"totalCount":59,"nextPage":"/metals/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/bdbe54cc.629ecd47.js b/assets/js/bdbe54cc.03dd9912.js similarity index 59% rename from assets/js/bdbe54cc.629ecd47.js rename to assets/js/bdbe54cc.03dd9912.js index ea83426079f..15e7444b6f9 100644 --- a/assets/js/bdbe54cc.629ecd47.js +++ b/assets/js/bdbe54cc.03dd9912.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9423],{3877:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/27","page":27,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/26","nextPage":"/metals/blog/page/28","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9423],{3877:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/27","page":27,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/26","nextPage":"/metals/blog/page/28","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c4083f57.f2b194cf.js b/assets/js/c4083f57.8219cd73.js similarity index 59% rename from assets/js/c4083f57.f2b194cf.js rename to assets/js/c4083f57.8219cd73.js index e43e0583d5c..aa7c657824e 100644 --- a/assets/js/c4083f57.f2b194cf.js +++ b/assets/js/c4083f57.8219cd73.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4766],{1285:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/29","page":29,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/28","nextPage":"/metals/blog/page/30","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4766],{1285:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/29","page":29,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/28","nextPage":"/metals/blog/page/30","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c6da16b1.fd2f81b5.js b/assets/js/c6da16b1.af5b90ab.js similarity index 59% rename from assets/js/c6da16b1.fd2f81b5.js rename to assets/js/c6da16b1.af5b90ab.js index c341f5f9dc8..f117780593f 100644 --- a/assets/js/c6da16b1.fd2f81b5.js +++ b/assets/js/c6da16b1.af5b90ab.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7696],{6964:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/36","page":36,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/35","nextPage":"/metals/blog/page/37","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7696],{6964:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/36","page":36,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/35","nextPage":"/metals/blog/page/37","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/c7875d0d.880d1c10.js b/assets/js/c7875d0d.880d1c10.js new file mode 100644 index 00000000000..f493fc75cb6 --- /dev/null +++ b/assets/js/c7875d0d.880d1c10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[758],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function i(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function n(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function r(t){for(var e=1;e=0||(i[a]=t[a]);return i}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(i[a]=t[a])}return i}var s=l.createContext({}),o=function(t){var e=l.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},p=function(t){var e=o(t.components);return l.createElement(s.Provider,{value:e},t.children)},h="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,i=t.mdxType,n=t.originalType,s=t.parentName,p=m(t,["components","mdxType","originalType","parentName"]),h=o(a),c=i,k=h["".concat(s,".").concat(c)]||h[c]||u[c]||n;return a?l.createElement(k,r(r({ref:e},p),{},{components:a})):l.createElement(k,r({ref:e},p))}));function k(t,e){var a=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var n=a.length,r=new Array(n);r[0]=c;var m={};for(var s in e)hasOwnProperty.call(e,s)&&(m[s]=e[s]);m.originalType=t,m[h]="string"==typeof t?t:i,r[1]=m;for(var o=2;o{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>k,frontMatter:()=>m,metadata:()=>o,toc:()=>h});var l=a(7462),i=a(3366),n=(a(7294),a(3905)),r=["components"],m={author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},s=void 0,o={permalink:"/metals/blog/2023/08/28/silver",source:"@site/blog/2023-08-28-silver.md",title:"Metals v1.0.1 - Silver",description:"We're happy to announce the release of Metals v1.0.1, which comes with",date:"2023-08-28T00:00:00.000Z",formattedDate:"August 28, 2023",tags:[],readingTime:7.85,hasTruncateMarker:!1,authors:[{name:"Jakub Ciesluk",url:"https://github.com/jkciesluk",imageURL:"https://github.com/jkciesluk.png"}],frontMatter:{author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},prevItem:{title:"Metals v1.1.0 - Silver",permalink:"/metals/blog/2023/10/17/silver"},nextItem:{title:"Metals v1.0.0 - Silver",permalink:"/metals/blog/2023/07/19/silver"}},p={authorsImageUrls:[void 0]},h=[{value:"TL;DR",id:"tldr",level:2},{value:"Completions in Java files",id:"completions-in-java-files",level:2},{value:"Liveness monitor",id:"liveness-monitor",level:2},{value:"Improvements for enums",id:"improvements-for-enums",level:2},{value:"Semantic highlighting",id:"semantic-highlighting",level:2},{value:"Plugin authors",id:"plugin-authors",level:2},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.0.1 (2023-08-28)",id:"v101-2023-08-28",level:2}],u={toc:h},c="wrapper";function k(t){var e=t.components,a=(0,i.Z)(t,r);return(0,n.kt)(c,(0,l.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We're happy to announce the release of Metals v1.0.1, which comes with\na couple of exciting new features and stability improvements."),(0,n.kt)("table",null,(0,n.kt)("tbody",null,(0,n.kt)("tr",null,(0,n.kt)("td",null,"Commits since last release"),(0,n.kt)("td",{align:"center"},"86")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Merged PRs"),(0,n.kt)("td",{align:"center"},"78")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Contributors"),(0,n.kt)("td",{align:"center"},"13")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Closed issues"),(0,n.kt)("td",{align:"center"},"20")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"New features"),(0,n.kt)("td",{align:"center"},"4")))),(0,n.kt)("p",null,"For full details: ","[https://github.com/scalameta/metals/milestone/59?closed=1]","\n(",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/59?closed=1"},"https://github.com/scalameta/metals/milestone/59?closed=1"),")"),(0,n.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,n.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,n.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from ",(0,n.kt)("a",{parentName:"p",href:"https://lunatech.com"},"Lunatech")," along with contributors from\nthe community."),(0,n.kt)("h2",{id:"tldr"},"TL;DR"),(0,n.kt)("p",null,"Check out ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#completions-in-java-files"},"Completions in java files")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#liveness-monitor"},"Liveness monitor")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#improvements-for-enums"},"Improvements for enums")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#semantic-highlighting"},"Semantic highlighting")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#miscellaneous"},"Miscellaneous")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#plugin-authors"},"Plugin authors"))),(0,n.kt)("h2",{id:"completions-in-java-files"},"Completions in Java files"),(0,n.kt)("p",null,"Thanks to amazing work done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/VankaTaganai"},"VankaTaganai")," and further improvements by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"tgodzik"),",\nyou will be able to get completions in Java files. It should make\nworking with Java sources easier, though Metals will not strive to be a full Java language server."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/wLlh7ig.gif",alt:"java-completion"})),(0,n.kt)("h2",{id:"liveness-monitor"},"Liveness monitor"),(0,n.kt)("p",null,"Up to the current release, users would not be informed if something happened\nand the build server stopped responding. Thanks to ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")," Metals will now monitor the state\nof the build server and notify the user if it becomes unresponsive."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://imgur.com/R2T5x3t.png",alt:"not-responsive"})),(0,n.kt)("p",null,"Dismissing the notification will dismiss it for the current connection."),(0,n.kt)("h2",{id:"improvements-for-enums"},"Improvements for enums"),(0,n.kt)("p",null,"This release also brings in multiple fixes connected to enums: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"better highlighting on enum cases"),(0,n.kt)("li",{parentName:"ul"},"improved navigation on enum parameters"),(0,n.kt)("li",{parentName:"ul"},"multiple fixes on enum type parameters")),(0,n.kt)("p",null,"This great work was done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/tZrSDYC.gif",alt:"enum"})),(0,n.kt)("h2",{id:"semantic-highlighting"},"Semantic highlighting"),(0,n.kt)("p",null,"Semantic highlighting enables syntax highlighting based on knowledge from the compiler.\nThanks to this, users can have specific colors for parameters, methods, mutable ",(0,n.kt)("inlineCode",{parentName:"p"},"var"),"s, packages etc.\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it's ready\nto be turned on by default. You can always change this using ",(0,n.kt)("inlineCode",{parentName:"p"},"metals.enableSemanticHighlighting")," setting.\nSome editors also require enabling this feature in other places.\nIn VS Code, you also need to set ",(0,n.kt)("inlineCode",{parentName:"p"},"editor.semanticHighlighting.enabled")," to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("p",null,"More details can be found ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens"},"here"),"."),(0,n.kt)("h2",{id:"plugin-authors"},"Plugin authors"),(0,n.kt)("p",null,"Fixing the display of encoded test names for JUnit ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5485"},"here")," required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names."),(0,n.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"improvement: create java semanticdb info using JDK instead of javac CLI\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Go to definition for named constructor params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens misaligned in triple quote s-string\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Completion item resolve for symbolic names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't decode nor encode URIs\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"feature: Add hover on class,object,type def in Scala 2\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add proper Stable Presentation Compiler Support\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show completions ending with CURSOR\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: add ",(0,n.kt)("inlineCode",{parentName:"li"},"minimal")," option for inferred type decorations\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Implement all members with end marker\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: deduplicate NamedArgParams with Def params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")")),(0,n.kt)("h2",{id:"contributors"},"Contributors"),(0,n.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.0..v1.0.1\n21 Katarzyna Marek\n 21 Tomasz Godzik\n 19 Scalameta Bot\n 11 Jakub Ciesluk\n 4 scalameta-bot\n 3 tgodzik\n 1 Adrien Piquerez\n 1 Arthur McGibbon\n 1 J\u0119drzej Rochala\n 1 Panov Ivan\n 1 Vadim Chelyshov\n 1 dependabot[bot]\n 1 eason du\n")),(0,n.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,n.kt)("h2",{id:"v101-2023-08-28"},(0,n.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.0.1"},"v1.0.1")," (2023-08-28)"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1"},"Full Changelog")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"bugfix: Catch exception from the compiler when coursier api is on cla\u2026\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5586"},"#","5586"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.1 to 3.24.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5591"},"#","5591"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"create java semanticdb info using JDK instead of javac CLI\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5352"},"#","5352"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5579"},"#","5579"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight and definition for enum type params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5550"},"#","5550"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5434"},"#","5434"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add some more details about the release\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5574"},"#","5574"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5584"},"#","5584"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.1 to 9.21.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5582"},"#","5582"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.5 to 2.1.6\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5581"},"#","5581"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5580"},"#","5580"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't collect map, flatMap, withFilter in for-comprehension\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5552"},"#","5552"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.0 to 3.24.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5569"},"#","5569"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Try to fix issues with sbt integration tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5557"},"#","5557"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: unignore tests for dotty pc after c90ad6b\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5565"},"#","5565"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5549"},"#","5549"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5563"},"#","5563"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5564"},"#","5564"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't show build server not responding error just after coming out of idle\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5537"},"#","5537"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Go to definition for named constructor params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5541"},"#","5541"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5450"},"#","5450"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Semantic tokens misaligned in triple quote s-string\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5556"},"#","5556"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: InverseSemanticdbSymbols for symbolic names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5481"},"#","5481"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5533"},"#","5533"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5547"},"#","5547"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.23.4 to 3.24.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5546"},"#","5546"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Fix #5518: don't decode nor encode URIs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5519"},"#","5519"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5545"},"#","5545"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5544"},"#","5544"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't try formatting in auto releases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5551"},"#","5551"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: port ",(0,n.kt)("inlineCode",{parentName:"li"},"extension-methods-complex")," test fix from dotty\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5542"},"#","5542"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight enum cases correctly\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5529"},"#","5529"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"feat: Add hover on class,object,type def in Scala 2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5540"},"#","5540"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Fix lines numbers for CI testing\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5538"},"#","5538"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Set semantic highlighting to true by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5532"},"#","5532"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5530"},"#","5530"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: print better bracket suffix in label, Scala 3 completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5497"},"#","5497"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5535"},"#","5535"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5524"},"#","5524"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add proper Stable Presentation Support\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5476"},"#","5476"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix issues with select in debugger completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5526"},"#","5526"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5520"},"#","5520"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: emit type for enum cases when needed\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5501"},"#","5501"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Show direct members first\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5523"},"#","5523"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5485"},"#","5485"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5517"},"#","5517"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5515"},"#","5515"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5514"},"#","5514"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5513"},"#","5513"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5516"},"#","5516"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix type issue after last two PRs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5521"},"#","5521"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't show completions ending with CURSOR\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5196"},"#","5196"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show keywords or constructors on select\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5509"},"#","5509"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Make debug completions work for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5505"},"#","5505"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: monitor build server liveness\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5462"},"#","5462"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Automatically add colon to get better completions for Java\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5506"},"#","5506"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5499"},"#","5499"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5134"},"#","5134"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5287"},"#","5287"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.0 to 9.21.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5489"},"#","5489"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5488"},"#","5488"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5490"},"#","5490"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Bump scalatest to fix zip issue\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5495"},"#","5495"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add java completion\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5314"},"#","5314"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/VankaTaganai"},"VankaTaganai"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5493"},"#","5493"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5465"},"#","5465"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5491"},"#","5491"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5470"},"#","5470"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement:don't show types for match case for showInferredType\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5284"},"#","5284"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Implement all members with end marker\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5412"},"#","5412"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Fix memory leak in tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5477"},"#","5477"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.20.1 to 9.21.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5474"},"#","5474"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5473"},"#","5473"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Scala2 - deduplicate NamedArgParams with Def params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5466"},"#","5466"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5463"},"#","5463"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5381"},"#","5381"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Change release notes to properly show in VS Code\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5464"},"#","5464"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add release notes for Metals 1.0.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5453"},"#","5453"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c7875d0d.c17c67be.js b/assets/js/c7875d0d.c17c67be.js deleted file mode 100644 index 7e512d208ba..00000000000 --- a/assets/js/c7875d0d.c17c67be.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[758],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function i(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function n(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function r(t){for(var e=1;e=0||(i[a]=t[a]);return i}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(i[a]=t[a])}return i}var s=l.createContext({}),o=function(t){var e=l.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},p=function(t){var e=o(t.components);return l.createElement(s.Provider,{value:e},t.children)},h="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,i=t.mdxType,n=t.originalType,s=t.parentName,p=m(t,["components","mdxType","originalType","parentName"]),h=o(a),c=i,k=h["".concat(s,".").concat(c)]||h[c]||u[c]||n;return a?l.createElement(k,r(r({ref:e},p),{},{components:a})):l.createElement(k,r({ref:e},p))}));function k(t,e){var a=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var n=a.length,r=new Array(n);r[0]=c;var m={};for(var s in e)hasOwnProperty.call(e,s)&&(m[s]=e[s]);m.originalType=t,m[h]="string"==typeof t?t:i,r[1]=m;for(var o=2;o{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>k,frontMatter:()=>m,metadata:()=>o,toc:()=>h});var l=a(7462),i=a(3366),n=(a(7294),a(3905)),r=["components"],m={author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},s=void 0,o={permalink:"/metals/blog/2023/08/28/silver",source:"@site/blog/2023-08-28-silver.md",title:"Metals v1.0.1 - Silver",description:"We're happy to announce the release of Metals v1.0.1, which comes with",date:"2023-08-28T00:00:00.000Z",formattedDate:"August 28, 2023",tags:[],readingTime:7.85,hasTruncateMarker:!1,authors:[{name:"Jakub Ciesluk",url:"https://github.com/jkciesluk",imageURL:"https://github.com/jkciesluk.png"}],frontMatter:{author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},nextItem:{title:"Metals v1.0.0 - Silver",permalink:"/metals/blog/2023/07/19/silver"}},p={authorsImageUrls:[void 0]},h=[{value:"TL;DR",id:"tldr",level:2},{value:"Completions in Java files",id:"completions-in-java-files",level:2},{value:"Liveness monitor",id:"liveness-monitor",level:2},{value:"Improvements for enums",id:"improvements-for-enums",level:2},{value:"Semantic highlighting",id:"semantic-highlighting",level:2},{value:"Plugin authors",id:"plugin-authors",level:2},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.0.1 (2023-08-28)",id:"v101-2023-08-28",level:2}],u={toc:h},c="wrapper";function k(t){var e=t.components,a=(0,i.Z)(t,r);return(0,n.kt)(c,(0,l.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We're happy to announce the release of Metals v1.0.1, which comes with\na couple of exciting new features and stability improvements."),(0,n.kt)("table",null,(0,n.kt)("tbody",null,(0,n.kt)("tr",null,(0,n.kt)("td",null,"Commits since last release"),(0,n.kt)("td",{align:"center"},"86")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Merged PRs"),(0,n.kt)("td",{align:"center"},"78")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Contributors"),(0,n.kt)("td",{align:"center"},"13")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Closed issues"),(0,n.kt)("td",{align:"center"},"20")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"New features"),(0,n.kt)("td",{align:"center"},"4")))),(0,n.kt)("p",null,"For full details: ","[https://github.com/scalameta/metals/milestone/59?closed=1]","\n(",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/59?closed=1"},"https://github.com/scalameta/metals/milestone/59?closed=1"),")"),(0,n.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,n.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,n.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from ",(0,n.kt)("a",{parentName:"p",href:"https://lunatech.com"},"Lunatech")," along with contributors from\nthe community."),(0,n.kt)("h2",{id:"tldr"},"TL;DR"),(0,n.kt)("p",null,"Check out ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#completions-in-java-files"},"Completions in java files")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#liveness-monitor"},"Liveness monitor")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#improvements-for-enums"},"Improvements for enums")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#semantic-highlighting"},"Semantic highlighting")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#miscellaneous"},"Miscellaneous")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#plugin-authors"},"Plugin authors"))),(0,n.kt)("h2",{id:"completions-in-java-files"},"Completions in Java files"),(0,n.kt)("p",null,"Thanks to amazing work done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/VankaTaganai"},"VankaTaganai")," and further improvements by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"tgodzik"),",\nyou will be able to get completions in Java files. It should make\nworking with Java sources easier, though Metals will not strive to be a full Java language server."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/wLlh7ig.gif",alt:"java-completion"})),(0,n.kt)("h2",{id:"liveness-monitor"},"Liveness monitor"),(0,n.kt)("p",null,"Up to the current release, users would not be informed if something happened\nand the build server stopped responding. Thanks to ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")," Metals will now monitor the state\nof the build server and notify the user if it becomes unresponsive."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://imgur.com/R2T5x3t.png",alt:"not-responsive"})),(0,n.kt)("p",null,"Dismissing the notification will dismiss it for the current connection."),(0,n.kt)("h2",{id:"improvements-for-enums"},"Improvements for enums"),(0,n.kt)("p",null,"This release also brings in multiple fixes connected to enums: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"better highlighting on enum cases"),(0,n.kt)("li",{parentName:"ul"},"improved navigation on enum parameters"),(0,n.kt)("li",{parentName:"ul"},"multiple fixes on enum type parameters")),(0,n.kt)("p",null,"This great work was done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/tZrSDYC.gif",alt:"enum"})),(0,n.kt)("h2",{id:"semantic-highlighting"},"Semantic highlighting"),(0,n.kt)("p",null,"Semantic highlighting enables syntax highlighting based on knowledge from the compiler.\nThanks to this, users can have specific colors for parameters, methods, mutable ",(0,n.kt)("inlineCode",{parentName:"p"},"var"),"s, packages etc.\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it's ready\nto be turned on by default. You can always change this using ",(0,n.kt)("inlineCode",{parentName:"p"},"metals.enableSemanticHighlighting")," setting.\nSome editors also require enabling this feature in other places.\nIn VS Code, you also need to set ",(0,n.kt)("inlineCode",{parentName:"p"},"editor.semanticHighlighting.enabled")," to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("p",null,"More details can be found ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens"},"here"),"."),(0,n.kt)("h2",{id:"plugin-authors"},"Plugin authors"),(0,n.kt)("p",null,"Fixing the display of encoded test names for JUnit ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5485"},"here")," required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names."),(0,n.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"improvement: create java semanticdb info using JDK instead of javac CLI\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Go to definition for named constructor params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens misaligned in triple quote s-string\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Completion item resolve for symbolic names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't decode nor encode URIs\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"feature: Add hover on class,object,type def in Scala 2\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add proper Stable Presentation Compiler Support\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show completions ending with CURSOR\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: add ",(0,n.kt)("inlineCode",{parentName:"li"},"minimal")," option for inferred type decorations\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Implement all members with end marker\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: deduplicate NamedArgParams with Def params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")")),(0,n.kt)("h2",{id:"contributors"},"Contributors"),(0,n.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.0..v1.0.1\n21 Katarzyna Marek\n 21 Tomasz Godzik\n 19 Scalameta Bot\n 11 Jakub Ciesluk\n 4 scalameta-bot\n 3 tgodzik\n 1 Adrien Piquerez\n 1 Arthur McGibbon\n 1 J\u0119drzej Rochala\n 1 Panov Ivan\n 1 Vadim Chelyshov\n 1 dependabot[bot]\n 1 eason du\n")),(0,n.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,n.kt)("h2",{id:"v101-2023-08-28"},(0,n.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.0.1"},"v1.0.1")," (2023-08-28)"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1"},"Full Changelog")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"bugfix: Catch exception from the compiler when coursier api is on cla\u2026\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5586"},"#","5586"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.1 to 3.24.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5591"},"#","5591"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"create java semanticdb info using JDK instead of javac CLI\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5352"},"#","5352"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5579"},"#","5579"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight and definition for enum type params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5550"},"#","5550"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5434"},"#","5434"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add some more details about the release\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5574"},"#","5574"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5584"},"#","5584"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.1 to 9.21.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5582"},"#","5582"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.5 to 2.1.6\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5581"},"#","5581"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5580"},"#","5580"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't collect map, flatMap, withFilter in for-comprehension\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5552"},"#","5552"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.0 to 3.24.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5569"},"#","5569"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Try to fix issues with sbt integration tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5557"},"#","5557"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: unignore tests for dotty pc after c90ad6b\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5565"},"#","5565"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5549"},"#","5549"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5563"},"#","5563"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5564"},"#","5564"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't show build server not responding error just after coming out of idle\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5537"},"#","5537"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Go to definition for named constructor params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5541"},"#","5541"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5450"},"#","5450"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Semantic tokens misaligned in triple quote s-string\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5556"},"#","5556"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: InverseSemanticdbSymbols for symbolic names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5481"},"#","5481"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5533"},"#","5533"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5547"},"#","5547"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.23.4 to 3.24.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5546"},"#","5546"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Fix #5518: don't decode nor encode URIs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5519"},"#","5519"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5545"},"#","5545"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5544"},"#","5544"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't try formatting in auto releases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5551"},"#","5551"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: port ",(0,n.kt)("inlineCode",{parentName:"li"},"extension-methods-complex")," test fix from dotty\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5542"},"#","5542"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight enum cases correctly\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5529"},"#","5529"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"feat: Add hover on class,object,type def in Scala 2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5540"},"#","5540"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Fix lines numbers for CI testing\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5538"},"#","5538"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Set semantic highlighting to true by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5532"},"#","5532"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5530"},"#","5530"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: print better bracket suffix in label, Scala 3 completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5497"},"#","5497"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5535"},"#","5535"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5524"},"#","5524"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add proper Stable Presentation Support\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5476"},"#","5476"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix issues with select in debugger completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5526"},"#","5526"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5520"},"#","5520"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: emit type for enum cases when needed\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5501"},"#","5501"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Show direct members first\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5523"},"#","5523"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5485"},"#","5485"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5517"},"#","5517"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5515"},"#","5515"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5514"},"#","5514"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5513"},"#","5513"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5516"},"#","5516"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix type issue after last two PRs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5521"},"#","5521"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't show completions ending with CURSOR\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5196"},"#","5196"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show keywords or constructors on select\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5509"},"#","5509"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Make debug completions work for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5505"},"#","5505"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: monitor build server liveness\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5462"},"#","5462"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Automatically add colon to get better completions for Java\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5506"},"#","5506"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5499"},"#","5499"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5134"},"#","5134"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5287"},"#","5287"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.0 to 9.21.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5489"},"#","5489"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5488"},"#","5488"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5490"},"#","5490"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Bump scalatest to fix zip issue\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5495"},"#","5495"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add java completion\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5314"},"#","5314"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/VankaTaganai"},"VankaTaganai"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5493"},"#","5493"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5465"},"#","5465"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5491"},"#","5491"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5470"},"#","5470"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement:don't show types for match case for showInferredType\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5284"},"#","5284"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Implement all members with end marker\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5412"},"#","5412"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Fix memory leak in tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5477"},"#","5477"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.20.1 to 9.21.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5474"},"#","5474"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5473"},"#","5473"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Scala2 - deduplicate NamedArgParams with Def params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5466"},"#","5466"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5463"},"#","5463"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5381"},"#","5381"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Change release notes to properly show in VS Code\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5464"},"#","5464"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add release notes for Metals 1.0.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5453"},"#","5453"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cb899f97.421540fa.js b/assets/js/cb899f97.6f0b85c5.js similarity index 59% rename from assets/js/cb899f97.421540fa.js rename to assets/js/cb899f97.6f0b85c5.js index f154843c509..697dce2546c 100644 --- a/assets/js/cb899f97.421540fa.js +++ b/assets/js/cb899f97.6f0b85c5.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2057],{2310:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/42","page":42,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/41","nextPage":"/metals/blog/page/43","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2057],{2310:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/42","page":42,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/41","nextPage":"/metals/blog/page/43","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/d7024f94.cf32e81e.js b/assets/js/d7024f94.9ade05c3.js similarity index 59% rename from assets/js/d7024f94.cf32e81e.js rename to assets/js/d7024f94.9ade05c3.js index b5a9a1640e9..9b8b78b076a 100644 --- a/assets/js/d7024f94.cf32e81e.js +++ b/assets/js/d7024f94.9ade05c3.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8180],{2379:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/11","page":11,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/10","nextPage":"/metals/blog/page/12","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8180],{2379:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/11","page":11,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/10","nextPage":"/metals/blog/page/12","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/da363e62.4e3c96ad.js b/assets/js/da363e62.4e3c96ad.js new file mode 100644 index 00000000000..f5ea66f7601 --- /dev/null +++ b/assets/js/da363e62.4e3c96ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5555],{7688:t=>{t.exports=JSON.parse('{"blogPosts":[{"id":"/2023/10/17/silver","metadata":{"permalink":"/metals/blog/2023/10/17/silver","source":"@site/blog/2023-10-17-silver.md","title":"Metals v1.1.0 - Silver","description":"We\'re happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting.","date":"2023-10-17T00:00:00.000Z","formattedDate":"October 17, 2023","tags":[],"readingTime":11.3,"hasTruncateMarker":false,"authors":[{"name":"Katarzyna Marek","imageURL":"https://github.com/kasiaMarek.png"}],"frontMatter":{"author":"Katarzyna Marek","title":"Metals v1.1.0 - Silver","authorImageURL":"https://github.com/kasiaMarek.png"},"nextItem":{"title":"Metals v1.0.1 - Silver","permalink":"/metals/blog/2023/08/28/silver"}},"content":"We\'re happy to announce the release of Metals v1.1.0, which brings stability fixes and takes another step towards bettering error detection and error reporting.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release114
Merged PRs104
Contributors13
Closed issues32
New features2
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/60?closed=1](https://github.com/scalameta/metals/milestone/60?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [New Scala versions support](#new-scala-versions-support)\\n- [Build server status](#build-server-status)\\n- [Enable run code lens for Mill build server](#enable-run-code-lens-for-Mill-build-server)\\n- [Convert single line comments to multiline](#convert-single-line-comments-to-multiline)\\n- [Detect project root](#detect-project-root)\\n- [Error reports in metals doctor](#error-reports-in-metals-doctor)\\n- [Show bloop errors](#show-bloop-errors)\\n- [Changes for plugin authors](#changes-for-plugin-authors)\\n\\n## New Scala versions support\\n#### Support for Scala 3.3.1\\n\\nScala 3.3.1 is a new version of the Scala 3 LTS and it adds support for JDK 16 records in Java sources.\\n\\nFor more information about the release take a look at\\nhttps://github.com/lampepfl/dotty/releases/tag/3.3.1\\n\\n#### Support for Scala 2.13.12\\n\\nThe main improvement of Scala 2.13.12 are actionable diagnostics. They are compiler suggested fixes for some errors and warnings. Actionable diagnostics are available in metals as code actions coming directly from the compiler.\\n\\nFor more information about the release take a look at\\nhttps://github.com/scala/scala/releases/tag/v2.13.12\\n\\n## Build server connection status\\n\\nSince the previous release metals detects and reports when the build server stops responding. Over the last months this feature was stabilized and the information about the build server connection is now visible in the status bar. For clients that don\'t support this status bar yet, the error message will be displayed as before.\\n\\n![bsp-status-conn](https://user-images.githubusercontent.com/26606662/274277861-de46ff62-db71-4990-ba1d-bfaaadf03499.png)\\n*Build server connection status in VSCode, when metals is successfully connected to `sbt` build server.*\\n\\nIf you are a maintainer of a metals\' client and want to know how to add support for build server status see [Changes for clients](#changes-for-clients).\\n\\n## Enable run code lens for Mill build server\\nThanks to [Tomasz Godzik](https://github.com/tgodzik) now we have run code lens when using Mill build server. As a reminder, it\'s possible to start using it by running `Metals: Switch build server` command for a Mill project.\\n\\n![mill-run-lens](https://i.imgur.com/5drObNP.gif)\\n\\n## Convert single line comments to multiline\\n\\nThanks to [Kasper Kondzielski](https://github.com/ghostbuster91) we have a new code action that converts a block of single line comments into a multiline comment. \\n\\n![convert-to-multiline](https://i.imgur.com/tu3B25s.gif)\\n\\n## Detect project root\\n\\nSometimes your Scala project root is not in the same folder that you open your editor in. Now metals will also detect the Scala project root when it is a child of the workspace/workspace folder root.\\n```\\n. *workspace root*\\n\u251c\u2500\u2500 scalaProject *detected project root*\\n\u2502 \u251c\u2500\u2500 .sbt\\n\u2502 \u251c\u2500\u2500 src/main/scala\\n\u2502 \u2502 \u251c\u2500\u2500 Main.scala\\n\u2502 \u2502 \u2514\u2500\u2500 ...\\n\u2502 \u2514\u2500\u2500 ...\\n\u251c\u2500\u2500 someOtherProject\\n\u2502 \u2514\u2500\u2500 ...\\n\u251c\u2500\u2500 .gitignore\\n\u2514\u2500\u2500 ...\\n```\\n## Error reports in metals doctor\\nError reports are now visible in the metals doctor to help users diagnose the cause of any potential issue. Previously, they would only exist in the `.metals/.reports` folder.\\n\\n![show-error-reports](https://user-images.githubusercontent.com/26606662/270966990-86cbd199-8621-4d04-a4ae-41f4bb598668.gif)\\n\\n## Show bloop errors\\n\\nBefore this release Bloop build server errors would only be logged silently into `metals.log` and the Metals output. Now for the sake of visibility Bloop errors are also shown to the users in form of error messages. The message can be dismissed for the current session of Metals or you can turn off all messages in a workspace.\\n\\n## Changes for plugin authors\\n\\n#### Build server status\\n\\nWe added `bspStatusBarProvider` field to initialization parameters. Similarly to `statusBarProvider` it can have one of the following values: `\\"on\\"`, `\\"off\\"`, `\\"log-message\\"`, `\\"show-message\\"` (default).\\n\\nWhen `bspStatusBarProvider` is set to `\\"on\\"`, the build server status is send via `metals/status` with new field `\\"statusType\\"` set to `\\"bsp\\"`.\\n\\nNew fields in `MetalsStatusParams`:\\n- `statusType`\\n - `\\"bsp\\"` for build server status\\n - `\\"metals\\"` for metals status (default)\\n- `level` - severity level of the message, possible values: `\\"info\\"`, `\\"warn\\"`, `\\"error\\"`\\n- `commandTooltip` - command tooltip, which can be appended to the status tooltip if the status bar supports commands\\n\\nFor more details refer to the [PR](https://github.com/scalameta/metals/pull/5660).\\n\\n#### Doctor results v5\\n\\nNew `errorReports` field in `DoctorFolderResults` containing an array of `ErrorReportInfo`, which has the following fields:\\n- `name` string - display name of the error,\\n- `timestamp` long - timestamp of the report creation date,\\n- `uri` string - error report file uri,\\n- `buildTarget` nullable string - optional build target that the error is associated with,\\n- `shortSummary` string - short error summary,\\n- `errorReportType` string - one of \\"metals\\", \\"metals-full\\", \\"bloop\\".\\nFor more details refer to the [PR](https://github.com/scalameta/metals/pull/5683).\\n\\n## Miscellaneous\\n- bugfix: incorrect docstring completions when not directly over definition ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: don\'t use cache directory when incorrectly resolved path ([tgodzik](https://github.com/tgodzik))\\n- bugfix: skip empty lines when calculating indentation for auto import ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: update ranges on Scala CLI actionable diagnostics for files with non-saved changes ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bugfix: correctly choose the folder to use for a command ([tgodzik](https://github.com/tgodzik))\\n- bugfix: extract member with associated comments ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: handle EOF in java completions ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: workaround for missing span in reference to an extension method defined in the companion object ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: automatically calculate last supported versions for semanticdb ([tgodzik](https://github.com/tgodzik))\\n- bugfix: escape special chars in test names ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: add `moduleClass` imported symbols in `IndexedContext` (fix for insert type annotation) ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: fix resolving main class/ test suite for multi-root projects ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: wait longer to connect to build tools other than Bloop ([tgodzik](https://github.com/tgodzik))\\n- improvement: don\'t create service for folders with non-Scala projects ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: semantic tokens for multiline strings in Scala3 worksheets ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: incorrect docstring on parameters ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: trim hover body ([kasiaMarek](https://github.com/kasiaMarek))\\n- feature: user configuration per workspace folder ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: named args completions with default values ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: exhaustive match on stale symbols ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: fix docstring regex in semantic highlighting ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: add timeout to fix java version for sbt request ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: fix reporting \\"no response error\\" after laptop in sleep mode ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: match completions for type aliases in Scala 3 ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: handle created build server config before all content written ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: only log mtgas resolve messages on resolution ([tgodzik](https://github.com/tgodzik))\\n- bugfix: dependency completions with double colon before version (using directives) ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: semantic highlighting in worksheets starting with an empty line ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: don\'t read file for InteractiveSemanticdbdb if it doesn\'t exist ([tgodzik](https://github.com/tgodzik))\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v1.0.1..v1.1.0\\n 34\\tKatarzyna Marek\\n 24\\tScalameta Bot\\n 22\\tTomasz Godzik\\n 10\\tJakub Ciesluk\\n 6\\tdependabot[bot]\\n 4\\trochala\\n 4\\tscalameta-bot\\n 4\\ttgodzik\\n 2\\tLaurence Warne\\n 1\\tChris Kipp\\n 1\\tEthan Atkins\\n 1\\tJack Koenig\\n 1\\tKasper Kondzielski\\n```\\n\\n## Merged PRs\\n\\n## [v1.1.0](https://github.com/scalameta/metals/tree/v1.1.0) (2023-10-17)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v1.0.1...v1.1.0)\\n\\n**Merged pull requests:**\\n\\n- bugfix: add user config promise\\n [\\\\#5751](https://github.com/scalameta/metals/pull/5751)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Bump Scalameta to 4.8.12\\n [\\\\#5753](https://github.com/scalameta/metals/pull/5753)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t read file for InteractiveSemanticdbdb if it doesn\'t exist\\n [\\\\#5749](https://github.com/scalameta/metals/pull/5749)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Semantic highlighting in worksheets starting with empty line\\n [\\\\#5746](https://github.com/scalameta/metals/pull/5746)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Dependency completions with double colon before version\\n [\\\\#5724](https://github.com/scalameta/metals/pull/5724)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- docs: Move acknowledgements/team to the website\\n [\\\\#5747](https://github.com/scalameta/metals/pull/5747)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update guava from 32.1.2-jre to 32.1.3-jre\\n [\\\\#5741](https://github.com/scalameta/metals/pull/5741)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update xnio-nio from 3.8.10.Final to 3.8.11.Final\\n [\\\\#5743](https://github.com/scalameta/metals/pull/5743)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.22.2 to 9.22.3\\n [\\\\#5742](https://github.com/scalameta/metals/pull/5742)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Only log messages on resolution\\n [\\\\#5740](https://github.com/scalameta/metals/pull/5740)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add error reports info to metals doctor\\n [\\\\#5683](https://github.com/scalameta/metals/pull/5683)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: handle created build server config before all content written\\n [\\\\#5734](https://github.com/scalameta/metals/pull/5734)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: match completions for type aliases scala 3\\n [\\\\#5714](https://github.com/scalameta/metals/pull/5714)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: hang on `initialize`\\n [\\\\#5735](https://github.com/scalameta/metals/pull/5735)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: fix reporting \\"no response error\\" after laptop in sleep mode\\n [\\\\#5716](https://github.com/scalameta/metals/pull/5716)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: add timeout to fix java version for sbt request\\n [\\\\#5715](https://github.com/scalameta/metals/pull/5715)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix docstring regex in semantic highlighting\\n [\\\\#5729](https://github.com/scalameta/metals/pull/5729)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: exhaustive match on stale symbols\\n [\\\\#5733](https://github.com/scalameta/metals/pull/5733)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update metaconfig-core from 0.11.1 to 0.12.0\\n [\\\\#5719](https://github.com/scalameta/metals/pull/5719)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update Scalameta to 4.8.11\\n [\\\\#5681](https://github.com/scalameta/metals/pull/5681)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Named args completions with default values\\n [\\\\#5657](https://github.com/scalameta/metals/pull/5657)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update bsp4j from 2.1.0-M5 to 2.1.0-M7\\n [\\\\#5718](https://github.com/scalameta/metals/pull/5718)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- User configuration per workspace folder\\n [\\\\#5709](https://github.com/scalameta/metals/pull/5709)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Try to fix Mill flaky test\\n [\\\\#5661](https://github.com/scalameta/metals/pull/5661)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix completions tests after a new artifact starting with io.circ showed up\\n [\\\\#5723](https://github.com/scalameta/metals/pull/5723)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 3.0.0-M0-55-8ef21714 to 3.0.0-M0-56-1bcbe7f6\\n [\\\\#5721](https://github.com/scalameta/metals/pull/5721)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update protobuf-java from 3.24.3 to 3.24.4\\n [\\\\#5720](https://github.com/scalameta/metals/pull/5720)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.11.4 to 0.11.5\\n [\\\\#5722](https://github.com/scalameta/metals/pull/5722)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: show bsp as connected after the first message from build server\\n [\\\\#5707](https://github.com/scalameta/metals/pull/5707)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- test: try to fix `cancel-compile` in `BillLspSuite`\\n [\\\\#5713](https://github.com/scalameta/metals/pull/5713)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: add do not show bsp errors option\\n [\\\\#5678](https://github.com/scalameta/metals/pull/5678)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- test: move cancel compile test to sbt\\n [\\\\#5711](https://github.com/scalameta/metals/pull/5711)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add and adjust test according to changes in dotty\\n [\\\\#5710](https://github.com/scalameta/metals/pull/5710)\\n ([rochala](https://github.com/rochala))\\n- improvement: trim hover body\\n [\\\\#5694](https://github.com/scalameta/metals/pull/5694)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Incorrect docstring on parameters\\n [\\\\#5656](https://github.com/scalameta/metals/pull/5656)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update ammonite to the newest snaphot\\n [\\\\#5697](https://github.com/scalameta/metals/pull/5697)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Semantic tokens for multiline strings in Scala3 worksheets\\n [\\\\#5691](https://github.com/scalameta/metals/pull/5691)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: don\'t create service for folders w/ non-Scala projects\\n [\\\\#5562](https://github.com/scalameta/metals/pull/5562)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: cancel current request in batched functions\\n [\\\\#5432](https://github.com/scalameta/metals/pull/5432)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- test: fix `ScalaCliSuite.connecting-scalacli`\\n [\\\\#5698](https://github.com/scalameta/metals/pull/5698)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: add debug logs to server liveness monitor\\n [\\\\#5693](https://github.com/scalameta/metals/pull/5693)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.4.1 to 2.4.3 in /website\\n [\\\\#5703](https://github.com/scalameta/metals/pull/5703)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump coursier/setup-action from 1.3.3 to 1.3.4\\n [\\\\#5701](https://github.com/scalameta/metals/pull/5701)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @easyops-cn/docusaurus-search-local from 0.35.0 to 0.36.0 in /website\\n [\\\\#5704](https://github.com/scalameta/metals/pull/5704)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump actions/checkout from 3 to 4\\n [\\\\#5702](https://github.com/scalameta/metals/pull/5702)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/preset-classic from 2.4.1 to 2.4.3 in /website\\n [\\\\#5705](https://github.com/scalameta/metals/pull/5705)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/core from 2.4.1 to 2.4.3 in /website\\n [\\\\#5706](https://github.com/scalameta/metals/pull/5706)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Wait longer to connect to build tools other than Bloop\\n [\\\\#5696](https://github.com/scalameta/metals/pull/5696)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: fix resolving main class/ test suite for multi-root projects\\n [\\\\#5596](https://github.com/scalameta/metals/pull/5596)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- docs: Document AnyVal as not supported in worksheets\\n [\\\\#5695](https://github.com/scalameta/metals/pull/5695)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: add `moduleClass` imported symbols in `IndexedContext`\\n [\\\\#5690](https://github.com/scalameta/metals/pull/5690)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: move bsp responsiveness into status\\n [\\\\#5660](https://github.com/scalameta/metals/pull/5660)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update interface from 1.0.18 to 1.0.19\\n [\\\\#5688](https://github.com/scalameta/metals/pull/5688)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: escape special chars in test names\\n [\\\\#5676](https://github.com/scalameta/metals/pull/5676)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add code action to convert single line comment into multiline comment\\n [\\\\#5633](https://github.com/scalameta/metals/pull/5633)\\n ([ghostbuster91](https://github.com/ghostbuster91))\\n- bugfix: Make sure we are using latest known scalameta version\\n [\\\\#5675](https://github.com/scalameta/metals/pull/5675)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Automatically calculate last supported versions for semanticdb\\n [\\\\#5671](https://github.com/scalameta/metals/pull/5671)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Fix nightly CI\\n [\\\\#5673](https://github.com/scalameta/metals/pull/5673)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update coursier from 2.1.6 to 2.1.7\\n [\\\\#5635](https://github.com/scalameta/metals/pull/5635)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.11.3 to 0.11.4\\n [\\\\#5666](https://github.com/scalameta/metals/pull/5666)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: auto detect project root\\n [\\\\#5576](https://github.com/scalameta/metals/pull/5576)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: workaround for missing span in reference to an extension method defined in the companion object\\n [\\\\#5640](https://github.com/scalameta/metals/pull/5640)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.22.1 to 9.22.2\\n [\\\\#5668](https://github.com/scalameta/metals/pull/5668)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update file-tree-views from 2.1.11 to 2.1.12\\n [\\\\#5667](https://github.com/scalameta/metals/pull/5667)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: deduplicate auto connect requests for scala-cli\\n [\\\\#5645](https://github.com/scalameta/metals/pull/5645)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Bump swoval to v2.1.11\\n [\\\\#5659](https://github.com/scalameta/metals/pull/5659)\\n ([eatkins](https://github.com/eatkins))\\n- bugfix: handle EOF in java completions\\n [\\\\#5644](https://github.com/scalameta/metals/pull/5644)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update mill-contrib-testng from 0.11.2 to 0.11.3\\n [\\\\#5652](https://github.com/scalameta/metals/pull/5652)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update munit from 1.0.0-M9 to 1.0.0-M10\\n [\\\\#5655](https://github.com/scalameta/metals/pull/5655)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ujson from 3.1.2 to 3.1.3\\n [\\\\#5653](https://github.com/scalameta/metals/pull/5653)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.9.4 to 1.9.6\\n [\\\\#5654](https://github.com/scalameta/metals/pull/5654)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update munit from 1.0.0-M8 to 1.0.0-M9\\n [\\\\#5648](https://github.com/scalameta/metals/pull/5648)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.22.0 to 9.22.1\\n [\\\\#5647](https://github.com/scalameta/metals/pull/5647)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.11.0 to 0.11.1\\n [\\\\#5646](https://github.com/scalameta/metals/pull/5646)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: extract member with associated comments\\n [\\\\#5639](https://github.com/scalameta/metals/pull/5639)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- test: `single-file-config`\\n [\\\\#5641](https://github.com/scalameta/metals/pull/5641)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: have `Dismiss.` remember the bsp error and don\'t show it again\\n [\\\\#5631](https://github.com/scalameta/metals/pull/5631)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: adjust tests for 2.13.13\\n [\\\\#5638](https://github.com/scalameta/metals/pull/5638)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update semanticdb-java from 0.9.5 to 0.9.6\\n [\\\\#5634](https://github.com/scalameta/metals/pull/5634)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: start liveness monitor only for main bsp connection\\n [\\\\#5608](https://github.com/scalameta/metals/pull/5608)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Unignore suites related to coursier shadowing\\n [\\\\#5626](https://github.com/scalameta/metals/pull/5626)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 2.13.12\\n [\\\\#5624](https://github.com/scalameta/metals/pull/5624)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update protobuf-java from 3.24.2 to 3.24.3\\n [\\\\#5627](https://github.com/scalameta/metals/pull/5627)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-jmh from 0.4.5 to 0.4.6\\n [\\\\#5628](https://github.com/scalameta/metals/pull/5628)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1\\n [\\\\#5620](https://github.com/scalameta/metals/pull/5620)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.9 to 3.12.2\\n [\\\\#5615](https://github.com/scalameta/metals/pull/5615)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Correctly choose the folder to use for a command\\n [\\\\#5612](https://github.com/scalameta/metals/pull/5612)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.13 to 3.7.14\\n [\\\\#5616](https://github.com/scalameta/metals/pull/5616)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-launcher-core from 1.5.8 to 1.5.11\\n [\\\\#5613](https://github.com/scalameta/metals/pull/5613)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: log awaiting user response in BloopInstall\\n [\\\\#5597](https://github.com/scalameta/metals/pull/5597)\\n ([jackkoenig](https://github.com/jackkoenig))\\n- chore: update minimum supported gradle version\\n [\\\\#5609](https://github.com/scalameta/metals/pull/5609)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.21.2 to 9.22.0\\n [\\\\#5605](https://github.com/scalameta/metals/pull/5605)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.12 to 3.7.13\\n [\\\\#5606](https://github.com/scalameta/metals/pull/5606)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Update ranges on Scala CLI actionable diagnostics for `didChange`\\n [\\\\#5487](https://github.com/scalameta/metals/pull/5487)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Add support for Scala 3.3.1-RC7\\n [\\\\#5601](https://github.com/scalameta/metals/pull/5601)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix wrapper constructor, add missing constructor\\n [\\\\#5600](https://github.com/scalameta/metals/pull/5600)\\n ([rochala](https://github.com/rochala))\\n- bugfix: Allow run in Mill BSP and remove non working test lenses\\n [\\\\#5566](https://github.com/scalameta/metals/pull/5566)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Release mtagsShared together with mtags when running single version release\\n [\\\\#5598](https://github.com/scalameta/metals/pull/5598)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: show bsp errors to the user\\n [\\\\#5267](https://github.com/scalameta/metals/pull/5267)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: skip empty lines when calculating indent for auto import\\n [\\\\#5570](https://github.com/scalameta/metals/pull/5570)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t use cache directory with `null` in it\'s path\\n [\\\\#5595](https://github.com/scalameta/metals/pull/5595)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Incorrect docstring completions\\n [\\\\#5593](https://github.com/scalameta/metals/pull/5593)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Add support for Scala 3.3.1-RC6\\n [\\\\#5587](https://github.com/scalameta/metals/pull/5587)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes 1.0.1\\n [\\\\#5575](https://github.com/scalameta/metals/pull/5575)\\n ([jkciesluk](https://github.com/jkciesluk))"},{"id":"/2023/08/28/silver","metadata":{"permalink":"/metals/blog/2023/08/28/silver","source":"@site/blog/2023-08-28-silver.md","title":"Metals v1.0.1 - Silver","description":"We\'re happy to announce the release of Metals v1.0.1, which comes with","date":"2023-08-28T00:00:00.000Z","formattedDate":"August 28, 2023","tags":[],"readingTime":7.85,"hasTruncateMarker":false,"authors":[{"name":"Jakub Ciesluk","url":"https://github.com/jkciesluk","imageURL":"https://github.com/jkciesluk.png"}],"frontMatter":{"author":"Jakub Ciesluk","title":"Metals v1.0.1 - Silver","authorURL":"https://github.com/jkciesluk","authorImageURL":"https://github.com/jkciesluk.png"},"prevItem":{"title":"Metals v1.1.0 - Silver","permalink":"/metals/blog/2023/10/17/silver"},"nextItem":{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"}},"content":"We\'re happy to announce the release of Metals v1.0.1, which comes with\\na couple of exciting new features and stability improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release86
Merged PRs78
Contributors13
Closed issues20
New features4
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/59?closed=1]\\n(https://github.com/scalameta/metals/milestone/59?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n\\n- [Completions in java files](#completions-in-java-files)\\n- [Liveness monitor](#liveness-monitor)\\n- [Improvements for enums](#improvements-for-enums)\\n- [Semantic highlighting](#semantic-highlighting)\\n- [Miscellaneous](#miscellaneous)\\n- [Plugin authors](#plugin-authors)\\n\\n\\n## Completions in Java files\\n\\nThanks to amazing work done by [VankaTaganai](https://github.com/VankaTaganai) and further improvements by [tgodzik](https://github.com/tgodzik),\\nyou will be able to get completions in Java files. It should make \\nworking with Java sources easier, though Metals will not strive to be a full Java language server.\\n\\n![java-completion](https://i.imgur.com/wLlh7ig.gif)\\n\\n## Liveness monitor\\n\\nUp to the current release, users would not be informed if something happened\\nand the build server stopped responding. Thanks to [kasiaMarek](https://github.com/kasiaMarek) Metals will now monitor the state \\nof the build server and notify the user if it becomes unresponsive.\\n\\n![not-responsive](https://imgur.com/R2T5x3t.png)\\n\\nDismissing the notification will dismiss it for the current connection.\\n\\n## Improvements for enums\\n\\nThis release also brings in multiple fixes connected to enums: \\n\\n- better highlighting on enum cases\\n- improved navigation on enum parameters\\n- multiple fixes on enum type parameters\\n\\nThis great work was done by [kasiaMarek](https://github.com/kasiaMarek)\\n\\n![enum](https://i.imgur.com/tZrSDYC.gif)\\n\\n## Semantic highlighting\\n\\nSemantic highlighting enables syntax highlighting based on knowledge from the compiler.\\nThanks to this, users can have specific colors for parameters, methods, mutable `var`s, packages etc. \\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it\'s ready \\nto be turned on by default. You can always change this using `metals.enableSemanticHighlighting` setting. \\nSome editors also require enabling this feature in other places. \\nIn VS Code, you also need to set `editor.semanticHighlighting.enabled` to `true`.\\n\\nMore details can be found [here](https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens).\\n\\n## Plugin authors\\n\\nFixing the display of encoded test names for JUnit [here](https://github.com/scalameta/metals/pull/5485) required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names.\\n\\n## Miscellaneous\\n\\n- improvement: create java semanticdb info using JDK instead of javac CLI\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Don\'t enable * kind project syntax by default\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: offer amend to handle single file scala-cli config on new file\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Go to definition for named constructor params\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add date and time to reports and backup log files\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Semantic tokens misaligned in triple quote s-string\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Completion item resolve for symbolic names\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: suggest correct arg name completions for lambda expressions\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: don\'t decode nor encode URIs\\n ([adpi2](https://github.com/adpi2))\\n- feature: Add hover on class,object,type def in Scala 2\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t report tokenizer errors as stale\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Support Java when using sbt server via BSP\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add proper Stable Presentation Compiler Support\\n ([rochala](https://github.com/rochala))\\n- docs: Add info about the versioning strategy\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: do not emit cases in pattern match as enum cases\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: accommodate junit encoded test names\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t show completions ending with CURSOR\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: better heuristic for fixing imports unpon file move\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: show args completions for all matching overloaded methods\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: hover on nested selectable\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Docstring on apply method\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: adjust parsing `ScalafmtConfig` for `StandardConvention` layout\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: add `minimal` option for inferred type decorations\\n ([doofin](https://github.com/doofin))\\n- bugfix: Implement all members with end marker\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: deduplicate NamedArgParams with Def params\\n ([dos65](https://github.com/dos65))\\n- chore: Don\'t show semantic tokens warning for Java files\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: restart sbt after java home change\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v1.0.0..v1.0.1\\n21\\tKatarzyna Marek\\n 21\\tTomasz Godzik\\n 19\\tScalameta Bot\\n 11\\tJakub Ciesluk\\n 4\\tscalameta-bot\\n 3\\ttgodzik\\n 1\\tAdrien Piquerez\\n 1\\tArthur McGibbon\\n 1\\tJ\u0119drzej Rochala\\n 1\\tPanov Ivan\\n 1\\tVadim Chelyshov\\n 1\\tdependabot[bot]\\n 1\\teason du\\n```\\n\\n## Merged PRs\\n\\n## [v1.0.1](https://github.com/scalameta/metals/tree/v1.0.1) (2023-08-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Catch exception from the compiler when coursier api is on cla\u2026\\n [\\\\#5586](https://github.com/scalameta/metals/pull/5586)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update protobuf-java from 3.24.1 to 3.24.2\\n [\\\\#5591](https://github.com/scalameta/metals/pull/5591)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- create java semanticdb info using JDK instead of javac CLI\\n [\\\\#5352](https://github.com/scalameta/metals/pull/5352)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Don\'t enable * kind project syntax by default\\n [\\\\#5579](https://github.com/scalameta/metals/pull/5579)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: highlight and definition for enum type params\\n [\\\\#5550](https://github.com/scalameta/metals/pull/5550)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: offer amend to handle single file scala-cli config on new file\\n [\\\\#5434](https://github.com/scalameta/metals/pull/5434)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- docs: Add some more details about the release\\n [\\\\#5574](https://github.com/scalameta/metals/pull/5574)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\\n [\\\\#5584](https://github.com/scalameta/metals/pull/5584)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.21.1 to 9.21.2\\n [\\\\#5582](https://github.com/scalameta/metals/pull/5582)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.5 to 2.1.6\\n [\\\\#5581](https://github.com/scalameta/metals/pull/5581)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\\n [\\\\#5580](https://github.com/scalameta/metals/pull/5580)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Don\'t collect map, flatMap, withFilter in for-comprehension\\n [\\\\#5552](https://github.com/scalameta/metals/pull/5552)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.24.0 to 3.24.1\\n [\\\\#5569](https://github.com/scalameta/metals/pull/5569)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Try to fix issues with sbt integration tests\\n [\\\\#5557](https://github.com/scalameta/metals/pull/5557)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: unignore tests for dotty pc after c90ad6b\\n [\\\\#5565](https://github.com/scalameta/metals/pull/5565)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\\n [\\\\#5549](https://github.com/scalameta/metals/pull/5549)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\\n [\\\\#5563](https://github.com/scalameta/metals/pull/5563)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\\n [\\\\#5564](https://github.com/scalameta/metals/pull/5564)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: don\'t show build server not responding error just after coming out of idle\\n [\\\\#5537](https://github.com/scalameta/metals/pull/5537)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Go to definition for named constructor params\\n [\\\\#5541](https://github.com/scalameta/metals/pull/5541)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add date and time to reports and backup log files\\n [\\\\#5450](https://github.com/scalameta/metals/pull/5450)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Semantic tokens misaligned in triple quote s-string\\n [\\\\#5556](https://github.com/scalameta/metals/pull/5556)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: InverseSemanticdbSymbols for symbolic names\\n [\\\\#5481](https://github.com/scalameta/metals/pull/5481)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: suggest correct arg name completions for lambda expressions\\n [\\\\#5533](https://github.com/scalameta/metals/pull/5533)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\\n [\\\\#5547](https://github.com/scalameta/metals/pull/5547)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update protobuf-java from 3.23.4 to 3.24.0\\n [\\\\#5546](https://github.com/scalameta/metals/pull/5546)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #5518: don\'t decode nor encode URIs\\n [\\\\#5519](https://github.com/scalameta/metals/pull/5519)\\n ([adpi2](https://github.com/adpi2))\\n- build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\\n [\\\\#5545](https://github.com/scalameta/metals/pull/5545)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC5\\n [\\\\#5544](https://github.com/scalameta/metals/pull/5544)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Don\'t try formatting in auto releases\\n [\\\\#5551](https://github.com/scalameta/metals/pull/5551)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: port `extension-methods-complex` test fix from dotty\\n [\\\\#5542](https://github.com/scalameta/metals/pull/5542)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: highlight enum cases correctly\\n [\\\\#5529](https://github.com/scalameta/metals/pull/5529)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Add hover on class,object,type def in Scala 2\\n [\\\\#5540](https://github.com/scalameta/metals/pull/5540)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Fix lines numbers for CI testing\\n [\\\\#5538](https://github.com/scalameta/metals/pull/5538)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Set semantic highlighting to true by default\\n [\\\\#5532](https://github.com/scalameta/metals/pull/5532)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t report tokenizer errors as stale\\n [\\\\#5530](https://github.com/scalameta/metals/pull/5530)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: print better bracket suffix in label, Scala 3 completions\\n [\\\\#5497](https://github.com/scalameta/metals/pull/5497)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Support Java when using sbt server via BSP\\n [\\\\#5535](https://github.com/scalameta/metals/pull/5535)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add info about the versioning strategy\\n [\\\\#5524](https://github.com/scalameta/metals/pull/5524)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add proper Stable Presentation Support\\n [\\\\#5476](https://github.com/scalameta/metals/pull/5476)\\n ([rochala](https://github.com/rochala))\\n- bugfix: Fix issues with select in debugger completions\\n [\\\\#5526](https://github.com/scalameta/metals/pull/5526)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: do not emit cases in pattern match as enum cases\\n [\\\\#5520](https://github.com/scalameta/metals/pull/5520)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: emit type for enum cases when needed\\n [\\\\#5501](https://github.com/scalameta/metals/pull/5501)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Show direct members first\\n [\\\\#5523](https://github.com/scalameta/metals/pull/5523)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: accommodate junit encoded test names\\n [\\\\#5485](https://github.com/scalameta/metals/pull/5485)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\\n [\\\\#5517](https://github.com/scalameta/metals/pull/5517)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\\n [\\\\#5515](https://github.com/scalameta/metals/pull/5515)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\\n [\\\\#5514](https://github.com/scalameta/metals/pull/5514)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\\n [\\\\#5513](https://github.com/scalameta/metals/pull/5513)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\\n [\\\\#5516](https://github.com/scalameta/metals/pull/5516)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix type issue after last two PRs\\n [\\\\#5521](https://github.com/scalameta/metals/pull/5521)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Don\'t show completions ending with CURSOR\\n [\\\\#5196](https://github.com/scalameta/metals/pull/5196)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t show keywords or constructors on select\\n [\\\\#5509](https://github.com/scalameta/metals/pull/5509)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make debug completions work for Java files\\n [\\\\#5505](https://github.com/scalameta/metals/pull/5505)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: monitor build server liveness\\n [\\\\#5462](https://github.com/scalameta/metals/pull/5462)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Automatically add colon to get better completions for Java\\n [\\\\#5506](https://github.com/scalameta/metals/pull/5506)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\\n [\\\\#5499](https://github.com/scalameta/metals/pull/5499)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- improvement: better heuristic for fixing imports unpon file move\\n [\\\\#5134](https://github.com/scalameta/metals/pull/5134)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: show args completions for all matching overloaded methods\\n [\\\\#5287](https://github.com/scalameta/metals/pull/5287)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.21.0 to 9.21.1\\n [\\\\#5489](https://github.com/scalameta/metals/pull/5489)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\\n [\\\\#5488](https://github.com/scalameta/metals/pull/5488)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\\n [\\\\#5490](https://github.com/scalameta/metals/pull/5490)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Bump scalatest to fix zip issue\\n [\\\\#5495](https://github.com/scalameta/metals/pull/5495)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add java completion\\n [\\\\#5314](https://github.com/scalameta/metals/pull/5314)\\n ([VankaTaganai](https://github.com/VankaTaganai))\\n- bugfix: hover on nested selectable\\n [\\\\#5493](https://github.com/scalameta/metals/pull/5493)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Docstring on apply method\\n [\\\\#5465](https://github.com/scalameta/metals/pull/5465)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\\n [\\\\#5491](https://github.com/scalameta/metals/pull/5491)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: adjust parsing `ScalafmtConfig` for `StandardConvention` layout\\n [\\\\#5470](https://github.com/scalameta/metals/pull/5470)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement:don\'t show types for match case for showInferredType\\n [\\\\#5284](https://github.com/scalameta/metals/pull/5284)\\n ([doofin](https://github.com/doofin))\\n- fix: Implement all members with end marker\\n [\\\\#5412](https://github.com/scalameta/metals/pull/5412)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix memory leak in tests\\n [\\\\#5477](https://github.com/scalameta/metals/pull/5477)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update flyway-core from 9.20.1 to 9.21.0\\n [\\\\#5474](https://github.com/scalameta/metals/pull/5474)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\\n [\\\\#5473](https://github.com/scalameta/metals/pull/5473)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Scala2 - deduplicate NamedArgParams with Def params\\n [\\\\#5466](https://github.com/scalameta/metals/pull/5466)\\n ([dos65](https://github.com/dos65))\\n- chore: Don\'t show semantic tokens warning for Java files\\n [\\\\#5463](https://github.com/scalameta/metals/pull/5463)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: restart sbt after java home change\\n [\\\\#5381](https://github.com/scalameta/metals/pull/5381)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Change release notes to properly show in VS Code\\n [\\\\#5464](https://github.com/scalameta/metals/pull/5464)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add release notes for Metals 1.0.0\\n [\\\\#5453](https://github.com/scalameta/metals/pull/5453)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/07/19/silver","metadata":{"permalink":"/metals/blog/2023/07/19/silver","source":"@site/blog/2023-07-19-silver.md","title":"Metals v1.0.0 - Silver","description":"We\'re happy to announce the release of of Metals v1.0.0, which was a long time","date":"2023-07-19T00:00:00.000Z","formattedDate":"July 19, 2023","tags":[],"readingTime":18.23,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v1.0.0 - Silver","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v1.0.1 - Silver","permalink":"/metals/blog/2023/08/28/silver"},"nextItem":{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"}},"content":"We\'re happy to announce the release of of Metals v1.0.0, which was a long time\\nin the making. This release is a culmination of a lot of work from the community\\nand the core Metals team. As it stands, Metals supports most of the important\\nLSP features and beyond, which makes it equivalent to many IDEs, but in your\\nfavorite editor.\\n\\nBringing in version 1.0.0 doesn\'t mean that we don\'t have anything else to\\nimprove, but it means that we are confident that Metals is ready for production\\nuse in business and personal projects. We will continue to improve Metals and\\nadd new features, but we will also fully focus on making Metals the most\\nproductive and stable environment for all Scala developers. For that goal we are\\nproviding a number of reporting improvements that can help identify any problems\\nyou might have. There are more of these type of features coming your way.\\n\\nNote for plugin authors: Starting from this release, any changes in minor\\nversion will mean that there are changes to the Metals behavior or json APIs\\nthat need to be accounted for.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release211
Merged PRs181
Contributors17
Closed issues67
New features5
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/_num_?closed=1]\\n(https://github.com/scalameta/metals/milestone/_num_?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Add multi-root projects support](#add-multi-root-projects-support)\\n- [Hover support in Java files](#hover-support-in-java-files)\\n- [Command for running specified scalafix rules](#command-for-running-specified-scalafix-rules)\\n- [Add clean-all command](#add-clean-all-command)\\n- [Better support for Scala CLI](#better-support-for-scala-cli)\\n- [Support new Scala versions](#support-new-scala-versions)\\n- [Miscellaneous](#miscellaneous)\\n\\n## Add multi-root projects support\\n\\nUp until this release, Metals could only be used in workspaces with a single\\nroot. This means that if for example you used the `Add folder to Workspace`\\noption in Visual Studio Code to add a new folder to your workspace, Metals would\\nnot work in that folder. This is no longer the case and Metals will work in all\\nfolders in your workspace.\\n\\nThe work included making sure that all existing features work reliably and\\nsensibly within multi root workspaces. For instance users will properly be shown\\na single Metals doctor (or a single HTTP server for editors that do not support\\nthe doctor interface). Test explorer will also show all tests from all folders\\nclearly marked with the folder name. Most other commands will be invoked in the\\ncurrently active folder in order not to create large cascading computations such\\nas multiple folders compiling everything.\\n\\nThis tremendously useful improvement was authored by\\n[kasiaMarek](https://github.com/kasiaMarek). Take a look at the\\n[blogpost](https://scalameta.org/metals/blog/2023/07/17/workspace-folders) for\\nmore details!\\n\\n## Hover support in Java files\\n\\nAnother improvement for a better experience in Java files was contributed by\\n[VankaTaganai](https://github.com/VankaTaganai). Starting from this release you\\nwill be able to hover on names in Java files to see more information about them.\\nThis feature is primarily aimed at Scala developers that need to from time to\\ntime look into Java source and figure out what\'s going on there. This will not\\nprovide an experience of a full Java language server, but it will provide some\\nbasic functionality that will make it easier to work with Java sources.\\n\\n![java-hover](https://i.imgur.com/mp1BKse.gif)\\n\\nPlease let us know about any issues! This is a new feature and we expect that it\\nmight take some time to get it ironed out.\\n\\n## Command for running specified scalafix rules\\n\\nUsers will now be able to run a single Scalafix rule on a file in their project.\\nThis might be particularly useful if you don\'t want to run everything at once\\nand see exactly what is being done by each Scalafix rule.\\n\\nThis great usability improvement was done by\\n[LaurenceWarne](https://github.com/LaurenceWarne).\\n\\n## Add clean-all command\\n\\nThis new feature has been demanded by users for a long while. Thanks to work\\ndone by [jkciesluk](https://github.com/jkciesluk), you will be able to run the\\n`metals.reset-workspace` command to remove all the possible caches and\\ncompilation artifacts that might be causing issues in your workspace.\\n\\nThis should be seen as a last resort and used in as an alternative to the\\nsomewhat popular practice of blowing away your `.metals/` and `.bloop/`\\ndirectories. Please do keep in mind that if you\'re finding that you need this\\noften, it\'s probably a bug and should be reported.\\n\\n## Better support for Scala CLI\\n\\nWith Scala CLI becoming the official runner for Scala 3, we have been working on\\nimproving the support for it in Metals. This release brings a number of\\nimprovements that aim to improve both Scala CLI experience and the overall Scala\\nexperience.\\n\\nThis includes the following:\\n\\n- If there are no build tools present Metals will now fallback to Scala CLI,\\n which means that even if a user creates a single file they will be able to run\\n it and get all the proper support users would expect. If a build tool\\n configuration appears in the workspace, Metals will suggest switching to that\\n instead.\\n- Scala CLI gets the same status as the already supported build tools, which\\n means that we will not automatically suggest importing another build tool if\\n we have Scala CLI already configured.\\n- If `project.scala` is present in the workspace, Metals will suggest importing\\n Scala CLI project, which includes automatically using the `setupIde` command\\n to setup the .bsp configuration.\\n\\nThis splendid work was done by [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Support new Scala versions\\n\\n### Support for Scala 3.3.0\\n\\nFor more information about the release take a look at\\n[https://www.scala-lang.org/blog/2023/05/30/scala-3.3.0-released.html](https://www.scala-lang.org/blog/2023/05/30/scala-3.3.0-released.html)\\n\\nHere we only show a short summary of the main feature from the release notes.\\n\\n#### Linting\\n\\nScala 3.3.0 brings back linting to the Scala compiler. Right now, you can enable\\nchecking for unused symbols and discarded values. More linting options will come\\nsoon in the following Scala 3.3.x releases.\\n\\n#### Fewer braces\\n\\nBraces around method parameters can now be replaced with a colon. This can lead\\nto cleaner, shorter, and often more readable code in places like configuration\\nDSLs or test case definitions.\\n\\n#### Boundary and break\\n\\nTwo new methods were added to the standard library: boundary and break. They are\\nsafer and more expressive replacements for non-local returns, which were\\ndeprecated recently.\\n\\nbreak allows for a type-safe early escape from anywhere inside the block\\ndelimited by boundary to its end, returning the passed value from the entire\\nblock.\\n\\n#### The new default implementation of lazy vals\\n\\nLast but not least, we have changed the default implementation of lazy vals. The\\nnew implementation has better performance and is safer under parallel access.\\nThis may result in improvements in the performance of effect systems.\\n\\n### Support for Scala 2.12.18\\n\\nThis release improves compatibility by adding support for JDK 20 and 21 with ASM\\n9.5 upgrade.\\n\\nIt also aids migration to Scala 2.13 and Scala 3 with improvements for the\\n-Xsource flag.\\n\\nFor more information about the release take a look at\\n[https://github.com/scala/scala/releases/tag/v2.12.18](https://github.com/scala/scala/releases/tag/v2.12.18)\\n\\n### Support for Scala 2.13.11\\n\\nSimilar to Scala 2.12.18 this release improves compatibility by adding support\\nfor JDK 20 and 21 with ASM 9.5 upgrade.\\n\\nIt also aids migration to Scala 3 with improvements for the -Xsource flag with\\neven more warnings. For more information about the release take a look at\\n[https://github.com/scala/scala/releases/tag/v2.13.11](https://github.com/scala/scala/releases/tag/v2.13.11)\\n\\n## Miscellaneous\\n\\n- bugfix: Show named argument completions inside constructors\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix semantic highlight for `@@` symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix semantic highlight for multiline comments `@@` symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Add selection expansion for multiline comments\\n [doofin](https://github.com/doofin)\\n- bugfix: Ignore shebang in .sc scripts [tgodzik](https://github.com/tgodzik)\\n- bugfix: Semantic hightlight for extension methods type params\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Add bloop package for mill bloop import command (fix for newer Mill\\n versions) [mehdimas](https://github.com/mehdimas)\\n- bugfix: Fix support for Java 12 to 16 [adpi2](https://github.com/adpi2)\\n- bugfix: Argument name completion for context function parameter\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix highlight and rename for unapply in for comprehensions\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Always change the correct comment when changing to mill syntax in\\n Scala CLI scripts [tgodzik](https://github.com/tgodzik)\\n- bugfix: Correctly index semanticdb when reconnecting to sbt BSP server\\n [tgodzik](https://github.com/tgodzik)\\n- bugfix: Don\'t backtick soft keywords in select position of statements\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Properly backtick types when needed\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix semantic highlight in files starting with annotation\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Show hover when cursor is right after symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Provide extension method code completions when typing\\n `xxx.@@`[Mee-Tree](https://github.com/Mee-Tree)\\n- bugfix: properly index all toplevel given\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Argument completions for case class in apply calls\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add semantic highlight for docstring\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Improve indexing of regions based on indentation\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix issues with worksheets using outdated dependencies\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Use relative uri for interactive java TextDocument when browsing Java\\n sources from dependencies ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Fix reversed version order in dep completions in scala 2\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Use semantic highlight for using directives\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix semantic highlight for named arguments in Scala 2\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Shorten dependency diagnostic ranges for scala-cli\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bugfix: Scala 3 fix override completions starting w/ def\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Properly index vals in constructors\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Index cases for enum ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t show import completions with case class members\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Refactor type completions to provide both type symbol and object\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Check parent docs even when class is indexed\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Properly restart sbt server\\n [\\\\#5340](https://github.com/scalameta/metals/pull/5340)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Check if possible java home is a correct path\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: find correctly symbols for type companion objects\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: make sure we capture `.config/mill-version` for Mill builds\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Update default Bloop to 1.5.8 [tgodzik](https://github.com/tgodzik)\\n- bugfix: Peovide `textDocument/documentSymbol` for scripts\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: backup old log files when too long\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix scala-cli dependency completions for scala-cli 1.0.1\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Dependency version completions for scala native\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Correctly sort params in markdown\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add error reports upon compiler access error\\n [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.12..v1.0.0\\n 55\\tTomasz Godzik\\n 40\\tKatarzyna Marek\\n 32\\tJakub Ciesluk\\n 5\\tChris Kipp\\n 5\\tdoofin\\n 4\\tArthur McGibbon\\n 3\\trochala\\n 2\\tLaurence Warne\\n 2\\teason du\\n 1\\tAlexandre Archambault\\n 1\\tBrice Jaglin\\n 1\\tDmitry Polchinsky\\n 1\\tEthan Atkins\\n 1\\tLorenzo Gabriele\\n 1\\tMehdi Massoudi\\n 1\\tPanov Ivan\\n 1\\tadpi2\\n```\\n\\n## Merged PRs\\n\\n## [v1.0.0](https://github.com/scalameta/metals/tree/v1.0.0) (2023-07-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.12...v1.0.0)\\n\\n**Merged pull requests:**\\n\\n- chore: Rename blogpost to be of correct date\\n [\\\\#5460](https://github.com/scalameta/metals/pull/5460)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update scalafmt bootstrap\\n [\\\\#5459](https://github.com/scalameta/metals/pull/5459)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Small reword account for release timeline [skip ci]\\n [\\\\#5458](https://github.com/scalameta/metals/pull/5458)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: blog about multi-root\\n [\\\\#5215](https://github.com/scalameta/metals/pull/5215)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.7 to 3.11.8\\n [\\\\#5454](https://github.com/scalameta/metals/pull/5454)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.9 to 3.7.10\\n [\\\\#5455](https://github.com/scalameta/metals/pull/5455)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 1.0.1 to 1.0.2\\n [\\\\#5457](https://github.com/scalameta/metals/pull/5457)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Make ResetWorkspace more stable\\n [\\\\#5440](https://github.com/scalameta/metals/pull/5440)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Change namePos to namePosition\\n [\\\\#5448](https://github.com/scalameta/metals/pull/5448)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Revert H2 update to avoid issues with database version bump\\n [\\\\#5449](https://github.com/scalameta/metals/pull/5449)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improvement: compiler access error reporting\\n [\\\\#5439](https://github.com/scalameta/metals/pull/5439)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update semanticdb-java from 0.8.22 to 0.8.24\\n [\\\\#5442](https://github.com/scalameta/metals/pull/5442)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-xml from 2.1.0 to 2.2.0\\n [\\\\#5444](https://github.com/scalameta/metals/pull/5444)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.20.0 to 9.20.1\\n [\\\\#5443](https://github.com/scalameta/metals/pull/5443)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.9.1 to 1.9.2\\n [\\\\#5445](https://github.com/scalameta/metals/pull/5445)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.7 to 3.7.9\\n [\\\\#5446](https://github.com/scalameta/metals/pull/5446)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Reduce the level when mtags was found to debug\\n [\\\\#5436](https://github.com/scalameta/metals/pull/5436)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.1-RC4 and move older versions into\\n removedScalaVersions [\\\\#5430](https://github.com/scalameta/metals/pull/5430)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Correctly sort params in markdown\\n [\\\\#5414](https://github.com/scalameta/metals/pull/5414)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Don\'t publish for Scala 3.0.2\\n [\\\\#5429](https://github.com/scalameta/metals/pull/5429)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Dependency version completions for scala native\\n [\\\\#5373](https://github.com/scalameta/metals/pull/5373)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: detect scala cli when `project.scala`\\n [\\\\#5383](https://github.com/scalameta/metals/pull/5383)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Fix scala-cli dep completions for scala-cli 1.0.1\\n [\\\\#5335](https://github.com/scalameta/metals/pull/5335)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Don\'t publish nightlies any longer since they are available in\u2026\\n [\\\\#5428](https://github.com/scalameta/metals/pull/5428)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update lihaoyi\'s and scalameta dependencies\\n [\\\\#5425](https://github.com/scalameta/metals/pull/5425)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for stable presentation compiler\\n [\\\\#5423](https://github.com/scalameta/metals/pull/5423)\\n ([rochala](https://github.com/rochala))\\n- bugfix: backup log files instead of truncating\\n [\\\\#5399](https://github.com/scalameta/metals/pull/5399)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: `textDocument/documentSymbol` for scripts\\n [\\\\#5422](https://github.com/scalameta/metals/pull/5422)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.4 to 3.7.7\\n [\\\\#5418](https://github.com/scalameta/metals/pull/5418)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Only print debug compile queue if not empty\\n [\\\\#5410](https://github.com/scalameta/metals/pull/5410)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update semanticdb-java from 0.8.21 to 0.8.22\\n [\\\\#5421](https://github.com/scalameta/metals/pull/5421)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.5 to 3.11.7\\n [\\\\#5417](https://github.com/scalameta/metals/pull/5417)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update h2 from 2.1.214 to 2.2.220\\n [\\\\#5416](https://github.com/scalameta/metals/pull/5416)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update protobuf-java from 3.23.3 to 3.23.4\\n [\\\\#5415](https://github.com/scalameta/metals/pull/5415)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.8.0 to 4.8.2\\n [\\\\#5419](https://github.com/scalameta/metals/pull/5419)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Bump Scala 3 RC to 3.3.1-RC3\\n [\\\\#5413](https://github.com/scalameta/metals/pull/5413)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.8 to 4.8.0\\n [\\\\#5393](https://github.com/scalameta/metals/pull/5393)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update Bloop to 1.5.8\\n [\\\\#5398](https://github.com/scalameta/metals/pull/5398)\\n ([tgodzik](https://github.com/tgodzik))\\n- get more info from mill test\\n [\\\\#5394](https://github.com/scalameta/metals/pull/5394)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: make sure we capture `.config/mill-version` for Mill builds\\n [\\\\#5404](https://github.com/scalameta/metals/pull/5404)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Change information about finding java home to debug\\n [\\\\#5402](https://github.com/scalameta/metals/pull/5402)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: a bit more details in logs about whether the java path exists\\n [\\\\#5401](https://github.com/scalameta/metals/pull/5401)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: account for `ScalaDiagnostic` in diagnostic data\\n [\\\\#5338](https://github.com/scalameta/metals/pull/5338)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update guava from 32.1.0-jre to 32.1.1-jre\\n [\\\\#5396](https://github.com/scalameta/metals/pull/5396)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.8.3 to 1.9.1\\n [\\\\#5391](https://github.com/scalameta/metals/pull/5391)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix:[Scala 3] correctly find imports for toplevel type companion objects\\n [\\\\#5377](https://github.com/scalameta/metals/pull/5377)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Check if possible java home is a correct path\\n [\\\\#5240](https://github.com/scalameta/metals/pull/5240)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Show current compilation queue when debugging flag is on\\n [\\\\#5386](https://github.com/scalameta/metals/pull/5386)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update guava from 32.0.1-jre to 32.1.0-jre\\n [\\\\#5389](https://github.com/scalameta/metals/pull/5389)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC2\\n [\\\\#5388](https://github.com/scalameta/metals/pull/5388)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Catch an error if thrown during tokenization\\n [\\\\#5385](https://github.com/scalameta/metals/pull/5385)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: if no build tool fallback to scala-cli\\n [\\\\#5221](https://github.com/scalameta/metals/pull/5221)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Improvement: restart sbt server\\n [\\\\#5340](https://github.com/scalameta/metals/pull/5340)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- implement Java folding using JDK scanner\\n [\\\\#5328](https://github.com/scalameta/metals/pull/5328)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Check parent docs even when class is indexed\\n [\\\\#5382](https://github.com/scalameta/metals/pull/5382)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Refactor type completions to provide both type symbol and object\\n [\\\\#5326](https://github.com/scalameta/metals/pull/5326)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Make mtags-shared published with full scala version\\n [\\\\#5380](https://github.com/scalameta/metals/pull/5380)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use public API for java hover\\n [\\\\#5375](https://github.com/scalameta/metals/pull/5375)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Add error reports upon compiler access error\\n [\\\\#5315](https://github.com/scalameta/metals/pull/5315)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Don\'t show completions with case class members\\n [\\\\#5324](https://github.com/scalameta/metals/pull/5324)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: emit cases for enum\\n [\\\\#5372](https://github.com/scalameta/metals/pull/5372)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update mill-contrib-testng from 0.10.12 to 0.11.1\\n [\\\\#5376](https://github.com/scalameta/metals/pull/5376)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #5367: Support comma-separated paths in -Xplugin\\n [\\\\#5368](https://github.com/scalameta/metals/pull/5368)\\n ([lolgab](https://github.com/lolgab))\\n- bugfix: emit symbols for vals in constructors\\n [\\\\#5358](https://github.com/scalameta/metals/pull/5358)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.19.4 to 9.20.0\\n [\\\\#5371](https://github.com/scalameta/metals/pull/5371)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.4 to 2.1.5\\n [\\\\#5370](https://github.com/scalameta/metals/pull/5370)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Scala 3 adjust edit range for override completions starting w/ def\\n [\\\\#5365](https://github.com/scalameta/metals/pull/5365)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Shorten Dep Diagnostic Ranges for scala-cli\\n [\\\\#5362](https://github.com/scalameta/metals/pull/5362)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- improvement: add scala cli as a build tool\\n [\\\\#5291](https://github.com/scalameta/metals/pull/5291)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: handle backticks in inverse semanticdb path\\n [\\\\#5347](https://github.com/scalameta/metals/pull/5347)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Properly check symbol before invoking owner\\n [\\\\#5360](https://github.com/scalameta/metals/pull/5360)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Ammonite supported versions\\n [\\\\#5355](https://github.com/scalameta/metals/pull/5355)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update warnings list after Scala version bump\\n [\\\\#5359](https://github.com/scalameta/metals/pull/5359)\\n ([tgodzik](https://github.com/tgodzik))\\n- deps: update millw to 0.4.7\\n [\\\\#5353](https://github.com/scalameta/metals/pull/5353)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: Move scalacli tests to a separate job\\n [\\\\#5351](https://github.com/scalameta/metals/pull/5351)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Highlight for named arguments in Scala 2\\n [\\\\#5350](https://github.com/scalameta/metals/pull/5350)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update ammonite-util from 2.5.8 to 2.5.9\\n [\\\\#5348](https://github.com/scalameta/metals/pull/5348)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Semantic highlight for using directives\\n [\\\\#5301](https://github.com/scalameta/metals/pull/5301)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix reversed version order in dep completions in scala 2\\n [\\\\#5206](https://github.com/scalameta/metals/pull/5206)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.23.2 to 3.23.3\\n [\\\\#5343](https://github.com/scalameta/metals/pull/5343)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.20 to 0.8.21\\n [\\\\#5344](https://github.com/scalameta/metals/pull/5344)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.16 to 1.0.18\\n [\\\\#5345](https://github.com/scalameta/metals/pull/5345)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.19.1 to 9.19.4\\n [\\\\#5331](https://github.com/scalameta/metals/pull/5331)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: truncate `metals.log`\\n [\\\\#5311](https://github.com/scalameta/metals/pull/5311)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: add in a null check after calling `stabilizedType`\\n [\\\\#5336](https://github.com/scalameta/metals/pull/5336)\\n ([ckipp01](https://github.com/ckipp01))\\n- use relative uri for interactive java TextDocument\\n [\\\\#5325](https://github.com/scalameta/metals/pull/5325)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Fix issues with recent nightlies\\n [\\\\#5327](https://github.com/scalameta/metals/pull/5327)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update semanticdb-java from 0.8.18 to 0.8.20\\n [\\\\#5330](https://github.com/scalameta/metals/pull/5330)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: keep evaluated worksheets synced with dependencies in presentation\\n compiler [\\\\#5248](https://github.com/scalameta/metals/pull/5248)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update munit from 1.0.0-M7 to 1.0.0-M8\\n [\\\\#5332](https://github.com/scalameta/metals/pull/5332)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update gradle-bloop from 1.6.0 to 1.6.1\\n [\\\\#5329](https://github.com/scalameta/metals/pull/5329)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-jmh from 0.4.4 to 0.4.5\\n [\\\\#5323](https://github.com/scalameta/metals/pull/5323)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 32.0.0-jre to 32.0.1-jre\\n [\\\\#5319](https://github.com/scalameta/metals/pull/5319)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 2.13.11\\n [\\\\#5316](https://github.com/scalameta/metals/pull/5316)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: make sure tmpl point is within source file bounds\\n [\\\\#5310](https://github.com/scalameta/metals/pull/5310)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Regions based on indent\\n [\\\\#5260](https://github.com/scalameta/metals/pull/5260)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Scalafix 0.11.0 [\\\\#5304](https://github.com/scalameta/metals/pull/5304)\\n ([bjaglin](https://github.com/bjaglin))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.7 to 4.7.8\\n [\\\\#5299](https://github.com/scalameta/metals/pull/5299)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.3 to 3.7.4\\n [\\\\#5298](https://github.com/scalameta/metals/pull/5298)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 2.12.18\\n [\\\\#5297](https://github.com/scalameta/metals/pull/5297)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump @docusaurus/preset-classic from 2.4.0 to 2.4.1 in /website\\n [\\\\#5296](https://github.com/scalameta/metals/pull/5296)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/core from 2.4.0 to 2.4.1 in /website\\n [\\\\#5295](https://github.com/scalameta/metals/pull/5295)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.4.0 to 2.4.1 in\\n /website [\\\\#5294](https://github.com/scalameta/metals/pull/5294)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- feature: create single http server and doctor result\\n [\\\\#5208](https://github.com/scalameta/metals/pull/5208)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Fix issues with Bloop and new Java module\\n [\\\\#5290](https://github.com/scalameta/metals/pull/5290)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: handle delete file events notifications\\n [\\\\#5270](https://github.com/scalameta/metals/pull/5270)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update protobuf-java from 3.23.1 to 3.23.2\\n [\\\\#5286](https://github.com/scalameta/metals/pull/5286)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 31.1-jre to 32.0.0-jre\\n [\\\\#5285](https://github.com/scalameta/metals/pull/5285)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Add semantic highlight for docstring\\n [\\\\#5153](https://github.com/scalameta/metals/pull/5153)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Remove all warnings from the code\\n [\\\\#5282](https://github.com/scalameta/metals/pull/5282)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make sure \'isAccessibleFrom\' always succeeds\\n [\\\\#5271](https://github.com/scalameta/metals/pull/5271)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix[Scala 3]: Fix issues when shortened type is used in type bounds\\n [\\\\#5281](https://github.com/scalameta/metals/pull/5281)\\n ([tgodzik](https://github.com/tgodzik))\\n- website : clarify Manual tests\\n [\\\\#5264](https://github.com/scalameta/metals/pull/5264)\\n ([doofin](https://github.com/doofin))\\n- feat: Add clean-all command\\n [\\\\#5060](https://github.com/scalameta/metals/pull/5060)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Update test shards with all the new test suites\\n [\\\\#5283](https://github.com/scalameta/metals/pull/5283)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure we don\'t fail when restarting the compiler\\n [\\\\#5278](https://github.com/scalameta/metals/pull/5278)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.18.0 to 9.19.1\\n [\\\\#5275](https://github.com/scalameta/metals/pull/5275)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC1\\n [\\\\#5273](https://github.com/scalameta/metals/pull/5273)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.3 to 3.11.5\\n [\\\\#5274](https://github.com/scalameta/metals/pull/5274)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.0 and deprecated older 3.2.x\\n [\\\\#5261](https://github.com/scalameta/metals/pull/5261)\\n ([tgodzik](https://github.com/tgodzik))\\n- website fix [\\\\#5263](https://github.com/scalameta/metals/pull/5263)\\n ([doofin](https://github.com/doofin))\\n- fix: Arg completions for case class in nested apply\\n [\\\\#5207](https://github.com/scalameta/metals/pull/5207)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: skip package objects as completions & never `backtickify` package\\n objects [\\\\#5259](https://github.com/scalameta/metals/pull/5259)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add Command for Running Specified Scalafix Rules\\n [\\\\#5223](https://github.com/scalameta/metals/pull/5223)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- build(deps): Update scala-debug-adapter from 3.0.9 to 3.1.3\\n [\\\\#5218](https://github.com/scalameta/metals/pull/5218)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: NoPosition on Bind in semantic tokens for scala 2\\n [\\\\#5257](https://github.com/scalameta/metals/pull/5257)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- buigfix: given scala toplevel mtags\\n [\\\\#5247](https://github.com/scalameta/metals/pull/5247)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Only log message if it\'s not null\\n [\\\\#5255](https://github.com/scalameta/metals/pull/5255)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update protobuf-java from 3.22.5 to 3.23.1\\n [\\\\#5252](https://github.com/scalameta/metals/pull/5252)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.17.0 to 9.18.0\\n [\\\\#5253](https://github.com/scalameta/metals/pull/5253)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Java hover [\\\\#5024](https://github.com/scalameta/metals/pull/5024)\\n ([VankaTaganai](https://github.com/VankaTaganai))\\n- Provide extension method code completions when typing `xxx.@@`\\n [\\\\#5235](https://github.com/scalameta/metals/pull/5235)\\n ([Mee-Tree](https://github.com/Mee-Tree))\\n- fix: Show hover when cursor is right after symbol\\n [\\\\#5133](https://github.com/scalameta/metals/pull/5133)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Semantic highlight on for-comp with `=` line\\n [\\\\#5132](https://github.com/scalameta/metals/pull/5132)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix semantic highlight in files starting with annotation\\n [\\\\#5187](https://github.com/scalameta/metals/pull/5187)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.22.3 to 3.22.5\\n [\\\\#5243](https://github.com/scalameta/metals/pull/5243)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.1 to 3.11.3\\n [\\\\#5244](https://github.com/scalameta/metals/pull/5244)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.3 to 2.1.4\\n [\\\\#5245](https://github.com/scalameta/metals/pull/5245)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Log message while unexpected error happens.\\n [\\\\#5239](https://github.com/scalameta/metals/pull/5239)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Retry indexing source file\\n [\\\\#5236](https://github.com/scalameta/metals/pull/5236)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Don\'t fail on refreshing semantic tokens\\n [\\\\#5237](https://github.com/scalameta/metals/pull/5237)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Check position before invoking .pos.point\\n [\\\\#5238](https://github.com/scalameta/metals/pull/5238)\\n ([tgodzik](https://github.com/tgodzik))\\n- Backtick types [\\\\#5159](https://github.com/scalameta/metals/pull/5159)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Don\'t backting soft keywords in Select\\n [\\\\#5234](https://github.com/scalameta/metals/pull/5234)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Add test for arg completions with second arg first\\n [\\\\#5211](https://github.com/scalameta/metals/pull/5211)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: move ClasspathSearch and PackageIndex to mtags-shared\\n [\\\\#5229](https://github.com/scalameta/metals/pull/5229)\\n ([rochala](https://github.com/rochala))\\n- chore: Add support for Scala 3.3.0-RC6\\n [\\\\#5228](https://github.com/scalameta/metals/pull/5228)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly index semanticdb when reconnecting\\n [\\\\#5222](https://github.com/scalameta/metals/pull/5222)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.8.2 to 1.8.3\\n [\\\\#5227](https://github.com/scalameta/metals/pull/5227)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Always change the correct comment when changing to mill syntax\\n [\\\\#5214](https://github.com/scalameta/metals/pull/5214)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Update `architecture.md` after adding support for multi root\\n [\\\\#5209](https://github.com/scalameta/metals/pull/5209)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Fix highlight and rename for unapply in for-comp\\n [\\\\#5210](https://github.com/scalameta/metals/pull/5210)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: argument name completion for context function parameter\\n [\\\\#5175](https://github.com/scalameta/metals/pull/5175)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: send folder name and uri with information about tests\\n [\\\\#5212](https://github.com/scalameta/metals/pull/5212)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add support for the no-longer supported Java 12 to 16\\n [\\\\#5213](https://github.com/scalameta/metals/pull/5213)\\n ([adpi2](https://github.com/adpi2))\\n- refactor: use -release instead of -target\\n [\\\\#5177](https://github.com/scalameta/metals/pull/5177)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep exception cause in some mtags exceptions\\n [\\\\#5205](https://github.com/scalameta/metals/pull/5205)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- fix: Add bloop package for bloop command\\n [\\\\#5200](https://github.com/scalameta/metals/pull/5200)\\n ([mehdimas](https://github.com/mehdimas))\\n- build(deps): Update interface from 1.0.15 to 1.0.16\\n [\\\\#5204](https://github.com/scalameta/metals/pull/5204)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-ci-release from 1.5.11 to 1.5.12\\n [\\\\#5201](https://github.com/scalameta/metals/pull/5201)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.2 to 2.1.3\\n [\\\\#5203](https://github.com/scalameta/metals/pull/5203)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.16 to 0.8.18\\n [\\\\#5202](https://github.com/scalameta/metals/pull/5202)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump coursier/setup-action from 1.3.0 to 1.3.3\\n [\\\\#5194](https://github.com/scalameta/metals/pull/5194)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: hightlight for extension methods type params\\n [\\\\#5166](https://github.com/scalameta/metals/pull/5166)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update jsoup from 1.15.4 to 1.16.1\\n [\\\\#5192](https://github.com/scalameta/metals/pull/5192)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: add multi-root projects support\\n [\\\\#5033](https://github.com/scalameta/metals/pull/5033)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.16.3 to 9.17.0\\n [\\\\#5186](https://github.com/scalameta/metals/pull/5186)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.15 to 0.8.16\\n [\\\\#5185](https://github.com/scalameta/metals/pull/5185)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Fail the build if supported sbt version wasn\'t updated\\n [\\\\#5146](https://github.com/scalameta/metals/pull/5146)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Auto comment shebang for scripts\\n [\\\\#5180](https://github.com/scalameta/metals/pull/5180)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.3.0-RC5\\n [\\\\#5184](https://github.com/scalameta/metals/pull/5184)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore[skip ci]: Switch to 0.11.12_mtags_release to avoid locking issue\\n [\\\\#5183](https://github.com/scalameta/metals/pull/5183)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump swoval version [\\\\#5181](https://github.com/scalameta/metals/pull/5181)\\n ([eatkins](https://github.com/eatkins))\\n- fix:selection expansion in comments\\n [\\\\#4921](https://github.com/scalameta/metals/pull/4921)\\n ([doofin](https://github.com/doofin))\\n- fix: Fix semantic tokens for multiline comments\\n [\\\\#5178](https://github.com/scalameta/metals/pull/5178)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix PcCollector for `@@` symbol\\n [\\\\#5100](https://github.com/scalameta/metals/pull/5100)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: arguments name completions for constructors\\n [\\\\#5174](https://github.com/scalameta/metals/pull/5174)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Add back locking mechanism with using jq syntax for selection\\n [\\\\#5171](https://github.com/scalameta/metals/pull/5171)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Small change to run release\\n [\\\\#5170](https://github.com/scalameta/metals/pull/5170)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix[skip ci] Remove lock mechanism since it stopped working\\n [\\\\#5169](https://github.com/scalameta/metals/pull/5169)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: release notes v0.11.12\\n [\\\\#5148](https://github.com/scalameta/metals/pull/5148)\\n ([kasiaMarek](https://github.com/kasiaMarek))"},{"id":"/2023/07/17/workspace-folders","metadata":{"permalink":"/metals/blog/2023/07/17/workspace-folders","source":"@site/blog/2023-07-17-workspace-folders.md","title":"Workspace folders","description":"In the upcoming version of metals we will add support for LSP workspace folders. This feature allows you to load multiple Scala projects/modules into the same workspace without the need to switch between multiple windows.","date":"2023-07-17T00:00:00.000Z","formattedDate":"July 17, 2023","tags":[],"readingTime":3.805,"hasTruncateMarker":false,"authors":[{"name":"Katarzyna Marek","url":"https://github.com/kasiaMarek","imageURL":"https://github.com/kasiaMarek.png"}],"frontMatter":{"author":"Katarzyna Marek","title":"Workspace folders","authorURL":"https://github.com/kasiaMarek","authorImageURL":"https://github.com/kasiaMarek.png"},"prevItem":{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"},"nextItem":{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"}},"content":"In the upcoming version of metals we will add support for [LSP workspace folders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_workspaceFolders). This feature allows you to load multiple Scala projects/modules into the same workspace without the need to switch between multiple windows.\\n\\n## The new multi-root approach\\n\\nBefore this feature metals would only support a single project treating a workspace root folder as the root of the project. The workspace root was established based on the `rootUri` field of [`InitializeParams`](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initializeParams) sent by the client upon initialization.\\n\\nNow a single metals instance can accommodate several projects (or multiple roots of a project) at the time. In `InitializeParams` metals first looks for projects\' roots under `workspaceFolders` in `InitializeParams` and if empty we still fallback to the `rootUri`. Loaded projects can be changed dynamically though `didChangeWorkspaceFolders` notifications, which allow the client (editor) to inform metals about any added or removed projects.\\n\\nAll workspace folders are handled in metals separately and are oblivious of each other.\\nE.g. for the following multi project structure\\n\\n```\\nproject1\\n|- build.sbt\\n|- src\\n |- Main.scala\\n\\nproject2\\n|- build.sbt\\n|- src\\n |- Main.scala\\n```\\n\\nwe will keep two separate entities: one responsible for `project1`, and another one for `project2`.\\nUpon receiving most requests metals will redirect them to the entity responsible for the project of interest. If there are no other clues the project is chosen based on the currently opened file. E.g. if the user wants to insert an inferred type in the file `../project1/src/Main`, the request received by Metals will be redirected to the entity responsible for `project1`.\\n\\nFor some requests we collect information from all the projects and send a joint result, e.g. when searching for workspace symbols.\\n\\n\\n## How do I use the multi-root feature?\\n\\n### VSCode\\n\\nIn VSCode workspace folder support is achieved by [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces). To load multiple projects into a single workspace you can simply open one of the projects and add the other one using `File > Add Folder to Workspace` and then choosing the correct folder.\\n\\n![add-workspace-folder](https://i.imgur.com/LTYrx9V.gif)\\n\\nNow you have two projects loaded side by side, so you can easily see both and switch between them. All of the current metals functionality accommodates multiple projects, so you can use metals the same way as you did before. The biggest changes will be visible in the places where information from the whole workspace is collected, like workspace symbol search, test explorer, or metals doctor.\\n\\n![multi-root-tests](https://i.imgur.com/zWmmsC2.gif)\\n\\nThe target project for a command is usually chosen based on the currently opened file. E.g. if you run `Switch build server` the command it will be executed for the project in focus. If no project is in focus the editor will explicitly ask for which project the command should be executed.\\n\\n![target-folder](https://i.imgur.com/tV7K822.gif)\\n\\nFinally, logs can still be found in the `.metals/metals.log` in the root of each project. Note, that for the time being all information is logged to all opened workspace folders, so anything logged for `project1` will also be visible in logs for `project2`.\\n\\n### nvim-metals (_section written by [ckipp01](https://github.com/ckipp01)_)\\n\\nWhen using nvim-metals, you\'ll start just like you do with any other project.\\nSince the idea of a workspace is a bit \\"artificial\\" with Neovim, you can really\\njust add any new root to have a multi-root workspace. All you\'ll need to do is\\nnavigate to a file at the root level of the workspace you\'d like to add, and use\\nthe\\n[`vim.lsp.buf.add_workspace_folder()`](https://neovim.io/doc/user/lsp.html#vim.lsp.buf.add_workspace_folder()) function to add the folder containing the file you\'re in as another root.\\n\\n![add_workspace_folder](https://i.imgur.com/E8iriR9.gif)\\n\\nTo make this easier, you can also just create a mapping to use.\\n\\n```lua\\nvim.keymap.set(\\"n\\", \\"awf\\", vim.lsp.buf.add_workspace_folder)\\n```\\n\\nTo verify that this has worked correctly you should be able to now see both\\nworkspaces reflected in your Metals Doctor.\\n\\n![nvim-metals doctor](https://i.imgur.com/2u48wDK.gif)\\n\\nYou should also see that some commands, like the\\n[`vim.lsp.buf.workspace_symbol()`](https://neovim.io/doc/user/lsp.html#vim.lsp.buf.workspace_symbol())\\nnow show results from all the added workspaces.\\n\\n![workspace_symbols](https://i.imgur.com/RczJIcp.gif)\\n\\n## Changes for the clients\\n\\nSince workspace folders are a part of the LSP for any client implementing this capability the multi-root support should work out of the box, however, there will be a few minor changes to needed accommodate the new approach.\\n\\n1. The metals doctor result json format will change to contain a list of diagnostics for each workspace folder. Current format can be found in the description of `RunDoctor` command (visible in `ClientCommands.scala` in `metals` repo).\\n2. For test explorer users `BuildTargetUpdate` will also now contain information about the target folder.\\n\\n## Quick summary\\n\\nMetals now supports the [LSP workspace folders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_workspaceFolders), which in VSCode are implemented by [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces).\\n\\nIf you haven\'t yet make sure to try out our new multi-root support!"},{"id":"/2023/04/21/aluminium","metadata":{"permalink":"/metals/blog/2023/04/21/aluminium","source":"@site/blog/2023-04-21-aluminium.md","title":"Metals v0.11.12 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.12. This release brings mostly stability fixes, some various improvements, and a start towards better issue identification and reporting when users experience issues.","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[],"readingTime":9.27,"hasTruncateMarker":false,"authors":[{"name":"Katarzyna Marek","url":"https://github.com/kasiaMarek","imageURL":"https://github.com/kasiaMarek.png"}],"frontMatter":{"author":"Katarzyna Marek","title":"Metals v0.11.12 - Aluminium","authorURL":"https://github.com/kasiaMarek","authorImageURL":"https://github.com/kasiaMarek.png"},"prevItem":{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"},"nextItem":{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.12. This release brings mostly stability fixes, some various improvements, and a start towards better issue identification and reporting when users experience issues.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release105
Merged PRs85
Contributors20
Closed issues38
New features5
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/56?closed=1]\\n(https://github.com/scalameta/metals/milestone/56?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Introducing Error Reports](#introducing-error-reports)\\n- [New code action for converting dependencies from sbt to scala-cli compliant ones](#new-code-action-for-converting-dependencies-from-sbt-to-scala-cli-compliant-ones)\\n- [Improvements to semantic highlighting](#improvements-to-semantic-highlighting)\\n- [Miscellaneous](#miscellaneous)\\n\\n## Introducing Error Reports\\n\\nStarting with this release, upon chosen errors or incorrect states in metals error reports will be automatically generated and saved in the `.metals/.reports` directory within the workspace. Such an error report can later be used by users to attach to a github issue with additional information. All the reports have their paths anonymised.\\n\\nCurrently, we create two types of reports:\\n\\n- _incognito_ under `.metals/.reports/metals`: these error reports contain only metals related stacktraces and should not contain any sensitive/private information\\n- _unsanitized_ under `.metals/.reports/metals-full`: these error reports may contain come sensitive/private information (e.g. code snippets)\\n\\nTo make it easier to attach reports to github issues the `zip-reports` command will zip all the **incognito** reports into `.metals/.reports/report.zip`, while unsanitized reports will have to be browsed and attached by hand. In order not to clutter the workspace too much, only up to 30 last reports of each kind are kept at a time.\\n\\nWhen running into a problem in VSCode (or any editor that implements this command) users can use the `Metals: Open new github issue` command. This will create a template for an issue with all basic info such as Metals version, used build server etc.. Next, you can browse through reports and drag and drop chosen ones to your GitHub issue. Invoking the `Metals: Zip reports` command will create a zip of all the incognito that reports can also be included in the issue.\\n\\n![Reports](https://i.imgur.com/wBwFjpZ.gif)\\n![Zip reports](https://i.imgur.com/YN3U3N9.gif)\\n\\n## New code action for converting dependencies from sbt to scala-cli compliant ones\\n\\nNew code action for scala-cli `using (dep | lib | plugin)` directives, which allows to convert dependencies from sbt style to scala-cli compliant ones.\\n\\n![Convert dependency](https://i.imgur.com/G9W7Nox.gif)\\n\\nA great contribution by [majk-p](https://github.com/majk-p).\\n\\n## Improvements to semantic highlighting\\n\\nThis release brings a lot of improvements for semantic highlighting thanks to [jkciesluk](https://github.com/scalameta/metals/pulls/jkciesluk) and [tgodzik](https://github.com/tgodzik). This includes:\\n\\n- Added declaration and definition tokens.\\n- Parameters are now read only.\\n- Added semantic highlighting for using directives.\\n- Fixed semantic highlighting for Scala 3 worksheets.\\n- Changed token type for predef aliases to \\"class\\".\\n- Fixed sematic highlighting in sbt files.\\n\\n## Miscellaneous\\n\\n- bugfix: Ignored tests now show up in the test explorer. [kpodsiad](https://github.com/kpodsiad)\\n- improvement: Reworked package rename upon file move.\\n- bugfix: Fixed go to and hover for `TypeTest`. [tgodzik](https://github.com/tgodzik)\\n- feature: Auto connect to bazel-bsp if it\'s installed. [tanishiking](https://github.com/tanishiking)\\n- docs: Updated emacs support table. [kurnevsky](https://github.com/kurnevsky)\\n- bugfix: Placing cursor on primary contructor type parameter no longer incorrectly highlights type parameter with the same name used in a member definiton. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Added Reload sbt after changes in the `metals.sbt` plugin file. [adpi2](https://github.com/adpi2)\\n- bugfix: Added handling fixing wildcard imports upon file rename.\\n- bugfix: Added refresh test case code lenses after test discovery. [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Fixed lacking newline for new imports added upon file move. [susliko](https://github.com/susliko)\\n- bugfix: Add showing lenses when BSP server is plain Scala.\\n- bugfix: A workaround for running BSP sbt when it\'s installed in a directory with a space on Widows. [tgodzik](https://github.com/tgodzik)\\n- improvement: If an aliased inferred type is not in scope dealias it.\\n- feature: Add hover information for structural types. [jkciesluk](https://github.com/jkciesluk)\\n- feature: Inline code action will be no longer executed if any of the references used on the right-hand side of the value to be inlined are shadowed by local definitions. In this case a warning will be shown to the user instead.\\n- bugfix: Fixed test suite discovery in presence of a companion object. [xydrolase](https://github.com/xydrolase)\\n- bugfix: Fixed shown return type of completions, that are no argument members, which return type depends on the ower type parameter.\\n- bugfix: Strip ANSI colors before printing worksheet results.\\n- improvement: Force close thread when file watching cancel hangs. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Add end condition for tokenizing partially written code, so tokenizing doesn\'t hang. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Correctly adjust span for extension methods for correctly displayed highligh. [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Correctly show `Expression type` (dealiased type) for parametrized types.\\n- bugfix: Filter out `-Ycheck-reentrant` option for worksheets, so worksheets correctly show results. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Show correct defaults when named parameters order is mixed in Scala 2. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Print better constructors in synthetic decorator.\\n- bugfix: Show synthetic objects as options for case classes and AnyVal implicit classes in `Metals Analayze Source`. [kpodsiad](https://github.com/kpodsiad)\\n- bugfix: Corrrectly handle testfiles renames in test explorer. [kpodsiad](https://github.com/kpodsiad)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.11..v0.11.12\\n 23\\tscalameta-bot\\n 21\\tTomasz Godzik\\n 11\\tKatarzyna Marek\\n 10\\tJakub Ciesluk\\n 7\\tMichal Pawlik\\n 6\\tKamil Podsiadlo\\n 5\\tRikito Taniguchi\\n 3\\tadpi2\\n 3\\tKamil Podsiad\u0142o\\n 3\\tMicha\u0142 Pawlik\\n 3\\tdependabot[bot]\\n 2\\ttgodzik\\n 1\\tChris Kipp\\n 1\\tVadim Chelyshov\\n 1\\tVasiliy Morkovkin\\n 1\\tXin Yin\\n 1\\tLaurence Warne\\n 1\\tJ\u0119drzej Rochala\\n 1\\tEvgeny Kurnevsky\\n 1\\tScalameta Bot\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.12](https://github.com/scalameta/metals/tree/v0.11.12) (2023-04-21)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.11...v0.11.12)\\n\\n**Merged pull requests:**\\n\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.1 to 4.7.7\\n [\\\\#5163](https://github.com/scalameta/metals/pull/5163)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.1 to 2.1.2\\n [\\\\#5162](https://github.com/scalameta/metals/pull/5162)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.13 to 0.8.15\\n [\\\\#5161](https://github.com/scalameta/metals/pull/5161)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.0-RC4\\n [\\\\#5158](https://github.com/scalameta/metals/pull/5158)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: mtags compilation with Java 11\\n [\\\\#5157](https://github.com/scalameta/metals/pull/5157)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Reduce IO when querying if file exists\\n [\\\\#5152](https://github.com/scalameta/metals/pull/5152)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix Scala CLI script for release notes\\n [\\\\#5151](https://github.com/scalameta/metals/pull/5151)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: properly handle testfiles renames in Test Explorer\\n [\\\\#5042](https://github.com/scalameta/metals/pull/5042)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add a description about MtagsIndexer in architecture.md\\n [\\\\#4794](https://github.com/scalameta/metals/pull/4794)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: properly index Java sources\\n [\\\\#5009](https://github.com/scalameta/metals/pull/5009)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update coursier from 2.1.0 to 2.1.1\\n [\\\\#5142](https://github.com/scalameta/metals/pull/5142)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix test after changes in #5124\\n [\\\\#5147](https://github.com/scalameta/metals/pull/5147)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore[skip ci]: Switch nightly releases to branch with fixed test\\n [\\\\#5145](https://github.com/scalameta/metals/pull/5145)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.14 to 1.0.15\\n [\\\\#5143](https://github.com/scalameta/metals/pull/5143)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Auto spawn/connect to bazel-bsp if it\'s installed\\n [\\\\#5139](https://github.com/scalameta/metals/pull/5139)\\n ([tanishiking](https://github.com/tanishiking))\\n- improvement: report on an empty hover\\n [\\\\#5128](https://github.com/scalameta/metals/pull/5128)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.16.1 to 9.16.3\\n [\\\\#5136](https://github.com/scalameta/metals/pull/5136)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Update emacs support table\\n [\\\\#5131](https://github.com/scalameta/metals/pull/5131)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- bugfix: Show document highlight with cursor on primary cosntructor\\n [\\\\#5127](https://github.com/scalameta/metals/pull/5127)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update mima last artifacts and make an explicit step in the docs\\n [\\\\#5130](https://github.com/scalameta/metals/pull/5130)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reload sbt after writing metals plugin\\n [\\\\#5126](https://github.com/scalameta/metals/pull/5126)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: handling wildcard imports for file rename\\n [\\\\#4986](https://github.com/scalameta/metals/pull/4986)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Refresh test case code lenses after discovery\\n [\\\\#5124](https://github.com/scalameta/metals/pull/5124)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bugfix: add newline in new imports when moving files\\n [\\\\#5120](https://github.com/scalameta/metals/pull/5120)\\n ([susliko](https://github.com/susliko))\\n- bugfix: Show lenses when BSP server is plain Scala\\n [\\\\#5118](https://github.com/scalameta/metals/pull/5118)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix running BSP sbt when it\'s installed in a directory with space\\n [\\\\#5107](https://github.com/scalameta/metals/pull/5107)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make fallback semantic tokens readonly\\n [\\\\#5067](https://github.com/scalameta/metals/pull/5067)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Extract shared mtags without scalameta dependency\\n [\\\\#5075](https://github.com/scalameta/metals/pull/5075)\\n ([rochala](https://github.com/rochala))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.3.1 to 2.4.0 in /website\\n [\\\\#5111](https://github.com/scalameta/metals/pull/5111)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): Update xnio-nio from 3.8.8.Final to 3.8.9.Final\\n [\\\\#5113](https://github.com/scalameta/metals/pull/5113)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump @docusaurus/preset-classic from 2.3.1 to 2.4.0 in /website\\n [\\\\#5109](https://github.com/scalameta/metals/pull/5109)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): Update interface from 1.0.13 to 1.0.14\\n [\\\\#5112](https://github.com/scalameta/metals/pull/5112)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump @docusaurus/core from 2.3.1 to 2.4.0 in /website\\n [\\\\#5110](https://github.com/scalameta/metals/pull/5110)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Fix go to definition and hover for TypeTest\\n [\\\\#5103](https://github.com/scalameta/metals/pull/5103)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add definition and declaration properties\\n [\\\\#5047](https://github.com/scalameta/metals/pull/5047)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt-mima-plugin from 1.1.1 to 1.1.2\\n [\\\\#5104](https://github.com/scalameta/metals/pull/5104)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update versions from 0.3.1 to 0.3.2\\n [\\\\#5105](https://github.com/scalameta/metals/pull/5105)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.2 to 3.7.3\\n [\\\\#5106](https://github.com/scalameta/metals/pull/5106)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: pkgs renames for file move\\n [\\\\#5014](https://github.com/scalameta/metals/pull/5014)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Code action to convert dependencies from sbt to mill style\\n [\\\\#5078](https://github.com/scalameta/metals/pull/5078)\\n ([majk-p](https://github.com/majk-p))\\n- improvement: Change token type to class for predef aliases\\n [\\\\#5044](https://github.com/scalameta/metals/pull/5044)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: dealias inferred types if not in scope\\n [\\\\#5051](https://github.com/scalameta/metals/pull/5051)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix semantic highlight in sbt files\\n [\\\\#5098](https://github.com/scalameta/metals/pull/5098)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: Hover on structural types in Scala 3\\n [\\\\#5074](https://github.com/scalameta/metals/pull/5074)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix #5096: run doc on java target with semanticdb\\n [\\\\#5097](https://github.com/scalameta/metals/pull/5097)\\n ([adpi2](https://github.com/adpi2))\\n- build(deps): Update mill-contrib-testng from 0.10.11 to 0.10.12\\n [\\\\#5081](https://github.com/scalameta/metals/pull/5081)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-jmh from 0.4.3 to 0.4.4\\n [\\\\#5094](https://github.com/scalameta/metals/pull/5094)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.20 to 0.2.1\\n [\\\\#5093](https://github.com/scalameta/metals/pull/5093)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.6.1 to 3.7.2\\n [\\\\#5091](https://github.com/scalameta/metals/pull/5091)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.15.2 to 9.16.1\\n [\\\\#5090](https://github.com/scalameta/metals/pull/5090)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.6 to 2.3.7\\n [\\\\#5089](https://github.com/scalameta/metals/pull/5089)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jol-core from 0.16 to 0.17\\n [\\\\#5088](https://github.com/scalameta/metals/pull/5088)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.15.0 to 9.15.2\\n [\\\\#5086](https://github.com/scalameta/metals/pull/5086)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.15.3 to 1.15.4\\n [\\\\#5087](https://github.com/scalameta/metals/pull/5087)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.20.0 to 0.20.1\\n [\\\\#5085](https://github.com/scalameta/metals/pull/5085)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-RC6 to 2.1.0\\n [\\\\#5084](https://github.com/scalameta/metals/pull/5084)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.0 to 3.11.1\\n [\\\\#5083](https://github.com/scalameta/metals/pull/5083)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-debug-adapter from 3.0.7 to 3.0.9\\n [\\\\#5080](https://github.com/scalameta/metals/pull/5080)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: use scala-cli for script instead of Ammonite\\n [\\\\#5077](https://github.com/scalameta/metals/pull/5077)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: find companion object of AnyVal, implicit class in class finder\\n [\\\\#4974](https://github.com/scalameta/metals/pull/4974)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Switch from algolia to easyops-cn/docusaurus-search-local\\n [\\\\#5066](https://github.com/scalameta/metals/pull/5066)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: Adjust semantic tokens tests for select dynamic in 3.3.1-RC1\\n [\\\\#5069](https://github.com/scalameta/metals/pull/5069)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix select dynamic hover tests for 3.3.1-RC1\\n [\\\\#5068](https://github.com/scalameta/metals/pull/5068)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Make semantic tokens parameters readonly\\n [\\\\#5049](https://github.com/scalameta/metals/pull/5049)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: print better constructors in synthetic decorator\\n [\\\\#5023](https://github.com/scalameta/metals/pull/5023)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feature: metals error reports\\n [\\\\#4971](https://github.com/scalameta/metals/pull/4971)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix wrong default when named params are mixed\\n [\\\\#5058](https://github.com/scalameta/metals/pull/5058)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Filter out -Ycheck-reentrant\\n [\\\\#5059](https://github.com/scalameta/metals/pull/5059)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: use value class to for new semanticDB path type\\n [\\\\#5043](https://github.com/scalameta/metals/pull/5043)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Welcome Kasia to the team\\n [\\\\#5054](https://github.com/scalameta/metals/pull/5054)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Check if span in def is correct\\n [\\\\#5046](https://github.com/scalameta/metals/pull/5046)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feat: discover Scalatest ignored tests\\n [\\\\#5035](https://github.com/scalameta/metals/pull/5035)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- improvement: Add semantic highlight for using directives\\n [\\\\#5037](https://github.com/scalameta/metals/pull/5037)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: dealias applied type params\\n [\\\\#5048](https://github.com/scalameta/metals/pull/5048)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix span for extension methods\\n [\\\\#5040](https://github.com/scalameta/metals/pull/5040)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Make sure that tokenizing doesn\'t hang\\n [\\\\#5050](https://github.com/scalameta/metals/pull/5050)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Force closing thread if file watching cancel hanged\\n [\\\\#5010](https://github.com/scalameta/metals/pull/5010)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Fix semantic tokens for worksheets in Scala 3\\n [\\\\#5038](https://github.com/scalameta/metals/pull/5038)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: strip ANSI colours before printing worksheet results\\n [\\\\#5039](https://github.com/scalameta/metals/pull/5039)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: perform `substituteTypeVars` also for methods with no args\\n [\\\\#5045](https://github.com/scalameta/metals/pull/5045)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Force update of scala-debug-adapter by Scala Steward\\n [\\\\#5032](https://github.com/scalameta/metals/pull/5032)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Fixed test suite discovery with the presence of companion object.\\n [\\\\#5030](https://github.com/scalameta/metals/pull/5030)\\n ([xydrolase](https://github.com/xydrolase))\\n- docs: Link to Scala release\\n [\\\\#5022](https://github.com/scalameta/metals/pull/5022)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: inline value scoping\\n [\\\\#4943](https://github.com/scalameta/metals/pull/4943)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- docs: Add release notes for 0.11.11\\n [\\\\#4973](https://github.com/scalameta/metals/pull/4973)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/03/02/aluminium","metadata":{"permalink":"/metals/blog/2023/03/02/aluminium","source":"@site/blog/2023-03-02-aluminium.md","title":"Metals v0.11.11 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.11, which brings in a couple","date":"2023-03-02T00:00:00.000Z","formattedDate":"March 2, 2023","tags":[],"readingTime":15.415,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.11 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"},"nextItem":{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.11, which brings in a couple\\nof new features and improvements as well as stability fixes. Further releases\\nand possibly 1.0.0 release will focus on providing a better stable development\\nenvironment.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release177
Merged PRs138
Contributors11
Closed issues42
New features7
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/55?closed=1]\\n(https://github.com/scalameta/metals/milestone/55?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Added support for Scala 3.2.2](#support-for-scala-322).\\n- [Introduce Support for Semantic Tokens](#introduce-support-for-semantic-tokens)\\n- [New Inline value code action](#new-inline-value-code-action)\\n- [Expanded workspace symbol search to include fields](#expanded-workspace-symbol-search-to-include-fields)\\n- [Allow users to use older Scala versions](#allow-users-to-use-older-scala-versions)\\n- [Improve match-case completions in Scala 2](#improve-match-case-completions-in-scala-2)\\n- [Fallback to symbol search for code navigation](#fallback-to-symbol-search-for-code-navigation)\\n- [Automatically add details to github issue](#automatically-add-details-to-github-issue)\\n\\n## Support for Scala 3.2.2\\n\\nRelease notes from\\n[https://www.scala-lang.org/news/3.2.2](https://www.scala-lang.org/news/3.2.2)\\n\\nThis version not only fixes bugs but also brings two new flags:\\n\\n- `-Vrepl-max-print-characters` allows you to configure how many characters can\\n be printed in the REPL before truncating the output. The default limit was\\n also raised from 1,000 to 50,000 characters.\\n\\n- `-Ylightweight-lazy-vals` enables new lazy vals implementation. It can be much\\n more performant, especially in cases of parallel access. However, it can cause\\n problems when used inside of GraalVM native image. We will make the new\\n implementation the default one as soon as we fix those problems.\\n\\n## Introduce Support for Semantic Tokens\\n\\nSemantic tokens is a newer addition to the language server protocol that enables\\neditors to provide syntax highlighting based on the knowledge provided by the\\nlanguage server. Each symbol within the Scala file should now have a more\\nmeaningful color dependent on whether it\'s a class, field, operator, etc.\\n\\nThis feature is now available in Metals thanks to the main work done by\\n[ShintaroSasaki](https://github.com/ShintaroSasaki) during last year\'s Google\\nsummer of code and some later additional effort by other Metals contributors\\nmainly [jkciesluk](https://github.com/jkciesluk). Since this feature would\\nimpact all the users in every file they open, we decided to put it first behind\\nan additional user setting `metals.enableSemanticHighlighting`, which needs to\\nbe set to true. Later depending on your editor, you might also need to enable it\\nin some other places.\\n\\nFor example in VS Code you also need to set\\n`editor.semanticHighlighting.enabled` to `true`. So the settings json files\\nwould look like this:\\n\\n```json\\n...\\n \\"metals.enableSemanticHighlighting\\": true,\\n \\"editor.semanticHighlighting.enabled\\": true,\\n...\\n```\\n\\nYou can also modify your theme colors and styles for some particular types of\\nsymbols. For example:\\n\\n```json\\n \\"editor.semanticTokenColorCustomizations\\": {\\n \\"[Adapta Nokto]\\": {\\n \\"rules\\": {\\n \\"variable\\": \\"#c95252\\",\\n \\"*.readonly\\": \\"#8d91b8\\",\\n \\"*.deprecated\\": {\\n \\"strikethrough\\": true\\n }\\n }\\n }\\n },\\n```\\n\\nwill make vars red and values light blue while also crossing out any deprecated\\nmethods or classes.\\n\\n![semantic-tokens](https://i.imgur.com/vkllczg.png)\\n\\nFor setting up semantic tokens in editors other than VS Code please consult the\\nrelevant documentation.\\n\\n## New inline value code action\\n\\nInline value is a new code action contributed by\\n[kasiaMarek](https://github.com/kasiaMarek) that allows users to inline the\\nright hand side of any value if the definition of that value is located within\\nthe same file. This works in two ways:\\n\\n- if inlining at a reference we will only replace the current value reference\\n\\n![replace-one](https://i.imgur.com/yLuM079.gif)\\n\\n- if inlining at the definition we will try to replace all the references and\\n remove the definition if the definition cannot be accessed from outside the\\n current file\\n\\n![replace-all](https://i.imgur.com/LdlSQsB.gif)\\n\\n## Expanded workspace symbol search to include fields\\n\\nPreviously, when searching the workspace Metals would only look for classes,\\ntrait, interfaces, enums and objects. If you wanted to search for a particularly\\nnamed method you would need to use normal text search, which would be much less\\nconvenient. This release adds the ability to also search for method, types or\\nvalues within the workspace. This will not work for dependencies in order to not\\nincrease indexes used by Metals too much.\\n\\n![search](https://i.imgur.com/YQCinNz.gif)\\n\\nAnother great contribution from [kasiaMarek](https://github.com/kasiaMarek)!\\n\\n## Allow users to use older Scala versions\\n\\nTo provide support for a particular Scala version Metals needs to release a\\nseparate version for each of them, which causes a strain on CI infrastructure.\\nBecause of that previously we would stop supporting some older Scala versions.\\nHowever, now instead of entirely dropping support for older versions, we will\\nonly freeze the amount of features and not fix any new bugs for any of those\\nolder versions.\\n\\nWe will still recommend updating to the newest possible binary compatible\\nversion of the Scala version you are using, but in case it\'s not possible for\\nyou it should be safe to use Metals with those older versions.\\n\\nIn this release we removed Scala 3.0.0, 2.13.1, 2.13.2, 2.12.9, 3.0.0 and 3.0.1.\\nYou can still use them, but some of the newest features will not be available\\nfor them including inline and semantic tokens.\\n\\n## Improve match-case completions in Scala 2\\n\\nLast release introduced some improvements for completions in pattern matching in\\nScala 3. This release brings them also to Scala 2 including:\\n\\n- pattern only completions, i.e. completions in:\\n\\n```scala\\nOption(1) match {\\n case No@@\\n case _: So@@\\n```\\n\\n- completions like:\\n\\n```scala\\ncase class Foo(a: Int, b: Int)\\nList(Foo(1,2)).map{ case F@@ }\\n// turns into\\nList(Foo(1,2)).map{ case Foo(a,b) => }\\n```\\n\\n- exhaustive match completions in anonymous functions:\\n\\n```scala\\nList(Option(1)).map { case@@ }\\n// turns into\\nList(Option(1)).map {\\n case Some(value) =>\\n case None =>\\n}\\n```\\n\\nIn all the examples `@@` denotes the position of the cursor.\\n\\nThis cool improvement was added by [jkciesluk](https://github.com/jkciesluk).\\n\\n## Fallback to symbol search for code navigation\\n\\nMetals uses both global semanticdb indexes as well as the compiler itself to\\nfind the definition of any symbol. However, whenever your workspace had problems\\nwith compilation both those methods could have failed to actually find that\\ndefinition. Instead of giving up, since Metals indexes all the names of types,\\nmethods etc. we will try to find the symbol by name within the user\'s workspace.\\n\\nThis heuristic might sometimes offer false positives, but it\'s much more useful\\nthan being left with no definition location at all. We will continue to improve\\nthose heuristics to make sure that the number of false positives is reduced.\\n\\n## Automatically add details to github issue\\n\\nThanks to [kasiaMarek](https://github.com/kasiaMarek) whenever users open an\\nissue from the Metals tree view or via the `open-new-github-issue` command, the\\nissue will have all the details filled out automatically. This should reduce the\\namount of information that the users need to type manually and make it much more\\nefficient to submit new issues.\\n\\n## Miscellaneous\\n\\n- bugfix: Correctly sort dependency completions in case of non standard\\n versions. [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix issues with spaces in workspace path on Windows.\\n- improvement: Allow rename in lambdas even if code doesn\'t compile.\\n- bugfix: Fix running main when spaces are involved on Windows.\\n- improvement: Allow extracting member when file contains toplevel definition.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix [Scala 3]: Don\'t show named argument completions on infix methods.\\n- improvement[Scala 3]: add `*` completion when at `import foo.`.\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Automatically add repositories to init script for gradle\\n ([kasiaMarek](https://github.com/kasiaMarek)).\\n- fix: Correctly insert type annotation in tuples lambda args\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Use classpath jar for defining run classpath.\\n- improvement: Allow manual cancel of starting debug session.\\n- bugfix: ensure a new `.metals/` dir isn\'t create when/where undesired.\\n- bugfix: Fix issues with jars containing + on windows.\\n- bugfix: Always check if a file with scala/java extension is not a directory.\\n- bugfix: Fix issues with go to definition in derived clauses.\\n- bugfix[Scala 3]: Correctly highlight enum case in lists.\\n- bugfix: Don\'t show completions in patterns when writing `new`\\n [kasiaMarek](https://github.com/kasiaMarek).\\n- bugfix: Don\'t highlight generated given if it doesn\'t exist.\\n- bugfix: Do not convert to named arguments for a Java class.\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Implement all members for case classes in Scala 3\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Insert imports in the correct place in ScalaCLI scripts\\n- bugfix: Also accept interfaces for go to implementation\\n- bugfix: Support Scala 3.0.x worksheets\\n- bugfix: Support scala command as BSP server for debug\\n- improvement: add completion for scala cli `//> using dep@@`\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix issues with auto imports not showing up on windows\\n- bugfix: Correctly highlight last name when using trailing comma\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Suggest `derives` after `extend` or instead of it.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Don\'t change packages in files if they move outside workspace\\n- feature: Add the possibility to discover the main class command to run\\n- improvement: Add better exhaustive completions for &, | types\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Automatically add details to github issue\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Always check if a Scala file is an actual file\\n- bugfix: Remove additional indent for auto imports in worksheets\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix [Scala 3]: Fix infinite loop in case of complex inline expressions\\n- bugfix: Fix JDK version when Java home is jre folder\\n [adpi2](https://github.com/adpi2)\\n- bugfix [Scala 3]: Suggest class constructors when importing symbols\\n- bugfix: Fix infinite loop when searching for munit test cases\\n- bugfix: inner methods passed as params for extract method code action\\n [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.10..v0.11.11\\n Tomasz Godzik\\n Jakub Ciesluk\\n Katarzyna Marek\\n Chris Kipp\\n Kamil Podsiad\u0142o\\n Tobias Roeser\\n Joao Azevedo\\n Maciej Gajek\\n Shintaro Sasaki\\n Adrien Piquerez\\n J\u0119drzej Rochala\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.11](https://github.com/scalameta/metals/tree/v0.11.11) (2023-03-02)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.10...v0.11.11)\\n\\n**Merged pull requests:**\\n\\n- dep: bump gradleBloop from 1.5.8.to 1.6.0\\n [\\\\#5020](https://github.com/scalameta/metals/pull/5020)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): bump @docusaurus/core from 2.3.0 to 2.3.1 in /website\\n [\\\\#5018](https://github.com/scalameta/metals/pull/5018)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.3.0 to 2.3.1 in\\n /website [\\\\#5017](https://github.com/scalameta/metals/pull/5017)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/preset-classic from 2.3.0 to 2.3.1 in /website\\n [\\\\#5016](https://github.com/scalameta/metals/pull/5016)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- improvement: Add test for type completion out of scope\\n [\\\\#5015](https://github.com/scalameta/metals/pull/5015)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Move SemanticTokens to metals package\\n [\\\\#5002](https://github.com/scalameta/metals/pull/5002)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Cancel and create new server in test retry\\n [\\\\#5011](https://github.com/scalameta/metals/pull/5011)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: inner methods passed as params for extract method code action\\n [\\\\#5004](https://github.com/scalameta/metals/pull/5004)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix infinite loop when searching for munit test cases\\n [\\\\#5008](https://github.com/scalameta/metals/pull/5008)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Suggest class constructors when importing symbols\\n [\\\\#5000](https://github.com/scalameta/metals/pull/5000)\\n ([tgodzik](https://github.com/tgodzik))\\n- [sbt-metals] Fix JDK version when Java home is jre folder\\n [\\\\#4910](https://github.com/scalameta/metals/pull/4910)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Don\'t collect symbols from Inline expansion\\n [\\\\#4999](https://github.com/scalameta/metals/pull/4999)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.0-RC3\\n [\\\\#4998](https://github.com/scalameta/metals/pull/4998)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Remove additional indent for imports in worksheets\\n [\\\\#4927](https://github.com/scalameta/metals/pull/4927)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: remove leftover from PR #4954\\n [\\\\#4996](https://github.com/scalameta/metals/pull/4996)\\n ([rochala](https://github.com/rochala))\\n- bugfix: Always check if a Scala file is an actual file\\n [\\\\#4997](https://github.com/scalameta/metals/pull/4997)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.12.0 to 9.15.0\\n [\\\\#4994](https://github.com/scalameta/metals/pull/4994)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.19.0 to 0.20.0\\n [\\\\#4993](https://github.com/scalameta/metals/pull/4993)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-RC4 to 2.1.0-RC6\\n [\\\\#4992](https://github.com/scalameta/metals/pull/4992)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.7 to 3.11.0\\n [\\\\#4990](https://github.com/scalameta/metals/pull/4990)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.9 to 0.8.13\\n [\\\\#4991](https://github.com/scalameta/metals/pull/4991)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: Add Semantic Tokens support in Scala 3\\n [\\\\#4946](https://github.com/scalameta/metals/pull/4946)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update sbt-welcome from 0.2.2 to 0.3.1\\n [\\\\#4980](https://github.com/scalameta/metals/pull/4980)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bsp4j from 2.1.0-M3 to 2.1.0-M4\\n [\\\\#4979](https://github.com/scalameta/metals/pull/4979)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.10.10 to 0.10.11\\n [\\\\#4982](https://github.com/scalameta/metals/pull/4982)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.6 to 2.5.8\\n [\\\\#4981](https://github.com/scalameta/metals/pull/4981)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.6 to 3.10.7\\n [\\\\#4983](https://github.com/scalameta/metals/pull/4983)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Wrong semantic token for renamed imported classes\\n [\\\\#4976](https://github.com/scalameta/metals/pull/4976)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Don\'t use cache when querying for Scala nightlies\\n [\\\\#4972](https://github.com/scalameta/metals/pull/4972)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Merge input and input3 projects used for tests\\n [\\\\#4959](https://github.com/scalameta/metals/pull/4959)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add better exhaustive completions for &, | types\\n [\\\\#4965](https://github.com/scalameta/metals/pull/4965)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Improvement: adds details to github issue\\n [\\\\#4966](https://github.com/scalameta/metals/pull/4966)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feature: Add the possibility to discover the main class to run\\n [\\\\#4968](https://github.com/scalameta/metals/pull/4968)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t change packages in files if they move outside workspace\\n [\\\\#4967](https://github.com/scalameta/metals/pull/4967)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: completions for keyword lookalikes\\n [\\\\#4922](https://github.com/scalameta/metals/pull/4922)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Add `derives` keyword completion\\n [\\\\#4953](https://github.com/scalameta/metals/pull/4953)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Set terminated to true when timeout\\n [\\\\#4964](https://github.com/scalameta/metals/pull/4964)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Remove scalameta parsing in InferredTypeProvider\\n [\\\\#4954](https://github.com/scalameta/metals/pull/4954)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Adjust position in PcCollector for trailing comma\\n [\\\\#4952](https://github.com/scalameta/metals/pull/4952)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix issues with auto imports not showing up\\n [\\\\#4956](https://github.com/scalameta/metals/pull/4956)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: add completion for scala cli //> using dep@@\\n [\\\\#4963](https://github.com/scalameta/metals/pull/4963)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Support scala command as BSP server for debug\\n [\\\\#4962](https://github.com/scalameta/metals/pull/4962)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Don\'t fail on no shutdown message\\n [\\\\#4960](https://github.com/scalameta/metals/pull/4960)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix completion tests and make them more stable\\n [\\\\#4957](https://github.com/scalameta/metals/pull/4957)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add classpath to expect semantic tokens suite\\n [\\\\#4958](https://github.com/scalameta/metals/pull/4958)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Catch StackOverflowException from the parser\\n [\\\\#4902](https://github.com/scalameta/metals/pull/4902)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add null check in SemanticTokenProvider\\n [\\\\#4951](https://github.com/scalameta/metals/pull/4951)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Support Scala 3.0.x worksheets\\n [\\\\#4949](https://github.com/scalameta/metals/pull/4949)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Also accept interfaces for go to implementation\\n [\\\\#4948](https://github.com/scalameta/metals/pull/4948)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Remove check for stacktrace markers\\n [\\\\#4947](https://github.com/scalameta/metals/pull/4947)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Allow users to use older Scala support\\n [\\\\#4935](https://github.com/scalameta/metals/pull/4935)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Fix expected line in FindTextInDependencyJarsSuite\\n [\\\\#4942](https://github.com/scalameta/metals/pull/4942)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Insert imports in the correct place in ScalaCLI scripts\\n [\\\\#4940](https://github.com/scalameta/metals/pull/4940)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Print information if compiler failed to infer edits for import\\n [\\\\#4941](https://github.com/scalameta/metals/pull/4941)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Also allow nonboostrapped to fall back to the last nightly\\n [\\\\#4938](https://github.com/scalameta/metals/pull/4938)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs[skip ci]: Don\'t suggest updating mima\\n [\\\\#4937](https://github.com/scalameta/metals/pull/4937)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: when inlining lambda value add brackets\\n [\\\\#4890](https://github.com/scalameta/metals/pull/4890)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Implement all members for case classes in Scala 3\\n [\\\\#4923](https://github.com/scalameta/metals/pull/4923)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: do not convert to named arguments for a Java class\\n [\\\\#4870](https://github.com/scalameta/metals/pull/4870)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t highlight generated given if it doesn\'t exist\\n [\\\\#4916](https://github.com/scalameta/metals/pull/4916)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add the possibility to only support running the code\\n [\\\\#4919](https://github.com/scalameta/metals/pull/4919)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly highlight enum case in lists\\n [\\\\#4917](https://github.com/scalameta/metals/pull/4917)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not show run lenses for other platforms than JVM\\n [\\\\#4918](https://github.com/scalameta/metals/pull/4918)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Fix `select.nameSpan` for expressions in parentheses\\n [\\\\#4907](https://github.com/scalameta/metals/pull/4907)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update test for Windows\\n [\\\\#4913](https://github.com/scalameta/metals/pull/4913)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: case pattern completions for bind\\n [\\\\#4912](https://github.com/scalameta/metals/pull/4912)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix issues with go to definition in derived clauses\\n [\\\\#4909](https://github.com/scalameta/metals/pull/4909)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: workspace symbol search global var/val/def/type\\n [\\\\#4798](https://github.com/scalameta/metals/pull/4798)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Always check if a scala/java file is actually a file\\n [\\\\#4891](https://github.com/scalameta/metals/pull/4891)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.0-RC2\\n [\\\\#4908](https://github.com/scalameta/metals/pull/4908)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix issues with jars containing + on windows\\n [\\\\#4899](https://github.com/scalameta/metals/pull/4899)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: make scala3RC easier to work with\\n [\\\\#4900](https://github.com/scalameta/metals/pull/4900)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Add checks if span exists\\n [\\\\#4901](https://github.com/scalameta/metals/pull/4901)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure a new `.metals/` dir isn\'t create when/where undesired\\n [\\\\#4895](https://github.com/scalameta/metals/pull/4895)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: add support for 3.3.0-RC1\\n [\\\\#4897](https://github.com/scalameta/metals/pull/4897)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix(ci): don\'t run scripted tests twice\\n [\\\\#4898](https://github.com/scalameta/metals/pull/4898)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Mill documentation\\n [\\\\#4887](https://github.com/scalameta/metals/pull/4887)\\n ([lefou](https://github.com/lefou))\\n- improvement: Allow manual cancel of starting debug session\\n [\\\\#4873](https://github.com/scalameta/metals/pull/4873)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.19 to 0.1.20\\n [\\\\#4878](https://github.com/scalameta/metals/pull/4878)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore[Scala 3]: Add back unused warnings and remove all unused\\n [\\\\#4880](https://github.com/scalameta/metals/pull/4880)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert scalafmt update [\\\\#4882](https://github.com/scalameta/metals/pull/4882)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Use classpath jar for defining run classpath\\n [\\\\#4868](https://github.com/scalameta/metals/pull/4868)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.6.1 to 3.7.0\\n [\\\\#4876](https://github.com/scalameta/metals/pull/4876)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.11.0 to 9.12.0\\n [\\\\#4875](https://github.com/scalameta/metals/pull/4875)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: inline values [\\\\#4759](https://github.com/scalameta/metals/pull/4759)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: correctly insert type annotation in tuples lambda args\\n [\\\\#4859](https://github.com/scalameta/metals/pull/4859)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix compilation with newest nightlies\\n [\\\\#4866](https://github.com/scalameta/metals/pull/4866)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: update sbt-launcher.jar to 1.8.2\\n [\\\\#4865](https://github.com/scalameta/metals/pull/4865)\\n ([ckipp01](https://github.com/ckipp01))\\n- improvement: Fallback to symbol search as the last possibility for definition\\n [\\\\#4861](https://github.com/scalameta/metals/pull/4861)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: init script repositories for gradle\\n [\\\\#4773](https://github.com/scalameta/metals/pull/4773)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Better exhaustive-case completion\\n [\\\\#4831](https://github.com/scalameta/metals/pull/4831)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix: add star to import completions in Scala 3\\n [\\\\#4855](https://github.com/scalameta/metals/pull/4855)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- refactor: Split DebugAdapterStart command into separate commands\\n [\\\\#4860](https://github.com/scalameta/metals/pull/4860)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add semantic tokens for sbt and script files\\n [\\\\#4853](https://github.com/scalameta/metals/pull/4853)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix [Scala 3]: Don\'t show named argument completions on infix methods\\n [\\\\#4857](https://github.com/scalameta/metals/pull/4857)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: In bloop directories were seen as scala/java files\\n [\\\\#4856](https://github.com/scalameta/metals/pull/4856)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: adding wrapper for metals server configuration\\n [\\\\#4845](https://github.com/scalameta/metals/pull/4845)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Allow extracting member when file contains toplevel\\n `val`|`def`|`given` etc.\\n [\\\\#4803](https://github.com/scalameta/metals/pull/4803)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update interface from 1.0.12 to 1.0.13\\n [\\\\#4854](https://github.com/scalameta/metals/pull/4854)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Check if symbol exists before invoking .owner\\n [\\\\#4838](https://github.com/scalameta/metals/pull/4838)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure that correct extension param is highlighted\\n [\\\\#4852](https://github.com/scalameta/metals/pull/4852)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add support for Scala 3.2.2\\n [\\\\#4850](https://github.com/scalameta/metals/pull/4850)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure doctor reports that diagnostics in sbt targets work\\n [\\\\#4842](https://github.com/scalameta/metals/pull/4842)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Properly check symbol in classOf\\n [\\\\#4846](https://github.com/scalameta/metals/pull/4846)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Improve performance of `SemanticTokens`\\n [\\\\#4835](https://github.com/scalameta/metals/pull/4835)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Always log issues with BSP requests\\n [\\\\#4843](https://github.com/scalameta/metals/pull/4843)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure when we go from quickpick to showMessageRequest we include type\\n [\\\\#4841](https://github.com/scalameta/metals/pull/4841)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Update Ammonite to 2.5.6\\n [\\\\#4840](https://github.com/scalameta/metals/pull/4840)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Disable -Wunused:all for Scala 3\\n [\\\\#4836](https://github.com/scalameta/metals/pull/4836)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add benchmarks for SemanticHighlight\\n [\\\\#4833](https://github.com/scalameta/metals/pull/4833)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: properly shut down Metals server\\n [\\\\#4829](https://github.com/scalameta/metals/pull/4829)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: fix name shadowing in pc collector\\n [\\\\#4818](https://github.com/scalameta/metals/pull/4818)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.5 to 3.10.6\\n [\\\\#4830](https://github.com/scalameta/metals/pull/4830)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- docs: update `architecture.md` after #4776 (split MetalsLanguageServer` into\\n separate two parts) [\\\\#4826](https://github.com/scalameta/metals/pull/4826)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Only request build targets from a connection\\n [\\\\#4825](https://github.com/scalameta/metals/pull/4825)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: split `MetalsLanguageServer` into language server and language\\n service [\\\\#4776](https://github.com/scalameta/metals/pull/4776)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Fix running when spaces are involved on windows\\n [\\\\#4815](https://github.com/scalameta/metals/pull/4815)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.10.2 to 9.11.0\\n [\\\\#4819](https://github.com/scalameta/metals/pull/4819)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-dynamic from 3.5.9 to 3.6.1\\n [\\\\#4822](https://github.com/scalameta/metals/pull/4822)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ipcsocket from 1.6.1 to 1.6.2\\n [\\\\#4821](https://github.com/scalameta/metals/pull/4821)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.8.0 to 1.8.2\\n [\\\\#4820](https://github.com/scalameta/metals/pull/4820)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: improve reporting on Semanticdb from Mill for Java Modules\\n [\\\\#4816](https://github.com/scalameta/metals/pull/4816)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: ensure semanticdb-java gets updated by Scala\\n [\\\\#4817](https://github.com/scalameta/metals/pull/4817)\\n ([ckipp01](https://github.com/ckipp01))\\n- Semantic Highlighting [\\\\#4444](https://github.com/scalameta/metals/pull/4444)\\n ([ShintaroSasaki](https://github.com/ShintaroSasaki))\\n- refactor: Move `jvmRunEnvironment` to after indexing\\n [\\\\#4777](https://github.com/scalameta/metals/pull/4777)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Update semanticdb-java version to 0.8.9\\n [\\\\#4812](https://github.com/scalameta/metals/pull/4812)\\n ([lefou](https://github.com/lefou))\\n- improvement: Allow compiler rename in lambdas\\n [\\\\#4808](https://github.com/scalameta/metals/pull/4808)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump react from 17.0.2 to 18.2.0 in /website\\n [\\\\#4811](https://github.com/scalameta/metals/pull/4811)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- chore(ci): allow dependabot to update website stuff\\n [\\\\#4809](https://github.com/scalameta/metals/pull/4809)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Fix issues with spaces in workspace path\\n [\\\\#4807](https://github.com/scalameta/metals/pull/4807)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: add a note about supported test frameworks\\n [\\\\#4805](https://github.com/scalameta/metals/pull/4805)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(site): bump docusaurus to 2.2.0\\n [\\\\#4806](https://github.com/scalameta/metals/pull/4806)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: correctly sort dependency completions\\n [\\\\#4804](https://github.com/scalameta/metals/pull/4804)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Deprecate and remove more Scala versions\\n [\\\\#4720](https://github.com/scalameta/metals/pull/4720)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix(website): Make sure Markdown link is rendered correctly in Metals v0.11.10\\n announcement [\\\\#4800](https://github.com/scalameta/metals/pull/4800)\\n ([jcazevedo](https://github.com/jcazevedo))\\n- feat: Improve match-case completions in Scala 2\\n [\\\\#4744](https://github.com/scalameta/metals/pull/4744)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update Metals and Scala versions\\n [\\\\#4797](https://github.com/scalameta/metals/pull/4797)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add release notes for Metals 0.11.10\\n [\\\\#4740](https://github.com/scalameta/metals/pull/4740)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/01/02/aluminium","metadata":{"permalink":"/metals/blog/2023/01/02/aluminium","source":"@site/blog/2023-01-02-aluminium.md","title":"Metals v0.11.10 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.10, which brings in a lot of","date":"2023-01-02T00:00:00.000Z","formattedDate":"January 2, 2023","tags":[],"readingTime":19.36,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.10 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"},"nextItem":{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.10, which brings in a lot of\\nnew contributions with exciting features as well as stability improvements,\\nwhich will become the primary focus over the next releases.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release249
Merged PRs195
Contributors21
Closed issues83
New features8
\\n\\nFor full details:\\n[https://github.com/scalameta/metals/milestone/54?closed=1](https://github.com/scalameta/metals/milestone/54?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Converting sbt style to mill style dependencies](#converting-sbt-style-to-mill-style-dependencies)\\n- [Additional completions for dependencies](#additional-completions-for-dependencies)\\n- [Actionable diagnostics for scala-cli](#actionable-diagnostics-for-scala-cli)\\n- [Expose Test Cases as Separate Lenses](#expose-test-cases-as-separate-lenses)\\n- [Add support for goto type definition](#add-support-for-goto-type-definition)\\n- [Run main classes in terminal when using code lenses](#run-main-classes-in-terminal-when-using-code-lenses)\\n- [Allow rename for local names for non compiled code](#allow-rename-for-local-names-for-non-compiled-code)\\n- [Enable run and debug in Scala CLI scripts in Metals](#enable-run-and-debug-in-scala-cli-scripts-in-metals)\\n- [Refactor package definition when moving files between packages](#refactor-package-definition-when-moving-files-between-packages)\\n- [Scala debugger improvements](#scala-debugger-improvements)\\n\\n## Converting sbt style to mill style dependencies\\n\\nThanks to [LaurenceWarne](https://github.com/LaurenceWarne) there is a new code\\naction that allows users to automatically convert sbt style defined dependencies\\nto Mill ones whenever pasting in scripts or mill files.\\n\\nFor example if we have an incorrect `build.sc` file:\\n\\n```scala\\nobject MyModule extends ScalaModule {\\n def ivyDeps = Agg(\\n \\"org.scalameta\\" %% \\"metals\\" % \\"1.0\\"\\n )\\n}\\n```\\n\\nMetals will now suggest to convert the incorrect line with the dependency to a\\ncorrect one when hovering or moving the cursor to its location. Afterwards to\\ncode will turn to:\\n\\n```scala\\nobject MyModule extends ScalaModule {\\n def ivyDeps = Agg(\\n ivy\\"org.scalameta::metals:1.0\\"\\n )\\n}\\n```\\n\\nSimilarly, it will also help with ammonite scripts and turn:\\n\\n```scala\\nimport $ivy.\\"org.scalameta\\" %% \\"metals\\" % \\"1.0\\"\\"\\n```\\n\\ninto:\\n\\n```scala\\nimport $ivy.`org.scalameta::metals:1.0`\\n```\\n\\n## Additional completions for dependencies\\n\\nIn the previous version of Metals additional library dependency suggestions were\\nadded in Ammonite scripts and worksheets. This version expands the number of\\nplaces where you can use this feature:\\n\\n- Scala CLI scripts and files when writing `//> using lib ...`\\n- When writing `ivy\\"dependency...\\"` in build.sc file\\n- Inside sbt files when adding dependencies.\\n\\nThis feature allows you to explore the available libraries and their versions\\nwithout leaving the comforts of your editor.\\n\\nThanks [jkciesluk](https://github.com/jkciesluk) and\\n[LaurenceWarne](https://github.com/LaurenceWarne) for all the great work!\\n\\n## Actionable diagnostics for scala-cli\\n\\nActionable diagnostics is a new idea within the Scala tooling ecosystem that\\nfocuses on providing users with a potential fix for any errors or warnings that\\nmay show up. This reduces the amount of time users will spend on fixing their\\ncode and helps them be more productive in daily development.\\n\\nThe first experiment within that area was done by\\n[lwronski](https://github.com/lwronski) in\\n[Scala CLI](https://scala-cli.virtuslab.org/). When using the newest Scala CLI\\nyou will see a warning whenever a library has a newer version available and\\nyou\'ll have a quick fix suggested via code action.\\n\\n![actionable](https://i.imgur.com/3D9WcQb.gif) These warnings can be disabled\\nwithin ScalaCLi using:\\n\\n```\\nscala-cli config actions false\\n```\\n\\nNOTE: that if you do this, you\'ll turn off actionable diagnostics from scala-cli\\nglobally until this command is ran again with `true`.\\n\\nThere is ongoing work on adding more actionable diagnostics in the Scala 3\\ncompiler as well, so look forward to more features like this in the future!\\n\\n## Expose Test Cases as Separate Lenses\\n\\nUp until the current release it was only possible to run a single test case\\nwithin Visual Studio Code and nvim-metals which use an additional Test Explorer\\nthat is not available for all the editors. However, thanks to\\n([LaurenceWarne](https://github.com/LaurenceWarne)) Metals will now show lenses\\nto run a single test case in case of all other editors.\\n\\nNOTE: While Metals detects test suites for most of existing testing frameworks,\\nsupport for recognizing individual tests is more limited. Metals supports the\\ncurrent set of test frameworks when it comes to individual test discovery:\\n\\n- Junit\\n- MUnit\\n- Scalatest\\n\\nMore details can be found in the\\n[PR \\\\#4569](https://github.com/scalameta/metals/pull/4569).\\n\\n## Add support for goto type definition\\n\\nUsers were able for a long time to navigate to the definition of a particular\\nsymbol, which can be a method, object, class etc. After that they could\\nsometimes also find the definition of the type of that symbol. However, it\'s not\\nalways easy and convenient to do that. From now on Metals also allows users to\\nuse the `go to type definition` feature within all the supported editors. User\\nwill be able to go directly to the type of a particular symbol.\\n\\n![type-def](https://i.imgur.com/t77kB1S.gif)\\n\\nThis feature might work a bit differently depending on the symbol you are\\nchecking:\\n\\n- for methods it will show the location of the return type\\n- for any values, vars or parameters it will show the type of that symbol\\n- for classes, object or types it will only find that particular type, which\\n will work the same as `go to definition`\\n\\n## Run main classes in terminal when using code lenses\\n\\nThere are two ways of running main classes within Metals. You can decide to run\\nthem with or without debugging with the latter stopping at the breakpoints.\\nThese two types would both use the debug server with the first one just ignoring\\nbreakpoints. However, setting up the whole infrastructure for debugging, when\\nusers just want to run a main method, is adding a lot of unnecessary burden and\\ntakes longer than if you just run it within your terminal.\\n\\nIn this version we introduce the change to include information about the exact\\nJava command to run within the code lenses, that can be used by the editors. It\\ncurrently works with VS Code and it will run main classes within the task\\nterminal.\\n\\n![run-main](https://i.imgur.com/tXfSSj7.gif)\\n\\nIn next release, we also plan to use the same mechanism for running main classes\\nfrom all the other places. We also want to make tests runnable without the\\ndebugging infrastructure, but it\'s a bit more complicated than for main methods.\\n\\n## Allow rename for local names for non compiled code\\n\\nPreviously, whenever you wanted to rename anything, Metals would need to compile\\nyour entire workspace. The reason for that was twofold. First we needed the data\\nfrom the compilation and second we wanted to make sure that will not break your\\ncode. This however is not needed for anything that is defined in a local scope,\\nwhich can\'t be used outside the current file.\\n\\nMetals will now allow users to rename any local code irrelevant of whether the\\nworkspace was compiled or not.\\n\\n![rename-local](https://i.imgur.com/EEKchJB.gif)\\n\\nWhen renaming symbols that might be use outside the current file the previous\\nlimitations will apply.\\n\\n## Enable run and debug in Scala CLI scripts in Metals\\n\\nThanks to [lwronski](https://github.com/lwronski) it\'s now possible to run and\\ndebug scripts when using Scala CLI.\\n\\n![script-debug](https://i.imgur.com/bwfoEFY.gif)\\n\\nFor running scripts without debugging we will also provide the possibility of\\nusing the explicit Java command to run from code lenses.\\n\\n## Refactor package definition when moving files between packages\\n\\nOne of the more requested features was the ability to automatically rename\\npackages when moving files, which helps reduce the burden of reorganizing the\\ncode. Thanks to some amazing works from [susliko](https://github.com/susliko)\\nthis is now possible and should tackle most of the possible situations.\\n\\nThe feature will rename both the current package name as well as all the\\nreferences to it in other files.\\n\\nYou can see some great examples of it in the\\n[\\\\#4655 PR](https://github.com/scalameta/metals/pull/4655) that introduced the\\nfeature.\\n\\n## Scala debugger improvements\\n\\nMetals v0.11.10 ships a new major version of the Scala Debug Adapter, featuring\\nbetter debugging steps (step filter), conditional breakpoints, logpoints and\\nmore. See a full list of features in the release notes of the Scala Debug\\nAdapter\\n[3.0.1](https://github.com/scalacenter/scala-debug-adapter/releases/tag/v3.0.1)\\nand\\n[3.0.3](https://github.com/scalacenter/scala-debug-adapter/releases/tag/v3.0.3).\\n\\n## Miscellaneous\\n\\n- bugfix: Clean diagnostics after importing a script\\n- bugfix: Properly show hover even if decoration spans multiple lines\\n- chore: Support for Scala versions 2.13.10, 3.2.1.\\n- bugfix: Don\'t backtick Scala 3 soft keywords in imports.\\n [susliko](https://github.com/susliko)\\n- bugfix: Highlight transparent inline usages correctly.\\n- bugfix: Don\'t show case completions if already in case body.\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Sort versions in reverse for coursier completions.\\n [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: [Scala 3] Properly index top level extension method to allow\\n navigation and completions.\\n- bugfix: Don\'t show type parameter in outgoing calls.\\n [riiswa](https://github.com/riiswa)\\n- bugfix: Prepend package in case of conflicts in match case completions.\\n [dos65](https://github.com/dos65)\\n- bugfix: Fix `exhaustive match` completion when using `TypeA with TypeB` to not\\n show TypeA or TypeB as possible cases.\\n [jciesluk](https://github.com/jkciesluk)\\n- bugfix: Also rename companion when renaming renamed import.\\n- feat: capture and forward `diagnosticCode`.\\n [ckipp01](https://github.com/ckipp01)\\n- bugfix: Fix go to in external classes in jars with special chars.\\n [narma](https://github.com/narma)\\n- bugfix: add special case for auto import inside already existing to add the\\n needed prefix inline. [dos65](https://github.com/dos65)\\n- bugfix: Fix detecting companions for classes defined directly in method for\\n document highlight and rename.\\n- bugfix: exhaustive match when using renamed symbol.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Retry starting Ammonite when the script file changed and was fixed.\\n- bugfix: Properly highlight package object name.\\n- bugfix: Properly highlight named arguments in case class constructors.\\n [jkciesluk](https://github.com/jkciesluk)\\n- fix: automatically import companion object instead of apply method.\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Add showing semanticdb for sbt files and worksheets.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Correctly display statuses for Ammonite scripts in Doctor.\\n- bugfix: Don\'t show string code actions when they are enclosed within selected\\n range.\\n- bugfix: [Scala 3] Allow to automatically complete already overridden symbols.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 3] Make implementAll work properly with type aliases and\\n higher. kind type[jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 3] use braces for match completion with -no-indent option.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Take into account the length of interpolator for code actions related.\\n to string interpolation.\\n- bugfix: Make multistage Mill scripts work.\\n- bugfix: implement methods with path-dependent type arguments.\\n- bugfix: Properly reindex build after reloading sbt.\\n- bugfix: Recommend newer RC Scala versions when project is using a RC\\n [rkrzewski](https://github.com/rkrzewski)\\n- chore: Try and print all dependencies used by Metals.\\n- bugfix: [Scala 3] Fix highlight for extension methods.\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Improve behaviour of Initial ivy Completions when backticks are\\n not added. [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Call hierarchy incoming calls includes also incoming calls of super.\\n methods [kasiaMarek](https://github.com/kasiaMarek)\\n- feature: Show @main lenses with scala cli scripts.\\n [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Don\'t encode paths on Windows to fix issues with dependencies in\\n directories with non alphanumeric characters.\\n- bugfix: Fix document highlighting mechanism for Java files.\\n [MaciejG604](https://github.com/MaciejG604)\\n- improvement: Better folding of definitions and overall improvements to folded\\n regions. [MaciejG604](https://github.com/MaciejG604)\\n- bugfix: stop watching generated files to avoid compilation loop.\\n [adpi2](https://github.com/adpi2)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.9..v0.11.10\\n 67\\tTomasz Godzik\\n 51\\tscalameta-bot\\n 40\\tJakub Ciesluk\\n 15\\tLaurence Warne\\n 15\\tChris Kipp\\n 6\\tAdrien Piquerez\\n 5\\tkmarek\\n 4\\t\u0141ukasz Wro\u0144ski\\n 4\\tKamil Podsiadlo\\n 3\\tMaciej Gajek\\n 3\\tVadim Chelyshov\\n 2\\tSergey Rublev\\n 2\\tShardul Chiplunkar\\n 2\\tWaris Radji\\n 2\\tdependabot[bot]\\n 2\\tsusliko\\n 1\\tEugene Bulavin\\n 1\\tRafa\u0142 Krzewski\\n 1\\tSeth Tisue\\n 1\\tVasiliy Morkovkin\\n 1\\tmattkohl-flex\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.10](https://github.com/scalameta/metals/tree/v0.11.10) (2023-01-02)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.9...v0.11.10)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Make finding filename more reliant\\n [\\\\#4784](https://github.com/scalameta/metals/pull/4784)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ipcsocket from 1.5.0 to 1.6.1\\n [\\\\#4790](https://github.com/scalameta/metals/pull/4790)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core from 3.5.9 to 3.6.1\\n [\\\\#4791](https://github.com/scalameta/metals/pull/4791)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-dynamic from 3.5.3 to 3.5.9\\n [\\\\#4792](https://github.com/scalameta/metals/pull/4792)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.5.3 to 3.5.9\\n [\\\\#4783](https://github.com/scalameta/metals/pull/4783)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Bring back previous document highlighting mechanism for Java files\\n [\\\\#4779](https://github.com/scalameta/metals/pull/4779)\\n ([MaciejG604](https://github.com/MaciejG604))\\n- refactor: remove `compat` in tests for 2.11\\n [\\\\#4778](https://github.com/scalameta/metals/pull/4778)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add log when message could not be parsed\\n [\\\\#4775](https://github.com/scalameta/metals/pull/4775)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix #4772: stop watching generated files to avoid compilation loop\\n [\\\\#4774](https://github.com/scalameta/metals/pull/4774)\\n ([adpi2](https://github.com/adpi2))\\n- Fix nested function def not folding\\n [\\\\#4669](https://github.com/scalameta/metals/pull/4669)\\n ([MaciejG604](https://github.com/MaciejG604))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.18 to 0.1.19\\n [\\\\#4771](https://github.com/scalameta/metals/pull/4771)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.2.2-RC2\\n [\\\\#4767](https://github.com/scalameta/metals/pull/4767)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update coursier from 2.1.0-RC3-1 to 2.1.0-RC4\\n [\\\\#4762](https://github.com/scalameta/metals/pull/4762)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fixes for the extract value feature\\n [\\\\#4725](https://github.com/scalameta/metals/pull/4725)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.10.1 to 9.10.2\\n [\\\\#4764](https://github.com/scalameta/metals/pull/4764)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.0 to 4.7.1\\n [\\\\#4766](https://github.com/scalameta/metals/pull/4766)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.11 to 1.0.12\\n [\\\\#4763](https://github.com/scalameta/metals/pull/4763)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Set gh_token separate from github_token\\n [\\\\#4758](https://github.com/scalameta/metals/pull/4758)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Only use fine grained PUSH_TAG_GH_TOKEN\\n [\\\\#4755](https://github.com/scalameta/metals/pull/4755)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Set PUSH_TAG_GH_TOKEN for GH_TOKEN\\n [\\\\#4754](https://github.com/scalameta/metals/pull/4754)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add GH_TOKEN variable for github cli\\n [\\\\#4751](https://github.com/scalameta/metals/pull/4751)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Use repository scoped token for pushing tags\\n [\\\\#4750](https://github.com/scalameta/metals/pull/4750)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t encode paths on Windows\\n [\\\\#4748](https://github.com/scalameta/metals/pull/4748)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Update all GH_TOKEN refs to GITHUB_TOKEN\\n [\\\\#4749](https://github.com/scalameta/metals/pull/4749)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: use GITHUB_TOKEN instead, which is the default env variable\\n [\\\\#4746](https://github.com/scalameta/metals/pull/4746)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Explain how to write messages for commits\\n [\\\\#4726](https://github.com/scalameta/metals/pull/4726)\\n ([tgodzik](https://github.com/tgodzik))\\n- ci: fix check_scala3_nightly\\n [\\\\#4745](https://github.com/scalameta/metals/pull/4745)\\n ([dos65](https://github.com/dos65))\\n- chore: Bump Scalameta to 4.7.0\\n [\\\\#4732](https://github.com/scalameta/metals/pull/4732)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update coursier from 2.1.0-RC3 to 2.1.0-RC3-1\\n [\\\\#4742](https://github.com/scalameta/metals/pull/4742)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.10.0 to 9.10.1\\n [\\\\#4743](https://github.com/scalameta/metals/pull/4743)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: check for the left in diagnosticCode\\n [\\\\#4737](https://github.com/scalameta/metals/pull/4737)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update coursier from 2.1.0-RC2 to 2.1.0-RC3\\n [\\\\#4735](https://github.com/scalameta/metals/pull/4735)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update gradle-bloop from 1.5.7-RC1 to 1.5.8\\n [\\\\#4734](https://github.com/scalameta/metals/pull/4734)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-maven-plugin from 2.0.0-RC4 to 2.0.0\\n [\\\\#4733](https://github.com/scalameta/metals/pull/4733)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Show @main lenses with scala cli scripts\\n [\\\\#4729](https://github.com/scalameta/metals/pull/4729)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- refactor: start using newly published bloop-gradle\\n [\\\\#4731](https://github.com/scalameta/metals/pull/4731)\\n ([ckipp01](https://github.com/ckipp01))\\n- Call hierarchy incoming calls include also incoming calls of super methods\\n [\\\\#4707](https://github.com/scalameta/metals/pull/4707)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- refactor: use the newly published bloop-maven-plugin\\n [\\\\#4728](https://github.com/scalameta/metals/pull/4728)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Show completions in parens after newline\\n [\\\\#4722](https://github.com/scalameta/metals/pull/4722)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Try and print all dependencies used by Metals\\n [\\\\#4719](https://github.com/scalameta/metals/pull/4719)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve `rename` for local symbols and worksheets\\n [\\\\#4694](https://github.com/scalameta/metals/pull/4694)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Bump Bloop to 1.5.6\\n [\\\\#4718](https://github.com/scalameta/metals/pull/4718)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.3 to 9.10.0\\n [\\\\#4716](https://github.com/scalameta/metals/pull/4716)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add tests for hover on annotation\\n [\\\\#4712](https://github.com/scalameta/metals/pull/4712)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix highlight for extension methods\\n [\\\\#4705](https://github.com/scalameta/metals/pull/4705)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Recommend newer RC Scala versions when project is using a RC\\n [\\\\#4709](https://github.com/scalameta/metals/pull/4709)\\n ([rkrzewski](https://github.com/rkrzewski))\\n- bugfix: Properly reindex build after reloading sbt\\n [\\\\#4710](https://github.com/scalameta/metals/pull/4710)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update mill-contrib-testng from 0.10.9 to 0.10.10\\n [\\\\#4715](https://github.com/scalameta/metals/pull/4715)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix adjusting range for hovers\\n [\\\\#4713](https://github.com/scalameta/metals/pull/4713)\\n ([tgodzik](https://github.com/tgodzik))\\n- `PresentationCompiler` returns custom `Hover`\\n [\\\\#4704](https://github.com/scalameta/metals/pull/4704)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Refactor package definition when moving files between packages\\n [\\\\#4655](https://github.com/scalameta/metals/pull/4655)\\n ([susliko](https://github.com/susliko))\\n- Improve Behaviour of Initial ivy Completions (scala 2)\\n [\\\\#4641](https://github.com/scalameta/metals/pull/4641)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Update Bloop to the newest one\\n [\\\\#4696](https://github.com/scalameta/metals/pull/4696)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.17 to 0.1.18\\n [\\\\#4693](https://github.com/scalameta/metals/pull/4693)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config from 1.5.4-67-c910a45b to 1.5.4-78-d8126ad2\\n [\\\\#4691](https://github.com/scalameta/metals/pull/4691)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix coursier completions in ScalaCli scripts\\n [\\\\#4689](https://github.com/scalameta/metals/pull/4689)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable run and debug Scala CLI scripts in Metals\\n [\\\\#4605](https://github.com/scalameta/metals/pull/4605)\\n ([lwronski](https://github.com/lwronski))\\n- build(deps): bump hmarr/auto-approve-action from 2 to 3\\n [\\\\#4688](https://github.com/scalameta/metals/pull/4688)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Make multistage Mill scripts work\\n [\\\\#4687](https://github.com/scalameta/metals/pull/4687)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Take into account the length of interpolator\\n [\\\\#4679](https://github.com/scalameta/metals/pull/4679)\\n ([tgodzik](https://github.com/tgodzik))\\n- exempt Scala nightlies from a test\\n [\\\\#4681](https://github.com/scalameta/metals/pull/4681)\\n ([SethTisue](https://github.com/SethTisue))\\n- docs: Point bootstrap commands to latest release version\\n [\\\\#4680](https://github.com/scalameta/metals/pull/4680)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.4-54-cfc03bdc to\\n 1.5.4-67-c910a45b [\\\\#4677](https://github.com/scalameta/metals/pull/4677)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.4-14-7cb43276 to\\n 1.5.4-54-cfc03bdc [\\\\#4672](https://github.com/scalameta/metals/pull/4672)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: avoid newlines in json doctor output\\n [\\\\#4676](https://github.com/scalameta/metals/pull/4676)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: implement methods with path-dependent type arguments\\n [\\\\#4674](https://github.com/scalameta/metals/pull/4674)\\n ([susliko](https://github.com/susliko))\\n- docs: Add separate information about scripts\\n [\\\\#4643](https://github.com/scalameta/metals/pull/4643)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.2 to 9.8.3\\n [\\\\#4673](https://github.com/scalameta/metals/pull/4673)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: match completion with -no-indent option\\n [\\\\#4639](https://github.com/scalameta/metals/pull/4639)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.18.0 to 0.19.0\\n [\\\\#4659](https://github.com/scalameta/metals/pull/4659)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update sbt-ci-release to new org\\n [\\\\#4667](https://github.com/scalameta/metals/pull/4667)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t add package for worksheets and scripts\\n [\\\\#4666](https://github.com/scalameta/metals/pull/4666)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.1 to 9.8.2\\n [\\\\#4660](https://github.com/scalameta/metals/pull/4660)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Don\'t show wildcard param completions\\n [\\\\#4665](https://github.com/scalameta/metals/pull/4665)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.4 to 3.10.5\\n [\\\\#4658](https://github.com/scalameta/metals/pull/4658)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update munit from 1.0.0-M6 to 1.0.0-M7\\n [\\\\#4661](https://github.com/scalameta/metals/pull/4661)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- change version in ivy completions tests\\n [\\\\#4663](https://github.com/scalameta/metals/pull/4663)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: ensure name for scala-cli is correct\\n [\\\\#4653](https://github.com/scalameta/metals/pull/4653)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update coursier from 2.1.0-RC1 to 2.1.0-RC2\\n [\\\\#4651](https://github.com/scalameta/metals/pull/4651)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: ensure we\'re testing the connection with Mill\\n [\\\\#4642](https://github.com/scalameta/metals/pull/4642)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): remove coc-metals from issue template\\n [\\\\#4648](https://github.com/scalameta/metals/pull/4648)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add scala-debug-adapter 2x support by Scala CLI\\n [\\\\#4649](https://github.com/scalameta/metals/pull/4649)\\n ([lwronski](https://github.com/lwronski))\\n- fix: prevent NPE in import missing symbol code action\\n [\\\\#4645](https://github.com/scalameta/metals/pull/4645)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feature: Use Presentation Compiler for local rename\\n [\\\\#4542](https://github.com/scalameta/metals/pull/4542)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add completions for plugins in ScalaCLI\\n [\\\\#4598](https://github.com/scalameta/metals/pull/4598)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: implementAll with type aliases and higher kind type\\n [\\\\#4630](https://github.com/scalameta/metals/pull/4630)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix compliation issues with 3.3.x\\n [\\\\#4640](https://github.com/scalameta/metals/pull/4640)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.7.0 to 9.8.1\\n [\\\\#4637](https://github.com/scalameta/metals/pull/4637)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M7 to 2.1.0-RC1\\n [\\\\#4632](https://github.com/scalameta/metals/pull/4632)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.16 to 0.1.17\\n [\\\\#4638](https://github.com/scalameta/metals/pull/4638)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.17.0 to 0.18.0\\n [\\\\#4634](https://github.com/scalameta/metals/pull/4634)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.7.3 to 1.8.0\\n [\\\\#4635](https://github.com/scalameta/metals/pull/4635)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- docs: remove old resolver in docs\\n [\\\\#4627](https://github.com/scalameta/metals/pull/4627)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update mill-contrib-testng from 0.10.8 to 0.10.9\\n [\\\\#4631](https://github.com/scalameta/metals/pull/4631)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.10 to 1.0.11\\n [\\\\#4633](https://github.com/scalameta/metals/pull/4633)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Drop support for scala-debug-adapter 1.x\\n [\\\\#4628](https://github.com/scalameta/metals/pull/4628)\\n ([adpi2](https://github.com/adpi2))\\n- Update scala-debug-adapter to 3.0.4\\n [\\\\#4626](https://github.com/scalameta/metals/pull/4626)\\n ([adpi2](https://github.com/adpi2))\\n- fix: complete already overridden symbols in scala 3\\n [\\\\#4621](https://github.com/scalameta/metals/pull/4621)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: more accurate signature on error in override comp\\n [\\\\#4622](https://github.com/scalameta/metals/pull/4622)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t show string code actions when they are enclosed within range\\n [\\\\#4608](https://github.com/scalameta/metals/pull/4608)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly display statuses for Ammonite scripts in Doctor\\n [\\\\#4619](https://github.com/scalameta/metals/pull/4619)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.2.2-RC1\\n [\\\\#4618](https://github.com/scalameta/metals/pull/4618)\\n ([tgodzik](https://github.com/tgodzik))\\n- add showing semanticdb for sbt files and worksheets\\n [\\\\#4616](https://github.com/scalameta/metals/pull/4616)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update nightly release branch to use Scala 3.3.x fixes\\n [\\\\#4620](https://github.com/scalameta/metals/pull/4620)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Try to make suites less flaky\\n [\\\\#4615](https://github.com/scalameta/metals/pull/4615)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add lsp-keep-workspace-alive to emacs config\\n [\\\\#4617](https://github.com/scalameta/metals/pull/4617)\\n ([shardulc](https://github.com/shardulc))\\n- fix: correctly import companion object for apply method\\n [\\\\#4567](https://github.com/scalameta/metals/pull/4567)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: swap scalameta Mill g8 for com-lihaoyi one\\n [\\\\#4614](https://github.com/scalameta/metals/pull/4614)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): remove Steward run from this repo\\n [\\\\#4613](https://github.com/scalameta/metals/pull/4613)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: don\'t show incorrect `extension` keyword completion\\n [\\\\#4607](https://github.com/scalameta/metals/pull/4607)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Highlight for named arg in case class constructors\\n [\\\\#4599](https://github.com/scalameta/metals/pull/4599)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Default to empty jvm environment instead of failing\\n [\\\\#4611](https://github.com/scalameta/metals/pull/4611)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix compilation issues with Scala 3.3.x\\n [\\\\#4612](https://github.com/scalameta/metals/pull/4612)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(deps): bump millw to 0.4.4\\n [\\\\#4609](https://github.com/scalameta/metals/pull/4609)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Add shell command required to run main classes\\n [\\\\#4566](https://github.com/scalameta/metals/pull/4566)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.6.0 to 9.7.0\\n [\\\\#4603](https://github.com/scalameta/metals/pull/4603)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix wrong namePos on package objects\\n [\\\\#4602](https://github.com/scalameta/metals/pull/4602)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.7.2 to 1.7.3\\n [\\\\#4604](https://github.com/scalameta/metals/pull/4604)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Ignore failing tests on Java 8\\n [\\\\#4601](https://github.com/scalameta/metals/pull/4601)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: change where we stick millw\\n [\\\\#4586](https://github.com/scalameta/metals/pull/4586)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Deduplicate coursier completions\\n [\\\\#4597](https://github.com/scalameta/metals/pull/4597)\\n ([tgodzik](https://github.com/tgodzik))\\n- Workaround fix for double escaping % for jar URIs\\n [\\\\#4595](https://github.com/scalameta/metals/pull/4595)\\n ([narma](https://github.com/narma))\\n- bugfix: Retry starting Ammonite when file changed\\n [\\\\#4582](https://github.com/scalameta/metals/pull/4582)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.2.1\\n [\\\\#4592](https://github.com/scalameta/metals/pull/4592)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Check if client returned null in configuration\\n [\\\\#4588](https://github.com/scalameta/metals/pull/4588)\\n ([meadofpoetry](https://github.com/meadofpoetry))\\n- Refactor override completions, move auto import generator\\n [\\\\#4590](https://github.com/scalameta/metals/pull/4590)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: exhaustive match on renamed symbol\\n [\\\\#4589](https://github.com/scalameta/metals/pull/4589)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: get rid of resolver warning on startup\\n [\\\\#4587](https://github.com/scalameta/metals/pull/4587)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): bump coursier/setup-action from 1.2.1 to 1.3.0\\n [\\\\#4583](https://github.com/scalameta/metals/pull/4583)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Handle null being sent in the user configuration\\n [\\\\#4580](https://github.com/scalameta/metals/pull/4580)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.9 to 1.0.10\\n [\\\\#4579](https://github.com/scalameta/metals/pull/4579)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Move some logic from CompletionProvider\\n [\\\\#4572](https://github.com/scalameta/metals/pull/4572)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix Test Case Code Lenses Appearing with Test Explorer\\n [\\\\#4578](https://github.com/scalameta/metals/pull/4578)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bump ivy dep version in completions tests\\n [\\\\#4576](https://github.com/scalameta/metals/pull/4576)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add support for type definition\\n [\\\\#4507](https://github.com/scalameta/metals/pull/4507)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.5.1 to 9.6.0\\n [\\\\#4575](https://github.com/scalameta/metals/pull/4575)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix detecting companions for classes defined directly in method\\n [\\\\#4573](https://github.com/scalameta/metals/pull/4573)\\n ([tgodzik](https://github.com/tgodzik))\\n- Expose Test Cases as Separate Lenses\\n [\\\\#4569](https://github.com/scalameta/metals/pull/4569)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- Fix go to in external classes in jars with special chars\\n [\\\\#4560](https://github.com/scalameta/metals/pull/4560)\\n ([narma](https://github.com/narma))\\n- feat: capture and forward `diagnosticCode`\\n [\\\\#4239](https://github.com/scalameta/metals/pull/4239)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use new scala-debug-adapter 3\\n [\\\\#4565](https://github.com/scalameta/metals/pull/4565)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Also rename companion when renaming renamed import\\n [\\\\#4556](https://github.com/scalameta/metals/pull/4556)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: add special case for autoimport inside Import tree\\n [\\\\#4555](https://github.com/scalameta/metals/pull/4555)\\n ([dos65](https://github.com/dos65))\\n- Add Ammonite Ivy completions for Scala 3\\n [\\\\#4508](https://github.com/scalameta/metals/pull/4508)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.15.0 to 0.17.0\\n [\\\\#4552](https://github.com/scalameta/metals/pull/4552)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.4.0 to 9.5.1\\n [\\\\#4553](https://github.com/scalameta/metals/pull/4553)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #4532: catch ZipException when opening jar files\\n [\\\\#4550](https://github.com/scalameta/metals/pull/4550)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Try to fix flaky ScalaCLI test\\n [\\\\#4519](https://github.com/scalameta/metals/pull/4519)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala cli actionable diagnostic\\n [\\\\#4297](https://github.com/scalameta/metals/pull/4297)\\n ([lwronski](https://github.com/lwronski))\\n- Fix `exhaustive match` completion for type `TypeA with TypeB`\\n [\\\\#4547](https://github.com/scalameta/metals/pull/4547)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Add support for Scala 3.2.1-RC3 and 3.2.1-RC4\\n [\\\\#4549](https://github.com/scalameta/metals/pull/4549)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update default Scala 2.13 version for Ammonite\\n [\\\\#4525](https://github.com/scalameta/metals/pull/4525)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Set connecting-scalacli test as flaky\\n [\\\\#4546](https://github.com/scalameta/metals/pull/4546)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala3 match-case completions - improve autoimports\\n [\\\\#4397](https://github.com/scalameta/metals/pull/4397)\\n ([dos65](https://github.com/dos65))\\n- Add sbt lib completions\\n [\\\\#4496](https://github.com/scalameta/metals/pull/4496)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafix-interfaces from 0.10.3 to 0.10.4\\n [\\\\#4538](https://github.com/scalameta/metals/pull/4538)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: [Scala 3] Properly prepend package to toplevel methods\\n [\\\\#4544](https://github.com/scalameta/metals/pull/4544)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.4-35-ebdeebe4 to 2.5.5\\n [\\\\#4539](https://github.com/scalameta/metals/pull/4539)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Documentation fixes [\\\\#4543](https://github.com/scalameta/metals/pull/4543)\\n ([mattkohl-flex](https://github.com/mattkohl-flex))\\n- Add mill ivy completions\\n [\\\\#4497](https://github.com/scalameta/metals/pull/4497)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Sort versions in reverse for coursier completions\\n [\\\\#4536](https://github.com/scalameta/metals/pull/4536)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.3 to 3.10.4\\n [\\\\#4540](https://github.com/scalameta/metals/pull/4540)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Highlight transparent inline usages correctly\\n [\\\\#4529](https://github.com/scalameta/metals/pull/4529)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.15 to 0.1.16\\n [\\\\#4541](https://github.com/scalameta/metals/pull/4541)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Remove to check for Scala versions in worksheets\\n [\\\\#4535](https://github.com/scalameta/metals/pull/4535)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Try to download mtags for latest supported nightly Scala\u2026\\n [\\\\#4511](https://github.com/scalameta/metals/pull/4511)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bsp4j to 2.1.0-M3\\n [\\\\#4527](https://github.com/scalameta/metals/pull/4527)\\n ([lwronski](https://github.com/lwronski))\\n- fix: incorrect case completion position\\n [\\\\#4517](https://github.com/scalameta/metals/pull/4517)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Revert undertow and ignore\\n [\\\\#4526](https://github.com/scalameta/metals/pull/4526)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.4-34-1c7b3c38 to 2.5.4-35-ebdeebe4\\n [\\\\#4521](https://github.com/scalameta/metals/pull/4521)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update undertow-core from 2.2.20.Final to 2.3.0.Final\\n [\\\\#4524](https://github.com/scalameta/metals/pull/4524)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.3 to 0.10.4\\n [\\\\#4520](https://github.com/scalameta/metals/pull/4520)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.10.7 to 0.10.8\\n [\\\\#4522](https://github.com/scalameta/metals/pull/4522)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update qdox from 2.0.2 to 2.0.3\\n [\\\\#4523](https://github.com/scalameta/metals/pull/4523)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Fix compiler warnings\\n [\\\\#4516](https://github.com/scalameta/metals/pull/4516)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Filter out `` symbol for exhaustive matches\\n [\\\\#4514](https://github.com/scalameta/metals/pull/4514)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Wrap `isPublic` in try\\n [\\\\#4513](https://github.com/scalameta/metals/pull/4513)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add links for easier navigation in the blogpost\\n [\\\\#4512](https://github.com/scalameta/metals/pull/4512)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix show declaration type on outgoing calls request\\n [\\\\#4490](https://github.com/scalameta/metals/pull/4490)\\n ([riiswa](https://github.com/riiswa))\\n- Update User Config Options Doc\\n [\\\\#4506](https://github.com/scalameta/metals/pull/4506)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Fix issues within the community suite for Scala 2\\n [\\\\#4509](https://github.com/scalameta/metals/pull/4509)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: soft-keyword-matching autoimports in Scala 3\\n [\\\\#4491](https://github.com/scalameta/metals/pull/4491)\\n ([susliko](https://github.com/susliko))\\n- chore: Add support for Scala 2.13.10\\n [\\\\#4503](https://github.com/scalameta/metals/pull/4503)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update undertow-core from 2.2.19.Final to 2.2.20.Final\\n [\\\\#4504](https://github.com/scalameta/metals/pull/4504)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Move calculating description, kind and label to CompletionValue\\n [\\\\#4500](https://github.com/scalameta/metals/pull/4500)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show Scala completions first in ScalaCli using directives\\n [\\\\#4499](https://github.com/scalameta/metals/pull/4499)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Properly extract multiline ranges\\n [\\\\#4501](https://github.com/scalameta/metals/pull/4501)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Connect automatically when `.bsp` folder shows up\\n [\\\\#4486](https://github.com/scalameta/metals/pull/4486)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.15.0 to 0.16.0\\n [\\\\#4493](https://github.com/scalameta/metals/pull/4493)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Welcome Jakub to the team\\n [\\\\#4485](https://github.com/scalameta/metals/pull/4485)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.7.1 to 1.7.2\\n [\\\\#4494](https://github.com/scalameta/metals/pull/4494)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: Add completions for `//> using lib @@` in Scala CLI\\n [\\\\#4417](https://github.com/scalameta/metals/pull/4417)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Clean diagnostics after importing a script\\n [\\\\#4483](https://github.com/scalameta/metals/pull/4483)\\n ([tgodzik](https://github.com/tgodzik))\\n- Proposal: New Code Action for Converting sbt Style to mill style Deps\\n [\\\\#4465](https://github.com/scalameta/metals/pull/4465)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Add release notes for v0.11.9\\n [\\\\#4469](https://github.com/scalameta/metals/pull/4469)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/10/06/aluminium","metadata":{"permalink":"/metals/blog/2022/10/06/aluminium","source":"@site/blog/2022-10-06-aluminium.md","title":"Metals v0.11.9 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.9, which brings some of the","date":"2022-10-06T00:00:00.000Z","formattedDate":"October 6, 2022","tags":[],"readingTime":17.575,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.9 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"},"nextItem":{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.9, which brings some of the\\nfinal missing features in Scala 3 and greatly improves its performance. We also\\nhad quite a number of contributions in this release and I wanted to thank all\\nthe new contributors for their great work!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release203
Merged PRs167
Contributors14
Closed issues37
New features21
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/53?closed=1](https://github.com/scalameta/metals/milestone/53?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Adjust mismatched type](#adjust-mismatched-type)\\n- [[Scala 3] Ammonite completions](#ammonite-completions-for-scala-3)\\n- [Better Scala CLI support](#better-scala-cli-support)\\n- [[Scala 3] Auto import symbols in string interpolation](#scala-3-auto-import-symbols-in-string-interpolation)\\n- [[Scala 3] Add autofill named arguments completion](#scala-3-add-autofill-named-arguments-completion)\\n- [[Scala 3] Improved performance](#scala-3-improved-performance)\\n- [Make document highlight more reliable](#make-documenthighlight-more-reliable)\\n- [[Scala 3] Add completions for case and match](#scala-3-add-completions-for-case-and-match)\\n- [\\"Extract Method\\" code action](#extract-method-code-action)\\n- [[Scala 2] Add Completions for ivy Imports in Ammonite scripts and worksheets](#scala-2-add-completions-for-ivy-imports-in-ammonite-scripts-and-worksheets)\\n- [Call hierarchy](#call-hierarchy)\\n- [[Scala 3] Enable fewer braces for Scala 3 nightly versions](#scala-3-enable-fewer-braces-for-scala-3-nightly-versions)\\n- Add support for Scala 3.2.0, 2.12.17, 2.13.9 and RC versions of 3.2.1\\n\\n## Adjust mismatched type\\n\\nUntil recently it was only possible to add the type to a definition that didn\'t\\nhave it defined. However, it\'s also quite common for users to change the\\nreturned type of the body of a function and in that case any adjustments had to\\nbe made manually. Now, whenever the compiler shows type mismatch error Metals\\nshould be able to adjust the type for you automatically.\\n\\n![adjust-type](https://i.imgur.com/R7z7JNf.gif)\\n\\nAs this feature is quite new and might still require some tinkering, please\\nreport any issues you find.\\n\\n## Ammonite completions for Scala 3\\n\\nUntil recently Metals was only offering `$file` completions for Scala 2, but\\nthanks to [zmerr](https://github.com/zmerr) it\'s also possible to get them in\\nScala 3.\\n\\nFor more details take a look at the previous\\n[announcement](https://scalameta.org/metals/blog/2020/07/01/lithium/#ammonite-support)\\n\\n## Better Scala CLI support\\n\\n[ScalaCLI](https://scala-cli.virtuslab.org/) is a tool developed by VirtusLab in\\nan effort to create a simple experience of using Scala for all its users. It has\\na lot of nice features, but one of the main ones is\\n[the possibility to use it in scripts](https://scala-cli.virtuslab.org/docs/guides/scripts).\\nThanks to [alexarchambault](https://github.com/alexarchambault), who is also\\nleading the effort on ScalaCLI, Metals now supports ScalaCLI scripts along with\\nthe Ammonite ones.\\n\\n![scala-cli](https://i.imgur.com/ghR1Src.gif)\\n\\nWhenever, Metals will be opened on a file with `*.sc` extension (but not\\n`*.worksheet.sc`), users will be prompted to choose which tool they want to use\\nfor the script.\\n\\nSimilar to Ammonite, support for it can also be turned on manually with\\n`Metals: Start Scala CLI BSP server` and stopped with\\n`Metals: Stop Scala CLI BSP server`. These commands can be used for more fine\\ngrained control when to turn on or of scripting support. This is especially\\nuseful since ScalaCLI supports will run an additional BSP server running\\nunderneath and that can take up some additional resources.\\n\\nIf the script is in a dedicated folder, by default we will treat all the scripts\\nand scala files in that directory as ones that can be used together. So you\\nwould be able to import method and classes from those files. However, if the\\nscript is contained within a directory that also contains other sources, that\\nscript will be treated as a standalone one in order to avoid flaky compilation\\nerrors coming from normal files in the workspace.\\n\\n## [Scala 3] Auto import symbols in string interpolation\\n\\nPreviously, the only suggestions for string interpolations were coming from the\\ncurrently available symbols in scope. This meant that if you wanted to import\\nsomething from another package, you would need to do it manually.\\n\\nThis problem is now resolved. Users can easily get such symbols automatically\\nimported, which creates a seamless more workflow.\\n\\n![auto-import](https://i.imgur.com/COKtciq.gif)\\n\\nThese completions will also allow you to automatically import extension methods.\\n\\nThe feature is already available for Scala 2.\\n\\n## [Scala 3] Add autofill named arguments completion\\n\\nThanks to great work by [jkciesluk](https://github.com/jkciesluk) Scala 3\\ncompletions will also show an `autofill all` completion item, which will try to\\nfill in all the arguments of the current method using the symbol in scope or\\nwith `???` if no symbols match. Users can later tabulate over the different\\nproposal to adjust them.\\n\\n![auto-fill](https://i.imgur.com/tZTKnSw.gif)\\n\\nThe feature was already available for Scala 2.\\n\\n## [Scala 3] Improved performance\\n\\nWe\'ve noticed that previous versions of Metals could cause CPU spikes for anyone\\nusing Scala 3. To address this, we managed to include a couple performance\\nimprovements in this release. This will improve several editor features such as\\nhover, completions, document highlight, and some code actions.\\n\\nFor more details, see the pull requests.\\n\\n- [Don\'t run InteractiveDriver.run if the content didn\'t \\"change\\" by tanishiking \xb7 Pull Request #4225 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/4225)\\n- [fix: \\\\[Scala3\\\\] Don\'t compute docs on textDocument/completion by tanishiking \xb7 Pull Request #4396 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/4396)\\n\\nThanks to [tanishiking](https://github.com/tanishiking)) for investigation and\\nhis great fixes.\\n\\n## Make documentHighlight more reliable\\n\\nDocument highlight allows users to see all occurrences of the symbol currently\\nunder the cursor in a single file. This was one of the first\\n[features](https://scalameta.org/metals/blog/2019/04/12/mercury#document-highlight)\\ndeveloped by me for Metals and previously it would only work in a fully compiled\\nworkspace. This means that if users have errors, some of the occurrences might\\nnot be highlighted.\\n\\nSince the feature only works within a single file, this was a perfect candidate\\nfor turning into a more interactive feature, which would use the Scala\\npresentation compiler already used in such features as hovers or completions.\\nThanks to this change document highlight should work even if your code doesn\'t\\ncompile.\\n\\n![document-highlight](https://i.imgur.com/0uhc9P5.gif)\\n\\nThis should also make it easier for us to fix any issue that might pop up and it\\nhas already improved support for locally defined classes.\\n\\n## [Scala 3] Add completions for case and match\\n\\nMetals provides additional completions whenever users write match clauses to\\nautomatically fill either a single case with one of the possible subtypes or an\\nexhaustive completion with all of them. This was previously not available for\\nScala 3, but thanks to ([jkciesluk](https://github.com/jkciesluk)) users can now\\nbenefit from this feature in their Scala 3 codebases.\\n\\n![exhaustive](https://i.imgur.com/6wynpRq.gif)\\n\\nThe Scala 3 version will additionally work with the Scala enums as well as offer\\ncompletions for simple cases with one possible type, which might be useful to\\naccess values inside it. Moreover, exhaustive completions will also be offered\\nwithin partial function, for example in a `.map{}`.\\n\\n## Extract Method code action\\n\\nAnother great feature contributed by [jkciesluk](https://github.com/jkciesluk)\\nis the possibility to extract arbitrary parts of code into a separate function.\\nIt will also add any values unavailable in the selected scope as parameters in\\nthe new function.\\n\\n![extract-method](https://i.imgur.com/VMXLKPg.gif)\\n\\nThe code action will currently not turn any methods or classes into parameters\\neven if they is not available in the scope into which the code is being\\nextracted.\\n\\n## [Scala 2] Add Completions for ivy Imports in Ammonite scripts and worksheets\\n\\nBoth in worksheets and in ammonite scripts you can add dependencies using\\nimports such as:\\n\\n```scala\\nimport $$ivy.`io.circe::circe-core:0.14.2`\\n```\\n\\nwhich will bring in the `circe-core` dependency. Starting in this version it\\nwill be possible to auto complete group ids, artifact names and their versions.\\n\\n![import-dep](https://i.imgur.com/TWgIIVp.gif)\\n\\nThanks to [LaurenceWarne](https://github.com/LaurenceWarne) for the great\\nfeature!\\n\\nWe are also working on enabling this feature in Mill, sbt, ScalaCLI and later\\nfor Scala 3.\\n\\n## Call hierarchy\\n\\nThis release brings about\\n[call hierarchy support](https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/#textDocument_prepareCallHierarchy),\\nwhich is an LSP feature that enables users to see which method are invoked in a\\ncurrent method or which methods invoke the current one.\\n\\n![call-hierarchy-dep](https://i.imgur.com/1lTYFmu.gif)\\n\\nThis non trivial feature was brought to you by\\n[riiswa](https://github.com/riiswa), thanks for the great work!\\n\\nA current limitation is that it will only work for methods within the workspace.\\n\\n## [Scala 3] Enable fewer braces for Scala 3 nightly versions\\n\\nFewer braces is an experimental Scala 3 feature that enables users to drop\\nbraces in more places than the default, for example in function invocations.\\nPreviously, Metals would show it as error, but since this version fewer braces\\noption will be recognized by default for the Scala 3 nightly versions.\\n\\nRead more about fewer braces\\n[here](https://docs.scala-lang.org/scala3/reference/experimental/fewer-braces.html).\\n\\nMore work is required to enable auto formatting with this option and will be\\nworked on in the near future.\\n\\n## Various\\n\\nThis release also features a number of smaller fixes and improvements, some of\\nthe user facing ones are mentioned here:\\n\\n- feature: Include anon classes (`val x = new Trait {}`) in \'find all\\n implementations\' [kpodsiad](https://github.com/kpodsiad)\\n- feature: Implement basic Text Explorer support for scalatest\\n [kpodsiad](https://github.com/kpodsiad) and allow running single tests.\\n- feature: Better mill-bsp semanticdb support\\n [ckipp01](https://github.com/ckipp01)\\n- feature: Allow extract value code action when using `new` keyword\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Provide ConvertToNamedArg code action for constructor invocations\\n [jkciesluk](https://github.com/jkciesluk))\\n- feature: Add Analyze Stacktrace command to metals menu\\n- feature: Improved completions in type positions\\n- feature: Add completion for extends keyword after classes/traits/objects/enums\\n- improvement: Don\'t show misconfigured test message\\n- bugfix: Add backticks where needed in \\"convert to named arguments\\" [kubukoz](https://github.com/kubukoz)\\n- bugfix: Try to download semanticdb even if it might not be supported\\n- bugfix: Properly write constant types in signatures\\n- bugfix: Allow to add jvmopts and env variables when running tests\\n- bugfix: Compile project on file deletion [PeuTit](https://github.com/PeuTit)\\n- bugfix: Limit running multiple import build\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Request import build after restart even if notification was dismissed\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Properly cancel all current compilations\\n- bugfix: Remove worksheet diagnostics on close\\n- bugfix: [Scala 3] Don\'t throw exception if template ends at end of file\\n- bugfix: [Scala 2] Fix argument completions in nested method invocation\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 2] Fix signature help when named params are present\\n- bugfix: Don\'t show preparing PC message when in fact it was already downloaded\\n- bugfix: Properly restart worksheet presentation compiler to show the newest\\n completions from the workspace after the compilation finished\\n- bugfix: [Scala 3] Fix implement-all members for anonymous class\\n [tanishiking](https://github.com/tanishiking)\\n- bugfix: Allow to run/debug in ScalaCli when it was started from Metals without\\n `.bsp`\\n- bugfix: Show both companion object and case class when searching of definition\\n for synthetic apply\\n- bugfix: [Scala 3] Properly filter symbols if they don\'t exist in the code\\n anymore [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: don\'t break using-directives by an auto-import for `.sc` in scala-cli\\n [dos65](https://github.com/dos65) For a full list take a look at the list of\\n PRs below.\\n- bugfix: [Scala 3] - provide a correct defitions for symbols from\\n `stdLibPatched` package [dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.8..v0.11.9\\nTomasz Godzik\\nWaris Radji\\nRikito Taniguchi\\nVadim Chelyshov\\nscalameta-bot\\nJakub Ciesluk\\nJakub Koz\u0142owski\\nKamil Podsiad\u0142o\\nChris Kipp\\nLaurence Warne\\nTitouan\\nAlexandre Archambault\\nAnton\\nIna Zimmer\\ndependabot[bot]\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.9](https://github.com/scalameta/metals/tree/v0.11.9) (2022-10-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.8...v0.11.9)\\n\\n**Merged pull requests:**\\n\\n- chore: Update Bloop to 1.5.4\\n [\\\\#4480](https://github.com/scalameta/metals/pull/4480)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly import extension methods in string interpolation\\n [\\\\#4479](https://github.com/scalameta/metals/pull/4479)\\n ([tgodzik](https://github.com/tgodzik))\\n- Import enum owner in case comp and in java enum match\\n [\\\\#4478](https://github.com/scalameta/metals/pull/4478)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix: Remove multiple enum owner imports\\n [\\\\#4477](https://github.com/scalameta/metals/pull/4477)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Always specify enum owner\\n [\\\\#4475](https://github.com/scalameta/metals/pull/4475)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add backticks where needed in \\"convert to named arguments\\"\\n [\\\\#4470](https://github.com/scalameta/metals/pull/4470)\\n ([kubukoz](https://github.com/kubukoz))\\n- build(deps): Update ammonite-util from 2.5.4-33-0af04a5b to 2.5.4-34-1c7b3c38\\n [\\\\#4472](https://github.com/scalameta/metals/pull/4472)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix issues when renaming variables\\n [\\\\#4458](https://github.com/scalameta/metals/pull/4468)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Enable fewer braces for Scala 3 nightly versions\\n [\\\\#4458](https://github.com/scalameta/metals/pull/4458)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.13 to 4.6.0\\n [\\\\#4463](https://github.com/scalameta/metals/pull/4463)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.14 to 0.1.15\\n [\\\\#4464](https://github.com/scalameta/metals/pull/4464)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.3.1 to 9.4.0\\n [\\\\#4460](https://github.com/scalameta/metals/pull/4460)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, sbt-mdoc from 2.3.4 to 2.3.5\\n [\\\\#4461](https://github.com/scalameta/metals/pull/4461)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc-interfaces from 2.3.3 to 2.3.5\\n [\\\\#4462](https://github.com/scalameta/metals/pull/4462)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Remove old workaround\\n [\\\\#4459](https://github.com/scalameta/metals/pull/4459)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: bunch of fixes for ScalaCli scripts import\\n [\\\\#4455](https://github.com/scalameta/metals/pull/4455)\\n ([dos65](https://github.com/dos65))\\n- refactor: Don\'t log \\"navigation doesn\'t work\\" if fallback to compiler based\\n navigation [\\\\#4457](https://github.com/scalameta/metals/pull/4457)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Don\'t show misconfigured test message\\n [\\\\#4454](https://github.com/scalameta/metals/pull/4454)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Bloop to newest version\\n [\\\\#4453](https://github.com/scalameta/metals/pull/4453)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Try to download semanticdb even if it might not be supported\\n [\\\\#4450](https://github.com/scalameta/metals/pull/4450)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix document highlight in for comprehensions\\n [\\\\#4448](https://github.com/scalameta/metals/pull/4448)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: [scala3] findSuffix to return a data structure so we can tell what\\n kinds of suffix will be added to the edit.\\n [\\\\#4412](https://github.com/scalameta/metals/pull/4412)\\n ([tanishiking](https://github.com/tanishiking))\\n- Offer exhaustive completions for map and other methods\\n [\\\\#4415](https://github.com/scalameta/metals/pull/4415)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add Ammonite completions to worksheets\\n [\\\\#4443](https://github.com/scalameta/metals/pull/4443)\\n ([tgodzik](https://github.com/tgodzik))\\n- bufix: Properly write constant types in signatures\\n [\\\\#4442](https://github.com/scalameta/metals/pull/4442)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Allow to run tests with Scala nightlies\\n [\\\\#4435](https://github.com/scalameta/metals/pull/4435)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Scala version used by sbt\\n [\\\\#4440](https://github.com/scalameta/metals/pull/4440)\\n ([tgodzik](https://github.com/tgodzik))\\n- move isImportInProgress to runUnconditionally\\n [\\\\#4439](https://github.com/scalameta/metals/pull/4439)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Auto-Import After Ammonite Headers\\n [\\\\#4436](https://github.com/scalameta/metals/pull/4436)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- Don\'t show private members in case completions\\n [\\\\#4431](https://github.com/scalameta/metals/pull/4431)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafix-interfaces from 0.10.2 to 0.10.3\\n [\\\\#4437](https://github.com/scalameta/metals/pull/4437)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.3 to 2.3.4\\n [\\\\#4438](https://github.com/scalameta/metals/pull/4438)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Properly cancel all current compilations\\n [\\\\#4421](https://github.com/scalameta/metals/pull/4421)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Bump Scala versions for Ammonite\\n [\\\\#4433](https://github.com/scalameta/metals/pull/4433)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove all cancallables on finish\\n [\\\\#4432](https://github.com/scalameta/metals/pull/4432)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala 2.13.9 [\\\\#4414](https://github.com/scalameta/metals/pull/4414)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update flyway-core from 9.3.0 to 9.3.1\\n [\\\\#4427](https://github.com/scalameta/metals/pull/4427)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M6 to 2.1.0-M7\\n [\\\\#4426](https://github.com/scalameta/metals/pull/4426)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-22-4a9e6989 to 2.5.4-33-0af04a5b\\n [\\\\#4425](https://github.com/scalameta/metals/pull/4425)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.2 to 0.10.3\\n [\\\\#4424](https://github.com/scalameta/metals/pull/4424)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- ci(Mergify): Don\'t check the number of check-success\\n [\\\\#4429](https://github.com/scalameta/metals/pull/4429)\\n ([tanishiking](https://github.com/tanishiking))\\n- feat: extends keyword completion\\n [\\\\#4416](https://github.com/scalameta/metals/pull/4416)\\n ([tanishiking](https://github.com/tanishiking))\\n- refactor: Change code action ids sets to val\\n [\\\\#4418](https://github.com/scalameta/metals/pull/4418)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Make it easier to define commands to run in code actions\\n [\\\\#4413](https://github.com/scalameta/metals/pull/4413)\\n ([tgodzik](https://github.com/tgodzik))\\n- Feature/call hierarchy [\\\\#4115](https://github.com/scalameta/metals/pull/4115)\\n ([riiswa](https://github.com/riiswa))\\n- bugfix Try to fix flaky import tests\\n [\\\\#4408](https://github.com/scalameta/metals/pull/4408)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalafix-interfaces from 0.10.1 to 0.10.2\\n [\\\\#4400](https://github.com/scalameta/metals/pull/4400)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- ci(Mergify): configuration update / use squash\\n [\\\\#4409](https://github.com/scalameta/metals/pull/4409)\\n ([tanishiking](https://github.com/tanishiking))\\n- ci(Mergify): configuration update\\n [\\\\#4407](https://github.com/scalameta/metals/pull/4407)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: Scala3 properly inverse semanticdb type symbol\\n [\\\\#4383](https://github.com/scalameta/metals/pull/4383)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Allow to add jvmopts and env variables when running tests\\n [\\\\#4393](https://github.com/scalameta/metals/pull/4393)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ivy Completions Dash Fix\\n [\\\\#4405](https://github.com/scalameta/metals/pull/4405)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- ci(Mergify): configuration update\\n [\\\\#4404](https://github.com/scalameta/metals/pull/4404)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.12 to 0.1.14\\n [\\\\#4403](https://github.com/scalameta/metals/pull/4403)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update xnio-nio from 3.8.7.Final to 3.8.8.Final\\n [\\\\#4401](https://github.com/scalameta/metals/pull/4401)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: [Scala3] Don\'t compute docs on textDocument/completion\\n [\\\\#4396](https://github.com/scalameta/metals/pull/4396)\\n ([tanishiking](https://github.com/tanishiking))\\n- add 3.2.1-RC2 support [\\\\#4392](https://github.com/scalameta/metals/pull/4392)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Fix document highlight for type projections and bind\\n [\\\\#4394](https://github.com/scalameta/metals/pull/4394)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Revert ammonite to 2.5.4-22-4a9e6989\\n [\\\\#4395](https://github.com/scalameta/metals/pull/4395)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix tests using circe for completions\\n [\\\\#4391](https://github.com/scalameta/metals/pull/4391)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.8 to 1.0.9\\n [\\\\#4390](https://github.com/scalameta/metals/pull/4390)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-22-4a9e6989 to 2.5.4-26-9cd15abe\\n [\\\\#4388](https://github.com/scalameta/metals/pull/4388)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Always check if import is in progress\\n [\\\\#4384](https://github.com/scalameta/metals/pull/4384)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.1 to 0.10.2\\n [\\\\#4387](https://github.com/scalameta/metals/pull/4387)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: rename CompletionProvider\\n [\\\\#4385](https://github.com/scalameta/metals/pull/4385)\\n ([dos65](https://github.com/dos65))\\n- chore: Add support for Scala 2.12.17\\n [\\\\#4382](https://github.com/scalameta/metals/pull/4382)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add cross tests for pattern only case completions, fix for typed case\\n completions [\\\\#4356](https://github.com/scalameta/metals/pull/4356)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: use proper semanticdb document for `.sc` in scala-cli\\n [\\\\#4359](https://github.com/scalameta/metals/pull/4359)\\n ([dos65](https://github.com/dos65))\\n- Add Highlighting and Fix Formatting for Emacs Snippets in Documentation\\n [\\\\#4381](https://github.com/scalameta/metals/pull/4381)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- improvement: Change string actions to RefactorRewrite\\n [\\\\#4380](https://github.com/scalameta/metals/pull/4380)\\n ([tgodzik](https://github.com/tgodzik))\\n- Compile project on file deletion\\n [\\\\#4377](https://github.com/scalameta/metals/pull/4377)\\n ([PeuTit](https://github.com/PeuTit))\\n- Add Completions for ivy Imports (Ammonite)\\n [\\\\#4376](https://github.com/scalameta/metals/pull/4376)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- fix: scala3 - provide a correct defitions for symbols from `stdLibPatched`\\n package [\\\\#4370](https://github.com/scalameta/metals/pull/4370)\\n ([dos65](https://github.com/dos65))\\n- Add Extract Method code action\\n [\\\\#4164](https://github.com/scalameta/metals/pull/4164)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Request import build after restart\\n [\\\\#4373](https://github.com/scalameta/metals/pull/4373)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Limit running multiple import build\\n [\\\\#4375](https://github.com/scalameta/metals/pull/4375)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update flyway-core from 9.2.3 to 9.3.0\\n [\\\\#4371](https://github.com/scalameta/metals/pull/4371)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-runner from 0.3.3 to 0.4.0\\n [\\\\#4363](https://github.com/scalameta/metals/pull/4363)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Detect pull_request label event for auto-approve\\n [\\\\#4365](https://github.com/scalameta/metals/pull/4365)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update ammonite-util from 2.5.4-19-cd76521f to 2.5.4-22-4a9e6989\\n [\\\\#4362](https://github.com/scalameta/metals/pull/4362)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.2.2 to 9.2.3\\n [\\\\#4364](https://github.com/scalameta/metals/pull/4364)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: type completions additonal fixes\\n [\\\\#4234](https://github.com/scalameta/metals/pull/4234)\\n ([dos65](https://github.com/dos65))\\n- Change adding space after case completions\\n [\\\\#4353](https://github.com/scalameta/metals/pull/4353)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update qdox from 2.0.1 to 2.0.2\\n [\\\\#4344](https://github.com/scalameta/metals/pull/4344)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Auto approve PR by scalameta-bot\\n [\\\\#4346](https://github.com/scalameta/metals/pull/4346)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix case completions for enum with params\\n [\\\\#4354](https://github.com/scalameta/metals/pull/4354)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Add case completions for single case classes in Scala3\\n [\\\\#4351](https://github.com/scalameta/metals/pull/4351)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Enable enum completions in pattern matching\\n [\\\\#4349](https://github.com/scalameta/metals/pull/4349)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add completions for case and match for scala 3\\n [\\\\#4229](https://github.com/scalameta/metals/pull/4229)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: add scala 3.2.1-RC1\\n [\\\\#4347](https://github.com/scalameta/metals/pull/4347)\\n ([dos65](https://github.com/dos65))\\n- Replace toLSP occurences by toLsp.\\n [\\\\#4331](https://github.com/scalameta/metals/pull/4331)\\n ([riiswa](https://github.com/riiswa))\\n- build(deps): Update flyway-core from 9.1.6 to 9.2.2\\n [\\\\#4345](https://github.com/scalameta/metals/pull/4345)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Add labels to scala-steward PRs\\n [\\\\#4337](https://github.com/scalameta/metals/pull/4337)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Add Analyze Stacktrace command to metals menu\\n [\\\\#4340](https://github.com/scalameta/metals/pull/4340)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala-steward cron (again)\\n [\\\\#4342](https://github.com/scalameta/metals/pull/4342)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: scala-steward cron\\n [\\\\#4336](https://github.com/scalameta/metals/pull/4336)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix wrong condition for logging in CodeActionBuilder\\n [\\\\#4334](https://github.com/scalameta/metals/pull/4334)\\n ([tgodzik](https://github.com/tgodzik))\\n- [skip ci] bugfix: Fix Scala Steward cron\\n [\\\\#4335](https://github.com/scalameta/metals/pull/4335)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix ConvertToNamedArg for constructor invocations\\n [\\\\#4313](https://github.com/scalameta/metals/pull/4313)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Use PC for documentHighlight\\n [\\\\#4307](https://github.com/scalameta/metals/pull/4307)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Always set changes or document changes\\n [\\\\#4332](https://github.com/scalameta/metals/pull/4332)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: update scala-steward configs (run more frequently and limit number\\n of PRs) [\\\\#4329](https://github.com/scalameta/metals/pull/4329)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.2 to 3.10.3\\n [\\\\#4320](https://github.com/scalameta/metals/pull/4320)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump coursier/setup-action from 1.2.0 to 1.2.1\\n [\\\\#4326](https://github.com/scalameta/metals/pull/4326)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- workflows: specify java version\\n [\\\\#4327](https://github.com/scalameta/metals/pull/4327)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update mill-contrib-testng from 0.10.5 to 0.10.7\\n [\\\\#4319](https://github.com/scalameta/metals/pull/4319)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.1.3 to 9.1.6\\n [\\\\#4321](https://github.com/scalameta/metals/pull/4321)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.15.2 to 1.15.3\\n [\\\\#4322](https://github.com/scalameta/metals/pull/4322)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.11 to 4.5.13\\n [\\\\#4323](https://github.com/scalameta/metals/pull/4323)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.11 to 0.1.12\\n [\\\\#4324](https://github.com/scalameta/metals/pull/4324)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-13-1ebd00a6 to 2.5.4-19-cd76521f\\n [\\\\#4318](https://github.com/scalameta/metals/pull/4318)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update metaconfig-core from 0.11.0 to 0.11.1\\n [\\\\#4317](https://github.com/scalameta/metals/pull/4317)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.2.0\\n [\\\\#4315](https://github.com/scalameta/metals/pull/4315)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix extract value for `new` keyword\\n [\\\\#4314](https://github.com/scalameta/metals/pull/4314)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Fix nightlies after recent changes\\n [\\\\#4312](https://github.com/scalameta/metals/pull/4312)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: check_scala3_nightly - switch from bash on Scala\\n [\\\\#4311](https://github.com/scalameta/metals/pull/4311)\\n ([dos65](https://github.com/dos65))\\n- Issue#4154: Add builder for lsp code actions\\n [\\\\#4302](https://github.com/scalameta/metals/pull/4302)\\n ([PeuTit](https://github.com/PeuTit))\\n- update TestGroups [\\\\#4310](https://github.com/scalameta/metals/pull/4310)\\n ([dos65](https://github.com/dos65))\\n- chore: mention Scala CLi in new file provider\\n [\\\\#4306](https://github.com/scalameta/metals/pull/4306)\\n ([dos65](https://github.com/dos65))\\n- fix: don\'t break using-directives by an auto-import for `.sc` in scala-cli\\n [\\\\#4291](https://github.com/scalameta/metals/pull/4291)\\n ([dos65](https://github.com/dos65))\\n- fix: Fix docs copy paste error.\\n [\\\\#4305](https://github.com/scalameta/metals/pull/4305)\\n ([antosha417](https://github.com/antosha417))\\n- chore: mark buildTarget/javacOptions as unsupported for ammonite\\n [\\\\#4303](https://github.com/scalameta/metals/pull/4303)\\n ([dos65](https://github.com/dos65))\\n- refactor: Do not index extension methods in workspaceSymbolIndex\\n [\\\\#4300](https://github.com/scalameta/metals/pull/4300)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: reuse code actions kinds for all code actions\\n [\\\\#4299](https://github.com/scalameta/metals/pull/4299)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- add isStale filter in IndexedContext\\n [\\\\#4298](https://github.com/scalameta/metals/pull/4298)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Find correct definition of apply when using case classes\\n [\\\\#4296](https://github.com/scalameta/metals/pull/4296)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: better mill-bsp semanticdb support\\n [\\\\#4295](https://github.com/scalameta/metals/pull/4295)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Automatically add extension methods in string interpolation\\n [\\\\#4292](https://github.com/scalameta/metals/pull/4292)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: improve scalatest style inferring\\n [\\\\#4293](https://github.com/scalameta/metals/pull/4293)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feat: implement basic Text Explorer support for scalatest\\n [\\\\#4281](https://github.com/scalameta/metals/pull/4281)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Allow to run/debug in ScalaCli when started from Metals\\n [\\\\#4289](https://github.com/scalameta/metals/pull/4289)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Adjust ScalaCLI version detection to new changes\\n [\\\\#4288](https://github.com/scalameta/metals/pull/4288)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: fix implement-all members for anonymous class\\n [\\\\#4284](https://github.com/scalameta/metals/pull/4284)\\n ([tanishiking](https://github.com/tanishiking))\\n- Bump LSP4j to 0.15.0 that adds notebook support\\n [\\\\#4282](https://github.com/scalameta/metals/pull/4282)\\n ([tanishiking](https://github.com/tanishiking))\\n- ci: fix check_scala3_nightly workflow\\n [\\\\#4280](https://github.com/scalameta/metals/pull/4280)\\n ([dos65](https://github.com/dos65))\\n- Don\'t run InteractiveDriver.run if the content didn\'t \\"change\\"\\n [\\\\#4225](https://github.com/scalameta/metals/pull/4225)\\n ([tanishiking](https://github.com/tanishiking))\\n- add Scala 3.2.0-RC4 [\\\\#4277](https://github.com/scalameta/metals/pull/4277)\\n ([dos65](https://github.com/dos65))\\n- Fix mtags release [\\\\#4279](https://github.com/scalameta/metals/pull/4279)\\n ([dos65](https://github.com/dos65))\\n- Better title for `extract value` code action\\n [\\\\#4274](https://github.com/scalameta/metals/pull/4274)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- upgrade bloop to 1.5.3-28-373a64c9\\n [\\\\#4275](https://github.com/scalameta/metals/pull/4275)\\n ([dos65](https://github.com/dos65))\\n- Add autofill named arguments completion for scala3\\n [\\\\#4248](https://github.com/scalameta/metals/pull/4248)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: [Scala 3] Auto import symbols in string interpolation\\n [\\\\#4273](https://github.com/scalameta/metals/pull/4273)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly restart worksheet presentation compiler\\n [\\\\#4270](https://github.com/scalameta/metals/pull/4270)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: release 8 for mtag-interfaces\\n [\\\\#4269](https://github.com/scalameta/metals/pull/4269)\\n ([dos65](https://github.com/dos65))\\n- fix: specify `--release 8` flags\\n [\\\\#4267](https://github.com/scalameta/metals/pull/4267)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update mdoc-interfaces from 2.3.2 to 2.3.3\\n [\\\\#4264](https://github.com/scalameta/metals/pull/4264)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.9 to 0.1.11\\n [\\\\#4266](https://github.com/scalameta/metals/pull/4266)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.14.0 to 0.15.0\\n [\\\\#4262](https://github.com/scalameta/metals/pull/4262)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.0.4 to 9.1.3\\n [\\\\#4263](https://github.com/scalameta/metals/pull/4263)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update undertow-core from 2.2.18.Final to 2.2.19.Final\\n [\\\\#4261](https://github.com/scalameta/metals/pull/4261)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update metaconfig-core from 0.10.0 to 0.11.0\\n [\\\\#4259](https://github.com/scalameta/metals/pull/4259)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.1 to 3.10.2\\n [\\\\#4260](https://github.com/scalameta/metals/pull/4260)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Don\'t show preparing PC message\\n [\\\\#4257](https://github.com/scalameta/metals/pull/4257)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: include the companion object name in code action title\\n [\\\\#4258](https://github.com/scalameta/metals/pull/4258)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Check if the target can be compiled\\n [\\\\#4256](https://github.com/scalameta/metals/pull/4256)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert \\"[Scala 3] Revert type completions feature (#4236)\\"\\n [\\\\#4237](https://github.com/scalameta/metals/pull/4237)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add better Scala CLI support\\n [\\\\#3790](https://github.com/scalameta/metals/pull/3790)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- bugfix: Fix signature help when named params are present\\n [\\\\#4251](https://github.com/scalameta/metals/pull/4251)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix ArgCompletions for nested apply\\n [\\\\#4247](https://github.com/scalameta/metals/pull/4247)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- adding AmmoniteFileCompletions for scala 3\\n [\\\\#4220](https://github.com/scalameta/metals/pull/4220)\\n ([vzmerr](https://github.com/vzmerr))\\n- bugfix: Don\'t throw exception if template ends at EOF\\n [\\\\#4245](https://github.com/scalameta/metals/pull/4245)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Adjust type if mismatch\\n [\\\\#4218](https://github.com/scalameta/metals/pull/4218)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove worksheet diagnostics on close\\n [\\\\#4233](https://github.com/scalameta/metals/pull/4233)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): migrate to actions/java to use built-in sbt caching\\n [\\\\#4221](https://github.com/scalameta/metals/pull/4221)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: include anon classes (val x = new Trait {}) in \'find all\\n implementations\' [\\\\#4231](https://github.com/scalameta/metals/pull/4231)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: fix release note metadata\\n [\\\\#4241](https://github.com/scalameta/metals/pull/4241)\\n ([tanishiking](https://github.com/tanishiking))\\n- release: Add release notes for Metals 0.11.8\\n [\\\\#4214](https://github.com/scalameta/metals/pull/4214)\\n ([tanishiking](https://github.com/tanishiking))"},{"id":"/2022/08/10/aluminium","metadata":{"permalink":"/metals/blog/2022/08/10/aluminium","source":"@site/blog/2022-08-10-aluminium.md","title":"Metals v0.11.8 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.8, bringing a number of improvements for both Scala 2 and Scala 3.","date":"2022-08-10T00:00:00.000Z","formattedDate":"August 10, 2022","tags":[],"readingTime":6.695,"hasTruncateMarker":false,"authors":[{"name":"Rikito Taniguchi","url":"https://twitter.com/tanishiking","imageURL":"https://github.com/tanishiking.png"}],"frontMatter":{"author":"Rikito Taniguchi","title":"Metals v0.11.8 - Aluminium","authorURL":"https://twitter.com/tanishiking","authorImageURL":"https://github.com/tanishiking.png"},"prevItem":{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"},"nextItem":{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.8, bringing a number of improvements for both Scala 2 and Scala 3.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release84
Merged PRs80
Contributors15
Closed issues22
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/52?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Auto import and completion for extension methods\\n- [Scala 3] Convert to Named Parameters code action\\n- [Scala 3] Scaladoc Completion for Scala3\\n- [Scala 3] Completions in string interpolation\\n- [Scala 2] Automatic import of types in string interpolations\\n- Code Action documentation\\n- Support of Scala 3.2.0-RC3, Scala 3.2.0-RC2\\n\\nand a lot of bugfixes!\\n\\n## [Scala 3] Auto import and completion for extension methods\\n\\nYou might know that Scala 3 has introduced `extension methods` that allow defining new methods to your existing types.\\n\\nPreviously, Metals couldn\'t auto-complete extension methods; so developers had to find an appropriate extension method from their workspace and manually import it. But, this was time-consuming and not always beginner friendly.\\n\\nNow, Metals provides auto-completion for extension methods and automatically imports them!\\n\\n![extension-methods](https://i.imgur.com/EAbVHeH.gif)\\n\\n## [Scala 3] Convert to Named Parameters code action\\n\\n[Metals 0.11.7 added `ConvertToNamedParameters` code action to Scala2](https://scalameta.org/metals/blog/2022/07/04/aluminium#scala-2-add-converttonamedarguments-code-action).\\n\\nThanks to the contribution by [@jkciesluk](https://github.com/jkciesluk), this feature is now available for Scala 3!\\n\\n![convert-to-named](https://i.imgur.com/9i7MWoQ.gif)\\n\\n## [Scala 3] Scaladoc completion\\n\\nMetals now supports offering Scaladoc completions in Scala 3. When typing `/**` you get an option to auto-complete a scaladoc template for methods, classes, etc.!\\n\\n![scala-doc-completion](https://i.imgur.com/MEJUXr3.gif)\\n\\n## [Scala 3] Completions in string interpolation\\n\\nIn the previous versions, whenever users wanted to include a value in a string using string interpolation, they would need to do it all manually. Now, it is possible to get an automatic conversion to string interpolation when typing `$value`, as well as automatic wrapping in `{}` when accessing members of such value.\\n\\n![scala3-interpolation](https://i.imgur.com/EyFKpiv.gif)\\n\\n## [Scala 2] Automatically import types in string interpolations\\n\\nPreviously, the only suggestions for string interpolations were coming from the currently available symbols in scope. This meant that if you wanted to import something from another package, you would need to do it manually.\\n\\nThis problem is now resolved. Users can easily get such symbols automatically imported, which creates a seamless workflow.\\n\\n![scala2-inteprolation](https://i.imgur.com/cCWTQnj.gif)\\n\\nThe feature is also being worked on for Scala 3.\\n\\n## Code Action documentation\\n\\nHave you ever wondered what kind of refactorings are available in Metals?\\nCheck out this new page in the documentation! You can see a list of all the code actions in Metals with examples.\\nhttps://scalameta.org/metals/docs/codeactions/codeactions\\n\\nBig thanks to [zmerr](https://github.com/vzmerr) for writing this documentation.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.7..v0.11.8\\n33\\tTomasz Godzik\\n 11\\tRikito Taniguchi\\n 9\\tScala Steward\\n 6\\tjkciesluk\\n 6\\tKamil Podsiad\u0142o\\n 5\\tvzmerr\\n 3\\tVadim Chelyshov\\n 2\\tAdrien Piquerez\\n 2\\tscalameta-bot\\n 2\\tzmerr\\n 1\\tArthur S\\n 1\\tAnton Sviridov\\n 1\\ttgodzik\\n 1\\tScalameta Bot\\n 1\\tChris Kipp\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.8](https://github.com/scalameta/metals/tree/v0.11.8) (2022-08-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.7...v0.11.8)\\n\\n**Merged pull requests:**\\n\\n- [Scala 3] Revert type completions feature\\n [\\\\#4236](https://github.com/scalameta/metals/pull/4236)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Show package completions\\n [\\\\#4223](https://github.com/scalameta/metals/pull/4223)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): small changes to account for migration from LSIF -> SCIP\\n [\\\\#4222](https://github.com/scalameta/metals/pull/4222)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Switch to JDK 17 for most tests\\n [\\\\#4219](https://github.com/scalameta/metals/pull/4219)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Print correct method signature for Selectable\\n [\\\\#4202](https://github.com/scalameta/metals/pull/4202)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala 3 type completion\\n [\\\\#4174](https://github.com/scalameta/metals/pull/4174)\\n ([vzmerr](https://github.com/vzmerr))\\n- bugfix: Don\'t use interrupt for the Scala 3 compiler\\n [\\\\#4200](https://github.com/scalameta/metals/pull/4200)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.9 to 4.5.11\\n [\\\\#4210](https://github.com/scalameta/metals/pull/4210)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feat: Auto complete (missing) extension methods\\n [\\\\#4183](https://github.com/scalameta/metals/pull/4183)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.2 to 2.3.3\\n [\\\\#4209](https://github.com/scalameta/metals/pull/4209)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.0.1 to 9.0.4\\n [\\\\#4208](https://github.com/scalameta/metals/pull/4208)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Bump Bloop to latest to test out recent changes\\n [\\\\#4204](https://github.com/scalameta/metals/pull/4204)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update debug adapter to 2.2.0 stable (dependency update)\\n [\\\\#4203](https://github.com/scalameta/metals/pull/4203)\\n ([arixmkii](https://github.com/arixmkii))\\n- fix: index inline extension methods in ScalaToplevelMtags\\n [\\\\#4199](https://github.com/scalameta/metals/pull/4199)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Update Ammonite runner for Scala 3 and latest Scala 2 versions\\n [\\\\#4197](https://github.com/scalameta/metals/pull/4197)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Support Scala 3.2.0-RC3\\n [\\\\#4198](https://github.com/scalameta/metals/pull/4198)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Fold the end line of template / block if it\'s braceless\\n [\\\\#4191](https://github.com/scalameta/metals/pull/4191)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Print local type aliases properly\\n [\\\\#4188](https://github.com/scalameta/metals/pull/4188)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add match keyword completion\\n [\\\\#4185](https://github.com/scalameta/metals/pull/4185)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: request configuration before connecting to build server\\n [\\\\#4180](https://github.com/scalameta/metals/pull/4180)\\n ([dos65](https://github.com/dos65))\\n- Code Actions doc page\\n [\\\\#4157](https://github.com/scalameta/metals/pull/4157)\\n ([vzmerr](https://github.com/vzmerr))\\n- fix: Remember choice `Don\'t show this again` for sbt as build server\\n [\\\\#4175](https://github.com/scalameta/metals/pull/4175)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: [Scala 3] Show correct param names in java methods\\n [\\\\#4179](https://github.com/scalameta/metals/pull/4179)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: return all inversed dependencies in `inverseDependenciesAll`\\n [\\\\#4176](https://github.com/scalameta/metals/pull/4176)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- refactor: Use MetalsNames in ExtractValue code action\\n [\\\\#4173](https://github.com/scalameta/metals/pull/4173)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: Import missing extension method\\n [\\\\#4141](https://github.com/scalameta/metals/pull/4141)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Use the correct RC version of 3.2.0\\n [\\\\#4171](https://github.com/scalameta/metals/pull/4171)\\n ([tgodzik](https://github.com/tgodzik))\\n- Multiline string enhance\\n [\\\\#4168](https://github.com/scalameta/metals/pull/4168)\\n ([vzmerr](https://github.com/vzmerr))\\n- refactor: Print better debug infor when InferredType command failed\\n [\\\\#4162](https://github.com/scalameta/metals/pull/4162)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: use sonatypeOssRepos instead of sonatypeRepo\\n [\\\\#4169](https://github.com/scalameta/metals/pull/4169)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: Add architecture.md\\n [\\\\#4008](https://github.com/scalameta/metals/pull/4008)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Include method signature in the label\\n [\\\\#4161](https://github.com/scalameta/metals/pull/4161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add convertToNamedParameters support for Scala 3\\n [\\\\#4131](https://github.com/scalameta/metals/pull/4131)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bughack: Force specific Scala 3 compiler for worksheets\\n [\\\\#4153](https://github.com/scalameta/metals/pull/4153)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Show better titles for ConvertToNamedArguments code action\\n [\\\\#4158](https://github.com/scalameta/metals/pull/4158)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix triple quoted new line on type formatting\\n [\\\\#4151](https://github.com/scalameta/metals/pull/4151)\\n ([vzmerr](https://github.com/vzmerr))\\n- build(deps): Update flyway-core from 9.0.0 to 9.0.1\\n [\\\\#4159](https://github.com/scalameta/metals/pull/4159)\\n ([scala-steward](https://github.com/scala-steward))\\n- bugfix: Allow completions in multiline expressions when debugging\\n [\\\\#4111](https://github.com/scalameta/metals/pull/4111)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: [Scala 2] Automatically import types in string interpolations\\n [\\\\#4140](https://github.com/scalameta/metals/pull/4140)\\n ([tgodzik](https://github.com/tgodzik))\\n- Extend extract value with new cases\\n [\\\\#4139](https://github.com/scalameta/metals/pull/4139)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Bump sbt-dependency-submission\\n [\\\\#4155](https://github.com/scalameta/metals/pull/4155)\\n ([adpi2](https://github.com/adpi2))\\n- feat: Adding stub implementations for abstract given instances\\n [\\\\#4055](https://github.com/scalameta/metals/pull/4055)\\n ([tanishiking](https://github.com/tanishiking))\\n- refactor: Show more debug messages\\n [\\\\#4150](https://github.com/scalameta/metals/pull/4150)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Reenable RenameLspSuite\\n [\\\\#4152](https://github.com/scalameta/metals/pull/4152)\\n ([tgodzik](https://github.com/tgodzik))\\n- support for partial function\\n [\\\\#4125](https://github.com/scalameta/metals/pull/4125)\\n ([zmerr](https://github.com/zmerr))\\n- build(deps): Update flyway-core from 8.5.13 to 9.0.0\\n [\\\\#4147](https://github.com/scalameta/metals/pull/4147)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update sbt, scripted-plugin from 1.7.0 to 1.7.1\\n [\\\\#4148](https://github.com/scalameta/metals/pull/4148)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: avoid duplicate migration appllication\\n [\\\\#4144](https://github.com/scalameta/metals/pull/4144)\\n ([dos65](https://github.com/dos65))\\n- removing brace of for comprehension\\n [\\\\#4137](https://github.com/scalameta/metals/pull/4137)\\n ([vzmerr](https://github.com/vzmerr))\\n- chore: update git-ignore-revs\\n [\\\\#4145](https://github.com/scalameta/metals/pull/4145)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: change formatting of trailing commas\\n [\\\\#4050](https://github.com/scalameta/metals/pull/4050)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- build(deps): Update interface from 1.0.6 to 1.0.8\\n [\\\\#4135](https://github.com/scalameta/metals/pull/4135)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update sbt from 1.6.2 to 1.7.0\\n [\\\\#4136](https://github.com/scalameta/metals/pull/4136)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: Dialect should be scala21xSource3 for `-Xsource:3.x.x`\\n [\\\\#4134](https://github.com/scalameta/metals/pull/4134)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: refactor update test cases\\n [\\\\#4129](https://github.com/scalameta/metals/pull/4129)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Occurence highlight did not work for local vars\\n [\\\\#4109](https://github.com/scalameta/metals/pull/4109)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Save fingerprints between restarts\\n [\\\\#4127](https://github.com/scalameta/metals/pull/4127)\\n ([tgodzik](https://github.com/tgodzik))\\n- [docs] Update Maven integration launcher to 2.13\\n [\\\\#4130](https://github.com/scalameta/metals/pull/4130)\\n ([keynmol](https://github.com/keynmol))\\n- feature: Add a way to turn on debug logging and fix scalafix warmup\\n [\\\\#4124](https://github.com/scalameta/metals/pull/4124)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.0 to 3.10.1\\n [\\\\#4128](https://github.com/scalameta/metals/pull/4128)\\n ([scala-steward](https://github.com/scala-steward))\\n- java version through shell\\n [\\\\#4067](https://github.com/scalameta/metals/pull/4067)\\n ([zmerr](https://github.com/zmerr))\\n- fix: do not start debug session for test explorer if projects contains errors\\n [\\\\#4116](https://github.com/scalameta/metals/pull/4116)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- build(deps): Update mill-contrib-testng from 0.10.4 to 0.10.5\\n [\\\\#4119](https://github.com/scalameta/metals/pull/4119)\\n ([scala-steward](https://github.com/scala-steward))\\n- add scala 3.2.0-RC2\\n [\\\\#4118](https://github.com/scalameta/metals/pull/4118)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update jsoup from 1.15.1 to 1.15.2\\n [\\\\#4120](https://github.com/scalameta/metals/pull/4120)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update ipcsocket from 1.4.1 to 1.5.0\\n [\\\\#4122](https://github.com/scalameta/metals/pull/4122)\\n ([scala-steward](https://github.com/scala-steward))\\n- bugfix: [Scala 3] Improve constant and refined types printing\\n [\\\\#4117](https://github.com/scalameta/metals/pull/4117)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add documentation for running scalafix in Metals\\n [\\\\#4108](https://github.com/scalameta/metals/pull/4108)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Build.sc was seen as Ammonite script\\n [\\\\#4106](https://github.com/scalameta/metals/pull/4106)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Update sbt-dependency-graph\\n [\\\\#4110](https://github.com/scalameta/metals/pull/4110)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Refresh decorations even if empty to clear them out\\n [\\\\#4104](https://github.com/scalameta/metals/pull/4104)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Include entire expression in filterText for member itnerpolat\u2026\\n [\\\\#4105](https://github.com/scalameta/metals/pull/4105)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: ScaladocCompletion for Scala3\\n [\\\\#4076](https://github.com/scalameta/metals/pull/4076)\\n ([tanishiking](https://github.com/tanishiking))\\n- feat: update test suite location\\n [\\\\#4073](https://github.com/scalameta/metals/pull/4073)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feature: [Scala 3] Add interpolation completions\\n [\\\\#4061](https://github.com/scalameta/metals/pull/4061)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Fix wording about the expression evaluation\\n [\\\\#4101](https://github.com/scalameta/metals/pull/4101)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add missing release notes section\\n [\\\\#4097](https://github.com/scalameta/metals/pull/4097)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Fix links in the new release docs\\n [\\\\#4096](https://github.com/scalameta/metals/pull/4096)\\n ([tgodzik](https://github.com/tgodzik))\\n- release: Add release notes for Metals 0.11.7\\n [\\\\#4083](https://github.com/scalameta/metals/pull/4083)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/07/04/aluminium","metadata":{"permalink":"/metals/blog/2022/07/04/aluminium","source":"@site/blog/2022-07-04-aluminium.md","title":"Metals v0.11.7 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.7, which brings a large","date":"2022-07-04T00:00:00.000Z","formattedDate":"July 4, 2022","tags":[],"readingTime":10.8,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.7 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"},"nextItem":{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.7, which brings a large\\nnumber of Scala 3 improvements as well as a few interesting code actions.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release164
Merged PRs77
Contributors14
Closed issues14
New features9
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/51?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Release notes now shown in VS Code\\n- Improvements to Bloop Java home automation.\\n- Allow to run all scalafix rules on a file\\n- [Scala 3] Implement-all abstract members code action.\\n- [Scala 3] Add snippet completions.\\n- [Scala 3] Add file name completions.\\n- [Scala 3] Expression evaluation for debugger.\\n- [Scala 2] Add ConvertToNamedArguments code action.\\n- New flatMap to for comprehension code action.\\n\\n## Release notes now shown in VS Code\\n\\nIf you are using Visual Studio Code you should see this message right after the\\nupdate of the Metals extension has finished. \ud83d\ude80\\n\\nStarting with the current release we will be showing release notes inside VS\\nCode when the version update completes. This way users will know whenever the\\nextension was updated and it will not just silently update in the background.\\n\\nRelease notes will be shown only once after the update, but can be viewed again\\nby executing `Metals: Show release notes`\\n\\nThis was contributed by [kpodsiad](https://github.com/kpodsiad), thanks for the\\ncontinuous contributions!\\n\\n## Improvements to Bloop Java home automation\\n\\nFrom the\\n[last version of Metals](https://scalameta.org/metals/blog/2022/06/03/aluminium#automatically-setup-java-home-for-the-bloop-build-server)\\nwe introduced an automated setup of Java home for your Bloop build server, which\\nis used to compile your code under the hood and is the default build server to\\nbe used.\\n\\nYour Java Home would be added when starting Metals, before starting the build\\nserver, and would also suggest an update when changing the versions in the\\nMetals settings. This could result in two possible notifications:\\n\\n- Metals changing Java version:\\n\\n![metals-java-home](https://i.imgur.com/BH8AS5c.png)\\n\\n- Metals detecting an existing Bloop Java configuration:\\n\\n![metals-java-home-existing](https://i.imgur.com/PCyyNVT.png)\\n\\nHowever, this caused a couple of issues:\\n\\n1. In some cases Metals would suggest to change your Java home even if it hasn\'t\\n changed and it wasn\'t possible to dismiss the notification forever.\\n2. In case your Java home changed and you missed the notification (or the\\n notification was not shown), Bloop would not start if the old java home was\\n removed. That especially caused issues with usage of Java with Nix.\\n3. Metals would suggest to update your ~/.bloop/bloop.json file even if it was\\n readonly.\\n\\nTo help with that we implemented a number of fixes:\\n\\n1. You can dismiss the notification forever if Metals mistakenly suggests\\n updating your Bloop configuration and the overall false positives have been\\n reduced. To do that you just need to click on the\\n `Use the Global File\'s JVM...` button.\\n2. Metals will check before starting if your Java home is correct, and if it\'s\\n not it will replace it with the current one used by Metals.\\n3. Metals will not show any notifications if it cannot change the file itself.\\n\\nIf you encounter any further issues, you can take a look at Metals output and it\\nshould show logs like these:\\n\\n```\\n2022.07.01 16:14:41 INFO Bloop uses /usr/lib/jvm/openjdk17 defined at /home/tgodzik/.bloop/bloop.json\\n2022.07.01 16:14:41 INFO Bloop currently uses settings: -Xmx3G\\n```\\n\\nYou can use them to debug what is happening and report an issue.\\n\\n## Allow to run all scalafix rules on a file\\n\\nUp until the current release Metals would only run scalafix for\\n`organize imports` and wouldn\'t allow to use any other rules. Starting with this\\nrelease you should be able to apply all currently defined\\n`rules in .scalafix.conf` you require by running `metals.scalafix-run` command.\\n\\nBy default it\'s bound to `alt` + `ctrl` + `shift` + `o` shortcut in Visual\\nStudio Code.\\n\\n![scalafix-run](https://i.imgur.com/DLe5sYT.gif)\\n\\nOne major drawback of the current approach is that we are unable to run some of\\nthe custom rules. Only the default rules and the contributed Hygiene rules are\\ncurrently available by default. You can see the full list of them\\n[here](https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules).\\nFor all the rest users will have to use a previously added setting\\n`metals.scalafixRulesDependencies`, where you can add dependencies following the\\n[coursier](https://get-coursier.io/) convention such as\\n`com.github.liancheng::organize-imports:0.6.0`.\\n\\nLet us know if there is another rule we should add to the default ones!\\n\\nThe current situation could be improved by making sure that the dependencies for\\nscalafix are listed in the configuration itself. This would allow both Metals\\nand scalafix CLI to easily run rules on your workspace. You can find the\\ndiscussion on\\n[scalafix github page](https://github.com/scalacenter/scalafix/issues/1625)\\n\\n## [Scala 3] Implement-all abstract members code action.\\n\\nImplement-all abstract members code action is finally available in Scala 3 \ud83c\udf89\\n\\nPreviously, in Scala3, when you were implementing an abstract member in a\\nconcrete class, you could only see the completion to override particular\\nmembers. However, you needed to add those members one by one. Now you\'ll see a\\ncode action to implement all the members at once.\\n\\n![implement-all](https://i.imgur.com/foU3oHL.gif)\\n\\nGreat work by [tanishiking](https://github.com/tanishiking).\\n\\n## [Scala 3] Add snippet completions.\\n\\nPreviously, whenever users accepted method completions the only inserted text\\nwould be the name of the method. With snippets we can now add additional `()`\\nwith cursor ending in or after the parenthesis depending on whether the method\\naccepts parameters.\\n\\n![snippets](https://i.imgur.com/QEbPSTd.gif)\\n\\nFor editors that do not support snippets the previous behaviour is preserved.\\n\\n## [Scala 3] Add file name completions\\n\\nA file name completion feature has been available only in the Scala 2 project,\\nbut thanks to the effort by [riiswa](https://github.com/riiswa), Metals 0.11.7\\nwill complete class name based on the enclosing file, in Scala3!\\n\\n![filename-completion](https://i.imgur.com/f10pnJ6.gif)\\n\\n## [Scala 3] Expression evaluation for debugger.\\n\\nExpression evaluation was already available for use in your Scala 2 code,\\nhowever it was still missing for Scala 3. Thanks to the main work by\\n[tdudzik](https://github.com/tdudzik) and later finishing touches and multiple\\nbug fixes by [adpi2](https://github.com/adpi2) it is now possible to to evaluate\\nyour code on breakpoints in the Scala 3 code.\\n\\n![debug](https://i.imgur.com/jYs7QdM.gif)\\n\\nIt was added in the previous 0.11.6 version of Metals, however it was still not\\nworking correctly enough to promote it. Currently, it should be working\\ncorrectly in most cases, so please do test it out and report any issues you find\\nto [scala-debug-adapter](https://github.com/scalacenter/scala-debug-adapter).\\n\\n## [Scala 2] Add ConvertToNamedArguments code action\\n\\nMetals 0.11.7 allows users to use a new code action that can convert all\\narguments to named arguments, which is only available on Scala 2 for the time\\nbeing.\\n\\nThe new code action will work on method calls with multiple arguments, where \\nit\'s sometimes hard to tell which arguments match which parameters at a glance.\\nIn this situation you may want to make them named arguments. Now you will be\\nable to automatically convert all those arguments into named arguments.\\n\\n![convert-to-named-vscode](https://i.imgur.com/SiUYUSY.gif)\\n\\nWe\'d like to thank [@camgraff](https://github.com/camgraff) for\\n[implementing this feature](https://github.com/scalameta/metals/pull/3971) \ud83e\udd73\\n\\n## New flatMap to for comprehension code action.\\n\\nWhen working with long chains of map/flatMap/filter it might sometimes be useful\\nto replace them with for comprehensions, which can give you a flatter view of\\nyour code.\\n\\nThis is purely a syntactic sugar which gives us an ability to offer a code\\naction to automatically convert any chain of the mentioned methods with a for\\ncomprehensions.\\n\\n![for-comp](https://i.imgur.com/MOZLYi0.gif)\\n\\nThere is currently one known issue with two separate chains being inside one\\nanother, which might cause unexpected issues. Please report any other issues you\\nfind!\\n\\nAmazing effort from [zmerr](https://github.com/zmerr)\\n\\n## Miscellaneous\\n\\n- Updated Bloop version to 1.5.2, which should allow for a better\\n `clean compile workspace` behaviour.\\n- Always print out CFR output if there is any available even if the command\\n printed to the error output.\\n- Add correct parenthesis when using extension methods completions.\\n [riiswa](https://github.com/riiswa)\\n- Properly show links to implicit parameters in decoration hovers inside for\\n comprehensions.\\n- Run doctor when `more information` button was clicked\\n- Fix issues with Metals support for Scala 3.1.x hanging due to infinite loop in\\n the compiler.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.6..v0.11.7\\n27\\tTomasz Godzik\\n 22\\tCam Graff\\n 18\\tRikito Taniguchi\\n 15\\tScalameta Bot\\n 10\\tckipp01\\n 5\\tWaris Radji\\n 5\\tscalameta-bot\\n 4\\tVadim Chelyshov\\n 3\\tAdrien Piquerez\\n 2\\tKamil Podsiadlo\\n 2\\ttgodzik\\n 1\\tChris Kipp\\n 1\\tKamil Podsiad\u0142o\\n 1\\tzmerr\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.7](https://github.com/scalameta/metals/tree/v0.11.7) (2022-07-04)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.6...v0.11.7)\\n\\n**Merged pull requests:**\\n\\n- Fix sbt-dependengy-graph workflow again\\n [\\\\#4095](https://github.com/scalameta/metals/pull/4095)\\n ([adpi2](https://github.com/adpi2))\\n- Fix sbt-dependency-graph workflow\\n [\\\\#4092](https://github.com/scalameta/metals/pull/4092)\\n ([adpi2](https://github.com/adpi2))\\n- fix: ConvertToNamedArgument code action: register the server command / hide in\\n Scala3 projects [\\\\#4090](https://github.com/scalameta/metals/pull/4090)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: (scala3) insert correct position for implement-all code action on class\\n with type parameters [\\\\#4081](https://github.com/scalameta/metals/pull/4081)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: Bump Bloop to newest version\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4078)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Change Java home on startup if broken\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4079)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add known scalafix rules\' dependencies\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4077)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: [Scala 3] Adjust changes for the most recent compiler version\\n [\\\\#4071](https://github.com/scalameta/metals/pull/4071)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t cache Java for nix and additionally use JAVA_HOME\\n [\\\\#4075](https://github.com/scalameta/metals/pull/4075)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure that the Scala 3 compiler always retries properly\\n [\\\\#4074](https://github.com/scalameta/metals/pull/4074)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Uncomment HKSignatureHelpSuite\\n [\\\\#4072](https://github.com/scalameta/metals/pull/4072)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: handle memory footprint errors on JDK17\\n [\\\\#4064](https://github.com/scalameta/metals/pull/4064)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: lsif-java -> scip-java\\n [\\\\#3972](https://github.com/scalameta/metals/pull/3972)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Don\'t update readonly bloop.json and allow to dismiss notifications\\n [\\\\#4049](https://github.com/scalameta/metals/pull/4049)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: OverrideCompletion can handle symbolPrefix\\n [\\\\#4037](https://github.com/scalameta/metals/pull/4037)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: Add Rikito Taniguchi to maintainers\\n [\\\\#4058](https://github.com/scalameta/metals/pull/4058)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix wrong type shown when type alias is used\\n [\\\\#4046](https://github.com/scalameta/metals/pull/4046)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Update release documentation\\n [\\\\#4051](https://github.com/scalameta/metals/pull/4051)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: support tab indent in implement-all code action\\n [\\\\#4042](https://github.com/scalameta/metals/pull/4042)\\n ([tanishiking](https://github.com/tanishiking))\\n- flatMap to For Comprehension\\n [\\\\#3885](https://github.com/scalameta/metals/pull/3885)\\n ([zmerr](https://github.com/zmerr))\\n- bugfix: Fix wrong flag for default methods\\n [\\\\#4045](https://github.com/scalameta/metals/pull/4045)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: remove improper javaOptions initialization\\n [\\\\#4047](https://github.com/scalameta/metals/pull/4047)\\n ([dos65](https://github.com/dos65))\\n- fix: do not fail when stripping ansi codes\\n [\\\\#4048](https://github.com/scalameta/metals/pull/4048)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add ConvertToNamedArguments code action\\n [\\\\#3971](https://github.com/scalameta/metals/pull/3971)\\n ([camgraff](https://github.com/camgraff))\\n- add scala 3.1.3 and 3.2.0-RC1\\n [\\\\#4041](https://github.com/scalameta/metals/pull/4041)\\n ([dos65](https://github.com/dos65))\\n- Adjust to signature help changes in scala3 compiler\\n [\\\\#4026](https://github.com/scalameta/metals/pull/4026)\\n ([dos65](https://github.com/dos65))\\n- feat(mill): also check default version in mill file\\n [\\\\#4039](https://github.com/scalameta/metals/pull/4039)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix(worksheets): filter out NonUnitStatements wartremover in worksheets\\n [\\\\#4038](https://github.com/scalameta/metals/pull/4038)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update munit from 1.0.0-M3 to 1.0.0-M5\\n [\\\\#4033](https://github.com/scalameta/metals/pull/4033)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.8.3 to 3.9.0\\n [\\\\#4031](https://github.com/scalameta/metals/pull/4031)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- [Scala 3] Add file name completions\\n [\\\\#4018](https://github.com/scalameta/metals/pull/4018)\\n ([riiswa](https://github.com/riiswa))\\n- build(deps): Update undertow-core from 2.2.17.Final to 2.2.18.Final\\n [\\\\#4032](https://github.com/scalameta/metals/pull/4032)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update requests from 0.7.0 to 0.7.1\\n [\\\\#4030](https://github.com/scalameta/metals/pull/4030)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update h2 from 2.1.212 to 2.1.214\\n [\\\\#4029](https://github.com/scalameta/metals/pull/4029)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.0 to 0.10.1\\n [\\\\#4028](https://github.com/scalameta/metals/pull/4028)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feat: Implement-all abstract members code action for Scala3\\n [\\\\#3960](https://github.com/scalameta/metals/pull/3960)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Properly send back experimental capabilities\\n [\\\\#4007](https://github.com/scalameta/metals/pull/4007)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(maven): update the maven wrapper\\n [\\\\#4024](https://github.com/scalameta/metals/pull/4024)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: run doctor when `more information` button was clicked\\n [\\\\#4019](https://github.com/scalameta/metals/pull/4019)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: Fix errors for kind projector\\n [\\\\#4015](https://github.com/scalameta/metals/pull/4015)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Reset diagnostics before connecting to new server\\n [\\\\#4017](https://github.com/scalameta/metals/pull/4017)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly show links to implicit parameters in decoration hovers\\n [\\\\#4014](https://github.com/scalameta/metals/pull/4014)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Allow to run all scalafix rules on a file\\n [\\\\#3996](https://github.com/scalameta/metals/pull/3996)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix extension methods completion\\n [\\\\#4013](https://github.com/scalameta/metals/pull/4013)\\n ([riiswa](https://github.com/riiswa))\\n- chore: Add support for Scala 2.12.16\\n [\\\\#4010](https://github.com/scalameta/metals/pull/4010)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Always print out CFR output if there is any available\\n [\\\\#4012](https://github.com/scalameta/metals/pull/4012)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.1.3-RC5\\n [\\\\#4011](https://github.com/scalameta/metals/pull/4011)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix auto implement abstract members for self-types\\n [\\\\#4009](https://github.com/scalameta/metals/pull/4009)\\n ([riiswa](https://github.com/riiswa))\\n- fix: only compare Bloop JavaHome with Metals JavaHome if set\\n [\\\\#4002](https://github.com/scalameta/metals/pull/4002)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: add checkout to steward job\\n [\\\\#3999](https://github.com/scalameta/metals/pull/3999)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(deps): add in other scalameta repos to steward job\\n [\\\\#3995](https://github.com/scalameta/metals/pull/3995)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: switch mtags release on a branch with backports\\n [\\\\#3998](https://github.com/scalameta/metals/pull/3998)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Fix failing tests after refactor\\n [\\\\#3993](https://github.com/scalameta/metals/pull/3993)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.3 to 2.5.4\\n [\\\\#3983](https://github.com/scalameta/metals/pull/3983)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.6 to 4.5.9\\n [\\\\#3991](https://github.com/scalameta/metals/pull/3991)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update lsp4j to 0.14.0\\n [\\\\#3958](https://github.com/scalameta/metals/pull/3958)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update munit from 1.0.0-M3 to 1.0.0-M4\\n [\\\\#3990](https://github.com/scalameta/metals/pull/3990)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.14.3 to 1.15.1\\n [\\\\#3989](https://github.com/scalameta/metals/pull/3989)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 8.5.10 to 8.5.12\\n [\\\\#3988](https://github.com/scalameta/metals/pull/3988)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.6 to 1.0.7\\n [\\\\#3986](https://github.com/scalameta/metals/pull/3986)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M5 to 2.1.0-M6\\n [\\\\#3985](https://github.com/scalameta/metals/pull/3985)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.8.2 to 3.8.3\\n [\\\\#3984](https://github.com/scalameta/metals/pull/3984)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.0-18-003e6c7b to\\n 1.5.0-22-91111c15 [\\\\#3982](https://github.com/scalameta/metals/pull/3982)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update tests to work with newest nightlies\\n [\\\\#3981](https://github.com/scalameta/metals/pull/3981)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Fix testing library breakpoints and simplify metals adapter logic\\n [\\\\#3966](https://github.com/scalameta/metals/pull/3966)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: correct steward cron\\n [\\\\#3980](https://github.com/scalameta/metals/pull/3980)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): add Scala Steward into CI\\n [\\\\#3977](https://github.com/scalameta/metals/pull/3977)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: [Scala 3] Add snippet completions\\n [\\\\#3959](https://github.com/scalameta/metals/pull/3959)\\n ([tgodzik](https://github.com/tgodzik))\\n- doc: fix release note v0.11.6 (duplicated merged commits section)\\n [\\\\#3979](https://github.com/scalameta/metals/pull/3979)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: update version for v0.11.6\\n [\\\\#3978](https://github.com/scalameta/metals/pull/3978)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: release note for Metals 0.11.6\\n [\\\\#3957](https://github.com/scalameta/metals/pull/3957)\\n ([tanishiking](https://github.com/tanishiking))"},{"id":"/2022/06/03/aluminium","metadata":{"permalink":"/metals/blog/2022/06/03/aluminium","source":"@site/blog/2022-06-03-aluminium.md","title":"Metals v0.11.6 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.6 which continues to improve the Scala 3 support along with many other fixes.","date":"2022-06-03T00:00:00.000Z","formattedDate":"June 3, 2022","tags":[],"readingTime":7.35,"hasTruncateMarker":false,"authors":[{"name":"Rikito Taniguchi","url":"https://twitter.com/tanishiking25","imageURL":"https://github.com/tanishiking.png"}],"frontMatter":{"author":"Rikito Taniguchi","title":"Metals v0.11.6 - Aluminium","authorURL":"https://twitter.com/tanishiking25","authorImageURL":"https://github.com/tanishiking.png"},"prevItem":{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"},"nextItem":{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.6 which continues to improve the Scala 3 support along with many other fixes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release165
Merged PRs56
Contributors12
\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\n- reduce memory usage in large projects\\n- override completions for Scala3\\n- improved scaladoc support in both Scala2 and Scala3\\n- better UX in the test explorer\\n- automatically setup java home for the Bloop build server\\n- support for Scala 3.1.3-RC3 and RC4\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n## Reduce file watcher memory usage\\nPreviously, Metals consumed a huge amount of memory for file watchers in large projects, especially on macOS.\\nNow, Metals uses a memory-efficient way to watch files to detect changes and consume less memory.\\n\\nFor more technical details, see the original PR: [\\\\#3758](https://github.com/scalameta/metals/pull/3758).\\n\\n## [Scala3] Override Completions\\n\\nOverride completions for Scala3 are now available with Metals 0.11.6!\\nNow, Metals shows the scaladoc on hover for Scala3 projects. (Before this release, Metals was unable to show the scaladoc for the symbols from third-party modules).\\n\\n\\n![override-completion](https://i.imgur.com/Go3sMxy.gif)\\n\\n## [Scala3] Show scaladoc on hover for Scala 3 project\\n\\nPreviously, scaladocs were missing for a lot of classes and methods in Scala 3, especially for the symbols from third-party modules. From this release, Metals will always show the scaladoc on hover for Scala3 projects.\\n\\n![hover-scala3](https://i.imgur.com/Svzq5DD.png)\\n\\n### [Scala3] Support `completionItem/resolve`\\n\\n`completionItem/resolve` is a feature that provides on-demand, more detailed information when moving through the list of suggested completions. It will show documentation, proper parameter names for Java methods, and default values for Scala 3 methods. Now, this is also available for use in Scala 3.\\n\\n![completion-item-resolve](https://i.imgur.com/Tz6AOsx.gif)\\n\\n\\n## Show parent scaladoc if implementation is returning empty\\n\\nScaladocs can be inspected whenever you hover, use a completion or signature help. Up until recently we only showed you the documentation if the exact method you are using had the scaladocs written, which meant that if you overrode a method and didn\'t add the scaladoc comments again we would not show you any documentation. One example of such method is `headOption` on `List`.\\n\\n From this release we will also search the parent method in case the current method\'s scaladoc are empty. \\n\\n## [Scala 3] Show scaladocs for signature help\\n\\nAs mentioned in the previous paragraph, Metals can show you documentation in three different places. That, however, was true only for Scala 2 previously. In this release, we will now show you proper documentation whenever invoking signature help.\\n\\nAs a reminder, signature help is used to indicate what parameters can be used in a method. It should pop up automatically after writing `(`, but you can also invoke it manually. In VS Code that takes the form of `editor.action.triggerParameterHints` command, which can also be bound to a shortcut and by default is.\\n\\n## [MUnit] Test Explorer can find helper methods from parent classes\\n\\nMUnit allows to use [helper functions](https://scalameta.org/munit/docs/tests.html#declare-tests-inside-a-helper-function) when declaring tests. Very often those helper methods are extracted to some parent classes which are extended by many test suites.\\nNow, Metals can find usages of those helper methods and display them in Test Explorer.\\n\\nThis feature is available for Bloop and SBT 1.7.0-M2 or later.\\n\\n![MUnit-helper-methods](https://imgur.com/GGRDpXA.gif)\\n\\n## Support Cats Effect stacktraces in stacktrace analyzer\\n\\nCats Effect offers [asynchronous stack tracing](https://typelevel.org/cats-effect/docs/tracing#asynchronous-stack-tracing) which augments exceptions with additional information. \\nNow, Stacktrace Analyzer is able to recognize CE\'s stacktraces and provide link to location in code. Say no to tedious debugging when you have only stacktrace from the logs!\\n\\n![cats-effect-stacktraces](https://imgur.com/5fMvcYd.gif)\\n\\n\\n## Improve implement all completion and code action\\nPreviously, when we invoked the \\"implement all members\\" completion and code action, Metals used `x$0` for Java parameter names. Now, Metals fills these with the correct parameter names.\\n \\n## Improve rewrite to braces/parenthesis code action\\nSometimes, it wasn\'t clear which code would be affected by [rewrite to braces/parenthesis](https://scalameta.org/metals/blog/2021/09/06/tungsten#replace--with--in-functions-and-vice-versa) code action.\\nNow, code action\'s description contains name of the function/method which will be affected by executing action.\\n![rewrite-braces-parens](https://imgur.com/SkHolsJ.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n\\n## Automatically setup java home for the Bloop build server\\nIn previous versions of Metals, if users wanted to change the java version of the Bloop build server, they would need to manually update `.bloop/bloop.json` file in their user home directory. With this version, we ensure that the Bloop Java version will correspond to Metals one to avoid weird compilation issues that could arise from different versions being used.\\n\\nNow, each time you update `javaHome` or `bloopJvmProperties` settings, Metals will ask you whether to forward those changes to the Bloop configuration file. If you modified that file previously or want to use a custom one, you can dismiss the Metals notification. Otherwise, everything will automatically be set up for you once you decide to apply the changes. If you never created the file, we will create it before starting Bloop, so you should not notice anything out of order.\\n\\n## Support for Scala 3.1.3-RC4, 3.1.3-RC3\\nMetals 0.11.6 supports Scala 3.1.3-RC3 and RC4.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.5..v0.11.6\\n 34\\tRikito Taniguchi\\n 18\\tTomasz Godzik\\n 14\\tScala Steward\\n 11\\tVadim Chelyshov\\n 10\\tzmerr\\n 7\\tKamil Podsiadlo\\n 5\\tPavol Vidli\u010dka\\n 5\\tckipp01\\n 4\\tArman Bilge\\n 2\\tIan Tabolt\\n 1\\tArthur McGibbon\\n 1\\ttgodzik\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.6](https://github.com/scalameta/metals/tree/v0.11.6) (2022-06-03)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.5...v0.11.6)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Escape java home path on windows\\n [\\\\#3969](https://github.com/scalameta/metals/pull/3969)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove Wconf from scalac options in worksheets\\n [\\\\#3976](https://github.com/scalameta/metals/pull/3976)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Show all synthetics inside for comprehensions\\n [\\\\#3974](https://github.com/scalameta/metals/pull/3974)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: revert temporal changes in completions tests for 3.2.*-NIGHTLY\\n [\\\\#3970](https://github.com/scalameta/metals/pull/3970)\\n ([dos65](https://github.com/dos65))\\n- docs: remove status-bar as option for slowTaskProvider\\n [\\\\#3967](https://github.com/scalameta/metals/pull/3967)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Fallback to sourcepath if jar cannot be found\\n [\\\\#3962](https://github.com/scalameta/metals/pull/3962)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: prevent npe in filewatcher\\n [\\\\#3964](https://github.com/scalameta/metals/pull/3964)\\n ([dos65](https://github.com/dos65))\\n- feat: add function name to rewrite parens/braces code action\\n [\\\\#3965](https://github.com/scalameta/metals/pull/3965)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- (scala3) Override completions\\n [\\\\#3897](https://github.com/scalameta/metals/pull/3897)\\n ([tanishiking](https://github.com/tanishiking))\\n- actions: return release job lock\\n [\\\\#3944](https://github.com/scalameta/metals/pull/3944)\\n ([dos65](https://github.com/dos65))\\n- Fix SBT version check in Doctor\\n [\\\\#3946](https://github.com/scalameta/metals/pull/3946)\\n ([iantabolt](https://github.com/iantabolt))\\n- Fix issues with synthetics in for comprehension\'s yield\\n [\\\\#3948](https://github.com/scalameta/metals/pull/3948)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.1.3-RC4\\n [\\\\#3947](https://github.com/scalameta/metals/pull/3947)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop Java Home to that of Metals\\n [\\\\#3871](https://github.com/scalameta/metals/pull/3871)\\n ([zmerr](https://github.com/zmerr))\\n- chore: speedup lsp tests\\n [\\\\#3925](https://github.com/scalameta/metals/pull/3925)\\n ([dos65](https://github.com/dos65))\\n- feature: [Scala 3] Show correct inferred type in signature help\\n [\\\\#3941](https://github.com/scalameta/metals/pull/3941)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs(test-explorer): add note about test-user-interface\\n [\\\\#3943](https://github.com/scalameta/metals/pull/3943)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: avoid out of bounds for editors that treat \\\\n as a line end\\n [\\\\#3942](https://github.com/scalameta/metals/pull/3942)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Show scaladocs for signature help\\n [\\\\#3934](https://github.com/scalameta/metals/pull/3934)\\n ([tgodzik](https://github.com/tgodzik))\\n- update `metals_ref` for mtags-release\\n [\\\\#3940](https://github.com/scalameta/metals/pull/3940)\\n ([dos65](https://github.com/dos65))\\n- Fix nightlies tests and uncomment SignaturePat suite tests\\n [\\\\#3932](https://github.com/scalameta/metals/pull/3932)\\n ([tgodzik](https://github.com/tgodzik))\\n- Include proper names when using implement all completion and code action\\n [\\\\#3930](https://github.com/scalameta/metals/pull/3930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix expression type for inlined methods and show all flags for methods\\n [\\\\#3931](https://github.com/scalameta/metals/pull/3931)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: [Scala 3] Add completion item resolution\\n [\\\\#3914](https://github.com/scalameta/metals/pull/3914)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(docs): ensure metals_2.12 is replaced with metals_2.13\\n [\\\\#3924](https://github.com/scalameta/metals/pull/3924)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: symbolSearch - support encoded names from classpath\\n [\\\\#3917](https://github.com/scalameta/metals/pull/3917)\\n ([dos65](https://github.com/dos65))\\n- Update scalafmt-dynamic to 3.5.3\\n [\\\\#3921](https://github.com/scalameta/metals/pull/3921)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.4\\n [\\\\#3920](https://github.com/scalameta/metals/pull/3920)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.6\\n [\\\\#3922](https://github.com/scalameta/metals/pull/3922)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.5.3\\n [\\\\#3916](https://github.com/scalameta/metals/pull/3916)\\n ([scala-steward](https://github.com/scala-steward))\\n- chore: update scala3 version in welcome msg\\n [\\\\#3919](https://github.com/scalameta/metals/pull/3919)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore, docs: simplify cats-effect stacktrace regex, add docstring\\n [\\\\#3918](https://github.com/scalameta/metals/pull/3918)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- refactor: fix warning from Scala3 in ScaladocParser.scala\\n [\\\\#3912](https://github.com/scalameta/metals/pull/3912)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for Scala 3.1.3-RC3\\n [\\\\#3911](https://github.com/scalameta/metals/pull/3911)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop and Scala Debug adapter\\n [\\\\#3910](https://github.com/scalameta/metals/pull/3910)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala3 - do not provide completions for invalid quals\\n [\\\\#3909](https://github.com/scalameta/metals/pull/3909)\\n ([dos65](https://github.com/dos65))\\n- feat, test explorer: search for test methods in parent classes\\n [\\\\#3898](https://github.com/scalameta/metals/pull/3898)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add semanticdb-javac to `TestInternal`\\n [\\\\#3907](https://github.com/scalameta/metals/pull/3907)\\n ([armanbilge](https://github.com/armanbilge))\\n- Update munit to newest milestone\\n [\\\\#3906](https://github.com/scalameta/metals/pull/3906)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: fix broken documents (Integrating a new editor)\\n [\\\\#3905](https://github.com/scalameta/metals/pull/3905)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: broken link display in vim docs\\n [\\\\#3904](https://github.com/scalameta/metals/pull/3904)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: handle cats-effect async stacktrace in stacktrace analyzer\\n [\\\\#3900](https://github.com/scalameta/metals/pull/3900)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Don\'t create the Presentation Compiler for Java files\\n [\\\\#3887](https://github.com/scalameta/metals/pull/3887)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle modules in stacktrace analyzer\\n [\\\\#3896](https://github.com/scalameta/metals/pull/3896)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Update scalafmt-dynamic to 3.5.2\\n [\\\\#3893](https://github.com/scalameta/metals/pull/3893)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 2.0.0\\n [\\\\#3890](https://github.com/scalameta/metals/pull/3890)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.7.Final\\n [\\\\#3892](https://github.com/scalameta/metals/pull/3892)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.10\\n [\\\\#3891](https://github.com/scalameta/metals/pull/3891)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.5.3\\n [\\\\#3889](https://github.com/scalameta/metals/pull/3889)\\n ([scala-steward](https://github.com/scala-steward))\\n- Reduce file watcher memory usage\\n [\\\\#3758](https://github.com/scalameta/metals/pull/3758)\\n ([pvid](https://github.com/pvid))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.5\\n [\\\\#3894](https://github.com/scalameta/metals/pull/3894)\\n ([scala-steward](https://github.com/scala-steward))\\n- docs: fix latest versions\\n [\\\\#3886](https://github.com/scalameta/metals/pull/3886)\\n ([dos65](https://github.com/dos65))\\n- Show parent scaladoc if implementation is returning empty\\n [\\\\#3881](https://github.com/scalameta/metals/pull/3881)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add scaladocs on hover for Scala 3\\n [\\\\#3865](https://github.com/scalameta/metals/pull/3865)\\n ([tanishiking](https://github.com/tanishiking))\\n- 0.11.5 - update versions\\n [\\\\#3883](https://github.com/scalameta/metals/pull/3883)\\n ([dos65](https://github.com/dos65))\\n- 0.11.5 release notes\\n [\\\\#3882](https://github.com/scalameta/metals/pull/3882)\\n ([dos65](https://github.com/dos65))"},{"id":"/2022/04/28/aluminium","metadata":{"permalink":"/metals/blog/2022/04/28/aluminium","source":"@site/blog/2022-04-28-aluminium.md","title":"Metals v0.11.5 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.5, which brings a few of hotfixes and improves hover info for Scala 3","date":"2022-04-28T00:00:00.000Z","formattedDate":"April 28, 2022","tags":[],"readingTime":1.305,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.11.5 - Aluminium","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"},"nextItem":{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.5, which brings a few of hotfixes and improves hover info for Scala 3\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release28
Merged PRs7
Contributors5
Closed issues2
New features
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/50?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Fix javasemanticdb support for sbt-BSP with JDK17\\n- Don\'t show MUnit warning for the Test Explorer when not necessary\\n- [Scala3] Show correct tooltip on hover methods in for comprehension\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.4..v0.11.5\\n16\\tRikito Taniguchi\\n4\\tVadim Chelyshov\\n1\\tKamil Podsiadlo\\n1\\tTomasz Godzik\\n1\\tckipp01\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.5](https://github.com/scalameta/metals/tree/v0.11.5) (2022-04-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.4...v0.11.5)\\n\\n**Merged pull requests:**\\n\\n- fix: don\'t show MUnit warning for the Test Explorer when not necessary\\n [\\\\#3879](https://github.com/scalameta/metals/pull/3879)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: sbt-metals + java semanticdb issue on jdk17\\n [\\\\#3876](https://github.com/scalameta/metals/pull/3876)\\n ([dos65](https://github.com/dos65))\\n- [Scala3] Show correct tooltip on hover methods in for comprehension\\n [\\\\#3854](https://github.com/scalameta/metals/pull/3854)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: update vim docs to no longer point people to coc-metals\\n [\\\\#3819](https://github.com/scalameta/metals/pull/3819)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove Eclipse from the documentation\\n [\\\\#3868](https://github.com/scalameta/metals/pull/3868)\\n ([tgodzik](https://github.com/tgodzik))\\n- update versions for 0.11.4\\n [\\\\#3874](https://github.com/scalameta/metals/pull/3874)\\n ([dos65](https://github.com/dos65))\\n- 0.11.4 release notes\\n [\\\\#3873](https://github.com/scalameta/metals/pull/3873)\\n ([dos65](https://github.com/dos65))"},{"id":"/2022/04/27/aluminium","metadata":{"permalink":"/metals/blog/2022/04/27/aluminium","source":"@site/blog/2022-04-27-aluminium.md","title":"Metals v0.11.4 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.4, which includes the hotfix of the issue with cs install metals.","date":"2022-04-27T00:00:00.000Z","formattedDate":"April 27, 2022","tags":[],"readingTime":0.88,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.11.4 - Aluminium","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"},"nextItem":{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.4, which includes the hotfix of [the issue with `cs install metals`](https://github.com/coursier/coursier/issues/2406).\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release3
Merged PRs3
Contributors2
Closed issues1
New features0
\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Fix the issue with installing Metals using coursier\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.3..v0.11.4\\n2\\tKamil Podsiad\u0142o\\n1\\tVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.4](https://github.com/scalameta/metals/tree/v0.11.4) (2022-04-27)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.3...v0.11.4)\\n\\n**Merged pull requests:**\\n\\n- upgrade bsp4j version to a stable one\\n [\\\\#3872](https://github.com/scalameta/metals/pull/3872)\\n ([dos65](https://github.com/dos65))\\n- chore: update server version after release\\n [\\\\#3869](https://github.com/scalameta/metals/pull/3869)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: release notes\\n [\\\\#3860](https://github.com/scalameta/metals/pull/3860)\\n ([kpodsiad](https://github.com/kpodsiad))"},{"id":"/2022/04/26/aluminium","metadata":{"permalink":"/metals/blog/2022/04/26/aluminium","source":"@site/blog/2022-04-26-aluminium.md","title":"Metals v0.11.3 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.3.","date":"2022-04-26T00:00:00.000Z","formattedDate":"April 26, 2022","tags":[],"readingTime":10.155,"hasTruncateMarker":false,"authors":[{"name":"Kamil Podsiadlo","url":"https://twitter.com/podsiadel","imageURL":"https://github.com/kpodsiad.png"}],"frontMatter":{"author":"Kamil Podsiadlo","title":"Metals v0.11.3 - Aluminium","authorURL":"https://twitter.com/podsiadel","authorImageURL":"https://github.com/kpodsiad.png"},"prevItem":{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"},"nextItem":{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.3.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release231
Merged PRs110
Contributors17
Closed issues21
New features7
\\n\\nThis release uses a new version of [Bloop](https://github.com/scalacenter/bloop/blob/main/notes/v1.5.0.md).\\nThis should fix a few bugs regarding e.g. stale diagnostics in Scala 3. Moreover, the new release brings also\\na few UX improvements regarding Doctor view and running/debugging your code.\\n\\nFor full details: https://github.com/scalameta/metals/milestone/48?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add more information to the Doctor view\\n- Create companion object code action\\n- Add status bar when starting a debug session\\n- Ensure the \\"no run or test\\" message is shown to user.\\n- Show better unnaply signatures\\n- Provide an easier way to configure bloop settings\\n- Better MUnit support in Test Explorer\\n- Better sbt BSP integration\\n- Improved Scala3 support\\n\\n## Add more information to the Doctor view\\n\\nThanks to the joined effort of [\\\\#3772](https://github.com/scalameta/metals/pull/3772), [\\\\#3763](https://github.com/scalameta/metals/pull/3763) and [\\\\#3710](https://github.com/scalameta/metals/pull/3710) the Doctor view currently:\\n\\n- shows the Metals server version and information about Java used to run the Metals server\\n- displays the compilation status of project\\n- allows to navigate to the build target info for each target\\n\\n![new-doctor-view](https://imgur.com/ByzzlM8.png)\\n\\n## Create companion object code action\\n\\nThanks to the efforts of [zmerr](https://github.com/zmerr), Metals offers a new code action - `Create companion object`.\\nAs its name suggests, it can be used to automatically create a companion object for the given class, trait or enum.\\n\\n![create-companion-object-code-action](https://imgur.com/HW5rr5f.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Add status bar when starting a debug session\\n\\nStarting a debug session is a complex task, which requires a few steps:\\n\\n- Metals has to compile your project and create a debug session\\n- debugger has to be initialized (configuration, breakpoints, etc.)\\n\\nVery often each of these steps takes up to a few seconds in order to complete.\\nUntil now, the user had no idea what is happening because Metals didn\'t show any progress indicator.\\n[ckipp01](https://github.com/ckipp01) addressed this problem and added a status bar for each of the steps.\\n\\n![start-debug-session-status-bar](https://imgur.com/qh7Jzdy.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Ensure the \\"no run or test\\" message is shown to user.\\n\\nThere is a command `Run main class or tests in current file` which is a convenient way, as name suggests, of running main class:\\n![run-main](https://imgur.com/rShZ8L3.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nor running tests in the current file:\\n![run-tests](https://imgur.com/BtbOubC.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nIt is also possible to just press `F5` in file and Metals will execute main class or run tests in the current file if no run configuration is defined.\\n\\nHowever, this command was silently failing when there was no class or test to run in the file.\\nThis is no longer the case, now Metals will display proper error message in this scenario.\\n![no-class-to-run](https://imgur.com/xda3ApF.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Show better unnaply signatures\\n\\nPreviously, when pattern matching Metals was showing real `unnaply` method signature, which wasn\'t very useful.\\nNow, Metals properly uses unapply result type to show what types can be matched on.\\n![unnaply-signatures](https://imgur.com/Gzg11YT.png)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Provide an easier way to configure bloop settings\\n\\nBloop [JVM options](https://scalacenter.github.io/bloop/docs/server-reference#custom-java-options) can be\\nconfigured through a global config file. Thanks to the [zmerr](https://github.com/zmerr), Metals is capable of changing those settings.\\nEach modification of `Bloop Jvm Properties` settings will try to update that global file if possible.\\nIn case of manually configured settings, Metals will inform user about it and ask for their action.\\n\\n![update-bloop-settings](https://imgur.com/Xz2gO0h.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Better MUnit support in Test Explorer\\n\\nDisclaimer: **this works only when Bloop is a build server**\\n\\nTest Explorer in Metals is now able to detect some single test cases for [MUnit](https://scalameta.org/munit/) test framework.\\n![munit-single-tests](https://imgur.com/QQMLy6M.png)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nMore information about current MUnit support status can be found at this [issue](https://github.com/scalameta/metals/issues/3771).\\n\\n## Better sbt BSP integration\\n\\nFrom this release Metals will no longer run the compilation when sbt generates files under the `src-managed` directory.\\nThe previous behaviour was related to some of the source generating sbt plugins. When used with sbt BSP users would experience continuous compilation.\\nFor more details, see [\\\\#2183](https://github.com/scalameta/metals/issues/2183).\\n\\n## Improved Scala3 support\\n\\nMetals 0.11.3 now includes some better Scala3 supports in go-to-definition, rename symbols, and displaying hover.\\n\\nFor more information, check out the following pull requests:\\n\\n- [Don\'t show a tooltip on hover if cursor is not on a symbol by tanishiking \xb7 Pull Request #3792 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3792)\\n- [fix: (Scala3) Don\'t navigate to enclosing symbols on go-to-definition if cursor is not on symbol by tanishiking \xb7 Pull Request #3807 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3807)\\n- [fix: Rename extension parameter in Scala3 by tanishiking \xb7 Pull Request #3800 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3800)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.2..v0.11.3\\n 32\\tRikito Taniguchi\\n 30\\tScala Steward\\n 19\\tTomasz Godzik\\n 17\\tVadim Chelyshov\\n 15\\tKamil Podsiad\u0142o\\n 15\\tzmerr\\n 12\\tckipp01\\n 11\\tAlexandre Archambault\\n 5\\tKamil Podsiadlo\\n 4\\tMartin Duhem\\n 3\\tArthur McGibbon\\n 3\\ttgodzik\\n 2\\tGeorg Pfuetzenreuter\\n 1\\tGabriele Petronella\\n 1\\tChris Kipp\\n 1\\tdependabot[bot]\\n 1\\tJens Petersen\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.3](https://github.com/scalameta/metals/tree/v0.11.3) (2022-04-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.2...v0.11.3)\\n\\n**Merged pull requests:**\\n\\n- fix: create comption object after end marker\\n [\\\\#3866](https://github.com/scalameta/metals/pull/3866)\\n ([dos65](https://github.com/dos65))\\n- feature: sbt-BSP - enable java-semanticdb plugin\\n [\\\\#3861](https://github.com/scalameta/metals/pull/3861)\\n ([dos65](https://github.com/dos65))\\n- Use bloop.json instead of .jvmopts for Bloop memory properties\\n [\\\\#3864](https://github.com/scalameta/metals/pull/3864)\\n ([tgodzik](https://github.com/tgodzik))\\n- handles the removal of jvm properties case\\n [\\\\#3863](https://github.com/scalameta/metals/pull/3863)\\n ([zmerr](https://github.com/zmerr))\\n- Properly infer types for unapply signature help\\n [\\\\#3862](https://github.com/scalameta/metals/pull/3862)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add semantic db info display on jar files\\n [\\\\#3843](https://github.com/scalameta/metals/pull/3843)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- correct handling of end marker relocation on extract member\\n [\\\\#3847](https://github.com/scalameta/metals/pull/3847)\\n ([zmerr](https://github.com/zmerr))\\n- Fix breakpoints in virtual docs\\n [\\\\#3846](https://github.com/scalameta/metals/pull/3846)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafmt-core to 3.5.2\\n [\\\\#3858](https://github.com/scalameta/metals/pull/3858)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark CancelCompileLspSuite as flaky\\n [\\\\#3857](https://github.com/scalameta/metals/pull/3857)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: infer jdk without jdk in name\\n [\\\\#3856](https://github.com/scalameta/metals/pull/3856)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add classpath to CFR decompile\\n [\\\\#3844](https://github.com/scalameta/metals/pull/3844)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- fix: Make signature help work properly with a non-tuple result\\n [\\\\#3849](https://github.com/scalameta/metals/pull/3849)\\n ([tgodzik](https://github.com/tgodzik))\\n- bloop jvm settings\\n [\\\\#3746](https://github.com/scalameta/metals/pull/3746)\\n ([zmerr](https://github.com/zmerr))\\n- Remove some redundant collection conversions\\n [\\\\#3848](https://github.com/scalameta/metals/pull/3848)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update scala-xml to 2.1.0\\n [\\\\#3839](https://github.com/scalameta/metals/pull/3839)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: show test explorer misconfigurations\\n [\\\\#3828](https://github.com/scalameta/metals/pull/3828)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: Register extension parameter symbols by mtags\\n [\\\\#3814](https://github.com/scalameta/metals/pull/3814)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafix-interfaces to 0.10.0\\n [\\\\#3842](https://github.com/scalameta/metals/pull/3842)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.3\\n [\\\\#3841](https://github.com/scalameta/metals/pull/3841)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.8\\n [\\\\#3838](https://github.com/scalameta/metals/pull/3838)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.17.Final\\n [\\\\#3837](https://github.com/scalameta/metals/pull/3837)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.10.0\\n [\\\\#3832](https://github.com/scalameta/metals/pull/3832)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.13-75-f9d1bef5\\n [\\\\#3831](https://github.com/scalameta/metals/pull/3831)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: (Scala3) Don\'t navigate to enclosing symbols on go-to-definition if cursor is not on symbol\\n [\\\\#3807](https://github.com/scalameta/metals/pull/3807)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafmt-dynamic to 3.4.3\\n [\\\\#3840](https://github.com/scalameta/metals/pull/3840)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.6.0\\n [\\\\#3835](https://github.com/scalameta/metals/pull/3835)\\n ([scala-steward](https://github.com/scala-steward))\\n- test: Add test for completions of matchtype / higher-kinded type\\n [\\\\#3821](https://github.com/scalameta/metals/pull/3821)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update mill-contrib-testng to 0.10.3\\n [\\\\#3834](https://github.com/scalameta/metals/pull/3834)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update h2 to 2.1.212\\n [\\\\#3833](https://github.com/scalameta/metals/pull/3833)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix formatting after last merge\\n [\\\\#3827](https://github.com/scalameta/metals/pull/3827)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Rename extension parameter in Scala3\\n [\\\\#3800](https://github.com/scalameta/metals/pull/3800)\\n ([tanishiking](https://github.com/tanishiking))\\n- Bump Bloop with a fix for #3766\\n [\\\\#3826](https://github.com/scalameta/metals/pull/3826)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: unblock release workflow\\n [\\\\#3825](https://github.com/scalameta/metals/pull/3825)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.1.2 and 3.1.3-RC2\\n [\\\\#3822](https://github.com/scalameta/metals/pull/3822)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix release script\\n [\\\\#3823](https://github.com/scalameta/metals/pull/3823)\\n ([dos65](https://github.com/dos65))\\n- fix: handle backticked names in inffered-type\\n [\\\\#3791](https://github.com/scalameta/metals/pull/3791)\\n ([dos65](https://github.com/dos65))\\n- bloop - bump version\\n [\\\\#3818](https://github.com/scalameta/metals/pull/3818)\\n ([dos65](https://github.com/dos65))\\n- docs: add common workflow to contributing guide\\n [\\\\#3816](https://github.com/scalameta/metals/pull/3816)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Remove -release option from the Scala 3 PC\\n [\\\\#3812](https://github.com/scalameta/metals/pull/3812)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: uri encoding\\n [\\\\#3795](https://github.com/scalameta/metals/pull/3795)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs overview: mention editor pages for installation (#3796)\\n [\\\\#3811](https://github.com/scalameta/metals/pull/3811)\\n ([juhp](https://github.com/juhp))\\n- Log BSP server stderr\\n [\\\\#3789](https://github.com/scalameta/metals/pull/3789)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Support MatchType in SemanticdbTreePrinter\\n [\\\\#3787](https://github.com/scalameta/metals/pull/3787)\\n ([tanishiking](https://github.com/tanishiking))\\n- [Scala3] Fix hover on interpolator-apply\\n [\\\\#3806](https://github.com/scalameta/metals/pull/3806)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove broken nightly version\\n [\\\\#3805](https://github.com/scalameta/metals/pull/3805)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-core to 3.4.3\\n [\\\\#3802](https://github.com/scalameta/metals/pull/3802)\\n ([scala-steward](https://github.com/scala-steward))\\n- refactor: add a header object to json doctor output\\n [\\\\#3803](https://github.com/scalameta/metals/pull/3803)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: Neovim and Plug clarification\\n [\\\\#3799](https://github.com/scalameta/metals/pull/3799)\\n ([tacerus](https://github.com/tacerus))\\n- docs: add in docs about doctorVisibilityDidChange\\n [\\\\#3798](https://github.com/scalameta/metals/pull/3798)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: disable not supported Wconf for scala3\\n [\\\\#3793](https://github.com/scalameta/metals/pull/3793)\\n ([dos65](https://github.com/dos65))\\n- [Scala3] Don\'t show a tooltip on hover if cursor is not on a symbol\\n [\\\\#3792](https://github.com/scalameta/metals/pull/3792)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore(deps): bump actions/checkout from 2 to 3\\n [\\\\#3782](https://github.com/scalameta/metals/pull/3782)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc-interfaces to 2.3.2\\n [\\\\#3781](https://github.com/scalameta/metals/pull/3781)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.1\\n [\\\\#3780](https://github.com/scalameta/metals/pull/3780)\\n ([scala-steward](https://github.com/scala-steward))\\n- Try to fix flaky test by adding a delay in compilation\\n [\\\\#3765](https://github.com/scalameta/metals/pull/3765)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update mill-contrib-testng to 0.10.2\\n [\\\\#3775](https://github.com/scalameta/metals/pull/3775)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.2\\n [\\\\#3779](https://github.com/scalameta/metals/pull/3779)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.9\\n [\\\\#3777](https://github.com/scalameta/metals/pull/3777)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.13-55-1fc97fae\\n [\\\\#3774](https://github.com/scalameta/metals/pull/3774)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.3\\n [\\\\#3776](https://github.com/scalameta/metals/pull/3776)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.5\\n [\\\\#3778](https://github.com/scalameta/metals/pull/3778)\\n ([scala-steward](https://github.com/scala-steward))\\n- feat: add java version and Metals version to doctor\\n [\\\\#3772](https://github.com/scalameta/metals/pull/3772)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: nightly script\\n [\\\\#3773](https://github.com/scalameta/metals/pull/3773)\\n ([dos65](https://github.com/dos65))\\n- fix: munit test discovery when there is no package\\n [\\\\#3770](https://github.com/scalameta/metals/pull/3770)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: do not call `doctor.check()` on each build target compilation end\\n [\\\\#3768](https://github.com/scalameta/metals/pull/3768)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: reduce size of build.sbt\\n [\\\\#3759](https://github.com/scalameta/metals/pull/3759)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- scala3 - exclude 3.2.0-NIGHTLY and align tests cases\\n [\\\\#3767](https://github.com/scalameta/metals/pull/3767)\\n ([dos65](https://github.com/dos65))\\n- chore: enable `-Wunused`\\n [\\\\#3760](https://github.com/scalameta/metals/pull/3760)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix issues with non alpha numeric build target names\\n [\\\\#3756](https://github.com/scalameta/metals/pull/3756)\\n ([tgodzik](https://github.com/tgodzik))\\n- Introduce uses of buildTarget/inverseSources\\n [\\\\#3752](https://github.com/scalameta/metals/pull/3752)\\n ([Duhemm](https://github.com/Duhemm))\\n- add navigation from doctor to build target\\n [\\\\#3763](https://github.com/scalameta/metals/pull/3763)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- feat: add better munit support to the Test Explorer\\n [\\\\#3742](https://github.com/scalameta/metals/pull/3742)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- dep: bump release candidate version to 3.1.2-RC3\\n [\\\\#3753](https://github.com/scalameta/metals/pull/3753)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: specify groups for new test suites\\n [\\\\#3749](https://github.com/scalameta/metals/pull/3749)\\n ([dos65](https://github.com/dos65))\\n- fix: create `new scala file` with a single NL\\n [\\\\#3745](https://github.com/scalameta/metals/pull/3745)\\n ([dos65](https://github.com/dos65))\\n- Show better unapply signature help\\n [\\\\#3738](https://github.com/scalameta/metals/pull/3738)\\n ([tgodzik](https://github.com/tgodzik))\\n- support for creating companion objects\\n [\\\\#3709](https://github.com/scalameta/metals/pull/3709)\\n ([zmerr](https://github.com/zmerr))\\n- fix: return an error when trying to decode tasty in Scala 2\\n [\\\\#3739](https://github.com/scalameta/metals/pull/3739)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor Ammonite support\u2026\\n [\\\\#3550](https://github.com/scalameta/metals/pull/3550)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- fix: don\'t discover already discovered tests\\n [\\\\#3737](https://github.com/scalameta/metals/pull/3737)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: typo in workflow script\\n [\\\\#3735](https://github.com/scalameta/metals/pull/3735)\\n ([dos65](https://github.com/dos65))\\n- fix: do not fail nightly check job if there are no new releases\\n [\\\\#3734](https://github.com/scalameta/metals/pull/3734)\\n ([dos65](https://github.com/dos65))\\n- feat: add more feedback to user when starting a debug session\\n [\\\\#3731](https://github.com/scalameta/metals/pull/3731)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove jackson since it\'s no used in the code\\n [\\\\#3733](https://github.com/scalameta/metals/pull/3733)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prefer Scala 2.13 version over older versions\\n [\\\\#3728](https://github.com/scalameta/metals/pull/3728)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: small update to contributing docs\\n [\\\\#3732](https://github.com/scalameta/metals/pull/3732)\\n ([ckipp01](https://github.com/ckipp01))\\n- bump: bloop\\n [\\\\#3729](https://github.com/scalameta/metals/pull/3729)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feat: implement test selection request for sbt\\n [\\\\#3678](https://github.com/scalameta/metals/pull/3678)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Warn users properly when wrong release flag was used\\n [\\\\#3703](https://github.com/scalameta/metals/pull/3703)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix(doctor): ensure compilationStatus is in the json payload\\n [\\\\#3725](https://github.com/scalameta/metals/pull/3725)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add `generated` info to `Source Directories `section of `Display build target info`\\n [\\\\#3720](https://github.com/scalameta/metals/pull/3720)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: ensure user gets warned of workspace error when running with lens\\n [\\\\#3723](https://github.com/scalameta/metals/pull/3723)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: add compilation status to the doctor\\n [\\\\#3710](https://github.com/scalameta/metals/pull/3710)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump Bloop to the newest version with updated Zinc\\n [\\\\#3706](https://github.com/scalameta/metals/pull/3706)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Ensure the \\"no run or test\\" message is shown to user.\\n [\\\\#3721](https://github.com/scalameta/metals/pull/3721)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mill-contrib-testng to 0.10.1\\n [\\\\#3714](https://github.com/scalameta/metals/pull/3714)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.2\\n [\\\\#3715](https://github.com/scalameta/metals/pull/3715)\\n ([scala-steward](https://github.com/scala-steward))\\n- Exclude generated source items from FileWatcher (sbt BSP)\\n [\\\\#3694](https://github.com/scalameta/metals/pull/3694)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update flyway-core to 8.5.3\\n [\\\\#3717](https://github.com/scalameta/metals/pull/3717)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.8.2\\n [\\\\#3716](https://github.com/scalameta/metals/pull/3716)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fallback to current file contents always\\n [\\\\#3711](https://github.com/scalameta/metals/pull/3711)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move gabro to \\"past maintainers\\" in README\\n [\\\\#3708](https://github.com/scalameta/metals/pull/3708)\\n ([gabro](https://github.com/gabro))\\n- refactor: use \\"using\\" instead of \\"implicit\\" in Scala 3 signature help.\\n [\\\\#3707](https://github.com/scalameta/metals/pull/3707)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: scala3 completion - fix isses with code indented using tabs\\n [\\\\#3702](https://github.com/scalameta/metals/pull/3702)\\n ([dos65](https://github.com/dos65))\\n- fix: add test case for #3625\\n [\\\\#3704](https://github.com/scalameta/metals/pull/3704)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix completions on dot in expression evaluator\\n [\\\\#3705](https://github.com/scalameta/metals/pull/3705)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with Bloop snapshot versions\\n [\\\\#3699](https://github.com/scalameta/metals/pull/3699)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not decode every URI when invoking `toAbsolutePath`\\n [\\\\#3701](https://github.com/scalameta/metals/pull/3701)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: make release instruction more structured\\n [\\\\#3700](https://github.com/scalameta/metals/pull/3700)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix DefinitionCrossLspSuite\\n [\\\\#3692](https://github.com/scalameta/metals/pull/3692)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(docs): get snapshot version for docs from 2.13 now\\n [\\\\#3693](https://github.com/scalameta/metals/pull/3693)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump release candidate version to 3.1.2-RC2\\n [\\\\#3697](https://github.com/scalameta/metals/pull/3697)\\n ([tgodzik](https://github.com/tgodzik))\\n- ci: update Metals version in mtags release workflow\\n [\\\\#3695](https://github.com/scalameta/metals/pull/3695)\\n ([dos65](https://github.com/dos65))\\n- fix: adjust tests for 3.2.0-NIGHTLY\\n [\\\\#3687](https://github.com/scalameta/metals/pull/3687)\\n ([dos65](https://github.com/dos65))\\n- Fix named arg completion when parameter contains $\\n [\\\\#3686](https://github.com/scalameta/metals/pull/3686)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix flaky WorkspaceSymbolLspSuite test\\n [\\\\#3691](https://github.com/scalameta/metals/pull/3691)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: migrate Metals to 2.13\\n [\\\\#3631](https://github.com/scalameta/metals/pull/3631)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: add release notes\\n [\\\\#3682](https://github.com/scalameta/metals/pull/3682)\\n ([kpodsiad](https://github.com/kpodsiad))"},{"id":"/2022/03/08/aluminium","metadata":{"permalink":"/metals/blog/2022/03/08/aluminium","source":"@site/blog/2022-03-08-aluminium.md","title":"Metals v0.11.2 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.2, which focuses on improving overall user experience.","date":"2022-03-08T00:00:00.000Z","formattedDate":"March 8, 2022","tags":[],"readingTime":8.285,"hasTruncateMarker":false,"authors":[{"name":"Kamil Podsiadlo","url":"https://twitter.com/podsiadel","imageURL":"https://github.com/kpodsiad.png"}],"frontMatter":{"author":"Kamil Podsiadlo","title":"Metals v0.11.2 - Aluminium","authorURL":"https://twitter.com/podsiadel","authorImageURL":"https://github.com/kpodsiad.png"},"prevItem":{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"},"nextItem":{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"}},"content":"We\'re happy to announce the release of Metals v0.11.2, which focuses on improving overall user experience.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
Commits since last release197
Merged PRs94
Contributors11
Closed issues19
New features7
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Reduce indexing time in monorepos on MacOS\\n- Display build target info\\n- View source jar files as virtual docs\\n- Improve completions for Scala 3\\n- [Test Explorer] Detect and run single tests for JUnit4\\n\\n## Reduce indexing time in monorepos on MacOS\\n\\nThanks to changes made by [Duhemm](https://github.com/Duhemm), Metals on MacOS can now index monorepo workspaces much faster than before. After changes, we observed at times **over 10 times faster** indexing times in the workspaces where only a few submodules needed to be imported.\\n\\nHere are a few examples of indexing improvement. They are not actual benchmarks of any kind, but more of rough estimations of improvements in a couple of example repos.\\n\\n| Before | After |\\n| ----------- | ---------- |\\n| \\\\>10minutes | ~30seconds |\\n| ~40seconds | ~4s |\\n\\nHowever, take into mind that indexing speedup heavily depends on your repository structure. The more imported modules which don\'t need to be imported, the greater the speed improvement is.\\n\\nIf you are interested in details you can check out the related [pull request](https://github.com/scalameta/metals/pull/3665).\\n\\n## Display build target info\\n\\nThanks to the [Arthurm1](https://github.com/Arthurm1) Metals is now able to display all important information about modules.\\nThis brand new feature gathers in one view information such as:\\n\\n- javac and scalac options\\n- dependent modules\\n- projects classpath\\n- and many more\\n\\n![display-build-target-info](https://i.imgur.com/XGyJEsl.gif)\\n\\n## [vscode] View source jar files as virtual docs\\n\\nPreviously, when the client wanted to browse files in source jars source, these files were extracted and saved in the `metals/readonly/dependencies` directory. With the help of [virtual documents](https://code.visualstudio.com/api/extension-guides/virtual-documents) Metals can show you dependencies in readonly files without unnecessary copying.\\nThanks [Arthurm1](https://github.com/Arthurm1) for this feature!\\n\\nTogether with Metals tab, this feature could be used to browse through your dependencies\' sources. Just run the `Metals: Reveal Active File in Side Bar` command and browse through both dependencies and source code seamlessly.\\n\\n![virtual-docs-navigation](https://imgur.com/HsuW8Hn.gif)\\n\\nCurrently, `Metals: Reveal Active File in Side Bar` works only for Scala 2.\\n\\n## Improve completions for Scala 3\\n\\nCompletion suggestions for different Scala keywords now work with most of the Scala 3 keywords. This includes for example `given` and `enum`, it should also work even if defining things in toplevel without a wrapping class or object.\\n![keyword-completions](https://i.imgur.com/4BUxCDK.gif)\\n\\nAnother improvement for Scala 3 completions is better support for showing scope completions, when writing in an empty line. Previously, we would not show correct completions when no identifier was specified.\\n\\n```scala\\nobject Foo:\\n def bar: Int = 42\\n def baz: Int =\\n val x = 1\\n val y = 2\\n @@\\n```\\n\\nIn the above situation with cursor position indicated by `@@` we will now properly show `bar` and `baz` completions.\\n\\n## [Test Explorer] Detect and run single tests for JUnit4\\n\\nWe\'re actively working on improving the Test Explorer and making it better with each release.\\nFrom this release, Metals is able to run or debug single test in JUnit4.\\n\\nCurrently, this feature **only works when using Bloop as your build server**, but in a future release there will be support added for sbt as well.\\n\\n![test-explorer-single-tests](https://imgur.com/FbgSTGr.gif)\\n\\n## [vscode] Add mirror setting to help coursier set up\\n\\nIn order to bootstrap Metals, vscode\'s extension uses the coursier script which needs access to `repo1.maven.org`. Previously, this URL couldn\'t be configured which was causing problems on the machines that didn\'t have access to repo1.maven.org.\\n\\nThanks to [tgodzik](https://github.com/tgodzik)\'s work from now on it\'s possible to define `metals.coursierMirror` property.\\n\\n![coursier-mirror](https://imgur.com/iLB079M.png)\\n\\nMore information about mirrors can be found at [coursier documentation](https://get-coursier.io/blog/#mirrors).\\n\\n## Miscellaneous\\n\\n- Show implicit decorations in worksheets\\n [\\\\#3582](https://github.com/scalameta/metals/pull/3582)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add current env variables to bloopInstall\\n [\\\\#3662](https://github.com/scalameta/metals/pull/3662)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with Ammonite multistage scripts\\n [\\\\#3627](https://github.com/scalameta/metals/pull/3627)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print information about candidates searched when missing JDK sources\\n [\\\\#3606](https://github.com/scalameta/metals/pull/3606)\\n ([tgodzik](https://github.com/tgodzik))\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.1..v0.11.2\\n 37\\tTomasz Godzik\\n 24\\tVadim Chelyshov\\n 22\\tScala Steward\\n 15\\tArthur McGibbon\\n 8\\tKamil Podsiadlo\\n 7\\tckipp01\\n 6\\tKamil Podsiad\u0142o\\n 1\\tMartin Duhem\\n 1\\tAdrien Piquerez\\n 1\\tJerome Wuerf\\n 1\\tHugo van Rijswijk\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.2](https://github.com/scalameta/metals/tree/v0.11.2) (2022-03-08)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.1...v0.11.2)\\n\\n**Merged pull requests:**\\n\\n- Go to definition of synthetic symbols.\\n [\\\\#3683](https://github.com/scalameta/metals/pull/3683)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t watch entire workspace on MacOS\\n [\\\\#3665](https://github.com/scalameta/metals/pull/3665)\\n ([Duhemm](https://github.com/Duhemm))\\n- fix: Add test case for topelevel tuple hover\\n [\\\\#3676](https://github.com/scalameta/metals/pull/3676)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala3 PC refactorings\\n [\\\\#3651](https://github.com/scalameta/metals/pull/3651)\\n ([dos65](https://github.com/dos65))\\n- fix: Add tests for Scala 3 toplevel enums\\n [\\\\#3674](https://github.com/scalameta/metals/pull/3674)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: fix flaky test provider suite\\n [\\\\#3673](https://github.com/scalameta/metals/pull/3673)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scribe, scribe-file, scribe-slf4j to 3.8.0\\n [\\\\#3669](https://github.com/scalameta/metals/pull/3669)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.3.1\\n [\\\\#3672](https://github.com/scalameta/metals/pull/3672)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.1\\n [\\\\#3671](https://github.com/scalameta/metals/pull/3671)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-buildinfo to 0.11.0\\n [\\\\#3667](https://github.com/scalameta/metals/pull/3667)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 31.1-jre\\n [\\\\#3668](https://github.com/scalameta/metals/pull/3668)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.1\\n [\\\\#3670](https://github.com/scalameta/metals/pull/3670)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: Add test case when using Left class and Scala 3\\n [\\\\#3666](https://github.com/scalameta/metals/pull/3666)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change hashing to lastModified\\n [\\\\#3611](https://github.com/scalameta/metals/pull/3611)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to 1.4.13\\n [\\\\#3664](https://github.com/scalameta/metals/pull/3664)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with nightlies tests\\n [\\\\#3663](https://github.com/scalameta/metals/pull/3663)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not show test explorer related error for client which don\'t implement it\\n [\\\\#3661](https://github.com/scalameta/metals/pull/3661)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add current env variables to bloopInstall\\n [\\\\#3662](https://github.com/scalameta/metals/pull/3662)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: add a post about release-related changes\\n [\\\\#3653](https://github.com/scalameta/metals/pull/3653)\\n ([dos65](https://github.com/dos65))\\n- fix: support Scala 2.11 PC on jdk higher than 8\\n [\\\\#3658](https://github.com/scalameta/metals/pull/3658)\\n ([dos65](https://github.com/dos65))\\n- feat: allow running single test\\n [\\\\#3619](https://github.com/scalameta/metals/pull/3619)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump scalameta to 4.5.0\\n [\\\\#3652](https://github.com/scalameta/metals/pull/3652)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change displayBuildTarget to listBuildTargets\\n [\\\\#3649](https://github.com/scalameta/metals/pull/3649)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Fix issues in tests for Scala 3 Nightlies\\n [\\\\#3650](https://github.com/scalameta/metals/pull/3650)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: release workflow - prevent parallel publishing to sonatype\\n [\\\\#3644](https://github.com/scalameta/metals/pull/3644)\\n ([dos65](https://github.com/dos65))\\n- Cancel PRs automatically if new commits are pushed\\n [\\\\#3646](https://github.com/scalameta/metals/pull/3646)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: check scala3 nigtly - exclude existing latest\\n [\\\\#3645](https://github.com/scalameta/metals/pull/3645)\\n ([dos65](https://github.com/dos65))\\n- Scala3 emptyline completions\\n [\\\\#3629](https://github.com/scalameta/metals/pull/3629)\\n ([dos65](https://github.com/dos65))\\n- Update millw to 0.4.2\\n [\\\\#3641](https://github.com/scalameta/metals/pull/3641)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: actions, discover new scala3 nigtly properly\\n [\\\\#3640](https://github.com/scalameta/metals/pull/3640)\\n ([dos65](https://github.com/dos65))\\n- Fix FileDecoderProviderLspSuite to work locally\\n [\\\\#3639](https://github.com/scalameta/metals/pull/3639)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scribe, scribe-file, scribe-slf4j to 3.7.1\\n [\\\\#3634](https://github.com/scalameta/metals/pull/3634)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix showing virtual docs in jars with paths that need escaping\\n [\\\\#3632](https://github.com/scalameta/metals/pull/3632)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update undertow-core to 2.2.16.Final\\n [\\\\#3635](https://github.com/scalameta/metals/pull/3635)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.4\\n [\\\\#3636](https://github.com/scalameta/metals/pull/3636)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.5.2\\n [\\\\#3633](https://github.com/scalameta/metals/pull/3633)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.6.2\\n [\\\\#3638](https://github.com/scalameta/metals/pull/3638)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.6.Final\\n [\\\\#3637](https://github.com/scalameta/metals/pull/3637)\\n ([scala-steward](https://github.com/scala-steward))\\n- Index non-scala target dependency sources\\n [\\\\#3628](https://github.com/scalameta/metals/pull/3628)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Fix issues with Ammonite multistage scripts\\n [\\\\#3627](https://github.com/scalameta/metals/pull/3627)\\n ([tgodzik](https://github.com/tgodzik))\\n- View source jar files as virtual docs\\n [\\\\#3143](https://github.com/scalameta/metals/pull/3143)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Bump debug-adapter to 2.0.13\\n [\\\\#3626](https://github.com/scalameta/metals/pull/3626)\\n ([adpi2](https://github.com/adpi2))\\n- docs: provide latest versions\\n [\\\\#3618](https://github.com/scalameta/metals/pull/3618)\\n ([dos65](https://github.com/dos65))\\n- docs: describe how to add new Scala version support to the existing release\\n [\\\\#3617](https://github.com/scalameta/metals/pull/3617)\\n ([dos65](https://github.com/dos65))\\n- feat, refactor: use notification to send test updates\\n [\\\\#3554](https://github.com/scalameta/metals/pull/3554)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Display build target info\\n [\\\\#3380](https://github.com/scalameta/metals/pull/3380)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- scalafmt - newlines.inInterpolation = avoid\\n [\\\\#3614](https://github.com/scalameta/metals/pull/3614)\\n ([dos65](https://github.com/dos65))\\n- refactor: [Scala 3] Extract hover to a separate file\\n [\\\\#3613](https://github.com/scalameta/metals/pull/3613)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(fmt): bump scalafmt to 3.4.0\\n [\\\\#3610](https://github.com/scalameta/metals/pull/3610)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: compare long numbers in TVP\\n [\\\\#3607](https://github.com/scalameta/metals/pull/3607)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scribe to 3.6.10\\n [\\\\#3598](https://github.com/scalameta/metals/pull/3598)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ignore UncheckedIOException coming from broken source jars\\n [\\\\#3609](https://github.com/scalameta/metals/pull/3609)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print information about candidates searched when missing JDK sources\\n [\\\\#3606](https://github.com/scalameta/metals/pull/3606)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: add range to symbol definition\\n [\\\\#3605](https://github.com/scalameta/metals/pull/3605)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Revert to Mdoc 2.2.24 for Scala 2.11\\n [\\\\#3601](https://github.com/scalameta/metals/pull/3601)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): update setup-action\\n [\\\\#3603](https://github.com/scalameta/metals/pull/3603)\\n ([ckipp01](https://github.com/ckipp01))\\n- Migrate to the newest H2 version\\n [\\\\#3595](https://github.com/scalameta/metals/pull/3595)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: `SemanticdbFeatureProvider` trait\\n [\\\\#3602](https://github.com/scalameta/metals/pull/3602)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Do not insert inferred type on variable bound to another\\n [\\\\#3600](https://github.com/scalameta/metals/pull/3600)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show implicit decorations in worksheets\\n [\\\\#3582](https://github.com/scalameta/metals/pull/3582)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.33\\n [\\\\#3592](https://github.com/scalameta/metals/pull/3592)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.0\\n [\\\\#3591](https://github.com/scalameta/metals/pull/3591)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.3\\n [\\\\#3590](https://github.com/scalameta/metals/pull/3590)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.5.0\\n [\\\\#3588](https://github.com/scalameta/metals/pull/3588)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.7.1\\n [\\\\#3587](https://github.com/scalameta/metals/pull/3587)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.10.0\\n [\\\\#3585](https://github.com/scalameta/metals/pull/3585)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix goto definition for local synthetics\\n [\\\\#3580](https://github.com/scalameta/metals/pull/3580)\\n ([tgodzik](https://github.com/tgodzik))\\n- minor: remove non-relevant things\\n [\\\\#3564](https://github.com/scalameta/metals/pull/3564)\\n ([dos65](https://github.com/dos65))\\n- Make sure we only analyze stacktrace lines that do look the part\\n [\\\\#3578](https://github.com/scalameta/metals/pull/3578)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs(ammonite): add note about ammonite support\\n [\\\\#3579](https://github.com/scalameta/metals/pull/3579)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t focus diagnotics if compialtion returned with error\\n [\\\\#3577](https://github.com/scalameta/metals/pull/3577)\\n ([tgodzik](https://github.com/tgodzik))\\n- Pass -Xsource:3 to scalafix organize-imports action if present\\n [\\\\#3574](https://github.com/scalameta/metals/pull/3574)\\n ([hugo-vrijswijk](https://github.com/hugo-vrijswijk))\\n- Insert missing comma\\n [\\\\#3573](https://github.com/scalameta/metals/pull/3573)\\n ([ossScharom](https://github.com/ossScharom))\\n- cleanup: remove unused stuff from CompilerInterfaces\\n [\\\\#3572](https://github.com/scalameta/metals/pull/3572)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: add possibility to define callback for `BatchedFunction`\\n [\\\\#3571](https://github.com/scalameta/metals/pull/3571)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: Open other window when using Analyze Stacktrace\\n [\\\\#3540](https://github.com/scalameta/metals/pull/3540)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add support for Scala 3.1.2-RC1\\n [\\\\#3569](https://github.com/scalameta/metals/pull/3569)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: [Scala 3] Show exact literal type\\n [\\\\#3567](https://github.com/scalameta/metals/pull/3567)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: [Scala 3] Add keyword completions\\n [\\\\#3560](https://github.com/scalameta/metals/pull/3560)\\n ([tgodzik](https://github.com/tgodzik))\\n- release: fix last 5 nigtly version selection\\n [\\\\#3558](https://github.com/scalameta/metals/pull/3558)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.1.1\\n [\\\\#3555](https://github.com/scalameta/metals/pull/3555)\\n ([tgodzik](https://github.com/tgodzik))\\n- actions: mtags release adjustments\\n [\\\\#3557](https://github.com/scalameta/metals/pull/3557)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Mtags publishing - move all logic to ci-script\\n [\\\\#3553](https://github.com/scalameta/metals/pull/3553)\\n ([dos65](https://github.com/dos65))\\n- docs: mention about pre-release version of Metals extension\\n [\\\\#3552](https://github.com/scalameta/metals/pull/3552)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Actions] Mtags release\\n [\\\\#3551](https://github.com/scalameta/metals/pull/3551)\\n ([dos65](https://github.com/dos65))\\n- docs: Add docs for discover-test-suites\\n [\\\\#3546](https://github.com/scalameta/metals/pull/3546)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: add a small note about decode not working on extra file types.\\n [\\\\#3549](https://github.com/scalameta/metals/pull/3549)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Actions] Scala3 Nightly check - yet another fix\\n [\\\\#3548](https://github.com/scalameta/metals/pull/3548)\\n ([dos65](https://github.com/dos65))\\n- [Actions] One more fix to check_scala3_nightly job\\n [\\\\#3547](https://github.com/scalameta/metals/pull/3547)\\n ([dos65](https://github.com/dos65))\\n- Compare only uppercase MD5\\n [\\\\#3545](https://github.com/scalameta/metals/pull/3545)\\n ([tgodzik](https://github.com/tgodzik))\\n- [JavaInteractiveSemanticdb] Add test-case to cover --patch-module flag usage\\n [\\\\#3538](https://github.com/scalameta/metals/pull/3538)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Install coursier for nightly checks\\n [\\\\#3543](https://github.com/scalameta/metals/pull/3543)\\n ([dos65](https://github.com/dos65))\\n- refactor: check lowercase test-user-interface\\n [\\\\#3544](https://github.com/scalameta/metals/pull/3544)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Actions] Trigger Scala3-nightly mtags publishing automatically\\n [\\\\#3541](https://github.com/scalameta/metals/pull/3541)\\n ([dos65](https://github.com/dos65))\\n- Add release notes for 0.11.1\\n [\\\\#3524](https://github.com/scalameta/metals/pull/3524)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/02/23/towards-better-releases","metadata":{"permalink":"/metals/blog/2022/02/23/towards-better-releases","source":"@site/blog/2022-02-23-towards-better-releases.md","title":"Towards better releases","description":"As many of you might have noticed, the previous 0.11.0 release didn\'t go smoothly due to a number of issues that came to light only after the release was published.","date":"2022-02-23T00:00:00.000Z","formattedDate":"February 23, 2022","tags":[],"readingTime":2.915,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Towards better releases","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"},"nextItem":{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"}},"content":"As many of you might have noticed, the previous `0.11.0` release didn\'t go smoothly due to a number of issues that came to light only after the release was published.\\nSome of them were quite critical and the only option to continue to work was to downgrade Metals until `0.11.1` arrived.\\n\\nWe apologize for that!\\n\\nHowever, this post is not only about saying sorry.\\nIn order to avoid such situations in the future we have taken it upon ourselves to take steps that will allow us to detect issues earlier.\\n\\nThere were two main improvements that were implemented since the last release:\\n- Decouple Metals releases from Scala releases\\n- Pre-release version for VSCode extension\\n\\n## Decouple Metals releases from Scala releases\\n\\nWe haven\'t mentioned this in the release notes for `0.11.0`, but since that version we have changed the way Metals detects whether a specific version is supported and thanks to that we are now able to backpublish new Scala versions support.\\nThe support of Scala `3.1.1` Scala was added to Metals `0.11.1` using this new mechanism.\\nIt allows us to provide new Scala version support much faster than before and also support Scala3-NIGTHTLY versions.\\n\\nThe additional benefit from this approach is that it eliminates time pressure for future Metals releases.\\nIf you look at the release notes for previous versions, almost every one brings at least one new compiler version support.\\nHaving this limitation and the need to provide the new release as soon as possible always increases the chances of something affecting the release. So, now with this new feature we are able to take our time for final fixes and do releases with more confidence.\\n\\nThe current state for Scala versions support is:\\n- Every Metals release comes with support to all known supported Scala versions + last 5 latest Scala3-NIGHTLY versions.\\n This is applied to SNAPSHOT releases too.\\n- In case a new Scala version appear, the latest Metals release will receive its support automatically.\\n For example, the next Scala `3.1.2` will be supported only by the latest Metals `0.11.1` but not by `0.11.0`.\\n That works for Scala3-NIGHTLY versions too. Metals has a scheduled daily job that publishes artifacts for newly discovered NIGHTLY versions.\\n\\n\\n## Pre-release version for VSCode extension\\n\\nAnother great feature that was added was the possibility to use the `pre-release` versions of the Metals extension.\\nIf you open the Metals extension page, you will find a `Switch to Pre-release version` button.\\nThis version is like a snapshot, it\'s published for every change in the [scalameta/metals-vscode](https://github.com/scalameta/metals-vscode) repository.\\n\\nIt allows to test not yet released features, as well as to check if everything works fine for your workspace using the latest main branch. \\nSome issues might be observed only under the particular version of the client as was the case with the ill fated 0.11.0 release.\\n\\nAlso, there is a new setting `Metals: Suggest Latest Upgrade` that is enabled by default for `pre-release`.\\nIf you have it enabled, you will receive notifications with an option to upgrade Metals server version to the latest snapshot once a day.\\n\\nWe hope that some brave users will start using this `pre-release` version and report issues if you encounter any.\\nThis will help us spot problems earlier.\\n\\n_Notice_:\\nUsing pre-release versions may result in a less stable experience.\\nIn case of issues, if you are switching back from `pre-release` to `release` you also need to downgrade `Metals: Server Version` manually. The actual version might be found at [docs page](https://scalameta.org/metals/docs/#latest-metals-server-versions) or [latest.json](https://scalameta.org/metals/latests.json)"},{"id":"/2022/01/17/aluminium","metadata":{"permalink":"/metals/blog/2022/01/17/aluminium","source":"@site/blog/2022-01-17-aluminium.md","title":"Metals v0.11.1 - Aluminium","description":"Metals v0.11.1 is a bugfix release needed to fix a couple of performance","date":"2022-01-17T00:00:00.000Z","formattedDate":"January 17, 2022","tags":[],"readingTime":1.955,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.1 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"},"nextItem":{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"}},"content":"Metals v0.11.1 is a bugfix release needed to fix a couple of performance\\nregressions caused by some of the recent changes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release43
Merged PRs21
Contributors6
Closed issues3
New features0
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/46?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Reenabled test explorer as the default in Visual Studio Code (thanks\\n [kpodsiad](https://github.com/kpodsiad) for the quick fix!)\\n\\n## Miscellaneous\\n\\n- Fix test explorer performance issues. [kpodsiad](https://github.com/kpodsiad)\\n- Fix performance in large files. [tgodzik](https://github.com/tgodzik)\\n- fix user config for java formatting. [Arthurm1](https://github.com/Arthurm1)\\n- Call javap with `-private` flag. [durban](https://github.com/durban)\\n- Fix issues when using Metals analyze with inner classes. [durban](https://github.com/durban)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.0..v0.11.1\\nScala Steward\\nTomasz Godzik\\nKamil Podsiadlo\\nVadim Chelyshov\\nArthur McGibbon\\nDaniel Urban\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.1](https://github.com/scalameta/metals/tree/v0.11.1) (2022-01-17)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.0...v0.11.1)\\n\\n**Merged pull requests:**\\n\\n- Revert scribe update [\\\\#3529](https://github.com/scalameta/metals/pull/3529)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Print path for which snapshot couldn\'t be loaded\\n [\\\\#3525](https://github.com/scalameta/metals/pull/3525)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Test Explorer [\\\\#3528](https://github.com/scalameta/metals/pull/3528)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix ClassFinder bug with inner classes\\n [\\\\#3522](https://github.com/scalameta/metals/pull/3522)\\n ([durban](https://github.com/durban))\\n- Call javap with -private flag\\n [\\\\#3523](https://github.com/scalameta/metals/pull/3523)\\n ([durban](https://github.com/durban))\\n- Update ammonite-util to 2.5.1\\n [\\\\#3516](https://github.com/scalameta/metals/pull/3516)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix test explorer performance issues\\n [\\\\#3510](https://github.com/scalameta/metals/pull/3510)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafix-interfaces to 0.9.34\\n [\\\\#3521](https://github.com/scalameta/metals/pull/3521)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.1\\n [\\\\#3520](https://github.com/scalameta/metals/pull/3520)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.9\\n [\\\\#3519](https://github.com/scalameta/metals/pull/3519)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.4 [\\\\#3518](https://github.com/scalameta/metals/pull/3518)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.0\\n [\\\\#3517](https://github.com/scalameta/metals/pull/3517)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.16\\n [\\\\#3514](https://github.com/scalameta/metals/pull/3514)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.34\\n [\\\\#3513](https://github.com/scalameta/metals/pull/3513)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use ArraySeq instead of List for Diffutils\\n [\\\\#3512](https://github.com/scalameta/metals/pull/3512)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix user config for java formatting\\n [\\\\#3504](https://github.com/scalameta/metals/pull/3504)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- [JavaInteractiveSemanticdb] Fix Jdk version parsing\\n [\\\\#3505](https://github.com/scalameta/metals/pull/3505)\\n ([dos65](https://github.com/dos65))\\n- JavaInteractiveSemanticDb - plugin version fix\\n [\\\\#3499](https://github.com/scalameta/metals/pull/3499)\\n ([dos65](https://github.com/dos65))\\n- [Github] switch to the latest release in bug reports and workflows\\n [\\\\#3502](https://github.com/scalameta/metals/pull/3502)\\n ([dos65](https://github.com/dos65))\\n- Add release notes for Metals 0.11.0\\n [\\\\#3493](https://github.com/scalameta/metals/pull/3493)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove workaround for the wrong Java semanticdb md5 hash\\n [\\\\#3498](https://github.com/scalameta/metals/pull/3498)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/01/12/aluminium","metadata":{"permalink":"/metals/blog/2022/01/12/aluminium","source":"@site/blog/2022-01-12-aluminium.md","title":"Metals v0.11.0 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.0! Due to the number of","date":"2022-01-12T00:00:00.000Z","formattedDate":"January 12, 2022","tags":[],"readingTime":15.19,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.0 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"},"nextItem":{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.11.0! Due to the number of\\nchanges in this release we decided to introduce one more minor version before\\nMetals 1.0.0, which is planned to come this year.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release337
Merged PRs136
Contributors11
Closed issues42
New features11
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/45?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add CFR class file viewer.\\n- [Scala 3] Type annotations on code selection.\\n- Simplify usage of sbt server.\\n- Better support for mill BSP.\\n- Extract value code action.\\n- Add command to run current file.\\n- Support test explorer API.\\n- Add go to definition via links for synthetic decorations.\\n- Basic Java support.\\n- Add support for Scala 2.13.8.\\n- Reworked Metals Doctor.\\n\\n## Add CFR class file viewer\\n\\nIn addition to the recently added semanticdb, tasty and javap functionalities,\\nthanks to the efforts of [Arthurm1](https://github.com/Arthurm1), it\'s now\\npossible to decompile class files using Lee Benfield\'s\\n[CFR (Class File Reader)](https://www.benf.org/other/cfr/faq.html).\\n\\nCFR decompiles class files to java, which is much more readable than using\\n`javap`.\\n\\n![cfr](https://i.imgur.com/exDFGyT.gif)\\n\\nIn the future this might help in go to definition for jars that do not have a\\ncorresponding source jar, which is what Metals uses today.\\n\\nEditor support: VS Code, nvim-metals, Sublime Text\\n\\n**Extension authors:**\\n\\nThis can be added as a new command for the users to invoke.\\n\\n## [Scala 3] Type annotations on code selection\\n\\nIn one of the last releases\\n[v0.10.8](https://scalameta.org/metals/blog/2021/10/26/tungsten#type-annotations-on-code-selection)\\nwe added the ability to inspect the type of an expression that is currently\\nselected. We are happy to announce that this functionality is now also available\\nfor Scala 3, which is thanks to the continued effort of the team to bring the\\nusers the best Scala 3 experience possible.\\n\\nEditor support: VS Code, nvim-metals, Sublime Text\\n\\n## Simplify usage of sbt server\\n\\nPreviously if you wanted to use sbt as your build server instead of the default\\nBloop you\'d need to ensure a .bsp/sbt.json file existed before you tried to\\nswitch your build server. We originally created the metals.generate-bsp command\\nfor this, but realized this potentially forced extra steps on the user. To make\\nthis simpler, now even if no BSP entry exists for sbt and you attempt to switch\\nyour build server to sbt via the metals.bsp-switch command, we\'ll either use the\\nexisting .bsp/sbt.json file if one exists or automatically generate it (needs at\\nleast sbt 1.4.1) for you and then switch to it.\\n\\nEditor support: All.\\n\\n## Better support for mill BSP\\n\\nRecently [Mill](https://github.com/com-lihaoyi/mill) has complete revamped their\\nBSP implementation allowing for a much better experience for Metals users. Just\\nlike sbt, you can now use the `metals.bsp-switch` command to use Mill as your\\nBSP server (needs at least Mill 0.10.0-M4). Keep in mind that the BSP support in\\nMill is still a work-in-progress. If you are interested in Mill BSP and you\'re a\\nMetals user, feel free to include your input\\n[here](https://github.com/com-lihaoyi/mill/issues/1546) as they are requesting\\nfeedback on improving the experience.\\n\\nEditor support: All.\\n\\n## Extract value code action\\n\\nIn this release we introduce a new code action that allows users to\\nautomatically extract method parameter to a separate value.\\n\\nFor example in a invocation such as:\\n\\n```scala\\n@main\\ndef main(name: String) =\\n println(\\"Hello \\" + name + \\"!\\")\\n```\\n\\nwhen user invokes the new code action they will see:\\n\\n```scala\\n@main\\ndef main(name: String) =\\n val newValue = \\"Hello \\" + name + \\"!\\"\\n println(newValue)\\n```\\n\\nThis should work correctly for both Scala 2 and Scala 3, in which case it will\\ntry to maintain your coding style even if a block is needed.\\n\\nOne important limitation is that this new code action doesn\'t allow extracting\\nlambdas or partial functions, as this has the potential of breaking your code.\\n\\nCurrently, this works only in method parameters and Metals will try to choose\\nthe exact parameter to extract even if there is a number of nested ones. This\\nwill most likely be improved in the future to also be used in other places such\\nas if conditions or to allow users to choose the exact parameter they want to\\nextract.\\n\\nEditor support: All\\n\\n## Add command to run current file\\n\\nBased on the work of [ckipp01](https://github.com/ckipp01) in one of the\\n[previous releases](https://scalameta.org/metals/blog/2021/04/06/tungsten/#smoother-main-and-test-discovery)\\nit\'s now possible to invoke a command to run anything in the current file. This\\nmeans that if we use this new command anything that is located within the\\ncurrently focused file, whether it\'s tests or a main class, will be properly\\ndiscovered and run.\\n\\nIn Visual Studio Code this replaces the previously default config generation and\\nnow if no `launch.json` is specified in the workspace, any file can be run using\\nthe default run command (`F5`).\\n\\nEditor support: Any editor that supports DAP\\n\\n## Support test explorer API.\\n\\nMetals 0.11.0 implements Visual Studio Code\'s Testing API. According to the\\n[documentation](https://code.visualstudio.com/api/extension-guides/testing):\\n\\n_The Testing API allows Visual Studio Code extensions to discover tests in the\\nworkspace and publish results. Users can execute tests in the Test Explorer view\\nand from decorations. With these new APIs, Visual Studio Code supports richer\\ndisplays of outputs and diffs than was previously possible._\\n\\nTest Explorer UI is a new default way to run/debug test suites and replaces Code\\nLenses. The new UI adds a testing view, which shows all test suites declared in\\nproject\'s modules. From this panel it\'s also possible to run/debug test or to\\nnavigate to test\'s definition.\\n\\n![test-explorer](https://i.imgur.com/Z3VtS0O.gif)\\n\\nCode Lenses are still the default in other editors and can be brought back by\\nsetting `\\"metals.testUserInterface\\": \\"Code Lenses\\"`\\n\\nEditor support: Visual Studio Code\\n\\n## Go to definition via links for synthetic decorations.\\n\\nSince\\n[Metals v0.9.6](https://scalameta.org/metals/blog/2020/11/20/lithium/#show-implicit-conversions-and-classes)\\nit\'s possible to show additional information about sythetic code that is being\\ngenerated by the compiler. This includes implicit parameters, classes and\\nconversions. It wasn\'t however possible to find their definitions. This\\nlimitation was mostly due to the lack of proper UI options in different editors.\\n\\nRecently, we\'ve managed to work around it by using command links that can be\\nrendered in the hover and will bring the user to the right definition.\\n\\n![synthetic-def](https://i.imgur.com/YyHVmLX.gif)\\n\\nEditor support: Visual Studio Code, Sublime Text\\n\\n## Basic Java support\\n\\nThanks to the the effort led by [Arthurm1](https://github.com/Arthurm1) Metals\\nnow supports a subset of features for Java files and even Java only build\\ntargets. Currently the biggest missing piece is interactive compiler that would\\nallow us to properly support features such as completions, hover or signature\\nhelp.\\n\\n![java](https://i.imgur.com/SJvLTRL.gif)\\n\\nThis was possible thanks to using the Java semanticdb plugin included in\\n[lsif Java project](https://github.com/sourcegraph/lsif-java) from\\n[sourcegraph](https://about.sourcegraph.com/) and especially the work by\\n[olafurpg](https://github.com/olafurpg).\\n\\nThe support includes:\\n\\n- formatting\\n- code folding\\n- go to definition\\n- references\\n- go to implementation\\n- rename\\n- run/debug code lense for Java main classes\\n\\nThese functionalities will also now work thanks to\\n[dos65](https://github.com/dos65)\'s work in dependency sources.\\n\\nWe are still missing some of the interactive features such as:\\n\\n- hover\\n- completions\\n- signature help\\n- selection range\\n\\nAn important note to make is that, while we still want to support some more\\nfeatures, Metals is not a Java language server, so we will never offer the same\\namount of functionality as the tools and IDEs focused on the Java language.\\nCurrent discussion about the scope of Java support can be found in\\n[this issue](https://github.com/scalameta/metals/issues/3398). Especially, we\\nwill most likely not support any more advanced refactorings or presentation\\ncompiler functions.\\n\\n**Visual Studio Code:** In case you want to use Metals in a Java only workspace\\nit\'s now also possible to start Metals using a new `Start Metals` button in the\\nthe Metals tab. We don\'t want to start Metals as a default in such cases as some\\nother language server might be more suitable.\\n\\nEditor support: All\\n\\n## Reworked Metals Doctor\\n\\nDue to the other changes in this release the Metals Doctor needed to be reworked\\nto better show the different targets that are available in the workspace as well\\nas try to explain a bit better what is supported and why it might not work.\\n\\n![doctor](https://user-images.githubusercontent.com/3807253/147948980-401e3f5a-5130-4f19-b59c-d737d9092208.png)\\n\\nThe `type` column can now have 3 different values `Scala `,\\n`sbt ` or `Java`. We also replaced some of the columnsm which are now:\\n\\n- diagnostics - tells whether and what kind of diagnostics are published by the\\n target.\\n- interactive - tells whether interactive features such as hover or completions\\n are working, this should work for all supported Scala and sbt versions.\\n- semanticdb - explains whther the semanticdb indexes are generated for the\\n target\\n- debugging - tells whether you can run or debug within that target\\n- Java support - in mixed targets this will tell users if the semanticdb indexes\\n are also generated for Java files.\\n\\nYou can always look for explanation of these statuses underneath the table or on\\nthe right in the Recommendation column.\\n\\nEditor support: All\\n\\n**Extension authors:**\\n\\nIf you are using the json output method for the doctor, you will need to modify\\nthe way it\'s displayed according to\\n[this](https://scalameta.org/metals/docs/integrations/new-editor#run-doctor-1).\\n\\n## Miscellaneous\\n\\n- Allow to create trace files for debugging in `.metals` directory.\\n [kpodsiad](https://github.com/kpodsiad)\\n- Fix issues with stale code lens being shown. [dos65](https://github.com/dos65)\\n- Print Bloop logs when connection errored out.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix issues with given imports in organize imports.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix issues with type on selection in Ammonite scipts.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Improve type shown for generics in hover.\\n [dos65](https://github.com/dos65)\\n- [Scala 3] Fix go to defition for givens. [dos65](https://github.com/dos65)\\n- Use Mill `--import` to import bloop when supported.\\n [lolgab](https://github.com/lolgab)\\n- Enable to create file with just package.\\n [kpodsiad](https://github.com/kpodsiad)\\n- Fix Gradle detection when file other than `build.gradle` is at top level.\\n [GavinRay97](https://github.com/GavinRay97)\\n- Use proper dialect and ignore sbt targets when automatically setting up\\n `scalafmt.conf`. [dos65](https://github.com/dos65)\\n- Detect missing src.zip in doctor.\\n [ayoub-benali](https://github.com/ayoub-benali)\\n- Ensure autoimports don\'t break scala-cli directives.\\n [ckipp01](https://github.com/ckipp01)\\n- [Scala 3] Don\'t show error type if it cannot be inferred by the compiler.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix analyze stacktrace when using toplevel methods.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Fix insert type in case of type aliases.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Use maybeOwner instead of owner when looking for shortened name.\\n [ckipp01](https://github.com/ckipp01)\\n- [Scala 3] Fix autoimport with prefixes. [dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.9..v0.11.0\\nTomasz Godzik\\nAyoub Benali\\nVadim Chelyshov\\nChris Kipp\\nArthur McGibbon\\nKamil Podsiadlo\\nGavin Ray\\nAdrien Bestel\\nAlexandre Archambault\\nLorenzo Gabriele\\nThomas Lopatic\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.0](https://github.com/scalameta/metals/tree/v0.11.0) (2022-01-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.9...v0.11.0)\\n\\n**Merged pull requests:**\\n\\n- Update Bloop to 1.4.12\\n [\\\\#3497](https://github.com/scalameta/metals/pull/3497)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with renames in Java files\\n [\\\\#3495](https://github.com/scalameta/metals/pull/3495)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat(doctor): add in explanations to the json doctor output\\n [\\\\#3494](https://github.com/scalameta/metals/pull/3494)\\n ([ckipp01](https://github.com/ckipp01))\\n- Upgrade bloop to 1.4.11-51-ac1d788a\\n [\\\\#3492](https://github.com/scalameta/metals/pull/3492)\\n ([dos65](https://github.com/dos65))\\n- Fixed compilation issue\\n [\\\\#3496](https://github.com/scalameta/metals/pull/3496)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Java] Support go-to-definition for `*.java` dependency sources\\n [\\\\#3470](https://github.com/scalameta/metals/pull/3470)\\n ([dos65](https://github.com/dos65))\\n- Add edit distance for Java files\\n [\\\\#3480](https://github.com/scalameta/metals/pull/3480)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show more information in the doctor\\n [\\\\#3426](https://github.com/scalameta/metals/pull/3426)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.13.8\\n [\\\\#3491](https://github.com/scalameta/metals/pull/3491)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: update user config docs\\n [\\\\#3490](https://github.com/scalameta/metals/pull/3490)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: override pprint in docs\\n [\\\\#3489](https://github.com/scalameta/metals/pull/3489)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t show warnings for .metals/.tmp files\\n [\\\\#3488](https://github.com/scalameta/metals/pull/3488)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix: Docusaurus Edit URL is broken\\n [\\\\#3487](https://github.com/scalameta/metals/pull/3487)\\n ([abestel](https://github.com/abestel))\\n- parallelize source file indexing\\n [\\\\#3485](https://github.com/scalameta/metals/pull/3485)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Cache build targets [\\\\#3481](https://github.com/scalameta/metals/pull/3481)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- [Scala3] Fix autoimport with prefixes\\n [\\\\#3484](https://github.com/scalameta/metals/pull/3484)\\n ([dos65](https://github.com/dos65))\\n- [Issue Template] Relax requirements\\n [\\\\#3474](https://github.com/scalameta/metals/pull/3474)\\n ([dos65](https://github.com/dos65))\\n- [Build] add CommandSuite to TestGroups\\n [\\\\#3472](https://github.com/scalameta/metals/pull/3472)\\n ([dos65](https://github.com/dos65))\\n- Add folding range for Java using Scanner\\n [\\\\#3468](https://github.com/scalameta/metals/pull/3468)\\n ([tgodzik](https://github.com/tgodzik))\\n- cleanup: remove ./sbt from root of project\\n [\\\\#3471](https://github.com/scalameta/metals/pull/3471)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: migrate gitter references to Discord\\n [\\\\#3469](https://github.com/scalameta/metals/pull/3469)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: refactor bug_report.md to be a yaml template\\n [\\\\#3467](https://github.com/scalameta/metals/pull/3467)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add tests for java go to implementation\\n [\\\\#3466](https://github.com/scalameta/metals/pull/3466)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: use maybeOwner instead of owner when looking for shortened name\\n [\\\\#3465](https://github.com/scalameta/metals/pull/3465)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Fix insert type in case of type aliases\\n [\\\\#3460](https://github.com/scalameta/metals/pull/3460)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: reuse main annotation logic from code lens in debug provider\\n [\\\\#3463](https://github.com/scalameta/metals/pull/3463)\\n ([ckipp01](https://github.com/ckipp01))\\n- update: update millw and add script for it in the future\\n [\\\\#3457](https://github.com/scalameta/metals/pull/3457)\\n ([ckipp01](https://github.com/ckipp01))\\n- Scala Steward - ignore org.eclipse updates\\n [\\\\#3453](https://github.com/scalameta/metals/pull/3453)\\n ([dos65](https://github.com/dos65))\\n- Update flyway-core to 8.2.3\\n [\\\\#3452](https://github.com/scalameta/metals/pull/3452)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.6\\n [\\\\#3433](https://github.com/scalameta/metals/pull/3433)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.7\\n [\\\\#3432](https://github.com/scalameta/metals/pull/3432)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.0-M5\\n [\\\\#3431](https://github.com/scalameta/metals/pull/3431)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-welcome to 0.2.2\\n [\\\\#3429](https://github.com/scalameta/metals/pull/3429)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.13.1\\n [\\\\#3428](https://github.com/scalameta/metals/pull/3428)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.11-30-75fb3441\\n [\\\\#3427](https://github.com/scalameta/metals/pull/3427)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix analyze stacktrace when using toplevel methods\\n [\\\\#3425](https://github.com/scalameta/metals/pull/3425)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Fix issues when type cannot be inferred by the compiler\\n [\\\\#3423](https://github.com/scalameta/metals/pull/3423)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: take care of some deprecation warnings\\n [\\\\#3420](https://github.com/scalameta/metals/pull/3420)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: small build cleanups\\n [\\\\#3418](https://github.com/scalameta/metals/pull/3418)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issue with imports [\\\\#3417](https://github.com/scalameta/metals/pull/3417)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scalafmt] set proper dialect for sbt-metals\\n [\\\\#3416](https://github.com/scalameta/metals/pull/3416)\\n ([dos65](https://github.com/dos65))\\n- docs: add file ids to the docs for new file commands\\n [\\\\#3415](https://github.com/scalameta/metals/pull/3415)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add run/debug code lense for Java main classes\\n [\\\\#3400](https://github.com/scalameta/metals/pull/3400)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure autoimports don\'t break scala-cli directives\\n [\\\\#3412](https://github.com/scalameta/metals/pull/3412)\\n ([ckipp01](https://github.com/ckipp01))\\n- dep: update sbt to 1.6.1\\n [\\\\#3413](https://github.com/scalameta/metals/pull/3413)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Mtags releases] Fails command if tag name doesn\'t match any pattern\\n [\\\\#3410](https://github.com/scalameta/metals/pull/3410)\\n ([dos65](https://github.com/dos65))\\n- Detect missing src.zip in doctor\\n [\\\\#3401](https://github.com/scalameta/metals/pull/3401)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Hardcode eclipse java formatter dependencies\\n [\\\\#3406](https://github.com/scalameta/metals/pull/3406)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Upgrade file-tree-views to 2.1.8. See #3379.\\n [\\\\#3405](https://github.com/scalameta/metals/pull/3405)\\n ([uncle-betty](https://github.com/uncle-betty))\\n- [Scalafmt] Fixes for automatic dialect rewrite\\n [\\\\#3394](https://github.com/scalameta/metals/pull/3394)\\n ([dos65](https://github.com/dos65))\\n- Handle Java-only build targets\\n [\\\\#2520](https://github.com/scalameta/metals/pull/2520)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Use quick pick instead of message requests for debug discovery\\n [\\\\#3392](https://github.com/scalameta/metals/pull/3392)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for 3.1.1-RC2\\n [\\\\#3391](https://github.com/scalameta/metals/pull/3391)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support sublime command links\\n [\\\\#3378](https://github.com/scalameta/metals/pull/3378)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- [UNTESTED] Fix Gradle detection, multimodule proj\\n [\\\\#3385](https://github.com/scalameta/metals/pull/3385)\\n ([GavinRay97](https://github.com/GavinRay97))\\n- Add Arthur to the team!\\n [\\\\#3389](https://github.com/scalameta/metals/pull/3389)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Actions] mtags-auto-release: specify github token\\n [\\\\#3390](https://github.com/scalameta/metals/pull/3390)\\n ([dos65](https://github.com/dos65))\\n- Print more info about missing presentation compiler\\n [\\\\#3388](https://github.com/scalameta/metals/pull/3388)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump to sbt 1.6.0-RC2 [\\\\#3384](https://github.com/scalameta/metals/pull/3384)\\n ([ckipp01](https://github.com/ckipp01))\\n- Move to Scala 3 published artifacts where possible\\n [\\\\#3382](https://github.com/scalameta/metals/pull/3382)\\n ([ckipp01](https://github.com/ckipp01))\\n- Enable to create file with just package\\n [\\\\#3375](https://github.com/scalameta/metals/pull/3375)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use full range when using go-to definition for synthetics\\n [\\\\#3374](https://github.com/scalameta/metals/pull/3374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix quickpick [\\\\#3353](https://github.com/scalameta/metals/pull/3353)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update requests to 0.7.0\\n [\\\\#3367](https://github.com/scalameta/metals/pull/3367)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.31\\n [\\\\#3372](https://github.com/scalameta/metals/pull/3372)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.2.2\\n [\\\\#3370](https://github.com/scalameta/metals/pull/3370)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.14.Final\\n [\\\\#3369](https://github.com/scalameta/metals/pull/3369)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.3 [\\\\#3368](https://github.com/scalameta/metals/pull/3368)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.1 [\\\\#3366](https://github.com/scalameta/metals/pull/3366)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.7.0 [\\\\#3365](https://github.com/scalameta/metals/pull/3365)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.11-19-93ebe2c6\\n [\\\\#3363](https://github.com/scalameta/metals/pull/3363)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Fix ImportMissingSymbol code action\\n [\\\\#3362](https://github.com/scalameta/metals/pull/3362)\\n ([dos65](https://github.com/dos65))\\n- Send Code lens refresh when supported by client\\n [\\\\#3355](https://github.com/scalameta/metals/pull/3355)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add go to definition via links to synthetic decorations\\n [\\\\#3360](https://github.com/scalameta/metals/pull/3360)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Build] Fix quick-publish-local\\n [\\\\#3361](https://github.com/scalameta/metals/pull/3361)\\n ([dos65](https://github.com/dos65))\\n- Add information about source of exceptions\\n [\\\\#3340](https://github.com/scalameta/metals/pull/3340)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove stray pprint [\\\\#3357](https://github.com/scalameta/metals/pull/3357)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use Mill `--import` to import bloop when supported\\n [\\\\#3356](https://github.com/scalameta/metals/pull/3356)\\n ([lolgab](https://github.com/lolgab))\\n- Add test discovery endpoint\\n [\\\\#3277](https://github.com/scalameta/metals/pull/3277)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Build] Add `quick-publish-local` command\\n [\\\\#3351](https://github.com/scalameta/metals/pull/3351)\\n ([dos65](https://github.com/dos65))\\n- Actions - set jdk11 for mtags auto release\\n [\\\\#3348](https://github.com/scalameta/metals/pull/3348)\\n ([dos65](https://github.com/dos65))\\n- Wrap quickpick and input box results into options\\n [\\\\#3344](https://github.com/scalameta/metals/pull/3344)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Cross tests - fix ignorance for `test-mtags-dyn`\\n [\\\\#3339](https://github.com/scalameta/metals/pull/3339)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Fixes for mtags-auto-release workflow\\n [\\\\#3337](https://github.com/scalameta/metals/pull/3337)\\n ([dos65](https://github.com/dos65))\\n- Remove sublime version from the doc\\n [\\\\#3334](https://github.com/scalameta/metals/pull/3334)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Fix issues with non-latest Scala versions\\n [\\\\#3332](https://github.com/scalameta/metals/pull/3332)\\n ([tgodzik](https://github.com/tgodzik))\\n- Release process: publish `mtags` for the latest Metals release\\n [\\\\#3281](https://github.com/scalameta/metals/pull/3281)\\n ([dos65](https://github.com/dos65))\\n- Improve the \\"(currently using)\\" message during bsp-switch.\\n [\\\\#3330](https://github.com/scalameta/metals/pull/3330)\\n ([ckipp01](https://github.com/ckipp01))\\n- Adjust json trace docs [\\\\#3279](https://github.com/scalameta/metals/pull/3279)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Fix go to defition for givens\\n [\\\\#3309](https://github.com/scalameta/metals/pull/3309)\\n ([dos65](https://github.com/dos65))\\n- Update xnio-nio to 3.8.5.Final\\n [\\\\#3327](https://github.com/scalameta/metals/pull/3327)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump coursier/setup-action from 1.1.1 to 1.1.2\\n [\\\\#3329](https://github.com/scalameta/metals/pull/3329)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update scalafix-interfaces to 0.9.33\\n [\\\\#3328](https://github.com/scalameta/metals/pull/3328)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.5\\n [\\\\#3326](https://github.com/scalameta/metals/pull/3326)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.13.Final\\n [\\\\#3325](https://github.com/scalameta/metals/pull/3325)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.11 [\\\\#3324](https://github.com/scalameta/metals/pull/3324)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.33\\n [\\\\#3322](https://github.com/scalameta/metals/pull/3322)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Hover - improve tpe selection for signature and expression\\n [\\\\#3320](https://github.com/scalameta/metals/pull/3320)\\n ([dos65](https://github.com/dos65))\\n- Move inactive maintainers to a separate list\\n [\\\\#3319](https://github.com/scalameta/metals/pull/3319)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove unused stuff [\\\\#3321](https://github.com/scalameta/metals/pull/3321)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Add option to run everything in the current file\\n [\\\\#3311](https://github.com/scalameta/metals/pull/3311)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add extract value code action\\n [\\\\#3297](https://github.com/scalameta/metals/pull/3297)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Kamil to the team!\\n [\\\\#3317](https://github.com/scalameta/metals/pull/3317)\\n ([tgodzik](https://github.com/tgodzik))\\n- Document support of find text in dependency command in sublime\\n [\\\\#3318](https://github.com/scalameta/metals/pull/3318)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Better support for mill BSP\\n [\\\\#3308](https://github.com/scalameta/metals/pull/3308)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix json rendering in documentation\\n [\\\\#3316](https://github.com/scalameta/metals/pull/3316)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add missing commands to client commands documentation\\n [\\\\#3315](https://github.com/scalameta/metals/pull/3315)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add isCommandInHtmlSupported to InitializationOptions doc\\n [\\\\#3314](https://github.com/scalameta/metals/pull/3314)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update sublime doc regarding Hover for selection\\n [\\\\#3313](https://github.com/scalameta/metals/pull/3313)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Simplify usage of sbt server when no .bsp/sbt.json exists\\n [\\\\#3304](https://github.com/scalameta/metals/pull/3304)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support Scala3-NIGHTLY releases\\n [\\\\#3280](https://github.com/scalameta/metals/pull/3280)\\n ([dos65](https://github.com/dos65))\\n- Document source file analyzer support in sublime\\n [\\\\#3310](https://github.com/scalameta/metals/pull/3310)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- ScalaVersion - discover new mtags version by coursier\\n [\\\\#3278](https://github.com/scalameta/metals/pull/3278)\\n ([dos65](https://github.com/dos65))\\n- Update ammonite to 2.4.1\\n [\\\\#3292](https://github.com/scalameta/metals/pull/3292)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix expression for selection range in Ammonite\\n [\\\\#3303](https://github.com/scalameta/metals/pull/3303)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Add selection range\\n [\\\\#3276](https://github.com/scalameta/metals/pull/3276)\\n ([tgodzik](https://github.com/tgodzik))\\n- Set rangeHoverProvider under experimental capabilities\\n [\\\\#3293](https://github.com/scalameta/metals/pull/3293)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update to latest millw 0.3.9\\n [\\\\#3295](https://github.com/scalameta/metals/pull/3295)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalafix-interfaces to 0.9.32\\n [\\\\#3291](https://github.com/scalameta/metals/pull/3291)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.32\\n [\\\\#3287](https://github.com/scalameta/metals/pull/3287)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.10\\n [\\\\#3288](https://github.com/scalameta/metals/pull/3288)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0.1 [\\\\#3289](https://github.com/scalameta/metals/pull/3289)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.4\\n [\\\\#3290](https://github.com/scalameta/metals/pull/3290)\\n ([scala-steward](https://github.com/scala-steward))\\n- docs: update commands that now use `TextDocumentPositionParams`\\n [\\\\#3284](https://github.com/scalameta/metals/pull/3284)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update organize-imports rule with a fix for givens\\n [\\\\#3273](https://github.com/scalameta/metals/pull/3273)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add example about attaching debugger\\n [\\\\#3275](https://github.com/scalameta/metals/pull/3275)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add CFR class file viewer\\n [\\\\#3247](https://github.com/scalameta/metals/pull/3247)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Print Bloop logs when connection errored out\\n [\\\\#3274](https://github.com/scalameta/metals/pull/3274)\\n ([tgodzik](https://github.com/tgodzik))\\n- Formatter: always specify global `runner.dialect`.\\n [\\\\#3259](https://github.com/scalameta/metals/pull/3259)\\n ([dos65](https://github.com/dos65))\\n- Finer grained rules on build errors for debug discovery.\\n [\\\\#3271](https://github.com/scalameta/metals/pull/3271)\\n ([ckipp01](https://github.com/ckipp01))\\n- RunDebugLens - fix stale lens\\n [\\\\#3270](https://github.com/scalameta/metals/pull/3270)\\n ([dos65](https://github.com/dos65))\\n- [Docs] Align the info about endpoints and their parameters with latest release\\n [\\\\#3232](https://github.com/scalameta/metals/pull/3232)\\n ([dos65](https://github.com/dos65))\\n- SuperMethodCodeLens - do not show stale lenses\\n [\\\\#3267](https://github.com/scalameta/metals/pull/3267)\\n ([dos65](https://github.com/dos65))\\n- Take into account trace files in .metals directory\\n [\\\\#3103](https://github.com/scalameta/metals/pull/3103)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix issue with empty string in completions\\n [\\\\#3269](https://github.com/scalameta/metals/pull/3269)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update versions [\\\\#3268](https://github.com/scalameta/metals/pull/3268)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals v0.10.9\\n [\\\\#3264](https://github.com/scalameta/metals/pull/3264)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/11/03/tungsten","metadata":{"permalink":"/metals/blog/2021/11/03/tungsten","source":"@site/blog/2021-11-03-tungsten.md","title":"Metals v0.10.9 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.9, which mostly important","date":"2021-11-03T00:00:00.000Z","formattedDate":"November 3, 2021","tags":[],"readingTime":1.765,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.9 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"},"nextItem":{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.9, which mostly important\\nfeature is the Scala 2.13.7 support.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release36
Merged PRs19
Contributors4
Closed issues3
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/44?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.13.7\\n\\n## Miscellaneous\\n\\n- Fix issues with breakpoints on Windows.\\n- Add enum as a new file type option in Scala 3.\\n- Fix issues with expression evaluation when long classpath is used.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.8..v0.10.9\\nTomasz Godzik\\nVadim Chelyshov\\nChris Kipp\\nKamil Podsiadlo\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.9](https://github.com/scalameta/metals/tree/v0.10.9) (2021-11-03)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.8...v0.10.9)\\n\\n**Merged pull requests:**\\n\\n- Add try in order not to break debugging session\\n [\\\\#3265](https://github.com/scalameta/metals/pull/3265)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.13.7\\n [\\\\#3258](https://github.com/scalameta/metals/pull/3258)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues when source path is using Windows format\\n [\\\\#3263](https://github.com/scalameta/metals/pull/3263)\\n ([tgodzik](https://github.com/tgodzik))\\n- RangeHover - fix NPE [\\\\#3256](https://github.com/scalameta/metals/pull/3256)\\n ([dos65](https://github.com/dos65))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.29\\n [\\\\#3253](https://github.com/scalameta/metals/pull/3253)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.3\\n [\\\\#3249](https://github.com/scalameta/metals/pull/3249)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.10-14-f51f591b\\n [\\\\#3248](https://github.com/scalameta/metals/pull/3248)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.2\\n [\\\\#3250](https://github.com/scalameta/metals/pull/3250)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scala-java8-compat to 1.0.2\\n [\\\\#3251](https://github.com/scalameta/metals/pull/3251)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.24\\n [\\\\#3252](https://github.com/scalameta/metals/pull/3252)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add case when creating enums\\n [\\\\#3242](https://github.com/scalameta/metals/pull/3242)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add enum as a new file type option in Scala 3\\n [\\\\#3240](https://github.com/scalameta/metals/pull/3240)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure breaktpoints work even if path is sent\\n [\\\\#3238](https://github.com/scalameta/metals/pull/3238)\\n ([tgodzik](https://github.com/tgodzik))\\n- Copyable debug flag [\\\\#3239](https://github.com/scalameta/metals/pull/3239)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump to the latest millw and millw.bat -- 0.3.8\\n [\\\\#3237](https://github.com/scalameta/metals/pull/3237)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor the usage of client commands\\n [\\\\#3155](https://github.com/scalameta/metals/pull/3155)\\n ([tgodzik](https://github.com/tgodzik))\\n- 0.10.8 release - version changes\\n [\\\\#3229](https://github.com/scalameta/metals/pull/3229)\\n ([dos65](https://github.com/dos65))\\n- 0.10.8 release notes [\\\\#3225](https://github.com/scalameta/metals/pull/3225)\\n ([dos65](https://github.com/dos65))\\n- docs - typo fix [\\\\#3230](https://github.com/scalameta/metals/pull/3230)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/10/26/tungsten","metadata":{"permalink":"/metals/blog/2021/10/26/tungsten","source":"@site/blog/2021-10-26-tungsten.md","title":"Metals v0.10.8 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.8, which brings a lot of new features in addition to Scala 3.1.0 support!","date":"2021-10-26T00:00:00.000Z","formattedDate":"October 26, 2021","tags":[],"readingTime":7.19,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.8 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"},"nextItem":{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.8, which brings a lot of new features in addition to Scala 3.1.0 support!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release162
Merged PRs70
Contributors16
Closed issues11
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/43?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Expression evaluator for Scala 2\\n- [Scala 2] Type annotations on code selection \\n- Source file analyzer\\n- Find text in dependency JAR files\\n- VSCode - workspace symbol search fix\\n- Scala 3.1.0 and completion improvements\\n\\n## Expression Evaluator\\n\\nThe long awaited [issue #3051](https://github.com/scalameta/metals/issues/3051) was close to celebrating its 2 years birthday but\\ndue to the impressive work by [@tdudzik](https://github.com/tdudzik) and help from [@adapi](https://github.com/adpi2) and \\n[@tgodzik](https://github.com/tgodzik) Metals \\nfinally has support for expression evaluation during debugging!\\nThe implementation is based on the initial idea from [@smarter](https://github.com/smarter)\'s for expression evaluation in the Dotty Language Server.\\n\\nCurrently, it\'s implemented only for Scala 2, however the work on Scala3 support is in progress.\\n\\nSince expression evaluation is a complex feature there might still be some bugs that we didn\'t account for, so do not hesitate to report anything that doesn\'t look right.\\n\\n![evaluator](https://i.imgur.com/1b17Vtm.gif)\\n\\n_Editors support_: every client that implements DAP\\n\\n## Type annotations on code selection\\n\\nThanks to [@KacperFKorban](https://github.com/KacperFKorban), yet another long awaited [issue #3059](https://github.com/scalameta/metals/issues/3059) was closed.\\nPreviously, hover in Metals was limited by the LSP protocol and only worked for a single position, however it turns out that it was possible to work around this limitation.\\n\\n![selection](https://user-images.githubusercontent.com/39772805/130333128-dc357170-116e-4a10-b58d-b55c536a2e15.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## Source file analyzer\\n\\nThe `Show Tasty command` from the previous release was extended.\\nNow, Metals also can show javap and semanticdb outputs from the source.\\nThanks [@Arthurm1](https://github.com/Arthurm1) for javap/semanticdb implementation and \\n[@kpodsiad](https://github.com/kpodsiad) for aligning all views into a single feature.\\n\\nThe full list of commands:\\n- `metals.show-tasty`\\n- `metals.show-javap`\\n- `metals.show-javap-verbose`\\n- `metals.show-semanticdb-compact`\\n- `metals.show-semanticdb-detailed`\\n- `metals.show-semanticdb-proto`\\n\\nIn VS Code you can notice that there is a new `Metals Analyze Source` submenu in file pop-up menu that provides a list of all these commands.\\n\\n![analyze](https://i.imgur.com/6tGSvuI.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## Find text in dependency JAR files\\n\\nThis release also introduces another helpful feature, it\'s possible now to do text search through files in classpath jars and source-jars.\\nThanks to [@ Z1kkurat](https://github.com/Z1kkurat) for his contribution!\\n\\n![find-in-jars](https://i.imgur.com/o1Drd12.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## VSCode extension - workspace symbol search fix\\n\\nInitially, workspace symbol search in Metals allowed you to extend the search in a couple of ways:\\n- It was possible to look through all the dependencies by adding the semicolon `;` at the end or to search. This was done by default if no results were found in the current workspace.\\n\\n- Users could use the full path for symbols such as `j.n.f.Path` for `java.nio.file.Path` .\\n\\nUnfortunately, this stopped being possible in some later Visual Studio Code versions. To work around that issue a new command was added: `metals.symbol-search`, which allows for the additional search features. This already works for all other editors.\\nIn addition, Metals extension now overrides default keybing for symbol search: `Ctrl+T`/`Cmd+T` executes this Metals command.\\n\\nAn important notice: we can\'t fix the default workspace symbol search. It still uses default VS Code implementation.\\n\\n![symbol-search](https://user-images.githubusercontent.com/5816952/133675550-c199e79a-55cc-4df6-871d-c8a3b1f0b3a3.gif)\\n\\n\\n## Scala 3.1.0 and completion improvements\\n\\nAnd lastly this new Metals release comes with a new compiler version support - 3.1.0. As well as support for the next release candidate `3.1.1-RC1`, which will be later updated in the SNAPSHOT Metals versions in case of further release candidates.\\nWe also further improved the support for Scala 3:\\n- Completion items ordering were reworked and now it should match the behaviour of Scala 2\\n- Type descriptions in completion now shows the precise type for generic methods\\n\\n## Miscellaneous\\n\\n- Fix type decorations for sbt/standalone files [@tgodzik](https://github.com/tgodzik)\\n- Use Scala 3 syntax by default. [@smarter](https://github.com/smarter)\\n- Support more scenarios in rewrite parent/braces code action. [@kpodsiad](https://github.com/kpodsiad)\\n- Fix go to parent code lenses for local symbols. [tgodzik](https://github.com/tgodzik)\\n- Strip out [info] for stacktraces. [ckipp01](https://github.com/ckipp01)\\n- [sbt server] Fix meta-build-target configuration. [adpi2](https://github.com/adpi2)\\n- Add build server version to the doctor view. [kpodsiad](https://github.com/kpodsiad)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.7..v0.10.8\\n25\\tTomasz Godzik\\n20\\tVadim Chelyshov\\n13\\tZ1kkurat\\n10\\tAdrien Piquerez\\n8\\tKamil Podsiadlo\\n4\\tckipp01\\n3\\tGabriele Petronella\\n2\\ttdudzik\\n2\\t\xd3lafur P\xe1ll Geirsson\\n1\\tAlexandre Archambault\\n1\\tArthur McGibbon\\n1\\tGuillaume Martres\\n1\\tKacper Korban\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.8](https://github.com/scalameta/metals/tree/v0.10.8) (2021-10-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.7...v0.10.8)\\n\\n**Merged pull requests:**\\n\\n- Compilers: try to fix NPE\\n [\\\\#3227](https://github.com/scalameta/metals/pull/3227)\\n ([dos65](https://github.com/dos65))\\n- Print exact type for expressions containing generics\\n [\\\\#3223](https://github.com/scalameta/metals/pull/3223)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update debug adapter to 2.0.8\\n [\\\\#3226](https://github.com/scalameta/metals/pull/3226)\\n ([tdudzik](https://github.com/tdudzik))\\n- Always show hover on a non empty range selection\\n [\\\\#3222](https://github.com/scalameta/metals/pull/3222)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reset diagnostics on build import\\n [\\\\#3220](https://github.com/scalameta/metals/pull/3220)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Add Scala 3.1.0 support\\n [\\\\#3212](https://github.com/scalameta/metals/pull/3212)\\n ([dos65](https://github.com/dos65))\\n- Update Bloop to 1.4.10\\n [\\\\#3218](https://github.com/scalameta/metals/pull/3218)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump debug adapter\\n [\\\\#3216](https://github.com/scalameta/metals/pull/3216)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala3] Completions - show applied type for `Select`\\n [\\\\#3188](https://github.com/scalameta/metals/pull/3188)\\n ([dos65](https://github.com/dos65))\\n- Allow to generate run lenses for bsp servers which have debug capability\\n [\\\\#3210](https://github.com/scalameta/metals/pull/3210)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use sbt-debug-adapter explicity in metals.sbt\\n [\\\\#3211](https://github.com/scalameta/metals/pull/3211)\\n ([adpi2](https://github.com/adpi2))\\n- Use SemanticdbPlugin in sbt-metals\\n [\\\\#3200](https://github.com/scalameta/metals/pull/3200)\\n ([adpi2](https://github.com/adpi2))\\n- Workflows: ignore sourcegraph upload error\\n [\\\\#3208](https://github.com/scalameta/metals/pull/3208)\\n ([dos65](https://github.com/dos65))\\n- EndpointLogger: close trace writer\\n [\\\\#3207](https://github.com/scalameta/metals/pull/3207)\\n ([dos65](https://github.com/dos65))\\n- Bump Bloop and scala-debug-adapter\\n [\\\\#3209](https://github.com/scalameta/metals/pull/3209)\\n ([adpi2](https://github.com/adpi2))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.0\\n [\\\\#3205](https://github.com/scalameta/metals/pull/3205)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.1\\n [\\\\#3206](https://github.com/scalameta/metals/pull/3206)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.2\\n [\\\\#3204](https://github.com/scalameta/metals/pull/3204)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-debug-adapter to 2.0.5\\n [\\\\#3203](https://github.com/scalameta/metals/pull/3203)\\n ([scala-steward](https://github.com/scala-steward))\\n- Find in jar minor fixes\\n [\\\\#3198](https://github.com/scalameta/metals/pull/3198)\\n ([dos65](https://github.com/dos65))\\n- Fix flaky cancel compile suite\\n [\\\\#3202](https://github.com/scalameta/metals/pull/3202)\\n ([dos65](https://github.com/dos65))\\n- Add new suites to TestGroups\\n [\\\\#3199](https://github.com/scalameta/metals/pull/3199)\\n ([dos65](https://github.com/dos65))\\n- [sbt server] Fix meta-build-target configuration\\n [\\\\#3194](https://github.com/scalameta/metals/pull/3194)\\n ([adpi2](https://github.com/adpi2))\\n- Decode file refactor\\n [\\\\#3160](https://github.com/scalameta/metals/pull/3160)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Don\'t use `window/showMessage` to report generic Scalafix error\\n [\\\\#3192](https://github.com/scalameta/metals/pull/3192)\\n ([olafurpg](https://github.com/olafurpg))\\n- Wait with loading compiler and compilation\\n [\\\\#3190](https://github.com/scalameta/metals/pull/3190)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implement \'find in JAR files\' LSP extension\\n [\\\\#3093](https://github.com/scalameta/metals/pull/3093)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Don\'t throw an exception is compiling semanticdb times out\\n [\\\\#3187](https://github.com/scalameta/metals/pull/3187)\\n ([tgodzik](https://github.com/tgodzik))\\n- Wait for build tool information when generating semanticdb \\n [\\\\#3184](https://github.com/scalameta/metals/pull/3184)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump bloop to fix some debug issues\\n [\\\\#3185](https://github.com/scalameta/metals/pull/3185)\\n ([adpi2](https://github.com/adpi2))\\n- Remove unused `bspEnabled := false`\\n [\\\\#3186](https://github.com/scalameta/metals/pull/3186)\\n ([adpi2](https://github.com/adpi2))\\n- Updage scalafmt + use optional braces syntax for scala3\\n [\\\\#3165](https://github.com/scalameta/metals/pull/3165)\\n ([dos65](https://github.com/dos65))\\n- Don\'t create file system when debugging\\n [\\\\#3183](https://github.com/scalameta/metals/pull/3183)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove extra boolean from the `goto-position` server command in `StacktraceAnalyzer`\\n [\\\\#3179](https://github.com/scalameta/metals/pull/3179)\\n ([ckipp01](https://github.com/ckipp01))\\n- Upgrade scala3 rc version\\n [\\\\#3182](https://github.com/scalameta/metals/pull/3182)\\n ([dos65](https://github.com/dos65))\\n- Strip out [info] for stacktraces.\\n [\\\\#3180](https://github.com/scalameta/metals/pull/3180)\\n ([ckipp01](https://github.com/ckipp01))\\n- Avoid IllegalArgumentException when trying to get type of range.\\n [\\\\#3178](https://github.com/scalameta/metals/pull/3178)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure generate-sources phase is always run for Maven\\n [\\\\#3164](https://github.com/scalameta/metals/pull/3164)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scala-java8-compat to 1.0.1\\n [\\\\#3175](https://github.com/scalameta/metals/pull/3175)\\n ([scala-steward](https://github.com/scala-steward))\\n- Try to fix flaky tests\\n [\\\\#3163](https://github.com/scalameta/metals/pull/3163)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 3.0.5\\n [\\\\#3177](https://github.com/scalameta/metals/pull/3177)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.3\\n [\\\\#3174](https://github.com/scalameta/metals/pull/3174)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.15.0\\n [\\\\#3173](https://github.com/scalameta/metals/pull/3173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.12.Final\\n [\\\\#3172](https://github.com/scalameta/metals/pull/3172)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 31.0.1-jre\\n [\\\\#3171](https://github.com/scalameta/metals/pull/3171)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.15\\n [\\\\#3170](https://github.com/scalameta/metals/pull/3170)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.13.0\\n [\\\\#3169](https://github.com/scalameta/metals/pull/3169)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add completion support to expression evaluator\\n [\\\\#3159](https://github.com/scalameta/metals/pull/3159)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reconnect to BSP server upon buildTarget/didChange\\n [\\\\#3145](https://github.com/scalameta/metals/pull/3145)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Don\'t search for all symbols in go-to-parent code lenses\\n [\\\\#3161](https://github.com/scalameta/metals/pull/3161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Bloop and sbt-debug-adapter\\n [\\\\#3166](https://github.com/scalameta/metals/pull/3166)\\n ([adpi2](https://github.com/adpi2))\\n- Create dependency files on step if they don\'t exist\\n [\\\\#3167](https://github.com/scalameta/metals/pull/3167)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix go to parent code lenses for local symbols\\n [\\\\#3154](https://github.com/scalameta/metals/pull/3154)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t close source jars\\n [\\\\#3162](https://github.com/scalameta/metals/pull/3162)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add position to show tasty command\\n [\\\\#3148](https://github.com/scalameta/metals/pull/3148)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use scala-debug-adapter 2.x to enable code evaluation\\n [\\\\#2959](https://github.com/scalameta/metals/pull/2959)\\n ([adpi2](https://github.com/adpi2))\\n- Type annotation on code selection\\n [\\\\#3060](https://github.com/scalameta/metals/pull/3060)\\n ([KacperFKorban](https://github.com/KacperFKorban))\\n- Make commands parametrized and easier to use\\n [\\\\#3149](https://github.com/scalameta/metals/pull/3149)\\n ([tgodzik](https://github.com/tgodzik))\\n- Generate symbol information for standalone files, worksheets and sbt files\\n [\\\\#3019](https://github.com/scalameta/metals/pull/3019)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sourcegraph workflow to use `lsif-java index` command.\\n [\\\\#3152](https://github.com/scalameta/metals/pull/3152)\\n ([olafurpg](https://github.com/olafurpg))\\n- Only set sbt dialect when file has indeed .sbt extension\\n [\\\\#3144](https://github.com/scalameta/metals/pull/3144)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support more scenarios with \'replace () with {}\' code action\\n [\\\\#3130](https://github.com/scalameta/metals/pull/3130)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- add javap/semanticdb file viewer\\n [\\\\#3107](https://github.com/scalameta/metals/pull/3107)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Add build server version to the doctor view\\n [\\\\#3141](https://github.com/scalameta/metals/pull/3141)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafix to 0.9.31\\n [\\\\#3138](https://github.com/scalameta/metals/pull/3138)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add docs for Metals custom search command\\n [\\\\#3139](https://github.com/scalameta/metals/pull/3139)\\n ([gabro](https://github.com/gabro))\\n- [Scala3] Improve completions ordering\\n [\\\\#3115](https://github.com/scalameta/metals/pull/3115)\\n ([dos65](https://github.com/dos65))\\n- Set the default fallbackScalaVersion to scala 3 instead of 2.12\\n [\\\\#3134](https://github.com/scalameta/metals/pull/3134)\\n ([smarter](https://github.com/smarter))\\n- Bump Scalafmt version\\n [\\\\#3137](https://github.com/scalameta/metals/pull/3137)\\n ([gabro](https://github.com/gabro))\\n- Add release notes for Metals v0.10.7\\n [\\\\#3132](https://github.com/scalameta/metals/pull/3132)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/09/16/tungsten","metadata":{"permalink":"/metals/blog/2021/09/16/tungsten","source":"@site/blog/2021-09-16-tungsten.md","title":"Metals v0.10.7 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.7, which mostly focuses on","date":"2021-09-16T00:00:00.000Z","formattedDate":"September 16, 2021","tags":[],"readingTime":3.345,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.7 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"},"nextItem":{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.7, which mostly focuses on\\nsupport for Scala 2.12.15 and refines the indent on paste functionality.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release42
Merged PRs14
Contributors6
Closed issues4
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/42?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.12.15 and 3.1.0-RC2 support.\\n- Indent on paste improvements.\\n- Show TASTy command.\\n\\n## Indent on paste improvements\\n\\nIn Metals 0.10.6 we introduced a new feature that would adjust the indentation\\nof any pasted snippet. You can read about it in\\n[previous release notes](/blog/2021/09/06/tungsten#automatically-adjust-indentation-on-paste).\\n\\nThe feature was not fully mature and despite our best intentions it could cause\\na lot of issues for the users. To help with that we introduced two changes.\\n\\nFirstly, we will now use the current indentation of the cursor and adjust any\\npasted snippet to use that level of indentation.\\n\\nFor example in case of a simple snippet like:\\n\\n```scala\\ndef hello() =\\n println(\\"Hello!\\")\\n```\\n\\nif we paste it into:\\n\\n```scala\\ndef main() =\\n println(\\"Main\\")\\n |\\n```\\n\\nafter pasting we will have:\\n\\n```scala\\ndef main =\\n println(\\"Main\\")\\n def hello() =\\n println(\\"Hello!\\")\\n```\\n\\nHowever, if we move the cursor back:\\n\\n```scala\\ndef main() =\\n println(\\"Main\\")\\n|\\n```\\n\\nthe result will be different:\\n\\n```scala\\ndef main =\\n println(\\"Main\\")\\ndef hello() =\\n println(\\"Hello!\\")\\n```\\n\\nYou can use it to paste anything at the indentation level you need.\\n\\nMoreover, we also added a new setting `metals.enableIndentOnPaste`, which you\\ncan use to turn the feature on and off. Currently, it\'s **off** by default. We\\nhighly recommend turning it on, testing out some more and reporting any new\\nissues.\\n\\nWe also included a number of fixes for indentation in the Visual Studio Code\\nextension, which should fix some problems in the Scala 3 optional braces code.\\n\\n## Show TASTy command\\n\\nWhat is TASTy? According to the\\n[official Scala documentation](https://docs.scala-lang.org/scala3/guides/tasty-overview.html):\\n\\n_TASTy is an acronym that comes from the term Typed Abstract Syntax Trees. It\'s\\na high-level interchange format for Scala 3, and in this document we\'ll refer to\\nit as Tasty. Tasty files are generated by the scalac compiler, and contain all\\nof the information about your source code, including the syntactic structure of\\nyour program, and complete information about types, positions, and even\\ndocumentation._\\n\\nThanks to [kpodsiad](https://github.com/kpodsiad), Metals can now show TASTy of\\na currently opened file using the new `metals.show-tasty` command. However, keep\\nin mind that currently, this feature works only for Scala 3 sources. You can use\\nthis new command already in nvim-metals and Visual Studio Code.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.6..v0.10.7\\nKamil Podsiadlo\\nTomasz Godzik\\nVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.7](https://github.com/scalameta/metals/tree/v0.10.7) (2021-09-16)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.6...v0.10.7)\\n\\n**Merged pull requests:**\\n\\n- Add setting to enable indentation on paste\\n [\\\\#3129](https://github.com/scalameta/metals/pull/3129)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Scala 3 RC version to 3.1.0-RC2\\n [\\\\#3131](https://github.com/scalameta/metals/pull/3131)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use the current indentation as reference when pasting\\n [\\\\#3127](https://github.com/scalameta/metals/pull/3127)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show TASTy for open file command\\n [\\\\#3063](https://github.com/scalameta/metals/pull/3063)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add support for Scala 2.12.15\\n [\\\\#3126](https://github.com/scalameta/metals/pull/3126)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix overindenting when the indentation is more than expected\\n [\\\\#3109](https://github.com/scalameta/metals/pull/3109)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to 1.4.9 [\\\\#3124](https://github.com/scalameta/metals/pull/3124)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix renaming class hierarchy inside a method\\n [\\\\#3116](https://github.com/scalameta/metals/pull/3116)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update flyway-core to 7.14.1\\n [\\\\#3122](https://github.com/scalameta/metals/pull/3122)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.1 [\\\\#3121](https://github.com/scalameta/metals/pull/3121)\\n ([scala-steward](https://github.com/scala-steward))\\n- bug report template - downgrade version\\n [\\\\#3117](https://github.com/scalameta/metals/pull/3117)\\n ([dos65](https://github.com/dos65))\\n- Fix process exiting [\\\\#3112](https://github.com/scalameta/metals/pull/3112)\\n ([dos65](https://github.com/dos65))\\n- Fix message about unsupported version for RC Scala 3 versions\\n [\\\\#3114](https://github.com/scalameta/metals/pull/3114)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that classpath does not contain invalid files\\n [\\\\#3111](https://github.com/scalameta/metals/pull/3111)\\n ([tgodzik](https://github.com/tgodzik))\\n- bump snapshot version to 0.10.7\\n [\\\\#3106](https://github.com/scalameta/metals/pull/3106)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add release notes for Metals v0.10.6\\n [\\\\#3104](https://github.com/scalameta/metals/pull/3104)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/09/06/tungsten","metadata":{"permalink":"/metals/blog/2021/09/06/tungsten","source":"@site/blog/2021-09-06-tungsten.md","title":"Metals v0.10.6 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.6, which brings about new","date":"2021-09-06T00:00:00.000Z","formattedDate":"September 6, 2021","tags":[],"readingTime":6.89,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.6 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"},"nextItem":{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.6, which brings about new\\nScala 3 versions and JDK 17 support in addition to some new interesting\\nfeatures.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release173
Merged PRs74
Contributors16
Closed issues25
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/41?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Automatically adjust indentation on paste.\\n- New code actions.\\n- Allow organize imports on unsaved code.\\n- [Scala 3] support for Scala 3.0.2 and 3.1.0-RC1.\\n- JDK 17 support.\\n\\n## Automatically adjust indentation on paste\\n\\nStarting with Scala 3 developers can use optional braces, which we mentioned in\\nsome of the previous release notes. One of the main problems with it is making\\nsure that users are able to properly paste code into existing blocks. Previously\\nwe could just paste into braced blocks and adjusted the indentation later, but\\nnow it really matters that indentation is changed properly in order to make to\\ncode compile correctly.\\n\\nTo help with that [@Giggiux](https://github.com/Giggiux) adjusted the existing\\nrange formatting to account for indentation in the pasted blocks. Starting from\\nthis release Metals will adjust the indentation to match that of the enclosing\\nblock irrelevant of whether it has braces or not. A number of improvements has\\nalso been done to make sure the cursor ends up on the correct indentation level\\nupon writing a newline.\\n\\n![indentation](https://i.imgur.com/TVewmY7.gif)\\n\\nIf you encounter any issues, please don\'t hesitate to report them since the\\nfunctionality is new and there might be some edge cases where it doesn\'t work.\\nThis was tested internally over the past month, but that doesn\'t account for all\\nthe different styles of how people write their code. You can turn off on paste\\nformatting in Visual Studio Code in the settings using the\\n`editor.formatOnPaste` property. This feature will only work with the editors\\nthat support range formatting.\\n\\n## New code actions\\n\\nThis release benefits from adding two new code actions. Actions are based on\\nparticular scenarios, where we might automate some mundane coding and their\\nbehaviour is usually clearly specified. Please let us know if there are any\\nother particular situations, which might be automated, via the the Metals\'s\\n[feature requests repository](http://github.com/metals-feature-requests).\\n\\n### Refactor pattern match with placeholder\\n\\nThanks to [kpodsiad](https://github.com/kpodsiad) it\'s now possible to\\nautomatically rewrite lambdas with `_ match` expressions to partial functions:\\n\\n![partial-func](https://i.imgur.com/Ffm4RXZ.gif)\\n\\n### Replace () with {} in functions and vice versa\\n\\nIt\'s quite often that in Scala we might want to change to a simple lambda to a\\nmultiline one or vice versa. This has previously been a manual chore, but now\\nwhenever possible you can do it via a code action:\\n\\n![replace](https://i.imgur.com/DTylGT9.gif)\\n\\n## Allow organize imports on unsaved code\\n\\nIn previous version it was only possible to organize imports in files that were\\nsaved and compiled. We\'re happy to report that this requirement has been lifted\\nand users can organize imports whenever needed.\\n\\n## Miscellaneous\\n\\n- Fix completions for definitions from other files in Ammonite scripts.\\n- Support for Apple M1 and JDK 17. [@dos65](https://github.com/dos65)\\n- [Scala 3] Show extension methods in hover.\\n- Support brackets in multiline strings.\\n [@kpodsiad](https://github.com/kpodsiad)\\n- Automatically convert $ to $$ when changing to string interpolation.\\n- Filter out wrong reference results from unrelated build targets.\\n [@dos65](https://github.com/dos65)\\n- Greatly improved parent code lenses performance and turned it on by default in\\n VS Code. [@tanishiking](https://github.com/tanishiking)\\n- Properly show folding ranges in Scala 3 indented blocks.\\n [@tpasternak](https://github.com/tpasternak)\\n- Fix comments erasing all later variables in .env file.\\n- Fix file watcher in large projects on macOS. [@pvid](https://github.com/pvid)\\n- Fix memory leak issue in Scala 3 projects. [@dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.5..v0.10.6\\nTomasz Godzik\\nLuigi Frunzio\\nVadim Chelyshov\\nAdrien Piquerez\\nChris Kipp\\nPavol Vidlicka\\nGabriele Petronella\\nKamil Podsiadlo\\nOliver Schrenk\\n\xd3lafur P\xe1ll Geirsson\\nRikito Taniguchi\\nTomasz Pasternak\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.6](https://github.com/scalameta/metals/tree/v0.10.6) (2021-09-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.5...v0.10.6)\\n\\n**Merged pull requests:**\\n\\n- Fix issue with tmp directory popping up in random places\\n [\\\\#3105](https://github.com/scalameta/metals/pull/3105)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ident on paste - bunch of fixes\\n [\\\\#3080](https://github.com/scalameta/metals/pull/3080)\\n ([dos65](https://github.com/dos65))\\n- s/horizontal/vertical [\\\\#3102](https://github.com/scalameta/metals/pull/3102)\\n ([oschrenk](https://github.com/oschrenk))\\n- s/defalt/default [\\\\#3101](https://github.com/scalameta/metals/pull/3101)\\n ([oschrenk](https://github.com/oschrenk))\\n- Add support for Scala 3.1.0-RC1\\n [\\\\#3100](https://github.com/scalameta/metals/pull/3100)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.0.2\\n [\\\\#3095](https://github.com/scalameta/metals/pull/3095)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc-interfaces to 2.2.23\\n [\\\\#3094](https://github.com/scalameta/metals/pull/3094)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.29 [\\\\#3088](https://github.com/scalameta/metals/pull/3088)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.30\\n [\\\\#3089](https://github.com/scalameta/metals/pull/3089)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.2 [\\\\#3086](https://github.com/scalameta/metals/pull/3086)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.7\\n [\\\\#3084](https://github.com/scalameta/metals/pull/3084)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump olafurpg/setup-scala from 12 to 13\\n [\\\\#3090](https://github.com/scalameta/metals/pull/3090)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.2.23\\n [\\\\#3087](https://github.com/scalameta/metals/pull/3087)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.14.0\\n [\\\\#3085](https://github.com/scalameta/metals/pull/3085)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.5\\n [\\\\#3083](https://github.com/scalameta/metals/pull/3083)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.30\\n [\\\\#3082](https://github.com/scalameta/metals/pull/3082)\\n ([scala-steward](https://github.com/scala-steward))\\n- Run tests on JDK 17 [\\\\#3028](https://github.com/scalameta/metals/pull/3028)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix file watcher in large projects on macOS\\n [\\\\#3021](https://github.com/scalameta/metals/pull/3021)\\n ([pvid](https://github.com/pvid))\\n- Allow organize imports on unsaved code\\n [\\\\#3055](https://github.com/scalameta/metals/pull/3055)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to the newest nightly\\n [\\\\#3003](https://github.com/scalameta/metals/pull/3003)\\n ([tgodzik](https://github.com/tgodzik))\\n- Jar indexing - fix issue with empty jar source\\n [\\\\#3069](https://github.com/scalameta/metals/pull/3069)\\n ([dos65](https://github.com/dos65))\\n- Fix comments erasing all later variables in .env file\\n [\\\\#3070](https://github.com/scalameta/metals/pull/3070)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update next Scala 3 RC version to 3.0.2-RC2\\n [\\\\#3065](https://github.com/scalameta/metals/pull/3065)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add action to replace () with {} in functions and vice versa\\n [\\\\#3061](https://github.com/scalameta/metals/pull/3061)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle Scala 3 style blocks of code without braces\\n [\\\\#3058](https://github.com/scalameta/metals/pull/3058)\\n ([tpasternak](https://github.com/tpasternak))\\n- Add tests explicitly to tests shard\\n [\\\\#3049](https://github.com/scalameta/metals/pull/3049)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove complicated asSeenFrom logic\\n [\\\\#3047](https://github.com/scalameta/metals/pull/3047)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add documentation about GitHub Codespaces and GitHub.dev support\\n [\\\\#3046](https://github.com/scalameta/metals/pull/3046)\\n ([gabro](https://github.com/gabro))\\n- Simplify super method lens using overriddenSymbols\\n [\\\\#3045](https://github.com/scalameta/metals/pull/3045)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafmt to 3.0.0-RC7\\n [\\\\#3042](https://github.com/scalameta/metals/pull/3042)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Fix memory usage spike on empty completions\\n [\\\\#3043](https://github.com/scalameta/metals/pull/3043)\\n ([dos65](https://github.com/dos65))\\n- Update sbt-sourcegraph to 0.3.3\\n [\\\\#3035](https://github.com/scalameta/metals/pull/3035)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.27\\n [\\\\#3041](https://github.com/scalameta/metals/pull/3041)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC7\\n [\\\\#3039](https://github.com/scalameta/metals/pull/3039)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.28 [\\\\#3038](https://github.com/scalameta/metals/pull/3038)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.13.0\\n [\\\\#3037](https://github.com/scalameta/metals/pull/3037)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.10.Final\\n [\\\\#3036](https://github.com/scalameta/metals/pull/3036)\\n ([scala-steward](https://github.com/scala-steward))\\n- Alternative version of #2999: Add more tests on using sbt as the build server\\n [\\\\#3006](https://github.com/scalameta/metals/pull/3006)\\n ([adpi2](https://github.com/adpi2))\\n- Update scalameta to 4.4.26\\n [\\\\#3027](https://github.com/scalameta/metals/pull/3027)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix indentation when pasting part of the line\\n [\\\\#3025](https://github.com/scalameta/metals/pull/3025)\\n ([tgodzik](https://github.com/tgodzik))\\n- References - filter out wrong results from unrelated build targets\\n [\\\\#2980](https://github.com/scalameta/metals/pull/2980)\\n ([dos65](https://github.com/dos65))\\n- Upgrade to the latest sbt-sourcegraph\\n [\\\\#3022](https://github.com/scalameta/metals/pull/3022)\\n ([olafurpg](https://github.com/olafurpg))\\n- Merge sourcegraph branch into main.\\n [\\\\#3017](https://github.com/scalameta/metals/pull/3017)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make the SemanticDB compiler options used by mtags configurable.\\n [\\\\#3018](https://github.com/scalameta/metals/pull/3018)\\n ([olafurpg](https://github.com/olafurpg))\\n- Minimize file rewrites in `.metals/readonly/dependencies`\\n [\\\\#3004](https://github.com/scalameta/metals/pull/3004)\\n ([dos65](https://github.com/dos65))\\n- Automatic refactor - pattern match with placeholder\\n [\\\\#3002](https://github.com/scalameta/metals/pull/3002)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump coursier/cache-action from 6.2 to 6.3\\n [\\\\#3015](https://github.com/scalameta/metals/pull/3015)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc, sbt-mdoc to 2.2.22\\n [\\\\#3013](https://github.com/scalameta/metals/pull/3013)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.11.4\\n [\\\\#3012](https://github.com/scalameta/metals/pull/3012)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.9.Final\\n [\\\\#3011](https://github.com/scalameta/metals/pull/3011)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.9\\n [\\\\#3010](https://github.com/scalameta/metals/pull/3010)\\n ([scala-steward](https://github.com/scala-steward))\\n- Automatically convert $ to $$ when changing to string interpolation\\n [\\\\#2996](https://github.com/scalameta/metals/pull/2996)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support brackets in multiline strings\\n [\\\\#2995](https://github.com/scalameta/metals/pull/2995)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Additional completion pos fix for `Select` tree\\n [\\\\#2998](https://github.com/scalameta/metals/pull/2998)\\n ([dos65](https://github.com/dos65))\\n- Mention new run/test commands in the VS Code editor page\\n [\\\\#2993](https://github.com/scalameta/metals/pull/2993)\\n ([tgodzik](https://github.com/tgodzik))\\n- Point to coc.nvim for defaults rather than have them in here.\\n [\\\\#2988](https://github.com/scalameta/metals/pull/2988)\\n ([ckipp01](https://github.com/ckipp01))\\n- Include parens on lambda in Scala 3 when inserting type in params with brace.\\n [\\\\#2989](https://github.com/scalameta/metals/pull/2989)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correctly paste extension groups\\n [\\\\#2987](https://github.com/scalameta/metals/pull/2987)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Support extension methods in hover\\n [\\\\#2978](https://github.com/scalameta/metals/pull/2978)\\n ([tgodzik](https://github.com/tgodzik))\\n- Intend on paste [\\\\#2815](https://github.com/scalameta/metals/pull/2815)\\n ([Giggiux](https://github.com/Giggiux))\\n- Update default version for bug report\\n [\\\\#2984](https://github.com/scalameta/metals/pull/2984)\\n ([dos65](https://github.com/dos65))\\n- Update mdoc to 2.2.22 [\\\\#2981](https://github.com/scalameta/metals/pull/2981)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Filter out -print-lines and -print-tasty options\\n [\\\\#2979](https://github.com/scalameta/metals/pull/2979)\\n ([tgodzik](https://github.com/tgodzik))\\n- Replace the usage of nuprocess\\n [\\\\#2933](https://github.com/scalameta/metals/pull/2933)\\n ([dos65](https://github.com/dos65))\\n- Mtags3 - exclude scala2 depedencies.\\n [\\\\#2971](https://github.com/scalameta/metals/pull/2971)\\n ([dos65](https://github.com/dos65))\\n- Fix ammonite type completions\\n [\\\\#2974](https://github.com/scalameta/metals/pull/2974)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update munit to 0.7.27 [\\\\#2967](https://github.com/scalameta/metals/pull/2967)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.1 [\\\\#2965](https://github.com/scalameta/metals/pull/2965)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.11.2\\n [\\\\#2964](https://github.com/scalameta/metals/pull/2964)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump cache-action to latest.\\n [\\\\#2970](https://github.com/scalameta/metals/pull/2970)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update jackson-databind to 2.12.4\\n [\\\\#2963](https://github.com/scalameta/metals/pull/2963)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC6\\n [\\\\#2968](https://github.com/scalameta/metals/pull/2968)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade snapshot version\\n [\\\\#2957](https://github.com/scalameta/metals/pull/2957)\\n ([dos65](https://github.com/dos65))\\n- fix release notes date [\\\\#2958](https://github.com/scalameta/metals/pull/2958)\\n ([dos65](https://github.com/dos65))\\n- 0.10.5 - release notes [\\\\#2953](https://github.com/scalameta/metals/pull/2953)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/07/14/tungsten","metadata":{"permalink":"/metals/blog/2021/07/14/tungsten","source":"@site/blog/2021-07-14-tungsten.md","title":"Metals v0.10.5 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.5, which contains a lot of fixes, adds Scala 3.0.1 support,","date":"2021-07-14T00:00:00.000Z","formattedDate":"July 14, 2021","tags":[],"readingTime":5.7,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.5 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"},"nextItem":{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.5, which contains a lot of fixes, adds Scala 3.0.1 support,\\nand brings another nice feature!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release155
Merged PRs73
Contributors9
Closed issues18
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/40?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add support for `textDocument/selectionRange`\\n- [Scala 3] `Inferred Type` code action and other improvements\\n- Better support of scalafmt for Scala 3 projects\\n- Search symbol references from dependency source in the workspace\\n\\n## Add support for `textDocument/selectionRange`\\n\\nDue to the great work by [@ckipp01](https://github.com/ckipp01) Metals now implements the `textDocument/selectionRange` [LSP-method](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_selectionRange).\\nIt allows you to easily select an expression and expand/shrink it using shortcut combinations:\\n\\n![gif1](https://user-images.githubusercontent.com/13974112/125335989-7a5f8780-e34d-11eb-911f-42f851478737.gif)\\n\\nDefault keybindings in VSCode:\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Win/LinuxmacOS
ExpandShift+Alt+Right\u2303\u21e7\u2318\u2192
ShrinkShift+Alt+Left\u2303\u21e7\u2318\u2190
\\n\\n## [Scala3] `Inferred Type` code action and other improvements\\n\\nWe\'re hard at work ensuring that the same feature-set for Scala 2 is available for Scala 3.\\nThis release adds support for the `Insert Inferred Type` code action.\\n\\n![gif2](https://i.imgur.com/GJGFOOy.gif)\\n\\nIn addition to other small fixes, it\'s worth mentioning that the `Go to Definition` functionality was improved so that in situations where there are compilation issues, you\'re now able to better navigate to the definition site.\\n\\n## Better support of scalafmt for Scala 3 projects\\n\\nIn order to support different Scala dialects scalafmt added a [`runner.dialect` setting](https://scalameta.org/scalafmt/docs/configuration.html#scala-3) to support Scala 3.\\nMetals will now correctly generate and even automatically upgrade your `.scalafmt.conf`.\\nMoreover, in projects that contain different Scala major versions Metals will set a separate dialect for each separate source directory.\\n\\n## Search symbol references from dependency source in the workspace\\n\\nThanks to [@Z1kkurat](https://github.com/Z1kkurat) \\"Find References\\" now also works from within your dependency sources to include references from all workspace sources.\\nPreviously, it included only local occurrences in the dependency source file.\\n\\n![gif3](https://i.imgur.com/myHPDjP.gif)\\n\\n## Miscellaneous\\n\\n- Fixed issues with Metals client still running after closing window\\n- Fixed indexing of Scala 3 libraries that include macros\\n- Fixed issues with breakpoints not stopped when using optional braces\\n- Print type decorations for synthetic apply\\n- Wrap autofilled arguments with backticks\\n- Don\'t offer to organize imports when there is an error in the file\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.4..v0.10.5\\n22\\tChris Kipp\\n18\\tVadim Chelyshov\\n17\\tTomasz Godzik\\n 2\\tAdrien Piquerez\\n 2\\tLuigi Frunzio\\n 2\\tKamil Podsiad\u0142o\\n 1\\tZ1kkurat\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.5](https://github.com/scalameta/metals/tree/v0.10.5) (2021-07-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.4...v0.10.5)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 3.0.2-RC1 and drop references to 3.0.0-RC\\n [\\\\#2955](https://github.com/scalameta/metals/pull/2955)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Scala 3.0.1 support\\n [\\\\#2947](https://github.com/scalameta/metals/pull/2947)\\n ([dos65](https://github.com/dos65))\\n- Update vim docs now that Neovim 0.5.0 is out.\\n [\\\\#2951](https://github.com/scalameta/metals/pull/2951)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t set detail in completion if it\'s empty.\\n [\\\\#2950](https://github.com/scalameta/metals/pull/2950)\\n ([ckipp01](https://github.com/ckipp01))\\n- Organize imports quickfix action\\n [\\\\#2935](https://github.com/scalameta/metals/pull/2935)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Fix completion pos inference for Select with nme.ERROR\\n [\\\\#2940](https://github.com/scalameta/metals/pull/2940)\\n ([dos65](https://github.com/dos65))\\n- [Scala 3] Properly show enum on hover\\n [\\\\#2938](https://github.com/scalameta/metals/pull/2938)\\n ([tgodzik](https://github.com/tgodzik))\\n- Correct footer label\\n [\\\\#2939](https://github.com/scalameta/metals/pull/2939)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala2] PcDefinition fix\\n [\\\\#2917](https://github.com/scalameta/metals/pull/2917)\\n ([dos65](https://github.com/dos65))\\n- Fix dead links and add in serve command\\n [\\\\#2937](https://github.com/scalameta/metals/pull/2937)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala3] Fix completions after newline + dot\\n [\\\\#2930](https://github.com/scalameta/metals/pull/2930)\\n ([dos65](https://github.com/dos65))\\n- Update deploy command for docusaurus.\\n [\\\\#2936](https://github.com/scalameta/metals/pull/2936)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update to Docusaurus 2.0\\n [\\\\#2927](https://github.com/scalameta/metals/pull/2927)\\n ([ckipp01](https://github.com/ckipp01))\\n- Revert \\"Merge pull request #2908 from tgodzik/reset-object\\"\\n [\\\\#2931](https://github.com/scalameta/metals/pull/2931)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t offer to organize imports when there is an error in the file\\n [\\\\#2921](https://github.com/scalameta/metals/pull/2921)\\n ([ckipp01](https://github.com/ckipp01))\\n- Do not use $TMPDIR to store sbt-launcher.jar\\n [\\\\#2924](https://github.com/scalameta/metals/pull/2924)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Wrap autofilled arguments with backticks\\n [\\\\#2929](https://github.com/scalameta/metals/pull/2929)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print type decorations for synthetic apply\\n [\\\\#2906](https://github.com/scalameta/metals/pull/2906)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Use symbol search for PC `definitions`.\\n [\\\\#2900](https://github.com/scalameta/metals/pull/2900)\\n ([dos65](https://github.com/dos65))\\n- Wrap worksheets in object instead of a class\\n [\\\\#2908](https://github.com/scalameta/metals/pull/2908)\\n ([tgodzik](https://github.com/tgodzik))\\n- Search for symbol references in workspace\\n [\\\\#2920](https://github.com/scalameta/metals/pull/2920)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.23\\n [\\\\#2915](https://github.com/scalameta/metals/pull/2915)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix unclear heading in sbt docs.\\n [\\\\#2916](https://github.com/scalameta/metals/pull/2916)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update ipcsocket to 1.4.0\\n [\\\\#2913](https://github.com/scalameta/metals/pull/2913)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update lz4-java to 1.8.0\\n [\\\\#2912](https://github.com/scalameta/metals/pull/2912)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.10.0\\n [\\\\#2911](https://github.com/scalameta/metals/pull/2911)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Rework `NamesInScope`\\n [\\\\#2867](https://github.com/scalameta/metals/pull/2867)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.1-RC2\\n [\\\\#2898](https://github.com/scalameta/metals/pull/2898)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix off by one error while setting DAP breakpoints\\n [\\\\#2894](https://github.com/scalameta/metals/pull/2894)\\n ([tgodzik](https://github.com/tgodzik))\\n- Exclude Jmh and Scalafix from the list of build targets in sbt\\n [\\\\#2895](https://github.com/scalameta/metals/pull/2895)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala3] Provide correct dialect to `Mtags.allToplevels` calls.\\n [\\\\#2892](https://github.com/scalameta/metals/pull/2892)\\n ([dos65](https://github.com/dos65))\\n- Fix CompilerJobQueue concurrent access/shutdown\\n [\\\\#2890](https://github.com/scalameta/metals/pull/2890)\\n ([dos65](https://github.com/dos65))\\n- Get rid of warning about setting -Xsemanticdb twice.\\n [\\\\#2889](https://github.com/scalameta/metals/pull/2889)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scalafmt] Rewrite `.scalafmt.conf` if sources require non-default dialect\\n [\\\\#2814](https://github.com/scalameta/metals/pull/2814)\\n ([dos65](https://github.com/dos65))\\n- Add support for `textDocument/selectionRange`.\\n [\\\\#2862](https://github.com/scalameta/metals/pull/2862)\\n ([ckipp01](https://github.com/ckipp01))\\n- Ensure a valid URI is returned for non-html analyze stacktrace.\\n [\\\\#2876](https://github.com/scalameta/metals/pull/2876)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.21\\n [\\\\#2886](https://github.com/scalameta/metals/pull/2886)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.3.1\\n [\\\\#2884](https://github.com/scalameta/metals/pull/2884)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC5\\n [\\\\#2885](https://github.com/scalameta/metals/pull/2885)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.4\\n [\\\\#2883](https://github.com/scalameta/metals/pull/2883)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.2\\n [\\\\#2882](https://github.com/scalameta/metals/pull/2882)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-jmh to 0.4.3\\n [\\\\#2887](https://github.com/scalameta/metals/pull/2887)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.0\\n [\\\\#2881](https://github.com/scalameta/metals/pull/2881)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump sbt-debug-adapter to 1.1.2\\n [\\\\#2872](https://github.com/scalameta/metals/pull/2872)\\n ([adpi2](https://github.com/adpi2))\\n- Lazily get explicit choice.\\n [\\\\#2868](https://github.com/scalameta/metals/pull/2868)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Enable inferred type code action\\n [\\\\#2825](https://github.com/scalameta/metals/pull/2825)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t offer completions inside scaladoc and comments\\n [\\\\#2822](https://github.com/scalameta/metals/pull/2822)\\n ([Giggiux](https://github.com/Giggiux))\\n- WorkspaceSearchVisitior - make search more predictable.\\n [\\\\#2863](https://github.com/scalameta/metals/pull/2863)\\n ([dos65](https://github.com/dos65))\\n- Enable organize-imports for mtags3\\n [\\\\#2860](https://github.com/scalameta/metals/pull/2860)\\n ([dos65](https://github.com/dos65))\\n- Run organize imports on Scala 3 sources\\n [\\\\#2858](https://github.com/scalameta/metals/pull/2858)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable organize imports for Scala 3\\n [\\\\#2857](https://github.com/scalameta/metals/pull/2857)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Add test that checks that diagnostic for inline def usage works correctly\\n [\\\\#2854](https://github.com/scalameta/metals/pull/2854)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.1-RC1\\n [\\\\#2852](https://github.com/scalameta/metals/pull/2852)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump olafurpg/setup-scala from 10 to 12\\n [\\\\#2848](https://github.com/scalameta/metals/pull/2848)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- ScalaVersions: fix scala3 version extraction from jar name. \\n [\\\\#2833](https://github.com/scalameta/metals/pull/2833)\\n ([dos65](https://github.com/dos65))\\n- Update amonite to 2.3.8-124-2da846d2 and add support for 2.13.6\\n [\\\\#2851](https://github.com/scalameta/metals/pull/2851)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert Bloop version upgrade\\n [\\\\#2850](https://github.com/scalameta/metals/pull/2850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix scalafmt config\\n [\\\\#2849](https://github.com/scalameta/metals/pull/2849)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-core to 3.0.0-RC4\\n [\\\\#2845](https://github.com/scalameta/metals/pull/2845)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.16\\n [\\\\#2844](https://github.com/scalameta/metals/pull/2844)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.1\\n [\\\\#2843](https://github.com/scalameta/metals/pull/2843)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.8.Final\\n [\\\\#2842](https://github.com/scalameta/metals/pull/2842)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update nuprocess to 2.0.2\\n [\\\\#2841](https://github.com/scalameta/metals/pull/2841)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.5\\n [\\\\#2840](https://github.com/scalameta/metals/pull/2840)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.15\\n [\\\\#2839](https://github.com/scalameta/metals/pull/2839)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.8\\n [\\\\#2838](https://github.com/scalameta/metals/pull/2838)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump coursier/cache-action from 5 to 6.1\\n [\\\\#2846](https://github.com/scalameta/metals/pull/2846)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update metaconfig-core to 0.9.14\\n [\\\\#2836](https://github.com/scalameta/metals/pull/2836)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.29\\n [\\\\#2835](https://github.com/scalameta/metals/pull/2835)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.8-43-c2d941d9\\n [\\\\#2834](https://github.com/scalameta/metals/pull/2834)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add FAQ entry about sbt Apple M1 issue\\n [\\\\#2832](https://github.com/scalameta/metals/pull/2832)\\n ([tgodzik](https://github.com/tgodzik))\\n- Minor fix in last release notes\\n [\\\\#2831](https://github.com/scalameta/metals/pull/2831)\\n ([dos65](https://github.com/dos65))\\n- Add release notes - 0.10.4 release\\n [\\\\#2830](https://github.com/scalameta/metals/pull/2830)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/05/31/tungsten","metadata":{"permalink":"/metals/blog/2021/05/31/tungsten","source":"@site/blog/2021-05-31-tungsten.md","title":"Metals v0.10.4 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.4, which adds support for Scala 2.12.14.","date":"2021-05-31T00:00:00.000Z","formattedDate":"May 31, 2021","tags":[],"readingTime":1.315,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.4 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"},"nextItem":{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.4, which adds support for Scala 2.12.14. \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release24
Merged PRs11
Contributors4
Closed issues3
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/39?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add support for Scala 2.12.14\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.3..v0.10.4\\nTomasz Godzik\\nVadim Chelyshov\\nLuigi Frunzio\\nChris Kipp\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.4](https://github.com/scalameta/metals/tree/v0.10.4) (2021-05-31)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.3...v0.10.4)\\n\\n**Merged pull requests:**\\n\\n- Add support for 2.12.14\\n [\\\\#2826](https://github.com/scalameta/metals/pull/2826)\\n ([dos65](https://github.com/dos65))\\n- Fix pprint dependency for Scala3 RC versions\\n [\\\\#2824](https://github.com/scalameta/metals/pull/2824)\\n ([dos65](https://github.com/dos65))\\n- Print better types on hover\\n [\\\\#2821](https://github.com/scalameta/metals/pull/2821)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t warn about sourceroot for Scala 3\\n [\\\\#2819](https://github.com/scalameta/metals/pull/2819)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update pprint to newest version\\n [\\\\#2818](https://github.com/scalameta/metals/pull/2818)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues when importing in an empty package\\n [\\\\#2817](https://github.com/scalameta/metals/pull/2817)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix error for remote debugging when missing build target\\n [\\\\#2812](https://github.com/scalameta/metals/pull/2812)\\n ([Giggiux](https://github.com/Giggiux))\\n- Publish scalameta parser diagnostics for Scala 3\\n [\\\\#2807](https://github.com/scalameta/metals/pull/2807)\\n ([tgodzik](https://github.com/tgodzik))\\n- Group Scala versions in docs to make it easier to see which are supported\\n [\\\\#2806](https://github.com/scalameta/metals/pull/2806)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix duplicate toplevels object definition when using enums\\n [\\\\#2809](https://github.com/scalameta/metals/pull/2809)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.10.3 release\\n [\\\\#2781](https://github.com/scalameta/metals/pull/2781)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/05/17/tungsten","metadata":{"permalink":"/metals/blog/2021/05/17/tungsten","source":"@site/blog/2021-05-17-tungsten.md","title":"Metals v0.10.3 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.3, which brings support for","date":"2021-05-17T00:00:00.000Z","formattedDate":"May 17, 2021","tags":[],"readingTime":4.73,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.3 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"},"nextItem":{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.3, which brings support for\\nthe long awaited Scala 3.0.0 version together with some important improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release104
Merged PRs49
Contributors6
Closed issues12
New features6
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/38?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Scala 3.0.0 support!\\n- Scala 2.13.6 along with `-Xsource:3` support.\\n- Extract class code action.\\n- Rename file as class.\\n- [Scala 3] Auto imports in completions and code actions.\\n- Support same names in different build targets.\\n\\n## Extract class code action\\n\\nDue to the great work by [@Giggiux](https://github.com/Giggiux) Metals now\\nprovides a new `Extract to file` code action, which is available when there are\\nmultiple definitions in the source file. This works for classes, traits, enums,\\nand objects. The code action will not show if the definition we are extracting\\nis or extends a `sealed` definition.\\n\\n![gif1](https://i.imgur.com/dKKkLcL.gif)\\n\\nThe extraction happens via a code action on the definition\'s name, it will also\\nextract any relevant package definition, imports, and, if available, the\\ncompanion.\\n\\n## Rename file as class\\n\\nIt is also now possible when there is only a single definition in a file that\\ndoesn\'t have the same name as the definition, to quickly rename the file\\naccording to its content.\\n\\n![gif2](https://i.imgur.com/pUADnMn.gif)\\n\\n## [Scala 3] Auto imports in completions and code actions\\n\\nPreviously, the experience of writing Scala 3 code might be spoiled because\\nthese usual features weren\'t implemented for Scala 3 in Metals. We are happy to\\nsay that there is no more need to write imports by hand and remember the exact\\npath to the symbol. Now, completions in Scala 3 sources provide symbols from the\\nworkspace and libraries and their application automatically adds the necessary\\nimport. Code action `AutoImport` also started working.\\n\\nEnjoy writing Scala 3!\\n\\nThis required some huge amounts of effort and is working thanks to\\n([dos65](https://github.com/dos65)).\\n\\n### Support same names in different build targets\\n\\nThis change fixes navigation issues that previously happened in case of having\\nclashing names across libraries and projects. An additional thing you might\\nnotice with this change is the presence of library names in `.metals/readonly`\\ndirectory. Previously, for example, if jump into `String` the file was extracted\\ninto `./metals/readonly/scala/Predef.scala`.\\n\\nNow it will be\\n`./metals/readonly/dependencies/scala-library-$scalaVersion-sources.jar/scala/Predef.scala`\\n\\n## Miscellaneous\\n\\n- Support names with dots for \\"Implement all members\\" code action.\\n- Fix invalid auto imports with wrong prefix.\\n- Fix flaky \\"Organize imports\\" behaviour.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.2..v0.10.3\\nTomasz Godzik\\nLuigi Frunzio\\nVadim Chelyshov\\nChris Kipp\\nAmaal Ali\\nEvgeny Kurnevsky\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.3](https://github.com/scalameta/metals/tree/v0.10.3) (2021-05-17)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.2...v0.10.3)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.6\\n [\\\\#2805](https://github.com/scalameta/metals/pull/2805)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Completions - fix `Renamed` and `specifyOwner` Autoimports\\n application [\\\\#2804](https://github.com/scalameta/metals/pull/2804)\\n ([dos65](https://github.com/dos65))\\n- Fix field ordering in completions\\n [\\\\#2803](https://github.com/scalameta/metals/pull/2803)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Completions - do not backtick NamedArg completion values\\n [\\\\#2802](https://github.com/scalameta/metals/pull/2802)\\n ([dos65](https://github.com/dos65))\\n- Forward dialect to ScalaMtags to avoid parsing fallback\\n [\\\\#2799](https://github.com/scalameta/metals/pull/2799)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ignore NoSuchFileException since it only comes from badly configured jar\\n [\\\\#2797](https://github.com/scalameta/metals/pull/2797)\\n ([tgodzik](https://github.com/tgodzik))\\n- SemanticdbDefinition - use correct dialect\\n [\\\\#2780](https://github.com/scalameta/metals/pull/2780)\\n ([dos65](https://github.com/dos65))\\n- Update sbt-jmh to 0.4.2\\n [\\\\#2794](https://github.com/scalameta/metals/pull/2794)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove most soft keywords from being backticked.\\n [\\\\#2796](https://github.com/scalameta/metals/pull/2796)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update requests to 0.6.9\\n [\\\\#2786](https://github.com/scalameta/metals/pull/2786)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.10 [\\\\#2784](https://github.com/scalameta/metals/pull/2784)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.13 [\\\\#2787](https://github.com/scalameta/metals/pull/2787)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.7\\n [\\\\#2785](https://github.com/scalameta/metals/pull/2785)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.4\\n [\\\\#2788](https://github.com/scalameta/metals/pull/2788)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.0\\n [\\\\#2789](https://github.com/scalameta/metals/pull/2789)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.2\\n [\\\\#2791](https://github.com/scalameta/metals/pull/2791)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.17\\n [\\\\#2793](https://github.com/scalameta/metals/pull/2793)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scala-java8-compat to 1.0.0\\n [\\\\#2790](https://github.com/scalameta/metals/pull/2790)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.21\\n [\\\\#2792](https://github.com/scalameta/metals/pull/2792)\\n ([scala-steward](https://github.com/scala-steward))\\n- Delete unused `Scala3ToplevelMtags`\\n [\\\\#2782](https://github.com/scalameta/metals/pull/2782)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.0\\n [\\\\#2779](https://github.com/scalameta/metals/pull/2779)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala3 - AutoImports and completions from workspace\\n [\\\\#2728](https://github.com/scalameta/metals/pull/2728)\\n ([dos65](https://github.com/dos65))\\n- Code action to move classes to their own files if requirements are met\\n [\\\\#2723](https://github.com/scalameta/metals/pull/2723)\\n ([Giggiux](https://github.com/Giggiux))\\n- Properly adjust folding range end on windows\\n [\\\\#2774](https://github.com/scalameta/metals/pull/2774)\\n ([tgodzik](https://github.com/tgodzik))\\n- Surface error to user when they pass in an invalid envFile.\\n [\\\\#2770](https://github.com/scalameta/metals/pull/2770)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix failing tests: SbtBloopSuite + FoldingRangeSuite (Windows)\\n [\\\\#2767](https://github.com/scalameta/metals/pull/2767)\\n ([dos65](https://github.com/dos65))\\n- Update link to Mill\'s new website\\n [\\\\#2772](https://github.com/scalameta/metals/pull/2772)\\n ([amaalali](https://github.com/amaalali))\\n- Update Scalameta to 4.4.15\\n [\\\\#2765](https://github.com/scalameta/metals/pull/2765)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.7.5\\n [\\\\#2761](https://github.com/scalameta/metals/pull/2761)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.20\\n [\\\\#2759](https://github.com/scalameta/metals/pull/2759)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.1\\n [\\\\#2758](https://github.com/scalameta/metals/pull/2758)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.8.2\\n [\\\\#2757](https://github.com/scalameta/metals/pull/2757)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.4\\n [\\\\#2756](https://github.com/scalameta/metals/pull/2756)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.12 [\\\\#2755](https://github.com/scalameta/metals/pull/2755)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.8\\n [\\\\#2754](https://github.com/scalameta/metals/pull/2754)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.5 [\\\\#2753](https://github.com/scalameta/metals/pull/2753)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.9 [\\\\#2752](https://github.com/scalameta/metals/pull/2752)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scalafix] Report problems with invalid path and fix flaky behaviour\\n [\\\\#2749](https://github.com/scalameta/metals/pull/2749)\\n ([tgodzik](https://github.com/tgodzik))\\n- Toplevel Mtags: use single indexer implementation\\n [\\\\#2745](https://github.com/scalameta/metals/pull/2745)\\n ([dos65](https://github.com/dos65))\\n- Fix wrong import when working with akka\\n [\\\\#2739](https://github.com/scalameta/metals/pull/2739)\\n ([tgodzik](https://github.com/tgodzik))\\n- SymbolIndex: multiply symbol locations\\n [\\\\#2668](https://github.com/scalameta/metals/pull/2668)\\n ([dos65](https://github.com/dos65))\\n- Update emacs documentation.\\n [\\\\#2733](https://github.com/scalameta/metals/pull/2733)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Add extra check before auto-connecting to server.\\n [\\\\#2737](https://github.com/scalameta/metals/pull/2737)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support 3.16.0 lsp specification with compatibility for non `array`/`\u2026\\n [\\\\#2735](https://github.com/scalameta/metals/pull/2735)\\n ([Giggiux](https://github.com/Giggiux))\\n- Add in the parentUri when offering the newSymbol code action.\\n [\\\\#2734](https://github.com/scalameta/metals/pull/2734)\\n ([ckipp01](https://github.com/ckipp01))\\n- `ImplementAsbtractMembers` - support names with dots\\n [\\\\#2732](https://github.com/scalameta/metals/pull/2732)\\n ([dos65](https://github.com/dos65))\\n- Remove munit sbt plugin to fix CI\\n [\\\\#2731](https://github.com/scalameta/metals/pull/2731)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove test reports [\\\\#2730](https://github.com/scalameta/metals/pull/2730)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.10.2\\n [\\\\#2729](https://github.com/scalameta/metals/pull/2729)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/04/20/tungsten","metadata":{"permalink":"/metals/blog/2021/04/20/tungsten","source":"@site/blog/2021-04-20-tungsten.md","title":"Metals v0.10.2 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.2, which mainly adds support","date":"2021-04-20T00:00:00.000Z","formattedDate":"April 20, 2021","tags":[],"readingTime":3.755,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.2 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"},"nextItem":{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.2, which mainly adds support\\nfor Scala 3.0.0-RC3 as well a couple of smaller improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release62
Merged PRs30
Contributors8
Closed issues8
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/37?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Support for Scala 3.0.0-RC3\\n- Add code action to add/remove string interpolation.\\n- Offer to organize imports when on an unused import.\\n- [Scala 3] Better names for types in completions and hovers.\\n\\n## Add/remove string interpolation\\n\\nThanks to some great work by our newest contributor\\n[Giggiux](https://github.com/Giggiux) it\'s now possible to:\\n\\n- easily add string interpolation to an existing string\\n\\n```scala\\nval message = \\"Hello this is a message\\"\\n```\\n\\nWhen the cursor is positioned inside of the string we can invoke the code action\\nand get:\\n\\n```scala\\nval message = s\\"Hello this is a message\\"\\n```\\n\\nWhile this is a simpler code action, it can be paired with other things like\\ncompletions that allow for a workflow with less manual steps.\\n\\n- remove string interpolation if no splices are found\\n\\nWhen the cursor is positioned inside a string interpolation, that does not contain\\nany splices ( `$identifier`), we will now offer an action to quickly get rid of\\nthe additional `s`.\\n\\n```scala\\nval message = s\\"Hello this is a message without splices\\"\\n```\\n\\nwill change to:\\n\\n```scala\\nval message = \\"Hello this is a message without splices\\"\\n```\\n\\n## Offer to organize imports when on an unused import\\n\\nIn addition to the usual \\"organize imports\\", to try to improve the user\\nexperience, Metals now offers a code action to organize imports whenever the\\ncursor is situated on an unused import reported by the diagnostics. Thanks\\n[ckipp01](https://github.com/ckipp01) for this new feature!\\n\\n## [Scala 3] Better names for types in completions and hovers.\\n\\nThanks to another great PR by [tanishiking](https://github.com/tanishiking)\\nMetals will offer completions and hovers that include shorter names instead of\\nfully qualified ones whenever they are currently in scope. They will also be\\nmore similar to the ones that you might be accustomed to in Scala 2. You can\\nfind some more examples of improvements in the\\n[pull request](https://github.com/scalameta/metals/pull/2637) itself.\\n\\n## Miscellaneous\\n\\n- Make insert type work with renamed imports.\\n- Treat `.srcjar` as jars to support Bazel in the future (thanks\\n [darl](https://github.com/darl)!).\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.1..v0.10.2\\nTomasz Godzik\\nAyoub Benali\\nChris Kipp\\nAdrien Piquerez\\nLuigi Frunzio\\nRikito Taniguchi\\nToshiyuki Takahashi\\nVladislav Dolbilov\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.2](https://github.com/scalameta/metals/tree/v0.10.2) (2021-04-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.1...v0.10.2)\\n\\n**Merged pull requests:**\\n\\n- Better names for types in completions\\n [\\\\#2637](https://github.com/scalameta/metals/pull/2637)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for Scala 3.0.0-RC3\\n [\\\\#2727](https://github.com/scalameta/metals/pull/2727)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make insert type work with renamed imports\\n [\\\\#2699](https://github.com/scalameta/metals/pull/2699)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt to 3.0.0-RC1\\n [\\\\#2726](https://github.com/scalameta/metals/pull/2726)\\n ([tgodzik](https://github.com/tgodzik))\\n- Treat .srcjar as jars [\\\\#2710](https://github.com/scalameta/metals/pull/2710)\\n ([darl](https://github.com/darl))\\n- Update ujson to 1.3.11 [\\\\#2718](https://github.com/scalameta/metals/pull/2718)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.13\\n [\\\\#2721](https://github.com/scalameta/metals/pull/2721)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 26\\n [\\\\#2719](https://github.com/scalameta/metals/pull/2719)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.7.3\\n [\\\\#2720](https://github.com/scalameta/metals/pull/2720)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.7\\n [\\\\#2717](https://github.com/scalameta/metals/pull/2717)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.4 [\\\\#2716](https://github.com/scalameta/metals/pull/2716)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.8 [\\\\#2715](https://github.com/scalameta/metals/pull/2715)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.11\\n [\\\\#2713](https://github.com/scalameta/metals/pull/2713)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.3\\n [\\\\#2712](https://github.com/scalameta/metals/pull/2712)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issues with DAP tests\\n [\\\\#2709](https://github.com/scalameta/metals/pull/2709)\\n ([tgodzik](https://github.com/tgodzik))\\n- Document Sublime support for metals/didFocusTextDocument\\n [\\\\#2711](https://github.com/scalameta/metals/pull/2711)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add hint to welcome messages to use \'-F\' flag\\n [\\\\#2708](https://github.com/scalameta/metals/pull/2708)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump sbt-debug-adapter [\\\\#2695](https://github.com/scalameta/metals/pull/2695)\\n ([adpi2](https://github.com/adpi2))\\n- Add testframeworks back in to ensure tests run.\\n [\\\\#2705](https://github.com/scalameta/metals/pull/2705)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump sbt to 1.5.0 [\\\\#2703](https://github.com/scalameta/metals/pull/2703)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t override testSettings in unit tests\\n [\\\\#2702](https://github.com/scalameta/metals/pull/2702)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print exception stack trace in DAP tests\\n [\\\\#2696](https://github.com/scalameta/metals/pull/2696)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to the newest SNAPSHOT\\n [\\\\#2698](https://github.com/scalameta/metals/pull/2698)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sublime Text documentation regarding Decoration protocol support\\n [\\\\#2701](https://github.com/scalameta/metals/pull/2701)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Make sure that a correct targetroot is reported\\n [\\\\#2693](https://github.com/scalameta/metals/pull/2693)\\n ([tgodzik](https://github.com/tgodzik))\\n- Offer organize imports when on an unused import.\\n [\\\\#2688](https://github.com/scalameta/metals/pull/2688)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add code action to add/remove string interpolation\\n [\\\\#2682](https://github.com/scalameta/metals/pull/2682)\\n ([Giggiux](https://github.com/Giggiux))\\n- Update the documentation to recommend using company-capf\\n [\\\\#2672](https://github.com/scalameta/metals/pull/2672)\\n ([tototoshi](https://github.com/tototoshi))\\n- Typo in release notes [\\\\#2684](https://github.com/scalameta/metals/pull/2684)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for Metals v0.10.1\\n [\\\\#2673](https://github.com/scalameta/metals/pull/2673)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/04/06/tungsten","metadata":{"permalink":"/metals/blog/2021/04/06/tungsten","source":"@site/blog/2021-04-06-tungsten.md","title":"Metals v0.10.1 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.1, which mainly concentrated","date":"2021-04-06T00:00:00.000Z","formattedDate":"April 6, 2021","tags":[],"readingTime":6.78,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.1 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"},"nextItem":{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.1, which mainly concentrated\\non bugfixes together with a couple of smaller improvements. We also added\\nsupport for the almost ready Scala 3 version 3.0.0-RC2. Its final release is\\ncoming soon and Metals will try to make it an amazing experience!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release173
Merged PRs86
Contributors9
Closed issues29
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/35?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 3.0.0-RC2\\n- Smoother main and test discovery\\n\\n## Smoother main and test discovery\\n\\nThanks to some great ideas (and obviously execution) by\\n[@ckipp01](https://github.com/ckipp01) it is now possible to specify alternative\\ndebug parameters that enable users to:\\n\\n- Run the main class in the current file, or in case that there are multiple\\n main classes quick pick window will appear for the users to choose the exact\\n main class to run.\\n- Run all tests in the current file.\\n- Run all tests in the current target.\\n\\nTo make that work some additional fields must be sent while starting the debug\\nsession:\\n\\n- `path` - uri to the file that is currently open.\\n- `runType` - enum value that can either be `run`, `testFile` or `testTarget`\\n\\nThe \\"args\\", \\"jvmOptions\\", \\"env\\", and \\"envFile\\" are all valid keys that can be\\nsent as well with the same format as usual.\\n\\nIn VS Code this is achieved via 3 new commands, that can easily bound to\\nshortcuts:\\n\\n- `metals.run-current-file` - run main classes in the current file\\n- `metals.test-current-file` - run test classes in the current file\\n- `metals.test-current-target` - run test classes in the current target\\n\\nMore information can be found in the\\n[Debug Adapter Protocol](https://scalameta.org/metals/docs/integrations/debug-adapter-protocol#how-to-add-support-for-debugging-in-my-editor)\\nsection of the documentation.\\n\\n## Miscellaneous\\n\\n- Support for Ammonite scripts using Scala 2.12.13 and 2.13.5.\\n- Fix outline for documents with Scala 3 syntax.\\n- Remove println that would sometimes print files while indexing them :(\\n- Show an error when user adds bad dependency into a worksheet.\\n- Fix issues on Windows with renames not being applied on current file.\\n- Change project directory to lower case when using New Scala Project.\\n- Renaming renamed imports now works correctly within a file.\\n- Fix renaming named parameters in constructors.\\n- Find alternative symbol references (such as companion object for a case class)\\n when not searching from the definition file.\\n- Automatically backtick symbols when renaming.\\n- Fix highlighting overloaded methods.\\n- Fix classloader issues when using worksheets.\\n- Fix issue where override was inserted twice for symbols that were already\\n overriden.\\n- Infer type for higher kinded functions correctly.\\n- Show better type decorations for higher kinded types.\\n- Improve indexing of Scala 3 sources <- a lot of hard work by\\n [@dos65](https://github.com/dos65)!\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.0..v0.10.1\\nTomasz Godzik\\nChris Kipp\\nVadim Chelyshov\\nAJ Zawawi\\nAlexandre Archambault\\nArthur McGibbon\\nEric Peters\\nGreg Atkinson\\nMicha\u0142 Bednarz\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.1](https://github.com/scalameta/metals/tree/v0.10.1) (2021-04-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.0...v0.10.1)\\n\\n**Merged pull requests:**\\n\\n- Get behind unified slash syntax.\\n [\\\\#2677](https://github.com/scalameta/metals/pull/2677)\\n ([ckipp01](https://github.com/ckipp01))\\n- Mtags: fix Scala3 parsing for Windows.\\n [\\\\#2678](https://github.com/scalameta/metals/pull/2678)\\n ([dos65](https://github.com/dos65))\\n- Update org.eclipse.lsp4j to 0.12.0\\n [\\\\#2669](https://github.com/scalameta/metals/pull/2669)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with old typesafe config in the worksheets\\n [\\\\#2674](https://github.com/scalameta/metals/pull/2674)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt-ci-release to 1.5.7\\n [\\\\#2671](https://github.com/scalameta/metals/pull/2671)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Support new Scala3 syntax in symbol index\\n [\\\\#2600](https://github.com/scalameta/metals/pull/2600)\\n ([dos65](https://github.com/dos65))\\n- Update scalameta to 4.4.11\\n [\\\\#2667](https://github.com/scalameta/metals/pull/2667)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update requests to 0.6.6\\n [\\\\#2649](https://github.com/scalameta/metals/pull/2649)\\n ([scala-steward](https://github.com/scala-steward))\\n- A few changes to docs including a User Configuration section.\\n [\\\\#2642](https://github.com/scalameta/metals/pull/2642)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.19\\n [\\\\#2660](https://github.com/scalameta/metals/pull/2660)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.27\\n [\\\\#2664](https://github.com/scalameta/metals/pull/2664)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.3 [\\\\#2648](https://github.com/scalameta/metals/pull/2648)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.1\\n [\\\\#2651](https://github.com/scalameta/metals/pull/2651)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.1.1-jre\\n [\\\\#2647](https://github.com/scalameta/metals/pull/2647)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 24\\n [\\\\#2652](https://github.com/scalameta/metals/pull/2652)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.16\\n [\\\\#2653](https://github.com/scalameta/metals/pull/2653)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.3.2\\n [\\\\#2654](https://github.com/scalameta/metals/pull/2654)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.7.Final\\n [\\\\#2655](https://github.com/scalameta/metals/pull/2655)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.8.0\\n [\\\\#2656](https://github.com/scalameta/metals/pull/2656)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.7.1\\n [\\\\#2658](https://github.com/scalameta/metals/pull/2658)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.15\\n [\\\\#2659](https://github.com/scalameta/metals/pull/2659)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.23\\n [\\\\#2661](https://github.com/scalameta/metals/pull/2661)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.9 [\\\\#2650](https://github.com/scalameta/metals/pull/2650)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.27\\n [\\\\#2645](https://github.com/scalameta/metals/pull/2645)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-debug-adapter to 1.1.0\\n [\\\\#2644](https://github.com/scalameta/metals/pull/2644)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.5.4\\n [\\\\#2643](https://github.com/scalameta/metals/pull/2643)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add test to check for occurrences of anonymous using params\\n [\\\\#2640](https://github.com/scalameta/metals/pull/2640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that universal types deco are printed properly\\n [\\\\#2638](https://github.com/scalameta/metals/pull/2638)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.0.0-RC2\\n [\\\\#2639](https://github.com/scalameta/metals/pull/2639)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure higher kinded functions in signatures are inferred properly\\n [\\\\#2636](https://github.com/scalameta/metals/pull/2636)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not insert override twice\\n [\\\\#2635](https://github.com/scalameta/metals/pull/2635)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update geny to 0.6.7 [\\\\#2633](https://github.com/scalameta/metals/pull/2633)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use correct parent classloader for worksheets.\\n [\\\\#2631](https://github.com/scalameta/metals/pull/2631)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add documentation for online IDEs\\n [\\\\#2370](https://github.com/scalameta/metals/pull/2370)\\n ([MichalBednarz](https://github.com/MichalBednarz))\\n- Bump amm version and amm scala 2.13 version\\n [\\\\#2632](https://github.com/scalameta/metals/pull/2632)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update organize imports rule to 0.5.0\\n [\\\\#2630](https://github.com/scalameta/metals/pull/2630)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Adrien to the team!\\n [\\\\#2623](https://github.com/scalameta/metals/pull/2623)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Vadim to the team!\\n [\\\\#2624](https://github.com/scalameta/metals/pull/2624)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix highlighting overloaded methods\\n [\\\\#2622](https://github.com/scalameta/metals/pull/2622)\\n ([tgodzik](https://github.com/tgodzik))\\n- Run Scala 3 migrate on mtags sources\\n [\\\\#2617](https://github.com/scalameta/metals/pull/2617)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update dead links [\\\\#2620](https://github.com/scalameta/metals/pull/2620)\\n ([ajzawawi](https://github.com/ajzawawi))\\n- Add init option to strip color from DAP communication.\\n [\\\\#2615](https://github.com/scalameta/metals/pull/2615)\\n ([ckipp01](https://github.com/ckipp01))\\n- Show better message if no semanticdb is found for testFile.\\n [\\\\#2602](https://github.com/scalameta/metals/pull/2602)\\n ([ckipp01](https://github.com/ckipp01))\\n- Automatically backtick symbols when renaming\\n [\\\\#2605](https://github.com/scalameta/metals/pull/2605)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 7.7.0\\n [\\\\#2612](https://github.com/scalameta/metals/pull/2612)\\n ([scala-steward](https://github.com/scala-steward))\\n- Revert cache-action update\\n [\\\\#2614](https://github.com/scalameta/metals/pull/2614)\\n ([ckipp01](https://github.com/ckipp01))\\n- Find alternative symbol references when not searching from the definition file\\n [\\\\#2601](https://github.com/scalameta/metals/pull/2601)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt, scripted-plugin to 1.4.9\\n [\\\\#2613](https://github.com/scalameta/metals/pull/2613)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.5.Final\\n [\\\\#2611](https://github.com/scalameta/metals/pull/2611)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.0\\n [\\\\#2610](https://github.com/scalameta/metals/pull/2610)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.6\\n [\\\\#2607](https://github.com/scalameta/metals/pull/2607)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.2 [\\\\#2608](https://github.com/scalameta/metals/pull/2608)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.2\\n [\\\\#2606](https://github.com/scalameta/metals/pull/2606)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix renaming renamed imports when cursor is at the rename\\n [\\\\#2604](https://github.com/scalameta/metals/pull/2604)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update ujson to 1.3.0 [\\\\#2609](https://github.com/scalameta/metals/pull/2609)\\n ([scala-steward](https://github.com/scala-steward))\\n- Link to the actual metals client commands\\n [\\\\#2603](https://github.com/scalameta/metals/pull/2603)\\n ([ckipp01](https://github.com/ckipp01))\\n- Handle changed but locked files on Windows\\n [\\\\#2599](https://github.com/scalameta/metals/pull/2599)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Upgrade Coursier from 2.0.12 to 2.0.13 for bootstrap launcher enhancement to\\n download artifacts using global credentials.\\n [\\\\#2597](https://github.com/scalameta/metals/pull/2597)\\n ([greg-a-atkinson](https://github.com/greg-a-atkinson))\\n- Add tests for Scala 3 semanticdb and additional ones for hovers\\n [\\\\#2589](https://github.com/scalameta/metals/pull/2589)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix renaming named parameters in constructors\\n [\\\\#2596](https://github.com/scalameta/metals/pull/2596)\\n ([tgodzik](https://github.com/tgodzik))\\n- Run recent snapshot of scalafmt on Scala 3 sources\\n [\\\\#2587](https://github.com/scalameta/metals/pull/2587)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update cache-action to v6\\n [\\\\#2588](https://github.com/scalameta/metals/pull/2588)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Fix renaming renamed imports\\n [\\\\#2586](https://github.com/scalameta/metals/pull/2586)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change project directory to lower case when using New Scala Project\\n [\\\\#2585](https://github.com/scalameta/metals/pull/2585)\\n ([tgodzik](https://github.com/tgodzik))\\n- Set compilationUnit when using Dotty parser\\n [\\\\#2584](https://github.com/scalameta/metals/pull/2584)\\n ([tgodzik](https://github.com/tgodzik))\\n- Try to capture a better message on BSP exceptions.\\n [\\\\#2581](https://github.com/scalameta/metals/pull/2581)\\n ([ckipp01](https://github.com/ckipp01))\\n- Smoother main and test discovery\\n [\\\\#2532](https://github.com/scalameta/metals/pull/2532)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update millw scripts to the latest released ones\\n [\\\\#2579](https://github.com/scalameta/metals/pull/2579)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update metals doctor hint to match exact \'Import build\' instead of \'Build\\n import\' [\\\\#2578](https://github.com/scalameta/metals/pull/2578)\\n ([er1c](https://github.com/er1c))\\n- Update scalafix [\\\\#2577](https://github.com/scalameta/metals/pull/2577)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Don\'t suggest inferred type code action\\n [\\\\#2576](https://github.com/scalameta/metals/pull/2576)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with renames on Windows\\n [\\\\#2574](https://github.com/scalameta/metals/pull/2574)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure token edit distance is always calculated with correct dialect.\\n [\\\\#2552](https://github.com/scalameta/metals/pull/2552)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala3] FoldingRange - tests for new syntax\\n [\\\\#2543](https://github.com/scalameta/metals/pull/2543)\\n ([dos65](https://github.com/dos65))\\n- Update munit-docs, sbt-munit to 0.7.22\\n [\\\\#2572](https://github.com/scalameta/metals/pull/2572)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.3\\n [\\\\#2567](https://github.com/scalameta/metals/pull/2567)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.18\\n [\\\\#2571](https://github.com/scalameta/metals/pull/2571)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.4\\n [\\\\#2568](https://github.com/scalameta/metals/pull/2568)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.12\\n [\\\\#2566](https://github.com/scalameta/metals/pull/2566)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.4.0\\n [\\\\#2565](https://github.com/scalameta/metals/pull/2565)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.26\\n [\\\\#2564](https://github.com/scalameta/metals/pull/2564)\\n ([scala-steward](https://github.com/scala-steward))\\n- Show an error to the user if they are using a bad dep in a worksheet.\\n [\\\\#2560](https://github.com/scalameta/metals/pull/2560)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove println in SemanticdbTextDocumentProvider\\n [\\\\#2557](https://github.com/scalameta/metals/pull/2557)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] DocumentSymbols - use proper dialect for tree rendering\\n [\\\\#2553](https://github.com/scalameta/metals/pull/2553)\\n ([dos65](https://github.com/dos65))\\n- Add support for Ammonite scripts with Scala 2.12.13\\n [\\\\#2548](https://github.com/scalameta/metals/pull/2548)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals v0.10.0\\n [\\\\#2529](https://github.com/scalameta/metals/pull/2529)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/02/24/tungsten","metadata":{"permalink":"/metals/blog/2021/02/24/tungsten","source":"@site/blog/2021-02-24-tungsten.md","title":"Metals v0.10.0 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.0, which is the first","date":"2021-02-24T00:00:00.000Z","formattedDate":"February 24, 2021","tags":[],"readingTime":11.12,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.0 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"},"nextItem":{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"}},"content":"We\'re happy to announce the release of Metals v0.10.0, which is the first\\nrelease in the \\"Tungsten\\" line. In `0.10.x` we will focus on polishing existing\\nfeatures, fixing bugs and improving the Scala 3 support at least to the level of\\nScala 2. This will pave the way towards the `1.0.0` release later this year.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release163
Merged PRs79
Contributors14
Closed issues30
New features12
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/34?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.13.5.\\n- Type decorations for definitions.\\n- Insert inferred type refactoring.\\n- Configuration option for the default Scala version.\\n- Code lens to easily discover the copy worksheet command.\\n- Improved short names when importing.\\n- Debug run/test when using sbt via BSP.\\n- [Scala 3] Support for Scala 3.0.0-RC1\\n- [Scala 3] Filtering and sorting for completions.\\n- [Scala 3] Basic shorter signature support for hover.\\n- [Scala 3] Document outline\\n- [Scala 3] Code folding\\n- [Scala 3] Formatting `|` in multiline string\\n- [Scala 3] Code action to convert to multiline string.\\n- [Scala 3] Dependency sources navigation\\n\\n## Type decorations for definitions.\\n\\nOne of the most\\n[requested features](https://github.com/scalameta/metals/issues/707) for Metals\\nwas the ability to show the inferred type for anything that does not have it\\ndefined explicitly. This includes the type at:\\n\\n- value and variable definitions\\n\\n```scala\\nval a = 1\\nvar b = 2\\n```\\n\\n- method definitions\\n\\n```scala\\ndef method() = \\"\\"\\n```\\n\\n- variables in pattern matches\\n\\n```scala\\nlist match {\\n case aa :: tail =>\\n}\\n```\\n\\n- lambda parameters\\n\\n```scala\\nlist.map(param => param.toInt)\\n```\\n\\n- for comprehensions\\n\\n```scala\\nfor(i <- 0 to 10)`\\n```\\n\\nThe decoration is based on the information produced during the compilation, so\\nanything new will first need to be compiled to have the type shown.\\n\\n![type-decorations](https://i.imgur.com/NHzB0M6.png)\\n\\nThis feature can easily be controlled by the previously available\\n`metals.showInferredType` setting and will currently work for clients that allow\\nvirtual decoration to be inserted into existing text. Those clients currently\\ninclude Visual Studio Code, Emacs and Sublime Text (after merging this\\n[PR](https://github.com/scalameta/metals-sublime/pull/36)).\\n\\n## Insert inferred type refactoring.\\n\\nAnother highly requested feature and closely related to the type decorations is\\nthe ability to automatically insert type annotation. This is achieved using a\\nnew `Insert type annotations` and\\n`Insert type annotation into pattern definition` refactor code actions. Those\\nactions work in the same places as mentioned in the previous point - method,\\nvariables, lambdas etc. - but use the presentation compiler instead of indexes.\\nWhat it means is that this new feature will work even in some more problematic\\ncases when the file is not yet compiled or in files where type decorations are\\nnot yet supported, like in worksheets.\\n\\n![inferred-type](https://i.imgur.com/ZT36mH7.gif)\\n\\nThere might be still some work to do when it comes to some more complicated\\ntypes, but it should work perfectly well for most daily use cases. Please do\\nreport any issues you might encounter, as it will help us greatly to polish this\\nnew feature.\\n\\n## Configuration option for default Scala version.\\n\\nPreviously, for any standalone files Metals would use the default Scala version\\n2.12.13. This changed in `v0.10.0` and can either be defined with a setting:\\n\\n```json\\n\\"metals.fallbackScalaVersion\\" : \\"3.0.0-RC1\\"\\n```\\n\\nor when the setting is empty or set to `automatic` Metals will infer the Scala\\nversion automatically from the project, which will be the highest Scala version\\nused in the project.\\n\\n## Code lens for copy worksheet command.\\n\\nIn the previous version `0.9.8` a new command was added to Metals that allows\\nclients to export the worksheet output for the users to easily share their\\nresults. This however was not easy to discover for a large chunk of the users,\\nwhich is why the command is also now available by using the code lens at the top\\nof a worksheet file. This will work for any clients that support the\\n`copy-worksheet-output` command.\\n\\n## Debug run/test when using sbt via BSP.\\n\\nThanks to the great work of [@adpi2](https://github.com/adpi2) and\\n[@er1c](https://github.com/er1c) on the\\n[scala-debug-adapter](https://github.com/scalacenter/scala-debug-adapter) Metals\\nnow supports debugging when using sbt BSP. The experience should be almost the\\nsame as when using Bloop, since the new library reuses the already existing\\nBloop implementation and will be a standard to use for BSP servers.\\n\\nTo use sbt as a BSP server users still need to use `metals.bsp-switch` command,\\nwhich will take care of setting up everything and adding the appropriate\\nplugins.\\n\\nMore information about sbt and BSP can be found in the previously published\\n[blogpost](/metals/blog/2020/11/06/sbt-BSP-support).\\n\\n## [Scala 3] Support for Scala 3.0.0-RC1\\n\\nScala `3.0.0-RC1` has just been released and it\'s the first release that starts\\nus on the way towards the full Scala 3 release. Syntax is now stable and the\\ncompiler team will now focus on fixing existing issues and polishing the\\ninternals.\\n\\nThis is a perfect opportunity to try out Scala 3 alongside Metals and see all\\nthe new and interesting features that the language has to offer as well as\\nreport any issues.\\n\\n## [Scala 3] Filtering and sorting for completions.\\n\\nIn previous versions of Metals, the completions offered by the language server\\nwould just be a list of what is available in the current scope. This however did\\nnot provide the best possible experience to the users. Thanks to work by\\n[@sellophane](https://github.com/sellophane) those initial results are now\\nfiltered and sorted so that the most useful methods and values will be available\\nfirst.\\n\\n## [Scala 3] Basic shorter signature support for hover.\\n\\nTogether with better completions we also included a better way to display types\\non hover. Previously, we would always display the full class name with the\\npackage prefix, which would mean that some methods could look quite complicated\\nfor example:\\n\\n`def method(first: alpha.beta.gamma.DType, second: alpha.beta.gamma.DType)`\\n\\nThanks to [@tanishiking](https://github.com/tanishiking) we no longer display\\nthe long type for anything that is already imported into scope. So the above\\nmethod would look like:\\n\\n`def method(first: DType, second: DType)`\\n\\nThis needs to be further improved by shortening some of the symbols that are not\\nimported into scope and we still need to apply the same optimization in other\\nplaces where the type is displayed.\\n\\n## [Scala 3] Parser-based features for Scala 3\\n\\nUnder the hood Metals uses a separate parser implementation that can be found in\\n[scalameta](https://github.com/scalameta/scalameta) and it supports numerous\\ndifferent Scala versions. Thanks to the recent work on supporting Scala 3, we\\nnow have a dialect that should parse the Scala 3 syntax correctly on par with\\n3.0.0-RC1 version.\\n\\nThis parser is used by Metals to provide a number of different features, that\\nshould now work correctly for Scala 3:\\n\\n- document outline which shows the map for the current source file and can also\\n be searched, which is useful to locate a particular method or value in the\\n current document.\\n- folding ranges which enables users to hide parts of their code.\\n- automatic management of pipes in multiline string.\\n- code action to convert simple string into multiline string.\\n- go to definition in Scala 3 dependency sources.\\n\\nLast mentioned feature together with recently added on-demand semanticdb index\\ngeneration enables users to properly navigate Scala 3 dependency sources.\\n\\nA lot of the great work here was done by [dos65](https://github.com/dos65).\\n\\n## Miscellaneous\\n\\n- Fix default version of Scala given to Ammonite.\\n- Fix issues when method with implicit symbols would be wrongly renamed.\\n- Fix issues with stack trace in debugging not showing the correct path,\\n- Fix issue when breakpoints in multiple files would not work together.\\n- Ensure Bloop isn\'t offered as a server in an unsupported workspace.\\n- Wait for compilation to finish before starting debug session.\\n- Fix references to work properly in standalone files and dependency sources.\\n- Fix memory leak in presentation compiler.\\n- Fix issues where created files should use back quotes.\\n- Rename and references now work for worksheets and sbt files - thanks\\n [dos65](https://github.com/dos65)!\\n- Always try to have the shortest path when automatically importing symbols.\\n- Fix issues with shadowed symbols being imported incorrectly.\\n- Fixed go to definition for Scala 3 sources.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.10..v0.10.0\\n\\nTomasz Godzik\\nChris Kipp\\nVadim Chelyshov\\nAdrien Piquerez\\nag91\\nRikito Taniguchi\\nArthur McGibbon\\nAyoub Benali\\nB\u0142a\u017cej Kardy\u015b\\nEric K Richardson\\nLorenzo Gabriele\\nMeriam Lachkar\\nPavol Vidlicka\\nstrobe\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.0](https://github.com/scalameta/metals/tree/v0.10.0) (2021-02-24)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.10...v0.10.0)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.5\\n [\\\\#2544](https://github.com/scalameta/metals/pull/2544)\\n ([tgodzik](https://github.com/tgodzik))\\n- DocumentSymbolProvider: set name as \\" \\" in case if it\'s empty.\\n [\\\\#2545](https://github.com/scalameta/metals/pull/2545)\\n ([dos65](https://github.com/dos65))\\n- Fix rename/references for worksheets\\n [\\\\#2539](https://github.com/scalameta/metals/pull/2539)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Add an ability to generate on-demand semanticdb\\n [\\\\#2538](https://github.com/scalameta/metals/pull/2538)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix standalone Scala 3 worksheets\\n [\\\\#2531](https://github.com/scalameta/metals/pull/2531)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to newest snapshot\\n [\\\\#2528](https://github.com/scalameta/metals/pull/2528)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback to Scala3 dialects when parsing library sources\\n [\\\\#2527](https://github.com/scalameta/metals/pull/2527)\\n ([tgodzik](https://github.com/tgodzik))\\n- add explanation on how to annotate stack traces for Emacs\\n [\\\\#2516](https://github.com/scalameta/metals/pull/2516)\\n ([ag91](https://github.com/ag91))\\n- Add support for Scala 3.0.0-RC1\\n [\\\\#2524](https://github.com/scalameta/metals/pull/2524)\\n ([tgodzik](https://github.com/tgodzik))\\n- Basic shorter signature support for hover in Scala3\\n [\\\\#2504](https://github.com/scalameta/metals/pull/2504)\\n ([tanishiking](https://github.com/tanishiking))\\n- Integration of sbt-debug-adapter\\n [\\\\#2523](https://github.com/scalameta/metals/pull/2523)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala 3] Add filtering and sorting for completions\\n [\\\\#2487](https://github.com/scalameta/metals/pull/2487)\\n ([sellophane](https://github.com/sellophane))\\n- Improve short names when importing\\n [\\\\#2497](https://github.com/scalameta/metals/pull/2497)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to Bloop 1.4.7 + remove -J prefix\\n [\\\\#2522](https://github.com/scalameta/metals/pull/2522)\\n ([adpi2](https://github.com/adpi2))\\n- Revert to recently focused document if the current one was immediately closed\\n [\\\\#2519](https://github.com/scalameta/metals/pull/2519)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Windows log locations to docs\\n [\\\\#2521](https://github.com/scalameta/metals/pull/2521)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Revert\\n https://github.com/scalameta/metals/commit/519c6414797edcc35d5d714b220c7d7d140c4b4\\n [\\\\#2518](https://github.com/scalameta/metals/pull/2518)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t populate completion detail if it\'s an empty string.\\n [\\\\#2514](https://github.com/scalameta/metals/pull/2514)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues where created files should use backticks\\n [\\\\#2503](https://github.com/scalameta/metals/pull/2503)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta and fix tests that include Scala 3 givens\\n [\\\\#2515](https://github.com/scalameta/metals/pull/2515)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.17\\n [\\\\#2512](https://github.com/scalameta/metals/pull/2512)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.17\\n [\\\\#2511](https://github.com/scalameta/metals/pull/2511)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.3\\n [\\\\#2510](https://github.com/scalameta/metals/pull/2510)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.7.0\\n [\\\\#2509](https://github.com/scalameta/metals/pull/2509)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.4.Final\\n [\\\\#2508](https://github.com/scalameta/metals/pull/2508)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.11\\n [\\\\#2507](https://github.com/scalameta/metals/pull/2507)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.3.3\\n [\\\\#2506](https://github.com/scalameta/metals/pull/2506)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-40-6418e91f\\n [\\\\#2505](https://github.com/scalameta/metals/pull/2505)\\n ([scala-steward](https://github.com/scala-steward))\\n- Only set focusedDocument on `didOpen` without didFocusProvider\\n [\\\\#2501](https://github.com/scalameta/metals/pull/2501)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add few emacs config performance tuning tips to docs/editors/emacs.md\\n [\\\\#2492](https://github.com/scalameta/metals/pull/2492)\\n ([strobe](https://github.com/strobe))\\n- Add insert inferred type code action\\n [\\\\#2490](https://github.com/scalameta/metals/pull/2490)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for new Scala 3 syntax in document outline.\\n [\\\\#2448](https://github.com/scalameta/metals/pull/2448)\\n ([dos65](https://github.com/dos65))\\n- Remove unused val that may cause null pointer exceptions\\n [\\\\#2486](https://github.com/scalameta/metals/pull/2486)\\n ([tgodzik](https://github.com/tgodzik))\\n- A bit of refactoring around BSP connection and Build Import.\\n [\\\\#2481](https://github.com/scalameta/metals/pull/2481)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add code lens to easily discover copy worksheet command\\n [\\\\#2470](https://github.com/scalameta/metals/pull/2470)\\n ([tgodzik](https://github.com/tgodzik))\\n- Try to fix memory leak in presentation compiler\\n [\\\\#2476](https://github.com/scalameta/metals/pull/2476)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix TreeViewLspSuite [\\\\#2477](https://github.com/scalameta/metals/pull/2477)\\n ([tgodzik](https://github.com/tgodzik))\\n- Include the element in the version\\n [\\\\#2472](https://github.com/scalameta/metals/pull/2472)\\n ([ekrich](https://github.com/ekrich))\\n- Add in part one of a metals retrospective blog post\\n [\\\\#2469](https://github.com/scalameta/metals/pull/2469)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update the doctor docs in client commands\\n [\\\\#2468](https://github.com/scalameta/metals/pull/2468)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues with references in standalone files\\n [\\\\#2467](https://github.com/scalameta/metals/pull/2467)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix printed inferred type for complex types\\n [\\\\#2449](https://github.com/scalameta/metals/pull/2449)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback Scala version - filter out `automatic` value\\n [\\\\#2466](https://github.com/scalameta/metals/pull/2466)\\n ([dos65](https://github.com/dos65))\\n- Wait for compilation to finish before starting debug session #2233\\n [\\\\#2450](https://github.com/scalameta/metals/pull/2450)\\n ([pvid](https://github.com/pvid))\\n- Pass URI to `semanticdbTextDocument` method and fix possible issues\\n [\\\\#2465](https://github.com/scalameta/metals/pull/2465)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove dependency on io.methvin:directory-watcher.\\n [\\\\#2464](https://github.com/scalameta/metals/pull/2464)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scribe, scribe-slf4j to 3.3.1\\n [\\\\#2457](https://github.com/scalameta/metals/pull/2457)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.5.2\\n [\\\\#2452](https://github.com/scalameta/metals/pull/2452)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.4.7\\n [\\\\#2461](https://github.com/scalameta/metals/pull/2461)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, mdoc_2.12, sbt-mdoc to 2.2.16\\n [\\\\#2462](https://github.com/scalameta/metals/pull/2462)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.3 [\\\\#2456](https://github.com/scalameta/metals/pull/2456)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.1 [\\\\#2455](https://github.com/scalameta/metals/pull/2455)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-33-1c6f6712\\n [\\\\#2453](https://github.com/scalameta/metals/pull/2453)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.2\\n [\\\\#2460](https://github.com/scalameta/metals/pull/2460)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, munit-docs, sbt-munit to 0.7.21\\n [\\\\#2463](https://github.com/scalameta/metals/pull/2463)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.9\\n [\\\\#2458](https://github.com/scalameta/metals/pull/2458)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add configuration option for default Scala version\\n [\\\\#2417](https://github.com/scalameta/metals/pull/2417)\\n ([dos65](https://github.com/dos65))\\n- Minor adjustements to type decorations\\n [\\\\#2447](https://github.com/scalameta/metals/pull/2447)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for type decorations in for comprehensions and patterns\\n [\\\\#2446](https://github.com/scalameta/metals/pull/2446)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add type decorations for definitions\\n [\\\\#2435](https://github.com/scalameta/metals/pull/2435)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update docs on system-properties and inline decorations.\\n [\\\\#2444](https://github.com/scalameta/metals/pull/2444)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correct dialect for standalone scripts.\\n [\\\\#2445](https://github.com/scalameta/metals/pull/2445)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make `munitBucketName` a global setting\\n [\\\\#2443](https://github.com/scalameta/metals/pull/2443)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix vscode.md (find-java-home has replaced by locate-java-home in\\n metals-vscode v1.1.0) [\\\\#2441](https://github.com/scalameta/metals/pull/2441)\\n ([tanishiking](https://github.com/tanishiking))\\n- Change bucket name to the non default one\\n [\\\\#2440](https://github.com/scalameta/metals/pull/2440)\\n ([tgodzik](https://github.com/tgodzik))\\n- Minor fix: remove unused parameter\\n [\\\\#2438](https://github.com/scalameta/metals/pull/2438)\\n ([dos65](https://github.com/dos65))\\n- Add rename and references for sbt files\\n [\\\\#2412](https://github.com/scalameta/metals/pull/2412)\\n ([dos65](https://github.com/dos65))\\n- Ensure Bloop isn\'t offered as a server in an unsupported workspace.\\n [\\\\#2428](https://github.com/scalameta/metals/pull/2428)\\n ([ckipp01](https://github.com/ckipp01))\\n- Provide a more specific error message when scalafix fails organizing imports\\n [\\\\#2421](https://github.com/scalameta/metals/pull/2421)\\n ([mlachkar](https://github.com/mlachkar))\\n- Fix issue with breakpoints in multiple files\\n [\\\\#2434](https://github.com/scalameta/metals/pull/2434)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update editor overview doc (sublime)\\n [\\\\#2433](https://github.com/scalameta/metals/pull/2433)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Search also transitive sources when falling back from symbol search\\n [\\\\#2427](https://github.com/scalameta/metals/pull/2427)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prepend `_empty_/` when searching for symbol without a package\\n [\\\\#2426](https://github.com/scalameta/metals/pull/2426)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implicit symbol rename fix\\n [\\\\#2422](https://github.com/scalameta/metals/pull/2422)\\n ([dos65](https://github.com/dos65))\\n- Use scalameta parser dialect Scala3 for Scala 3 sources\\n [\\\\#2374](https://github.com/scalameta/metals/pull/2374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Display link correctly in docs\\n [\\\\#2416](https://github.com/scalameta/metals/pull/2416)\\n ([lolgab](https://github.com/lolgab))\\n- Update sbt-launch.jar. [\\\\#2399](https://github.com/scalameta/metals/pull/2399)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix default version of Scala given to Ammonite.\\n [\\\\#2411](https://github.com/scalameta/metals/pull/2411)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for v0.9.10\\n [\\\\#2410](https://github.com/scalameta/metals/pull/2410)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/02/02/metals-retro-part1","metadata":{"permalink":"/metals/blog/2021/02/02/metals-retro-part1","source":"@site/blog/2021-02-02-metals-retro-part1.md","title":"A Metals Retrospective (Part 1)","description":"metals-banner","date":"2021-02-02T00:00:00.000Z","formattedDate":"February 2, 2021","tags":[],"readingTime":8.28,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"}],"frontMatter":{"author":"Chris Kipp","title":"A Metals Retrospective (Part 1)","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"},"prevItem":{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"},"nextItem":{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"}},"content":"![metals-banner](https://i.imgur.com/FYZXteD.png)\\n\\nAt the end of 2020 the Metals team sent out a survey to gather input from our\\nusers in hopes to get a better picture of who you are, what you want out of\\nMetals, and any other useful feedback you may have wanted to provide. With just\\nunder 400 responses we got a ton of great data, some interesting insights, and\\na nice picture of what is currently hindering users, and what common\\nfunctionality continually comes up as feature requests. In order to best use this\\ndata, and also to share some results, we thought it\'d be a good idea to go over\\nsome of the sections, address some of the points that came up, and also clear up\\nany misconceptions that may have appeared in the survey results. The idea is for\\nthis to be a 2 part series. You can expect the following:\\n\\n- Part 1 - Where we discuss some of the initial results and address some common\\n misconceptions and questions.\\n- Part 2 - Where we go deeper into the desired features, the biggest pain\\n points, and our plans for this next year.\\n\\n## Editor Support\\n\\n![editor-results](https://i.imgur.com/w67gMGW.png)\\n\\nSurprising no one, VS Code came out on top for editors with the most desire for\\nMetals support. Our [VS Code\\nextension](https://github.com/scalameta/metals-vscode) has over 100k downloads\\nand it is safe to say that it offers the best support for overall Metals usage.\\nThe next most popular of our extensions is probably `coc-metals` which had just\\nover 20k downloads in 2020. There are certain features that do only work in VS\\nCode mainly due to the robustness of the LSP support and other extra features.\\nHere are a few examples of features that we added this past year that work\\nextremely well with VS Code with no hardly no extra effort on the users part:\\n\\n- Debugging support - Early on in 2020 Metals v0.8.0 added debugging support.\\n Now with the click of a button you can run, test, and debug your code right\\n from inside VS Code.\\n- Preview renames - in Metals v0.8.1 functionality was added so that you can now\\n preview the changes after triggering a rename for up to 300 files.\\n- Analyze stacktrace functionality - As of Metals v0.9.4 Metals gained the ability\\n to take a stack trace and give you a nice view of the entire stack with\\n clickable links to go to that part of your code. This is all found in the\\n very useful web view of VS Code.\\n- Show implicits and type decorations - As of Metals v0.9.5 Metals gained the\\n ability to show implicits and type decorations as decorations directly\\n inline of your code.\\n- Show implicits conversion and classes - As of Metals v0.9.6 Metals gained the\\n ability to show implicits conversion and classes as decorations directly\\n inline of your code.\\n- Navigativing stacktrace while debugging - Also in Metals v0.9.6 the ability to\\n navigate stacktraces during a deubugging sesions was added, which re-used\\n the functionality introduced in v0.9.4 to analyze stacktraces.\\n\\nNow at this point you may be starting to assume that we heavily favor VS Code\\nand that Metals is geared towards it. We got a few comments related to this\\nthroughout the survey. However, I want to make a specific point that since the\\ninception of Metals, the early maintainers did a fantastic job of ensuring that\\neverything would work in clients that offered the necessary LSP support, and\\nalso extra features to clients that offered support for the Metals specific LSP\\nextensions that we use. This has remained core for us a we continue to provide\\nnew features. Pretty much any new feature that is added is added in a way that\\ncan also be utilized for editors that may not have the same level of support as\\nVS Code. Here are a few examples:\\n\\n- Debugging support - Metals actually offers deubugging support for any client\\n that can serve as a DAP client. So for example using `coc-metals` you can\\n also run, test, and debug your code while utilizing\\n [`vimspector`](https://github.com/puremourning/vimspector). The same is true\\n for emacs clients that are utilizing\\n [`lsp-mode`](https://github.com/emacs-lsp/lsp-mode).\\n- Analyze stacktrace functionality - For clients that don\'t have a web view,\\n this feature is still supported by producing a file with code lens\' in it to\\n allow you to navigate to the relevant parts of the stacktrace.\\n- Implicits, type decorations, implicits conversions and classes - VS Code isn\'t\\n the only extension that actually implements this. There is also\\n [`metals-sublime`](https://github.com/scalameta/metals-sublime) that has\\n inline decorations. For other editors that may not support inline\\n decorations, this feature is still re-usable and the information is actually\\n displayed in hover as another section.\\n\\nSo again, while VS Code is an incredible editor, that offers incredible support\\nfor the various Metals features, we work hard to ensure that these features are\\nalso usable in our other extensions, even if they look a bit different. While\\nthere are varying levels of support in the various editor extensions, much of\\nthis is due to the those editors being the editors the current maintainers use.\\nWe are always open for more help in any of the current editor extensions and\\nthis is actually a great way to get involved. We are also open to help you\\ncreate a new extension to maybe support an editor that is yet to have a\\nMetals-specific extension! Here are links to the various Metals clients:\\n\\n- [scalameta/metals-vscode](https://github.com/scalameta/metals-vscode)\\n- [scalameta/coc-metals](https://github.com/scalameta/coc-metals)\\n- [scalameta/nvim-metals](https://github.com/scalameta/nvim-metals)\\n- [scalameta/metals-sublime](https://github.com/scalameta/metals-sublime)\\n- [scalameta/metals-eclipse](https://github.com/scalameta/metals-eclipse)\\n- [emacs-lsp/lsp-metals](https://github.com/emacs-lsp/lsp-metals)\\n\\n### Will you support IntelliJ?\\n\\nWhen asked about what editor people wished had Metals support, here were the\\nresults:\\n\\nEditor | Votes\\n------------------------------------------------------|----------\\n[IntelliJ](https://www.jetbrains.com/idea/) | 19\\n[Notepad++](http://notepad-plus-plus.org/) | 2\\n[Gnome Builder](https://wiki.gnome.org/Apps/Builder) | 2\\n[Nova](https://www.nova.app/) | 2\\n[Kakoune](http://kakoune.org/) | 2\\n[Netbeans](https://netbeans.org/) | 2\\n[Eclipse Theia](https://theia-ide.org/) | 1\\n[jEdit](http://www.jedit.org/) | 1\\n\\nSome of these editors will already actually work with Metals, especially if they\\nsupport VS Code extensions like Eclipse Theia does. However, one question we\\noften get is: \\"Will you support IntelliJ?\\" The simple answer to this question is\\n_No_, but not for the reason people may think. IntelliJ is a fantastic project\\nthat is the most widely used editor in Scala. Metals aims to be a language\\nserver for clients that implement LSP. Since IntelliJ has no _official_ support\\nfor LSP, we have no intention on adding support for IntelliJ. Many times the\\ntarget audience is different as well.\\n\\n## Why do people start using Metals \\n\\nReason | Very Important | Somewhat important | Not important\\n----------------------------------------------|----------------|--------------------|---------------\\nI wanted a lighter alternative to other IDEs. | 245 | 74 | 27\\nI could use my favorite editor. | 223 | 62 | 56\\nI wanted more accurate compiler errors. | 220 | 86 | 36\\nI wanted a fully open source solution. | 133 | 138 | 69\\nMetals had features other IDEs didn\'t | 56 | 112 | 160\\n\\n## Information and Help with Metals\\n\\nOver this past year we\'ve done our best to make sure everyone is aware of all\\nthe great stuff that is happening in Metals. We have multiple channels of\\ncommunication open with pretty impressive response times if you ever get stuck.\\nHere are the results about where people go for question about Metals and also\\nwhere they get their news about Metals.\\n\\n![metals info](https://i.imgur.com/6Ijm9Bv.png)\\n![metals help](https://i.imgur.com/2Qysoqe.png)\\n\\nApart from the places that we had listed in the survey, the place mentioned the\\nmost for where people hear about Metals related news was [Scala\\nTimes](https://scalatimes.com/)! \\n\\nAs a reminder, don\'t ever hesitate to reach out, and if anything is missing in\\nthe docs, please lend a helping hand or point it out to us.\\n\\n## I wish Metals had... but it does!\\n\\nBelow are some things that appeared in the survey as wishes, but that Metals\\nalready supports, or has added support for since the survey! Hopefully these\\nwill help highlight some lesser known features of Metals or serve as a reminder\\nof some of the features we have.\\n\\nRequested | Status\\n-----------------------------------------------------|---------------------------\\nRenaming symbols | Available since v0.8.0 and all supported editors support this.\\nBetter info about Ammonite scripts failing. | Actually because of this comment, there was some work done to improve the error messages about why Ammonite may not be starting. You can see this here [in this pr](https://github.com/scalameta/metals/pull/2333).\\nA check telling me if everything is setup correctly. | We recently did some work or the Metals Doctor to help you see what issues are going on. You can trigger Doctor by the `run-doctor` command. It may differ a bit per client. You can see the recent changes made [here in this pr](https://github.com/scalameta/metals/pull/2339).\\nSeamless install in Vim | There are two Metals-specific Vim and Neovim extensions, both which offer an automated install feature. [coc-metals](https://github.com/scalameta/coc-metals) and [nvim-metals](https://github.com/scalameta/nvim-metals).\\nNavigating stacktrace feature in emacs. | This actually should work, since it just needs code lenses to work for clients that don\'t have a web view. Part of this is just documentation, so if you\'re an emacs user, please help us with docs!\\nUse a specific version of Ammonite | You can currently do this by setting the version in a comment on the top of a file like illustrated [here](https://scalameta.org/metals/docs/troubleshooting/faq#how-do-i-use-scala-2xx-for-my-script). Also the next release of Metals will have better support for a fallback version of the compiler that is used for standalone scripts. This will give you more control over what version is used in situations like Ammonite scripts.\\n\\n## What\'s next?\\n\\nWe want to thank you again for taking the time and filling out our year-end\\nsurvey. Keep on the lookout for Part 2 of this, and we\'ll be discussing the\\nbiggest pain points and some of the most desired features that we plan to tackle\\nthis next year. We\'ll also do a further look into build server and build tool\\nsupport finishing off with an update on our current Scala 3 support and the\\nefforts that are going into it.\\n\\nCheers,\\n\\nThe Metals team"},{"id":"/2021/01/19/lithium","metadata":{"permalink":"/metals/blog/2021/01/19/lithium","source":"@site/blog/2021-01-19-lithium.md","title":"Metals v0.9.10 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.10, which contains a number","date":"2021-01-19T00:00:00.000Z","formattedDate":"January 19, 2021","tags":[],"readingTime":2.645,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.10 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"},"nextItem":{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.10, which contains a number\\nof fixes and more importantly support for Scala 2.12.13. We\'re skipping over\\nthe v0.9.9 release due to a significant bug that showed up after the release.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release90
Merged PRs35
Contributors6
Closed issues13
New features
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/33?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.12.13.\\n- Added named argument completion for Scala 3 (thanks\\n [tanishiking](https://github.com/tanishiking)!).\\n- Fix worksheet decorations to show up on focus.\\n- Allow find references and rename for standalone files.\\n- Fix compatibility with sbt < 1.3.0 builds.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.8..v0.9.10\\nChris Kipp\\nTomasz Godzik\\nDavid Strawn\\nCheng Lian\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.9](https://github.com/scalameta/metals/tree/v0.9.10) (2021-01-19)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.8...v0.9.10)\\n\\n**Merged pull requests:**\\n\\n- Bump mdoc to 2.2.15\\n [\\\\#2409](https://github.com/scalameta/metals/pull/2409)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Metals Scala 2.12 version to 2.12.13\\n [\\\\#2404](https://github.com/scalameta/metals/pull/2404)\\n ([tgodzik](https://github.com/tgodzik))\\n- Look for clientInfo in intializeParams instead of serverConfig.\\n [\\\\#2402](https://github.com/scalameta/metals/pull/2402)\\n ([ckipp01](https://github.com/ckipp01))\\n- Ensure semanticdbVersion can be overwritten.\\n [\\\\#2401](https://github.com/scalameta/metals/pull/2401)\\n ([ckipp01](https://github.com/ckipp01))\\n- Revert \\"Add release notes for Metals 0.9.9\\"\\n [\\\\#2397](https://github.com/scalameta/metals/pull/2397)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.9.9\\n [\\\\#2396](https://github.com/scalameta/metals/pull/2396)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.12.13\\n [\\\\#2383](https://github.com/scalameta/metals/pull/2383)\\n ([tgodzik](https://github.com/tgodzik))\\n- Clean up --version output.\\n [\\\\#2393](https://github.com/scalameta/metals/pull/2393)\\n ([ckipp01](https://github.com/ckipp01))\\n- Avoid NPE when there is no `rootUri`.\\n [\\\\#2391](https://github.com/scalameta/metals/pull/2391)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bare minimum arg completion for scala3\\n [\\\\#2369](https://github.com/scalameta/metals/pull/2369)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update flyway-core to 7.5.0\\n [\\\\#2389](https://github.com/scalameta/metals/pull/2389)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.9\\n [\\\\#2387](https://github.com/scalameta/metals/pull/2387)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.1\\n [\\\\#2386](https://github.com/scalameta/metals/pull/2386)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-21-464e4ec4\\n [\\\\#2385](https://github.com/scalameta/metals/pull/2385)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix wrong name being displayed for a selected server\\n [\\\\#2377](https://github.com/scalameta/metals/pull/2377)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that worksheet decorations are shown again when the focused\\n [\\\\#2372](https://github.com/scalameta/metals/pull/2372)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Vim mappings and add reference to nvim-metals.\\n [\\\\#2367](https://github.com/scalameta/metals/pull/2367)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in CopyWorksheetOutput to all so it\'s in the docs.\\n [\\\\#2368](https://github.com/scalameta/metals/pull/2368)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor doctor and make sure issues with sbt are properly reported\\n [\\\\#2339](https://github.com/scalameta/metals/pull/2339)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove Atom from the docs.\\n [\\\\#2364](https://github.com/scalameta/metals/pull/2364)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.4\\n [\\\\#2361](https://github.com/scalameta/metals/pull/2361)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.20\\n [\\\\#2360](https://github.com/scalameta/metals/pull/2360)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.14\\n [\\\\#2359](https://github.com/scalameta/metals/pull/2359)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.4.6\\n [\\\\#2358](https://github.com/scalameta/metals/pull/2358)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.3.2\\n [\\\\#2357](https://github.com/scalameta/metals/pull/2357)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.8\\n [\\\\#2355](https://github.com/scalameta/metals/pull/2355)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 23\\n [\\\\#2354](https://github.com/scalameta/metals/pull/2354)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.8\\n [\\\\#2353](https://github.com/scalameta/metals/pull/2353)\\n ([scala-steward](https://github.com/scala-steward))\\n- Calculate semanticdb for standalone files\\n [\\\\#2345](https://github.com/scalameta/metals/pull/2345)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix incompatibility between currently used Bloop and sbt versions < 1.3.0\\n [\\\\#2350](https://github.com/scalameta/metals/pull/2350)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Ammonite to the 2.13.4 published version.\\n [\\\\#2331](https://github.com/scalameta/metals/pull/2331)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix an OrganizeImports configuration typo\\n [\\\\#2342](https://github.com/scalameta/metals/pull/2342)\\n ([liancheng](https://github.com/liancheng))\\n- Update Deprecated Usage Of `setDeprecated` from `lsp4j`\\n [\\\\#2334](https://github.com/scalameta/metals/pull/2334)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove `-XX:+CMSClassUnloadingEnabled` From `.jvmopts`\\n [\\\\#2335](https://github.com/scalameta/metals/pull/2335)\\n ([isomarcte](https://github.com/isomarcte))\\n- Add release notes for 0.9.8\\n [\\\\#2332](https://github.com/scalameta/metals/pull/2332)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/12/19/lithium","metadata":{"permalink":"/metals/blog/2020/12/19/lithium","source":"@site/blog/2020-12-19-lithium.md","title":"Metals v0.9.8 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.8, which brings along a","date":"2020-12-19T00:00:00.000Z","formattedDate":"December 19, 2020","tags":[],"readingTime":3.105,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.8 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"},"nextItem":{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.8, which brings along a\\nnumber of smaller improvements, new Scala 3 milestone support and a hot new\\nfeature.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release100
Merged PRs41
Contributors4
Closed issues5
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/31?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add in ability to export worksheet evaluations.\\n- Scala 3.0.0-M3 support.\\n\\n## Worksheet evaluations\\n\\nThanks to the great work by [ckipp01](https://github.com/ckipp01) users will now\\nbe able to export their evaluated worksheets using a new command,\\n`copy-worksheet-output`, or `Metals: Copy worksheet output` in Visual Studio\\nCode.\\n\\n![worksheet-export](https://i.imgur.com/PQmT2i3.gif)\\n\\nWhen using this command existing statements will be copied to your clipboard\\nalong with their evaluations included as comments below them. This will allow\\nusers to freely share their results with others.\\n\\n## Miscellaneous\\n\\n- Add in Scala Sources to standalone worksheets.\\n- Fix auto-connect BSP server without explicit choice.\\n- Make sure to not duplicate semanticdbOptions when using sbt BSP.\\n- Ensure semanticdb is enabled with sbt BSP and Scala 3\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.7..v0.9.8\\nChris Kipp\\nTomasz Godzik\\nGabriele Petronella\\nVictor Mikhaylov\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.8](https://github.com/scalameta/metals/tree/v0.9.8) (2020-12-18)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.7...v0.9.8)\\n\\n**Merged pull requests:**\\n\\n- Add in better message for user if trying to fetch invalid Ammonite.\\n [\\\\#2333](https://github.com/scalameta/metals/pull/2333)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala 3.0.0-M3\\n [\\\\#2330](https://github.com/scalameta/metals/pull/2330)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to 4.4.2 and fix folding range suite\\n [\\\\#2327](https://github.com/scalameta/metals/pull/2327)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure semanticdb is enabled with sbt BSP and Scala 3.\\n [\\\\#2326](https://github.com/scalameta/metals/pull/2326)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update xnio-nio to 3.8.4.Final\\n [\\\\#2322](https://github.com/scalameta/metals/pull/2322)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix broken links in docs.\\n [\\\\#2312](https://github.com/scalameta/metals/pull/2312)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update flyway-core to 7.3.1\\n [\\\\#2321](https://github.com/scalameta/metals/pull/2321)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.3.Final\\n [\\\\#2320](https://github.com/scalameta/metals/pull/2320)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.7\\n [\\\\#2319](https://github.com/scalameta/metals/pull/2319)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.3.8\\n [\\\\#2318](https://github.com/scalameta/metals/pull/2318)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.1-jre\\n [\\\\#2317](https://github.com/scalameta/metals/pull/2317)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-welcome to 0.2.1\\n [\\\\#2316](https://github.com/scalameta/metals/pull/2316)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.5\\n [\\\\#2315](https://github.com/scalameta/metals/pull/2315)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-28-e52cd3ad\\n [\\\\#2314](https://github.com/scalameta/metals/pull/2314)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add in ability to export worksheet evaluations.\\n [\\\\#2290](https://github.com/scalameta/metals/pull/2290)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure to not duplicate semanticdbOptions when using sbt BSP.\\n [\\\\#2310](https://github.com/scalameta/metals/pull/2310)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump version of organizeImportRule to latest\\n [\\\\#2307](https://github.com/scalameta/metals/pull/2307)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add docs about -Dmetals.bloop-port\\n [\\\\#2301](https://github.com/scalameta/metals/pull/2301)\\n ([tgodzik](https://github.com/tgodzik))\\n- Customization bloop server port with java properties\\n [\\\\#2267](https://github.com/scalameta/metals/pull/2267)\\n ([VictorMikhaylov](https://github.com/VictorMikhaylov))\\n- Fix auto-connect BSP server without explicit choice.\\n [\\\\#2297](https://github.com/scalameta/metals/pull/2297)\\n ([ckipp01](https://github.com/ckipp01))\\n- Scala 3 template was moved from lampepfl org\\n [\\\\#2295](https://github.com/scalameta/metals/pull/2295)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change lampepfl/dotty.g8 to lampepfl/scala3.g8\\n [\\\\#2294](https://github.com/scalameta/metals/pull/2294)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add welcome view for new contributors\\n [\\\\#2288](https://github.com/scalameta/metals/pull/2288)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in Scala Sources to standalone worksheets.\\n [\\\\#2268](https://github.com/scalameta/metals/pull/2268)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update coursier to 2.0.7\\n [\\\\#2276](https://github.com/scalameta/metals/pull/2276)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.5\\n [\\\\#2275](https://github.com/scalameta/metals/pull/2275)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.24\\n [\\\\#2286](https://github.com/scalameta/metals/pull/2286)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.13\\n [\\\\#2281](https://github.com/scalameta/metals/pull/2281)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.2\\n [\\\\#2277](https://github.com/scalameta/metals/pull/2277)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.2.1\\n [\\\\#2278](https://github.com/scalameta/metals/pull/2278)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.3\\n [\\\\#2274](https://github.com/scalameta/metals/pull/2274)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.19\\n [\\\\#2282](https://github.com/scalameta/metals/pull/2282)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.3.0\\n [\\\\#2280](https://github.com/scalameta/metals/pull/2280)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.2.0-26-61ee0965\\n [\\\\#2273](https://github.com/scalameta/metals/pull/2273)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.0\\n [\\\\#2272](https://github.com/scalameta/metals/pull/2272)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.24\\n [\\\\#2271](https://github.com/scalameta/metals/pull/2271)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-8-6cc6911d\\n [\\\\#2270](https://github.com/scalameta/metals/pull/2270)\\n ([scala-steward](https://github.com/scala-steward))\\n- Compare release candidates and milestones in addition to major.minor.patch\\n [\\\\#2264](https://github.com/scalameta/metals/pull/2264)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump snapshot version [\\\\#2263](https://github.com/scalameta/metals/pull/2263)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update release instructions\\n [\\\\#2262](https://github.com/scalameta/metals/pull/2262)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for 0.9.7\\n [\\\\#2261](https://github.com/scalameta/metals/pull/2261)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/26/lithium","metadata":{"permalink":"/metals/blog/2020/11/26/lithium","source":"@site/blog/2020-11-26-lithium.md","title":"Metals v0.9.7 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.7, which introduces the","date":"2020-11-26T00:00:00.000Z","formattedDate":"November 26, 2020","tags":[],"readingTime":1.225,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.7 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"},"nextItem":{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.7, which introduces the\\nsupport for the newest Scala 3 milestone, `3.0.0-M2`.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release17
Merged PRs7
Contributors5
Closed issues3
New features0
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/30?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 3.0.0-M2 support\\n\\n## Miscellaneous\\n\\n- Don\'t add semanticDB plugin for Scala 2.10 when using sbt BSP.\\n- Autocomplete empty scaladoc if nothing is defined afterwards.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.6..v0.9.7\\nTomasz Godzik\\nChris Kipp\\nBjorn Regnell\\nEthan Atkins\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.7](https://github.com/scalameta/metals/tree/v0.9.7) (2020-11-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.6...v0.9.7)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 3 3.0.0-M2\\n [\\\\#2260](https://github.com/scalameta/metals/pull/2260)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t add semanticDB plugin for Scala 2.10 when using sbt BSP\\n [\\\\#2258](https://github.com/scalameta/metals/pull/2258)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump swoval to latest version\\n [\\\\#2259](https://github.com/scalameta/metals/pull/2259)\\n ([eatkins](https://github.com/eatkins))\\n- Fix documentation about buildTarget\\n [\\\\#2257](https://github.com/scalameta/metals/pull/2257)\\n ([tgodzik](https://github.com/tgodzik))\\n- Autocomplete empty scaladoc if nothing is defined afterwards\\n [\\\\#2252](https://github.com/scalameta/metals/pull/2252)\\n ([tanishiking](https://github.com/tanishiking))\\n- New directories namespace `io.github.soc` -> `dev.dirs`\\n [\\\\#2251](https://github.com/scalameta/metals/pull/2251)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for 0.9.6\\n [\\\\#2249](https://github.com/scalameta/metals/pull/2249)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/20/lithium","metadata":{"permalink":"/metals/blog/2020/11/20/lithium","source":"@site/blog/2020-11-20-lithium.md","title":"Metals v0.9.6 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.6, which mostly concentrates","date":"2020-11-20T00:00:00.000Z","formattedDate":"November 20, 2020","tags":[],"readingTime":3.625,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.6 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"},"nextItem":{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.6, which mostly concentrates\\non adding support for the newly released Scala 2.13.4, but also adds some\\nimprovements for already existing features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release59
Merged PRs31
Contributors4
Closed issues2
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/29?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.13.4 support.\\n- Show implicit conversions and classes.\\n- Navigating stacktrace in debug console.\\n- New troubleshooting page.\\n\\n## Show implicit conversions and classes\\n\\nLast\\n[release](/metals/blog/2020/11/10/lithium#show-implicits-and-type-decorations)\\nintroduced the option to display additional data inferred from the code to a\\nuser. Starting with this release it\'s also possible to show implicit conversions\\nand classes, which can be enabled by the additional\\n`showImplicitConversionsAndClasses` setting. Moreover, Visual Studio Code\\nextension has 3 new commands to toggle all these new options, which enables\\nusers to quickly peek at the additional information about their code and then\\nturn it back off. All these commands can be bound to a shortcut to further\\nimprove the user experience.\\n\\n![implicits](https://i.imgur.com/k6GRgue.gif)\\n\\nAny editor that allows for quickly changing these settings will also benefit\\nfrom this change, as the file\'s decorations are refreshed instantly upon\\nchanging any of those settings.\\n\\n## Navigating stacktrace\\n\\nPreviously, it was possible to navigate a stacktrace using the\\n`Analyze stacktrace` command which was added in the\\n[v0.9.4](/metals/blog/2020/09/21/lithium#analyze-stacktrace-command)\\nrelease. It turns out, we can reuse the same mechanism to show file links in the\\n`Debug Console` in Visual Studio code:\\n\\n![navigate-stacktrace](https://i.imgur.com/qeitymN.gif)\\n\\nThis was achieved by adding additional information to the output already sent to\\nthe editor, so this additional file links should also be reused by any other DAP\\nclients.\\n\\n## Troubleshooting\\n\\nAs an addition to these new features, we\'ve also recently added a new\\n[troubleshooting page](/metals/docs/troubleshooting/faq) that should answer\\nthe most basic questions you can have. As the page is fairly new we would appreciate\\nany help in improving it so let us know if you feel anything is missing.\\n\\n## Miscellaneous\\n\\n- Fix continuous compilation when opening tree view in sbt BSP\\n- Add 0.27.0-RC1 back to supported versions\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.5..v0.9.6\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nGabriele Petronella\\nKrzysiek Bochenek\\ndependabot[bot]\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.6](https://github.com/scalameta/metals/tree/v0.9.6) (2020-11-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.5...v0.9.6)\\n\\n**Merged pull requests:**\\n\\n- Refresh synthetics when user settings change\\n [\\\\#2246](https://github.com/scalameta/metals/pull/2246)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to 4.4.0 and add support for Scala 2.13.4\\n [\\\\#2247](https://github.com/scalameta/metals/pull/2247)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add source and line to debug output in case of stack traces\\n [\\\\#2243](https://github.com/scalameta/metals/pull/2243)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix continuous compilation when opening tree view in sbt BSP\\n [\\\\#2242](https://github.com/scalameta/metals/pull/2242)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add option to show implicit conversions as decorations\\n [\\\\#2232](https://github.com/scalameta/metals/pull/2232)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump olafurpg/setup-gpg from v2 to v3\\n [\\\\#2240](https://github.com/scalameta/metals/pull/2240)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Move dependabot config file to right location\\n [\\\\#2239](https://github.com/scalameta/metals/pull/2239)\\n ([gabro](https://github.com/gabro))\\n- Configure dependabot to update github-actions\\n [\\\\#2237](https://github.com/scalameta/metals/pull/2237)\\n ([gabro](https://github.com/gabro))\\n- Reorganize docs and add in FAQ.\\n [\\\\#2234](https://github.com/scalameta/metals/pull/2234)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scribe, scribe-slf4j to 3.0.4\\n [\\\\#2222](https://github.com/scalameta/metals/pull/2222)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update org.eclipse.lsp4j, ... to 0.10.0\\n [\\\\#2230](https://github.com/scalameta/metals/pull/2230)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update munit-docs, sbt-munit to 0.7.17\\n [\\\\#2231](https://github.com/scalameta/metals/pull/2231)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update sbt-ci-release to 1.5.4\\n [\\\\#2221](https://github.com/scalameta/metals/pull/2221)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-6-4768184c\\n [\\\\#2220](https://github.com/scalameta/metals/pull/2220)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.6\\n [\\\\#2219](https://github.com/scalameta/metals/pull/2219)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.6\\n [\\\\#2223](https://github.com/scalameta/metals/pull/2223)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.17 [\\\\#2228](https://github.com/scalameta/metals/pull/2228)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.12\\n [\\\\#2227](https://github.com/scalameta/metals/pull/2227)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.12\\n [\\\\#2226](https://github.com/scalameta/metals/pull/2226)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.2.0\\n [\\\\#2225](https://github.com/scalameta/metals/pull/2225)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add 0.27.0-RC1 back to supported versions\\n [\\\\#2213](https://github.com/scalameta/metals/pull/2213)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional newline to fix problems with markdown\\n [\\\\#2215](https://github.com/scalameta/metals/pull/2215)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional troubleshooting section for mirrors\\n [\\\\#2211](https://github.com/scalameta/metals/pull/2211)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add testing for DownloadDependencies\\n [\\\\#2206](https://github.com/scalameta/metals/pull/2206)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update docs to mention `inlineDecorationProvider`\\n [\\\\#2209](https://github.com/scalameta/metals/pull/2209)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix release notes to mention emacs\\n [\\\\#2205](https://github.com/scalameta/metals/pull/2205)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix scala3Dependency for various binary scala3/dotty versions\\n [\\\\#2203](https://github.com/scalameta/metals/pull/2203)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update release docs [\\\\#2199](https://github.com/scalameta/metals/pull/2199)\\n ([tgodzik](https://github.com/tgodzik))\\n- Correct typos in blog and Doctor\\n [\\\\#2202](https://github.com/scalameta/metals/pull/2202)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for 0.9.5\\n [\\\\#2197](https://github.com/scalameta/metals/pull/2197)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in blog post about sbt BSP\\n [\\\\#2193](https://github.com/scalameta/metals/pull/2193)\\n ([ckipp01](https://github.com/ckipp01))"},{"id":"/2020/11/10/lithium","metadata":{"permalink":"/metals/blog/2020/11/10/lithium","source":"@site/blog/2020-11-10-lithium.md","title":"Metals v0.9.5 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.5, which brings about some of","date":"2020-11-10T00:00:00.000Z","formattedDate":"November 10, 2020","tags":[],"readingTime":10.305,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.5 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"},"nextItem":{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"}},"content":"We\'re happy to announce the release of Metals v0.9.5, which brings about some of\\nthe long awaited features such as implicit decorations and the organize imports\\ncode action. We also greatly simplified connecting to the sbt BSP server and\\nadded support for Scala 3\'s first milestone `3.0.0-M1`.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release185
Merged PRs70
Contributors9
Closed issues33
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/28?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Organize imports code action.\\n- Show implicit parameters and inferred type decorations.\\n- Improved sbt BSP support.\\n- Support for Scala 3.0.0-M1.\\n- Remote debugging.\\n- Environment variables in run/debug.\\n\\n## Organize imports code action\\n\\nOne of the most requested features in the Metals repository, current list can be\\nfound [here](https://github.com/scalameta/metals/issues/707), was the ability to\\nautomatically organize imports. We are happy to announce, that thanks to\\n[mlachkar\'s](https://github.com/mlachkar) amazing contributions to both\\n[Scalafix](https://github.com/scalacenter/scalafix) and Metals, this new feature\\nis now available via an `Organize imports` code action.\\n\\n![imports](https://i.imgur.com/8YBdjjC.gif)\\n\\nDepending on the editor this code action can be invoked differently, please\\nconsult your specific editor\'s documentation. For example in Visual Studio Code\\n\'organize imports\' can be invoked from command console, shortcut, or from the\\ndropdown menu when right clicking inside a file.\\n\\nThe organize imports code action is enabled using\\n[Scalafix](https://github.com/scalacenter/scalafix) and specifically the awesome\\norganize imports rule created by [liancheng](https://github.com/liancheng).\\n\\nThe rule can be used to automatically sort imports in a file by the Ascii order,\\nwhich is the default setting, or use the user specific configuration defined\\nusing scalafix configuration file. This file can be either `.scalafix.conf` in\\nthe current workspace or an absolute file specified in the\\n`metals.scalafixConfigPath` user setting. It\'s important to note that the new\\ncode action is consistent with how sbt\'s scalafix plugin will behave.\\n\\nAn example scalafix configuration for the organize imports rule can look like\\nthis:\\n\\n```scala\\nOrganizeImports {\\n groups = [\\"re:javax?\\\\\\\\.\\", \\"scala.\\", \\"*\\"]\\n removeUnused = true\\n}\\n```\\n\\nThis will sort imports into 3 groups defined with regexes and remove any unused\\nones. Specifically, it will turn:\\n\\n```scala\\nimport scala.collection.mutable.{Buffer, ArrayBuffer}\\nimport java.time.Clock\\nimport java.lang.{Long => JLong, Double => JDouble}\\n\\nobject RemoveUnused {\\n val buffer: ArrayBuffer[Int] = ArrayBuffer.empty[Int]\\n val long: JLong = JLong.parseLong(\\"0\\")\\n}\\n```\\n\\ninto\\n\\n```scala\\nimport java.lang.{Long => JLong}\\n\\nimport scala.collection.mutable.ArrayBuffer\\n\\nobject RemoveUnused {\\n val buffer: ArrayBuffer[Int] = ArrayBuffer.empty[Int]\\n val long: JLong = JLong.parseLong(\\"0\\")\\n}\\n```\\n\\nPlease do NOT use the Scalafix built-in RemoveUnused.imports together with\\nOrganizeImports to remove unused imports, since it might result in a broken\\ncode.\\n\\nMore information can be found in the\\n[liancheng/scalafix-organize-imports](https://github.com/liancheng/scalafix-organize-imports)\\nrepository.\\n\\n## Show implicits and type decorations\\n\\nAnother highly anticipated feature was the ability to show additional\\ninformation about the code, which is not provided explicitly. In this new\\nrelease, users can use two new options when looking through their code:\\n\\n- `metals.showImplicitArguments` will enable users to see implicit parameters\\n within their code:\\n\\n![params](https://i.imgur.com/vAvM7YV.png)\\n\\n- `metals.showInferredType` will enable users to see inferred type for any\\n generic methods they are using:\\n\\n![types](https://i.imgur.com/K3QrUd2.png)\\n\\nBoth new options are disabled by default, since they add a great number of\\ninformation, which might not be necessary for all users. Full name with package\\nfor each of the additional types or values will be available on hover.\\n\\nThese options can be set in Metals options in VS Code or in Emacs\\n[(lsp-metals)](https://github.com/emacs-lsp/lsp-metals) using\\n`lsp-metals-show-implicit-arguments` and `lsp-metals-show-inferred-type`\\nvariables set to `t`.\\n\\nUnfortunately, due to current limitations, additional decorations are only\\npossible in Visual Studio Code and Emacs. In other editors the additional\\ninformation is available via hover and new `With synthetics added` section,\\nwhich shows how the whole current line would look with the additional\\ndecorations.\\n\\nExample of how this alternative approach looks in Vim:\\n\\n![vim-sample](https://user-images.githubusercontent.com/13974112/94804295-e094a280-03ea-11eb-8282-2a783446e7c8.png)\\n\\n## Improved sbt BSP support\\n\\nIn recent months, [eed3si9n](https://github.com/eed3si9n) and\\n[adpi2](https://github.com/adpi2) worked, under the auspices of Scala Center, on\\nmaking sbt capable of acting as a\\n[Build Server Protocol](https://build-server-protocol.github.io/) server. This\\nenables Metals and other editors such as Intellij IDEA to directly communicate\\nwith sbt in order to compile the user\'s code.\\n\\nSome more work was required in order to make the new features work smoothly with\\nMetals and currently, thanks to [ckipp01](https://github.com/ckipp01), users can\\neasily try out the new sbt BSP support. It\'s important to note that using Bloop\\ninstead of sbt is still the recommended approach as we believe it provides the\\nbest user experience and features like running or debugging are still not yet\\nimplemented for sbt. More details and explanations can be found in the\\n[blogpost](/metals/blog/2020/11/06/sbt-BSP-support).\\n\\n## Remote debugging\\n\\nThanks to the great work of [pvid](https://github.com/pvid), Metals now supports\\nremote debugging, which means that it can attach to a running process with the\\nproper JVM options specified. There is no longer a need to run the application\\nor test from within the editor.\\n\\nIn case of a simple java process those options will take a form of for example:\\n\\n`-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005`\\n\\nSome of the more important options here are:\\n\\n- `suspend=y` will make the process wait for Metals to connect to it if\\n specified to `y`. `n` will cause the process to run normally.\\n- `address=5005` specifies which port to use and it can be any free port.\\n\\nFor a detailed explanation of the different options please refer to the proper\\ndocumentation\\n[here](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html)\\n\\nWhen using sbt, remote debugging can be achieved by specifying additional\\nsettings:\\n\\n```scala\\n javaOptions in run := List(\\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005\\"),\\n fork in run := true\\n```\\n\\nThis will cause running `sbt run` to wait for Metals to connect to it, which\\nmight be especially useful when reading user input, which is currently\\nimpossible to do for example from within VS Code. Similarly, these options can\\nbe specified in any of the supported build tools.\\n\\nTo later connect to the running process, you need to use the additional Attach\\nrequest type with the `buildTarget`, `hostname` and `port` fields specified. In\\ncase of Visual Studio Code this will take a form of:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"request\\": \\"attach\\",\\n \\"name\\": \\"Attach\\",\\n \\"buildTarget\\": \\"root\\",\\n \\"hostName\\": \\"localhost\\",\\n \\"port\\": 5005\\n}\\n```\\n\\n## Environment variables in run/debug\\n\\nMetals now supports specifying additional environment options when running or\\ndebugging applications. This can be done twofold:\\n\\n- By specifying the new `env` field:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"name\\": \\"Debug Main\\",\\n \\"request\\": \\"launch\\",\\n \\"mainClass\\": \\"Main\\",\\n \\"args\\": [\\"hello\\", \\"world\\"],\\n \\"env\\": { \\"VARIABLE1\\": \\" 123\\" }\\n}\\n```\\n\\n- By using the `envFile` field:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"name\\": \\"Debug Main\\",\\n \\"request\\": \\"launch\\",\\n \\"mainClass\\": \\"Main\\",\\n \\"args\\": [\\"hello\\", \\"world\\"],\\n \\"envFile\\": \\"local.env\\"\\n}\\n```\\n\\nWhere the `local.env` file can take a form of:\\n\\n```\\n# single line values\\nkey1=value 1\\nkey2=\'value 2\' # ignored inline comment\\nkey3=\\"value 3\\"\\n\\n# multi-line values\\nkey4=\'line 1\\nline 2\'\\nkey5=\\"line 1\\nline 2\\"\\n\\n# export statements\\nexport key6=value 6\\n\\n# comma delimiter\\nkey7:value 6\\n\\n# keys cannot contain dots or dashes\\na.b.key8=value 8 # will be ignored\\na-b-key9=value 9 # will be ignored\\n```\\n\\nThe format is adapted from\\n[mefellows/sbt-dotenv](https://github.com/mefellows/sbt-dotenv) and\\n[bkeepers/dotenv](https://github.com/bkeepers/dotenv). Example json\\nconfigurations above are defined for Visual Studio Code, the `type` and `name`\\nfields can be omitted when using in other clients.\\n\\nThis new feature has been contributed by [mwz](https://github.com/mwz). Thanks\\nfor the great work!\\n\\n## Miscellaneous\\n\\n- Removed `javax` from default excluded packages - it can be added back in the\\n configuration.\\n- Fixed top level completions in empty files.\\n- Fixed issues with run/debug when using VPN.\\n- Fixed go to java sources in standalone worksheets.\\n- Fixed issues with worksheets if the workspace was not first compiled.\\n- Fixed sbt completions coming from `project/*.scala` files.\\n- Only use `import {java.util => ju}` when there are conflicting symbols in the\\n file.\\n- Muted InvalidProtocolException in the logs - this exception might happen.\\n normally and does not break anything.\\n- Changed scalafix and scalafmt location in user configuration to absolute path.\\n- Only report parsing errors after Scala version is confirmed for a file.\\n- Added automatic retry in case of build server connection failure.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.4..v0.9.5\\nChris Kipp\\nScala Steward\\nTomasz Godzik\\nMichael Wizner\\nMeriam Lachkar\\nGabriele Petronella\\nKrzysiek Bochenek\\nPavol Vidlicka\\nVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.5](https://github.com/scalameta/metals/tree/v0.9.5) (2020-11-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.4...v0.9.5)\\n\\n**Merged pull requests:**\\n\\n- Rename user configuration options for decoration provider\\n [\\\\#2196](https://github.com/scalameta/metals/pull/2196)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show warning about unsupported Scala version in worksheets\\n [\\\\#2194](https://github.com/scalameta/metals/pull/2194)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala3 3.0.0-M1\\n [\\\\#2190](https://github.com/scalameta/metals/pull/2190)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafix [\\\\#2192](https://github.com/scalameta/metals/pull/2192)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add retry in case of timeout in build/initialize\\n [\\\\#2184](https://github.com/scalameta/metals/pull/2184)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure scalacOptions for Test are correct for sbt BSP.\\n [\\\\#2191](https://github.com/scalameta/metals/pull/2191)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support remote debugging\\n [\\\\#2125](https://github.com/scalameta/metals/pull/2125)\\n ([pvid](https://github.com/pvid))\\n- Add in timer methods to a new timerProvider.\\n [\\\\#2186](https://github.com/scalameta/metals/pull/2186)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove condition for jfr, since it\'s now reliably available on CI\\n [\\\\#2185](https://github.com/scalameta/metals/pull/2185)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure build server is connected or not available before parsing\\n [\\\\#2169](https://github.com/scalameta/metals/pull/2169)\\n ([tgodzik](https://github.com/tgodzik))\\n- Preload scalafix to optimize first organize imports run\\n [\\\\#2168](https://github.com/scalameta/metals/pull/2168)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow for reset in html doctor\\n [\\\\#2172](https://github.com/scalameta/metals/pull/2172)\\n ([ckipp01](https://github.com/ckipp01))\\n- Track and show progress to user about connecting to sbt\\n [\\\\#2182](https://github.com/scalameta/metals/pull/2182)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove old bloop script now that we just use coursier\\n [\\\\#2181](https://github.com/scalameta/metals/pull/2181)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update interface to 1.0.1\\n [\\\\#2178](https://github.com/scalameta/metals/pull/2178)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.2.10\\n [\\\\#2180](https://github.com/scalameta/metals/pull/2180)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.0.4\\n [\\\\#2179](https://github.com/scalameta/metals/pull/2179)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.5\\n [\\\\#2177](https://github.com/scalameta/metals/pull/2177)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.8.6\\n [\\\\#2176](https://github.com/scalameta/metals/pull/2176)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.0-jre\\n [\\\\#2175](https://github.com/scalameta/metals/pull/2175)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.4-23-dbacf644\\n [\\\\#2174](https://github.com/scalameta/metals/pull/2174)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.5\\n [\\\\#2173](https://github.com/scalameta/metals/pull/2173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix resolver for sbt-metals snapshot\\n [\\\\#2170](https://github.com/scalameta/metals/pull/2170)\\n ([ckipp01](https://github.com/ckipp01))\\n- Enable smoother sbt bsp integration.\\n [\\\\#2154](https://github.com/scalameta/metals/pull/2154)\\n ([ckipp01](https://github.com/ckipp01))\\n- Change scalafix and scalafmt conf to absolute path\\n [\\\\#2165](https://github.com/scalameta/metals/pull/2165)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix race condition while using textDocument/foldingRange\\n [\\\\#2166](https://github.com/scalameta/metals/pull/2166)\\n ([tgodzik](https://github.com/tgodzik))\\n- Account for possible null value in ScalaTarget\'s baseDirectory\\n [\\\\#2164](https://github.com/scalameta/metals/pull/2164)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mill scripts [\\\\#2162](https://github.com/scalameta/metals/pull/2162)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mute InvalidProtocolException which might happen normally\\n [\\\\#2159](https://github.com/scalameta/metals/pull/2159)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt to 1.4.1 [\\\\#2161](https://github.com/scalameta/metals/pull/2161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that default version is picked up for Scalafmt provider\\n [\\\\#2158](https://github.com/scalameta/metals/pull/2158)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t import {java.util => ju} when no conflicting symbols are available\\n [\\\\#2155](https://github.com/scalameta/metals/pull/2155)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fixed sbt completions coming from project/\\\\*.scala\\n [\\\\#2129](https://github.com/scalameta/metals/pull/2129)\\n ([dos65](https://github.com/dos65))\\n- Add java sources to standalone worksheets and run compilation before\\n evaluation if necessary.\\n [\\\\#2133](https://github.com/scalameta/metals/pull/2133)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump setup-scala and cache-action actions\\n [\\\\#2149](https://github.com/scalameta/metals/pull/2149)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add JFR for non oracle JDK releases\\n [\\\\#2137](https://github.com/scalameta/metals/pull/2137)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt up to 2.7.4\\n [\\\\#2148](https://github.com/scalameta/metals/pull/2148)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.24\\n [\\\\#2147](https://github.com/scalameta/metals/pull/2147)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, sbt-munit to 0.7.14\\n [\\\\#2146](https://github.com/scalameta/metals/pull/2146)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.14\\n [\\\\#2144](https://github.com/scalameta/metals/pull/2144)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.0.3\\n [\\\\#2143](https://github.com/scalameta/metals/pull/2143)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.2.Final\\n [\\\\#2142](https://github.com/scalameta/metals/pull/2142)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.3\\n [\\\\#2141](https://github.com/scalameta/metals/pull/2141)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.8.3\\n [\\\\#2140](https://github.com/scalameta/metals/pull/2140)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.2 [\\\\#2139](https://github.com/scalameta/metals/pull/2139)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.3\\n [\\\\#2138](https://github.com/scalameta/metals/pull/2138)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use 127.0.0.1 address always for DebugProvider\\n [\\\\#2135](https://github.com/scalameta/metals/pull/2135)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for loading env variables from a .env file.\\n [\\\\#2123](https://github.com/scalameta/metals/pull/2123)\\n ([mwz](https://github.com/mwz))\\n- Do not show hover if the type is error\\n [\\\\#2126](https://github.com/scalameta/metals/pull/2126)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure files are compiled when running scalafix\\n [\\\\#2119](https://github.com/scalameta/metals/pull/2119)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show implicit arguments and type annotations for Scala files\\n [\\\\#2103](https://github.com/scalameta/metals/pull/2103)\\n ([tgodzik](https://github.com/tgodzik))\\n- Account for possible null value on PopupChoiceReset message request\\n [\\\\#2121](https://github.com/scalameta/metals/pull/2121)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support environment variables when running or debugging\\n [\\\\#2118](https://github.com/scalameta/metals/pull/2118)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in top level-completions for empty file.\\n [\\\\#2088](https://github.com/scalameta/metals/pull/2088)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalafix-interfaces to 0.9.21\\n [\\\\#2114](https://github.com/scalameta/metals/pull/2114)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.9\\n [\\\\#2113](https://github.com/scalameta/metals/pull/2113)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.7\\n [\\\\#2112](https://github.com/scalameta/metals/pull/2112)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.0.Final\\n [\\\\#2111](https://github.com/scalameta/metals/pull/2111)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.10.1\\n [\\\\#2110](https://github.com/scalameta/metals/pull/2110)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.7.13\\n [\\\\#2109](https://github.com/scalameta/metals/pull/2109)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.21\\n [\\\\#2108](https://github.com/scalameta/metals/pull/2108)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.4-15-56a96a99\\n [\\\\#2107](https://github.com/scalameta/metals/pull/2107)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update organize-import rule to add Scala 2.11 support\\n [\\\\#2101](https://github.com/scalameta/metals/pull/2101)\\n ([gabro](https://github.com/gabro))\\n- Simplify TestHovers and remove warning\\n [\\\\#2098](https://github.com/scalameta/metals/pull/2098)\\n ([gabro](https://github.com/gabro))\\n- Display used BuildServer in Doctor\\n [\\\\#2097](https://github.com/scalameta/metals/pull/2097)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Implement organize import using scalafix\\n [\\\\#1971](https://github.com/scalameta/metals/pull/1971)\\n ([mlachkar](https://github.com/mlachkar))\\n- Remove javax from default excluded packages\\n [\\\\#2091](https://github.com/scalameta/metals/pull/2091)\\n ([gabro](https://github.com/gabro))\\n- Add documentation for new parameter in GotoLocation\\n [\\\\#2095](https://github.com/scalameta/metals/pull/2095)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix Metals version in the blog post\\n [\\\\#2089](https://github.com/scalameta/metals/pull/2089)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.9.4\\n [\\\\#2081](https://github.com/scalameta/metals/pull/2081)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/06/sbt-BSP-support","metadata":{"permalink":"/metals/blog/2020/11/06/sbt-BSP-support","source":"@site/blog/2020-11-06-sbt-BSP-support.md","title":"sbt BSP support","description":"If you\'ve been following the [sbt","date":"2020-11-06T00:00:00.000Z","formattedDate":"November 6, 2020","tags":[],"readingTime":5.9,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"}],"frontMatter":{"author":"Chris Kipp","title":"sbt BSP support","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"},"prevItem":{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"},"nextItem":{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"}},"content":"If you\'ve been following the [sbt\\nreleases](https://github.com/sbt/sbt/releases), 1.4.x introduced some great new\\nfeatures, one of those being BSP support. This effort was initiated by community\\nmembers and proposed to the [Scala Center Advisory\\nBoard](https://github.com/scalacenter/advisoryboard/blob/master/proposals/023-bsp.md).\\nThen thanks to the work of [Adrien Piquerez](https://twitter.com/adrienpi2) and\\n[Eugene Yokota](https://twitter.com/eed3si9n) BSP support became a reality in\\n1.4.0. You can read more about the reason behind the work and some of the\\ndetails of the implementation in this blog post: [BSP Support in sbt\\n1.4](https://www.scala-lang.org/blog/2020/10/27/bsp-in-sbt.html).\\n\\nThe Metals team is also happy to announce that as of the 0.9.5 release, the\\nprocess to use other BSP servers like sbt is now much smoother. In some ways,\\nBSP is an implementation detail abstracted away from a user, and you may not\\ndirectly interact at all with your build server, even though it\'s pivotal for\\nthe Metals experience. Therefore, we\'d like to answer some common questions\\nabout what this means to you as a user, explain some of the default choices\\nMetals makes for you, and show you how to explore the sbt BSP server.\\n\\n## What is BSP?\\n\\nFirst off, you may be wondering what BSP is. The [Build Server\\nProtocol](https://build-server-protocol.github.io/) (BSP) is a _Protocol for IDEs and\\nbuild tools to communicate about compilation, running, testing, debugging, and\\nmuch more._ If you\'re familiar with the [Language Server\\nProtocol](https://microsoft.github.io/language-server-protocol/) (LSP), BSP is\\ncomplementary to LSP and inspired by it. Where LSP allows your editor to\\nabstract over various programming languages by a shared way to communicate to a\\nlanguage server, BSP allows IDE\'s to abstract over various build servers. A\\ntypical example of this can be illustrated like so:\\n\\n![LSP BSP example](https://i.imgur.com/0RRUDlU.png)\\n\\nYou have your editor (Emacs) communicating with Metals via LSP, and then Metals\\ncommunicating with a BSP server (Bloop) via BSP. This communication over BSP can\\nbe about compiling your code, running your code, defining sources in your\\nworkspace, etc. You can read all about the various communication types [here in\\nthe\\nprotocol](https://build-server-protocol.github.io/docs/specification#actual-protocol).\\n\\n[Bloop](https://scalacenter.github.io/bloop/) was the first server to implement\\nBSP, and it\'s the default build server for all build tools that Metals supports\\nat the moment. When you open a fresh project, you\'re prompted to import your\\nbuild, and this import process is running a form of \\"Bloop Install\\" to write\\nyour build definition to `.bloop/` for Bloop to read and use. Then as you\\ncontinue to edit, diagnostics and other information are flowing back and forth\\nfrom Metals to Bloop. Hopefully this gives you a brief picture of what BSP is,\\nand how it\'s used in Metals.\\n\\n## What does sbt BSP support mean for Metals?\\n\\nAnother question you may have is \\"what does sbt BSP support mean for Metals\\"?\\nThis means a couple different things. Up until this point, if you wanted to use\\nsbt BSP, you needed to clear your `.metals/` and `.bloop` directories, and then\\nstart sbt with a specific flag before connecting to it. None of this is\\nnecessary anymore. In order for [BSP\\ndiscovery](https://build-server-protocol.github.io/docs/server-discovery.html)\\nto happen, you need a `.bsp/*json` file with instructions on how to\\nstart/connect to the build server. A new command has been added to Metals (which\\nwe\'ll go over down below) that can generate this file for you if it doesn\'t\\nexist, and then you will be automatically connected to sbt. If this file already\\nexist, then we provide a simple way for you to \\"switch\\" build servers and for\\nyour choice to be remembered. We also automatically include an sbt plugin to\\nensure the correct semantic information is produced by the compiler. So to\\nsummarize, Metals now has the ability to generate the necessary `.bsp/sbt.json`\\nfile if it doesn\'t exist, and to also switch back and forth from using Bloop or\\nsbt as your build server.\\n\\n## What\'s the difference between Bloop and sbt BSP?\\n\\nAt this point you may be asking, \\"what\'s the difference?\\". For an average user,\\nthere may not be a ton of difference, however I\'d like to outline a couple\\nthings that may be relevant to you.\\n\\n- Bloop supports the [Debug Adapter\\n Protocol](https://microsoft.github.io/debug-adapter-protocol/) (DAP) and sbt\\n doesn\'t. So you\'ll notice when using sbt as a build server, you won\'t have\\n the `run` or `debug` code lenses directly in your editor like you do with\\n Bloop.\\n- Bloop writes all the necessary information about your build it needs to disk\\n whereas sbt loads it into memory. If you\'re a user that works for long\\n periods of time on a single project, then this may not matter to you at all.\\n However, if you jump in and out of projects, without having sbt shell\\n running, then you will pay the cost of loading up your build every time.\\n- Bloop offers sbt file support that enables completions and hover, whereas\\n this is not yet available in the sbt BSP implementation.\\n- sbt gives you access to the full task graph, so for example if you\'re using\\n `BuildInfo`, and you compile with Bloop, your `BuildInfo` won\'t get\\n generated. However, sources will get generated when using sbt server. This\\n can help avoid any potential inconsistencies. \\n\\nWhile there are some more differences, these are probably the main ones you\'ll\\nnotice as a user. These are both great tools, and you\'ll have to explore more to\\nsee what is the best fit for you. For now, Metals defaults to using Bloop mainly\\nbecause we believe it provides a richer feature set and because pretty much all\\nof our testing includes Bloop as a build server.\\n\\n## How do I try it out?\\n\\nNow to the good stuff. There are two main ways that you can start using sbt\\nserver in Metals.\\n\\n### No `.bsp/sbt.json` exists\\n\\nIf no `.bsp/sbt.json` exists yet, you can generate it with the new\\n`metals.generate-bsp-config` command. At any time you can execute this command\\nand Metals will ensure that you\'re on the minimum required sbt version (1.4.1),\\ngenerate the `.bsp/sbt.json` file for you, include the necessary plugin, and\\nthen auto-connect to the sbt build server. For example in VS Code this looks\\nlike this:\\n\\n### `metals.generate-bsp-config`\\n![generate-bsp-config](https://i.imgur.com/kBNbtzI.gif)\\n\\n### `.bsp/sbt.json` already exists\\n\\nIf you\'ve ran sbt on your project already, your `.bsp/sbt.json` file will\\nalready exist. In this case, you can simply use the `metals.bsp-switch` command\\nand choose sbt. For example, using `coc-metals`, it looks like this:\\n\\n### `metals.bsp-switch`\\n![bsp-switch](https://i.imgur.com/6tY2ofL.gif)\\n\\n### Switching back to Bloop\\n\\nAfter you do a `metals.bsp-switch` or `metals-generate-bsp-config`, your choice\\nwill be remembered. So the next time that you open your workspace, you will\\nautomatically connect to the last build server you had chosen. If you\'d like to\\ngo back to your previous build server, you can simply use the\\n`metals.bsp-switch` command again to choose your previous server. For editors\\nthat have an html doctor, you can also reset your build server choice in the\\nDoctor.\\n\\n### Doctor reset\\n![Doctor](https://i.imgur.com/YEGfEGB.png)\\n\\n## Conclusion\\n\\nWe hope you enjoy this easier way to use sbt server with Metals. If you\'re\\ncurious about the implementation details, much of the work was done in [this\\npr](https://github.com/scalameta/metals/pull/2154). As always please don\'t\\nhesitate to ask questions on our various channels, submit issues, or create new\\nfeature requests."},{"id":"/2020/09/21/lithium","metadata":{"permalink":"/metals/blog/2020/09/21/lithium","source":"@site/blog/2020-09-21-lithium.md","title":"Metals v0.9.4 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.4, which focuses on","date":"2020-09-21T00:00:00.000Z","formattedDate":"September 21, 2020","tags":[],"readingTime":5.72,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.4 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"},"nextItem":{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.4, which focuses on\\nimprovements in Scala 3 worksheets, a couple of new features, and a number of\\nsmaller improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release115
Merged PRs50
Contributors6
Closed issues15
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/27?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 0.26.0 and 0.27.0-RC1 support.\\n- Analyze stacktrace command\\n- Customizable package exclusions\\n\\n## Analyze stacktrace command\\n\\nThanks to [kpbochenek](https://github.com/kpbochenek), Metals can now help with\\nnavigating stack traces using the new `metals.analyze-stacktrace` command. The\\nonly thing it needs is the actual stack trace string to be input as a parameter\\nto the command. This new functionality works differently in various editors.\\n\\n### Visual Studio Code\\n\\nThe only thing users need to do is copy the stack trace and run the\\n`Analyze Stacktrace` command from the command palette. This will display a new\\nweb view, where it will be possible for users to navigate the files that are\\nincluded in the exception.\\n\\n![stacktrace-vscode](https://i.imgur.com/WBU4hvT.gif)\\n\\n### coc-metals\\n\\nWith `coc-metals`, you just need to copy the stacktrace, whether from sbt,\\nbloop-cli, or somewhere else into your register. Once you have it copied, you\\ncan just execute the `metals.analyze-stacktrace`command. This will create\\na`.metals/stracktrace.scala` file which can be used to navigate through your\\nstacktrace using code lenses. Keep in mind that you\'ll want to make sure you\\nhave codeLens.enable set to true in your configuration. Also, since this feature\\nrelies on code lenses (virtual text in Nvim), it\'s only supported in Nvim.\\n\\n![stacktrace-nvim](https://camo.githubusercontent.com/54a9cb68547532b2ff16cb6f95fdd8268d806b41/68747470733a2f2f692e696d6775722e636f6d2f74516a694147322e676966)\\n\\n### Other editors\\n\\nTo make it work with any other editors users need to run the command manually\\nwith the stacktrace as input, similar to the example above with `coc-metals`.\\nThe command will generate a new file, `.metals/stacktrace.scala`, which can be\\nused to navigate through the stacktrace using code lenses.\\n\\n## Customizable package exclusions\\n\\nUsually, a number of packages are almost never used by the developers and could\\nclutter the language server output while being of little benefit to the users.\\nMetals would exclude those packages from indexing causing them to not be\\nrecommended for completions, symbol searches, and code actions. Previously that\\nlist was set in stone and consisted of a number of prefixes:\\n\\n```scala\\nval defaultExclusions: List[String] = List(\\n \\"META-INF/\\", \\"images/\\", \\"toolbarButtonGraphics/\\", \\"jdk/\\", \\"sun/\\", \\"javax/\\",\\n \\"oracle/\\", \\"java/awt/desktop/\\", \\"org/jcp/\\", \\"org/omg/\\", \\"org/graalvm/\\",\\n \\"com/oracle/\\", \\"com/sun/\\", \\"com/apple/\\", \\"apple/\\"\\n )\\n```\\n\\nThis list might work in most cases, but users might also want to customize the\\nlist according to their preferences and domain they are working on. Starting\\nwith this release it is now possible to define additional exclusions as well as\\nremove some from the default list. This can be done via an additional Metals\\nuser setting:\\n\\n```json\\n\\"metals.excluded-packages\\" : [\\n \\"akka.actor.typed.javadsl\\", \\"--javax\\"\\n]\\n```\\n\\n`--` should only be used to remove some of the defaults if they aren\'t needed\\nfor your project. Thanks to [ckipp01](https://github.com/ckipp01) for\\ncontributing this feature!\\n\\n## Miscellaneous\\n\\nSome of the smaller improvements to Metals include:\\n\\n- New recommended Maven Scala template.\\n- Fix go to source and auto imports in standalone worksheet files.\\n- Fix missing classes from \\\\_empty package in tree view.\\n- Add a command to quickly create a new worksheet with a default name.\\n\\nBeside all the core work on the server itself, there have also been a lot of\\ngreat work done in various other Scalameta projects, which Metals relies on.\\nThese projects include [mdoc](http://github.com/scalameta/mdoc), which powers\\nworksheets and [Scalameta](http://github.com/scalameta/scalameta), which powers\\nall SemanticDB and parsing powered features. Those contributions helped to\\nunlock and improve Dotty support in Metals. So special thanks to those projects\\nand contributors.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.3..v0.9.4\\nScala Steward\\nChris Kipp\\nTomasz Godzik\\nKrzysztof Bochenek\\nEthan Atkins\\nJoseph Price\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.4](https://github.com/scalameta/metals/tree/v0.9.4) (2020-09-21)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.3...v0.9.4)\\n\\n**Merged pull requests:**\\n\\n- Bump other reference of coursier/cache\\n [\\\\#2087](https://github.com/scalameta/metals/pull/2087)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use built-in fetch depth and bump coursier cache\\n [\\\\#2086](https://github.com/scalameta/metals/pull/2086)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor NewFileProvider\\n [\\\\#2085](https://github.com/scalameta/metals/pull/2085)\\n ([ckipp01](https://github.com/ckipp01))\\n- Strip out `[E]` or `[error]` from stacktrace in analyzer.\\n [\\\\#2083](https://github.com/scalameta/metals/pull/2083)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Bloop to 1.4.4-13-408f4d80\\n [\\\\#2080](https://github.com/scalameta/metals/pull/2080)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc version to 2.2.9\\n [\\\\#2079](https://github.com/scalameta/metals/pull/2079)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change new-scala-file to enable quick creation of a file.\\n [\\\\#2075](https://github.com/scalameta/metals/pull/2075)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-jmh to 0.4.0\\n [\\\\#2071](https://github.com/scalameta/metals/pull/2071)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.2.Final\\n [\\\\#2067](https://github.com/scalameta/metals/pull/2067)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.22\\n [\\\\#2070](https://github.com/scalameta/metals/pull/2070)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.8\\n [\\\\#2069](https://github.com/scalameta/metals/pull/2069)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.8\\n [\\\\#2068](https://github.com/scalameta/metals/pull/2068)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.4.Final\\n [\\\\#2066](https://github.com/scalameta/metals/pull/2066)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-26\\n [\\\\#2065](https://github.com/scalameta/metals/pull/2065)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.20\\n [\\\\#2064](https://github.com/scalameta/metals/pull/2064)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.3-31-b16d7e50\\n [\\\\#2063](https://github.com/scalameta/metals/pull/2063)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix wrong definition position for worksheets\\n [\\\\#2060](https://github.com/scalameta/metals/pull/2060)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix typo in StringBloomFilter.scala\\n [\\\\#2059](https://github.com/scalameta/metals/pull/2059)\\n ([joprice](https://github.com/joprice))\\n- Add support for dotty 0.27.0-RC1 and update mdoc\\n [\\\\#2058](https://github.com/scalameta/metals/pull/2058)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t search for runTest code lenses in Ammonite scripts and worksheets.\\n [\\\\#2057](https://github.com/scalameta/metals/pull/2057)\\n ([ckipp01](https://github.com/ckipp01))\\n- Look into ammonite flakiness in tests to see if we can remove it\\n [\\\\#2054](https://github.com/scalameta/metals/pull/2054)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in new version of Ammonite\\n [\\\\#2056](https://github.com/scalameta/metals/pull/2056)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix missing classes from _empty_ package in treeView.\\n [\\\\#2053](https://github.com/scalameta/metals/pull/2053)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove TravisCI stuff [\\\\#2055](https://github.com/scalameta/metals/pull/2055)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correct the way userConfig examples are displayed.\\n [\\\\#2045](https://github.com/scalameta/metals/pull/2045)\\n ([ckipp01](https://github.com/ckipp01))\\n- Customizable package exclusions\\n [\\\\#2012](https://github.com/scalameta/metals/pull/2012)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update interface to 0.0.25\\n [\\\\#2038](https://github.com/scalameta/metals/pull/2038)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update emacs docs to include latest lsp-metals changes\\n [\\\\#2033](https://github.com/scalameta/metals/pull/2033)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.21\\n [\\\\#2042](https://github.com/scalameta/metals/pull/2042)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.7.12\\n [\\\\#2041](https://github.com/scalameta/metals/pull/2041)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.13\\n [\\\\#2040](https://github.com/scalameta/metals/pull/2040)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.5\\n [\\\\#2039](https://github.com/scalameta/metals/pull/2039)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-25\\n [\\\\#2037](https://github.com/scalameta/metals/pull/2037)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.5\\n [\\\\#2036](https://github.com/scalameta/metals/pull/2036)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.3-27-dfdc9971\\n [\\\\#2035](https://github.com/scalameta/metals/pull/2035)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.2\\n [\\\\#2034](https://github.com/scalameta/metals/pull/2034)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix auto imports and go to sources for worksheets outside sources\\n [\\\\#2030](https://github.com/scalameta/metals/pull/2030)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Maven template to the curated list of templates\\n [\\\\#2028](https://github.com/scalameta/metals/pull/2028)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for dotty 0.26.0\\n [\\\\#2027](https://github.com/scalameta/metals/pull/2027)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump memory for test forks to 2GB\\n [\\\\#2025](https://github.com/scalameta/metals/pull/2025)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt docs to better explain how to manually install Metals prior to\\n 0.7.6 version [\\\\#2026](https://github.com/scalameta/metals/pull/2026)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add parallel tests [\\\\#1985](https://github.com/scalameta/metals/pull/1985)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove old gitignore and graal stuff.\\n [\\\\#2022](https://github.com/scalameta/metals/pull/2022)\\n ([ckipp01](https://github.com/ckipp01))\\n- Clear fingerprints when semanticdb hash matches\\n [\\\\#2021](https://github.com/scalameta/metals/pull/2021)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change link in blog post to absolute path\\n [\\\\#2019](https://github.com/scalameta/metals/pull/2019)\\n ([tgodzik](https://github.com/tgodzik))\\n- Switch file watching library to swoval\\n [\\\\#2014](https://github.com/scalameta/metals/pull/2014)\\n ([eatkins](https://github.com/eatkins))\\n- Move releases to github actions\\n [\\\\#2015](https://github.com/scalameta/metals/pull/2015)\\n ([tgodzik](https://github.com/tgodzik))\\n- Analyze stacktrace [\\\\#1966](https://github.com/scalameta/metals/pull/1966)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix typo in vscode docs\\n [\\\\#2010](https://github.com/scalameta/metals/pull/2010)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for 0.9.3\\n [\\\\#2008](https://github.com/scalameta/metals/pull/2008)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/08/19/lithium","metadata":{"permalink":"/metals/blog/2020/08/19/lithium","source":"@site/blog/2020-08-19-lithium.md","title":"Metals v0.9.3 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.3, which adds a couple of","date":"2020-08-19T00:00:00.000Z","formattedDate":"August 19, 2020","tags":[],"readingTime":5.51,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.3 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"},"nextItem":{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"}},"content":"We\'re happy to announce the release of Metals v0.9.3, which adds a couple of\\nuseful new features as well as support for Scala 0.25.0 and 0.26.0-RC1.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release123
Merged PRs59
Contributors9
Closed issues31
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/26?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- sbt script support with hover, completions and go to definition.\\n- Scala 3 worksheet support\\n- Scala 0.25.0 and 0.26.0-RC1 support.\\n- Main classes from dependencies can now be run\\n\\n## sbt script support\\n\\nThanks to the great work by [dos65](https://github.com/dos65) Metals now\\nsupports sbt script files as well as build\'s Scala files. The full list of\\ncurrently supported features is available\\n[here](/metals/docs#additional-file-types).\\n\\nsbt support is is achieved by generating additional `metals.sbt` file for each\\nlevel of sbt\'s project. For `build.sbt` we now generate\\n`project/project/metals.sbt`, for `project/other.sbt`\\n`project/project/project/metals.sbt` etc. This is needed for the Bloop plugin to\\nproperly generate information in the `.bloop` configuration files. It\'s\\nrecommended to gitignore `metals.sbt` and `.bloop` anywhere in the file tree.\\n\\n## Scala 3 worksheet support\\n\\nFinally, it is now possible to run worksheets for Scala 3 starting with version\\n0.26.0-RC1. To try it out users need to create the worksheet inside of a Scala 3\\nsource directory and then they can be used the same way as with previously\\nsupported worksheets.\\n\\nThis is a great place for anyone to experiment with Scala 3 and see what is\\ncoming around the corner!\\n\\n![worksheet-sample](https://i.imgur.com/DZvz3Le.gif)\\n\\n## Running main classes from dependencies\\n\\nPreviously, users could only run main classes that are defined in the\\nsourcecode, which made it impossible to run and debug in certain frameworks such\\nas the [Play Framework](https://www.playframework.com/). Metals now searches the\\nclasspath additionally to find any classes that are defined by the user and not\\navailable in the main sources.\\n\\nTo run any such class a full name needs to be provided via the configuration.\\n\\nFor example in Visual Studio Code this would look like this:\\n\\n```json\\n{\\n \\"version\\": \\"0.2.0\\",\\n \\"configurations\\": [\\n {\\n \\"type\\": \\"scala\\",\\n \\"request\\": \\"launch\\",\\n \\"name\\": \\"Play main\\",\\n \\"mainClass\\": \\"play.core.server.ProdServerStart\\",\\n \\"buildTarget\\": \\"root\\",\\n \\"args\\": [],\\n \\"jvmOptions\\": []\\n }\\n ]\\n}\\n```\\n\\nIn other editors users need to provide the same parameters for the run\\nconfiguration.\\n\\n## Miscellaneous\\n\\n- Removed breakpoints are no longer hit.\\n- Compilation is invoked only once for any change.\\n- Worksheets now display types next to the code.\\n- Fixed wrong completions in string interpolation.\\n- Bloop now copies old artifacts by default even if the workspace does not\\n compile.\\n- Fixed duplicate code actions in case of range selection.\\n- Fixed `metals.enableStripMargin` option to work without restarting the\\n workspace.\\n- Signature help now also triggers when typing `,`\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.2..v0.9.3\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nCheng Lian\\nVadim Chelyshov\\nAdrien Piquerez\\nAyoub Benali\\nKrzysztof Bochenek\\nOlafur Pall Geirsson\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.3](https://github.com/scalameta/metals/tree/v0.9.3) (2020-08-19)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.2...v0.9.3)\\n\\n**Merged pull requests:**\\n\\n- Document how to run or debug applications\\n [\\\\#2005](https://github.com/scalameta/metals/pull/2005)\\n ([tgodzik](https://github.com/tgodzik))\\n- Properly detect semanticdb target for Scala 3\\n [\\\\#2004](https://github.com/scalameta/metals/pull/2004)\\n ([adpi2](https://github.com/adpi2))\\n- Add try/catch around unsafe code block.\\n [\\\\#2002](https://github.com/scalameta/metals/pull/2002)\\n ([olafurpg](https://github.com/olafurpg))\\n- Allow to remove all breakpoints when debugging\\n [\\\\#1992](https://github.com/scalameta/metals/pull/1992)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update information about Sbt, Ammonite and worksheet support\\n [\\\\#1994](https://github.com/scalameta/metals/pull/1994)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update munit, sbt-munit to 0.7.11\\n [\\\\#2000](https://github.com/scalameta/metals/pull/2000)\\n ([scala-steward](https://github.com/scala-steward))\\n- Make sure we don\'t compile twice for open files\\n [\\\\#1993](https://github.com/scalameta/metals/pull/1993)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt-mdoc to 2.2.5\\n [\\\\#2001](https://github.com/scalameta/metals/pull/2001)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.12\\n [\\\\#1999](https://github.com/scalameta/metals/pull/1999)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.4\\n [\\\\#1998](https://github.com/scalameta/metals/pull/1998)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.2.0\\n [\\\\#1997](https://github.com/scalameta/metals/pull/1997)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.2\\n [\\\\#1996](https://github.com/scalameta/metals/pull/1996)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-buildinfo to 0.10.0\\n [\\\\#1995](https://github.com/scalameta/metals/pull/1995)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add types to worksheet values\\n [\\\\#1990](https://github.com/scalameta/metals/pull/1990)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow running main classes from dependencies\\n [\\\\#1989](https://github.com/scalameta/metals/pull/1989)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Sbt\'s Scala files\\n [\\\\#1988](https://github.com/scalameta/metals/pull/1988)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t run worksheets on Scala 0.25.0 or lower\\n [\\\\#1986](https://github.com/scalameta/metals/pull/1986)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix go to defintion for Sbt\'s Scala sources\\n [\\\\#1984](https://github.com/scalameta/metals/pull/1984)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in a few missing docs on the extensions and commands.\\n [\\\\#1980](https://github.com/scalameta/metals/pull/1980)\\n ([ckipp01](https://github.com/ckipp01))\\n- Change hardcoded \\\\$(info) icon to read from ClientConfig instead.\\n [\\\\#1982](https://github.com/scalameta/metals/pull/1982)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for worksheets in Scala 3\\n [\\\\#1979](https://github.com/scalameta/metals/pull/1979)\\n ([tgodzik](https://github.com/tgodzik))\\n- Simplify logic to add metals.sbt files and make sure it\'s tested\\n [\\\\#1978](https://github.com/scalameta/metals/pull/1978)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add checking exact name to all references() invocations\\n [\\\\#1976](https://github.com/scalameta/metals/pull/1976)\\n ([tgodzik](https://github.com/tgodzik))\\n- Adjust locations returned from the presentation compiler\\n [\\\\#1972](https://github.com/scalameta/metals/pull/1972)\\n ([tgodzik](https://github.com/tgodzik))\\n- Sbt support - multiply bsp connections\\n [\\\\#1865](https://github.com/scalameta/metals/pull/1865)\\n ([dos65](https://github.com/dos65))\\n- Fix `filterText` value for completion item in string interpolation\\n [\\\\#1949](https://github.com/scalameta/metals/pull/1949)\\n ([dos65](https://github.com/dos65))\\n- Add CleanCompile to server commands documentation\\n [\\\\#1970](https://github.com/scalameta/metals/pull/1970)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Change implicits to Dotty syntax.\\n [\\\\#1967](https://github.com/scalameta/metals/pull/1967)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump recommended scalafmt version and local scalafmt version to 2.6.4\\n [\\\\#1968](https://github.com/scalameta/metals/pull/1968)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update ammonite-util to 2.1.4-13-fb16e4e\\n [\\\\#1955](https://github.com/scalameta/metals/pull/1955)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.10.0\\n [\\\\#1961](https://github.com/scalameta/metals/pull/1961)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.3\\n [\\\\#1962](https://github.com/scalameta/metals/pull/1962)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump default mill version and also add it to BuildInfo\\n [\\\\#1954](https://github.com/scalameta/metals/pull/1954)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit to 0.7.10\\n [\\\\#1964](https://github.com/scalameta/metals/pull/1964)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.11\\n [\\\\#1963](https://github.com/scalameta/metals/pull/1963)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.3.0\\n [\\\\#1960](https://github.com/scalameta/metals/pull/1960)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-24\\n [\\\\#1959](https://github.com/scalameta/metals/pull/1959)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.0 [\\\\#1958](https://github.com/scalameta/metals/pull/1958)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.5\\n [\\\\#1957](https://github.com/scalameta/metals/pull/1957)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.0 [\\\\#1956](https://github.com/scalameta/metals/pull/1956)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update Bloop version to support broken workspaces\\n [\\\\#1953](https://github.com/scalameta/metals/pull/1953)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Scala 3 version to 0.26.0-RC1\\n [\\\\#1951](https://github.com/scalameta/metals/pull/1951)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable BuildInfo for mtags3\\n [\\\\#1950](https://github.com/scalameta/metals/pull/1950)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix duplicated code actions\\n [\\\\#1947](https://github.com/scalameta/metals/pull/1947)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix enableStripMargin setting\\n [\\\\#1946](https://github.com/scalameta/metals/pull/1946)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mark BillLspSuite.automatic-reconnect as flaky\\n [\\\\#1942](https://github.com/scalameta/metals/pull/1942)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add more documentation about worksheets.\\n [\\\\#1945](https://github.com/scalameta/metals/pull/1945)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in blog post about configuring Metals.\\n [\\\\#1940](https://github.com/scalameta/metals/pull/1940)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in , as a trigger for SignatureHelp.\\n [\\\\#1944](https://github.com/scalameta/metals/pull/1944)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update to Scala 3 to 0.25.0 version\\n [\\\\#1939](https://github.com/scalameta/metals/pull/1939)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add -Ximport-suggestion-timeout 0 to the presentation compiler options\\n [\\\\#1938](https://github.com/scalameta/metals/pull/1938)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add missing docs and move versions to a more prominent location.\\n [\\\\#1934](https://github.com/scalameta/metals/pull/1934)\\n ([tgodzik](https://github.com/tgodzik))\\n- Take into account server property in statusBarState\\n [\\\\#1937](https://github.com/scalameta/metals/pull/1937)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update organize-imports to 0.4.0\\n [\\\\#1933](https://github.com/scalameta/metals/pull/1933)\\n ([liancheng](https://github.com/liancheng))\\n- Add Bloop jvmopts in tests to limit memory used by it\\n [\\\\#1930](https://github.com/scalameta/metals/pull/1930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure a file exists when searching for definition\\n [\\\\#1929](https://github.com/scalameta/metals/pull/1929)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reverting \\"Update interface to 0.0.24 (#1918)\\"\\n [\\\\#1928](https://github.com/scalameta/metals/pull/1928)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional warn-unused flags\\n [\\\\#1911](https://github.com/scalameta/metals/pull/1911)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.9.2\\n [\\\\#1915](https://github.com/scalameta/metals/pull/1915)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/07/23/configuring-a-client","metadata":{"permalink":"/metals/blog/2020/07/23/configuring-a-client","source":"@site/blog/2020-07-23-configuring-a-client.md","title":"A Dive into Configuring Metals","description":"As of this last Metals release, it\'s now 100% possible to fully configure Metals","date":"2020-07-23T00:00:00.000Z","formattedDate":"July 23, 2020","tags":[],"readingTime":6.97,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars1.githubusercontent.com/u/13974112?s=400&u=7b6a2ddab8eec6f99e4e40ae9b81f71cb5ba92e5&v=4"}],"frontMatter":{"author":"Chris Kipp","title":"A Dive into Configuring Metals","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars1.githubusercontent.com/u/13974112?s=400&u=7b6a2ddab8eec6f99e4e40ae9b81f71cb5ba92e5&v=4"},"prevItem":{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"},"nextItem":{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"}},"content":"As of this last Metals release, it\'s now 100% possible to fully configure Metals\\nwithout any need to pass in server properties. Depending on your editor of\\nchoice, the process to configure Metals may be completely abstracted away. You\\nsimply click install, wait a bit, and start coding. In this post I\'d like to\\ntalk a bit about the progression of how Metals was originally configured fully\\nwith server properties and how it can now be fully configured via the client,\\nwhich in [LSP](https://microsoft.github.io/language-server-protocol/) terms is\\nyour editor. This can serve both as a guide for those client extension\\nmaintainers out there and also those curious at how Metals correctly works for\\nall the various editors.\\n\\n## The first configuration\\n\\nLooking back to the Fall of 2018, you see a giant glimpse of Metals becoming\\nwhat it is today when looking at a giant commit by\\n[@olafurpg](https://twitter.com/olafurpg) with the title [Implement pretty\\nbasic language server and build\\nclient.](https://github.com/scalameta/metals/commit/df6b41acaad1978ffd1fa25c41909c38425932ab).\\nIt\'s a pretty fascinating commit to look at if you\'re interested in the\\nbeginnings of Metals, but I want to focus in on a specific file that still exists\\ntoday, which is the\\n[MetalsServerConfig.scala](https://github.com/scalameta/metals/commit/df6b41acaad1978ffd1fa25c41909c38425932ab#diff-dc72b5c684177c884881164ab17182eb).\\nIn this file you see the first configuration options that existed for Metals.\\nYou see things like `isLogShowMessage` to ensure users were correctly getting\\nstatus messages instead of everything just going into the logs. (This was also\\nbefore\\n[`metals/status`](https://scalameta.org/metals/docs/integrations/new-editor#metalsstatus)\\nexisted which is used today for a better status experience in Metals). You also\\nsee other options like `isHttpEnabled` for Metals to start the Doctor for those\\nthat needed an HTTP client interface, or even an `icons` setting to ensure\\nthings looked nice and matched your client. At this point, instead of just\\nhaving the user specify every one of these when they bootstrapped the server, a\\n`metals.client` property was introduced that we could give editors a set of\\ndefaults. Here is an example for the first settings for Vim and Metals using the\\n[vim-lsc](https://github.com/natebosch/vim-lsc) plugin:\\n\\n```scala\\nSystem.getProperty(\\"metals.client\\", \\"unknown\\") match {\\n case \\"vim-lsc\\" =>\\n MetalsServerConfig().copy(\\n isExtensionsEnabled = false,\\n fileWatcher = FileWatcherConfig.auto,\\n isLogStatusBar = true,\\n isNoInitialized = true,\\n isHttpEnabled = true,\\n icons = Icons.unicode\\n )\\n ...\\n```\\nThe property would then be set when the user would bootstrap Metals. This\\nstarted out as a manual process for almost all the editors utilizing\\n[Coursier](https://github.com/coursier/coursier). This still actually remains a\\nvalid way to configure Metals, although not recommended if your client supports\\nsetting `InitializationOptions` in the\\n[`initalize`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nrequest. It\'s also almost the identical process that happens behind the scenes\\nwhen client extensions like\\n[metals-vscode](https://github.com/scalameta/metals-vscode),\\n[coc-metals](https://github.com/scalameta/coc-metals), and\\n[metals-sublime](https://github.com/scalameta/metals-sublime) bootstrap the\\nserver for you. For example, here is how you would manually do this:\\n\\n```sh\\ncoursier bootstrap \\\\\\n --java-opt -Xss4m \\\\\\n --java-opt -Xms100m \\\\\\n --java-opt -Dmetals.client=emacs \\\\\\n org.scalameta:metals_2.12:0.9.2 \\\\\\n -r bintray:scalacenter/releases \\\\\\n -r sonatype:snapshots \\\\\\n -o /usr/local/bin/metals-emacs -f\\n```\\n\\nIn the above example, you would then get the defaults specified in\\n`MetalsServerConfig.scala` for `emacs`. Again, when the process is automated\\nit\'s very similar, and you can see this if you poke around the\\n[`fetchAndLaunchMetals`](https://github.com/scalameta/metals-vscode/blob/master/src/extension.ts#L166)\\nfunction in the VS-Code extension. You can see how the path to Coursier is\\ngrabbed, your `JAVA_HOME` is captured, and how we get some extra\\nvariables/properties to call Metals with.\\n\\n## User configuration\\n\\nApart from server properties, it was also necessary for users to be able to\\neasily change a setting, even while in the editor. For example, we have a\\ncurrent setting `metals.superMethodLensesEnabled` which when enabled will\\ndisplay a code lens that when invoked will either go to the parent class\\ncontaining the definition of the method or symbol or display the full method\\nhierarchy allowing you to choose where to go. \\n\\nHere is an example of what this looks like in Vim:\\n![Super Method Hierarchy](https://i.imgur.com/rEvhzG1.png)\\n\\nThis feature is actually turned off by default since in very large code bases\\nyou may experience a lag. So if a user wanted to turn this on, it wouldn\'t be a\\ngreat user experience to have to re-bootstrap the server to enable this feature.\\nThis is where the User Configuration comes into play by being able to change a\\nconfiguration value and notify the server via\\n[`workspace/didChangeConfiguration`](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration).\\nThis can fully happen for most of the user configuration values without any need\\nto restart the server. You can see the first configuration options added this\\nway in [this\\ncommit](https://github.com/scalameta/metals/commit/f4706ec75afb9bf797e3144f4a0e91bb0b186e07)\\nwhere the ability to define your `JAVA_HOME` was added. With now allowing for\\nuser configurations in Metals, this allowed for an even more customized\\nexperience.\\n\\n## Experimental\\n\\nBeing able to customize the server with properties and allowing users to pass in\\nsome configuration values worked great. However, once Metals started creating\\nLSP extensions for functionality that wasn\'t supported fully just by LSP, then a\\nway was needed for the client to express that it supported these extensions.\\nThis is when Metals started to use the\\n[`ClientCapabilities.experimental`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nfield which the client needed to declare support the extension. You can see the\\nfirst inklings of this when the [Tree View\\nProtocol](https://scalameta.org/metals/docs/editors/tree-view-protocol.html) was\\nintroduced [here in this\\ncommit](https://github.com/scalameta/metals/commit/a55a2413ef10237c8510eb707c0de0cd03b83d85#diff-f8c05eebbf12c9c21a7d568f09b500ea).\\nThis then continued to be further expanded as we introduced more extensions.\\n\\nAs it became easier for various clients to set this, we slowly [started to\\nmigrate](https://github.com/scalameta/metals/pull/1414) other options that could\\nonly be previously set via server properties to\\n`ClientCapabilities.experimental`. So settings like which format you\'d like the\\nDoctor to return could now be set directly by the client without need to\\nbootstrap the server with a specific property. This allowed for much easier\\nconfiguration than was previously had.\\n\\n## InitializationOptions\\n\\nOnce it was clear that configuring Metals via the client was desirable, a closer\\nlook was taken at `InitializationOptions` that can be passed in during the\\n[`initialize`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nrequest. Since any value is able to be passed in this way, a decision was made\\nto fully migrate all the possible settings that were previously set as server\\nproperties (except a select few that we\'ll touch on later), and also move all\\nthe of settings that could be set under `experimental` to\\n`InitializationOptions` as well. This ultimately allows for clients to fully\\nconfigured Metals via `InitializationOptions` without the need to set any server\\nproperties. In theory this also meant that you could not use the same Metals\\nexecutable for VS Code, Vim, or Emacs since the server is fully being configured\\nby the client itself. The current settings that can be passed in and their\\ndefaults are explained in detail [here on the\\nwebsite](https://scalameta.org/metals/docs/integrations/new-editor#initializationoptions),\\nbut the interface is as follows:\\n\\n```typescript\\ninterface MetalsInitializationOptions {\\n compilerOptions?: CompilerInitializationOptions;\\n debuggingProvider?: boolean;\\n decorationProvider?: boolean;\\n didFocusProvider?: boolean;\\n doctorProvider?: \\"json\\" | \\"html\\";\\n executeClientCommandProvider?: boolean;\\n globSyntax?: \\"vscode\\" | \\"uri\\";\\n icons?: \\"vscode\\" | \\"octicons\\" | \\"atom\\" | \\"unicode\\";\\n inputBoxProvider?: boolean;\\n isExitOnShutdown?: boolean;\\n isHttpEnabled?: boolean;\\n openFilesOnRenameProvider?: boolean;\\n quickPickProvider?: boolean;\\n renameFileThreshold?: number;\\n slowTaskProvider?: boolean;\\n statusBarProvider?: \\"on\\" | \\"off\\" | \\"log-message\\" | \\"show-message\\";\\n treeViewProvider?: boolean;\\n openNewWindowProvider?: boolean;\\n}\\n```\\n```typescript\\ninterface CompilerInitializationOptions {\\n completionCommand?: string;\\n isCompletionItemDetailEnabled?: boolean;\\n isCompletionItemDocumentationEnabled?: boolean;\\n isCompletionItemResolve?: boolean;\\n isHoverDocumentationEnabled?: boolean;\\n isSignatureHelpDocumentationEnabled?: boolean;\\n overrideDefFormat?: \\"ascii\\" | \\"unicode\\";\\n parameterHintsCommand?: string;\\n snippetAutoIndent?: boolean;\\n}\\n```\\n\\nYou\'ll notice that this allows for a much finer grained configuration if the\\nclient chooses to set certain values. Everything from whether or not the Scala\\nPresentation Compiler should populate the `SignatureHelp.documentation` to\\nwhether or not the editor supports opening a new window after using the\\n`metals.new-scala-project` command can now be easily configured. Fully\\nconfiguring Metals through `InitializationOptions` is now the recommended way to\\nconfigure Metals.\\n\\n## Are there still server properties?\\n\\nWhile all of the old server properties still exist for Metals, it\'s no longer\\nrecommended to use them to configure Metals. However, there are still a few\\nserver properties that remain only server properties since they are not meant to\\nbe widely used, and aren\'t exactly recommended to use for the average user. You\\ncan see an up to date list of these [here on the\\nwebsite](https://scalameta.org/metals/docs/integrations/new-editor#metals-server-properties)\\nand what functionality they provide.\\n\\n## Conclusion\\n\\nAs of Metals 0.9.2 it\'s fully possibly for all clients to use a default\\nbootstrapped Metals that can fully be configured via `InitializationOptions`.\\nThere is a freshly updated [Integrating a new\\neditor](https://scalameta.org/metals/docs/editors/new-editor.html) section on\\nthe website to help explain how to exactly configure a client for usage with\\nMetals. As always, don\'t hesitate to reach out on any of the various channels\\nlocated in the footer or submit an issue to either improve documentation or to\\nlog a bug. Also as a reminder, there is a separate repo for\\n[metals-feature-requests](https://github.com/scalameta/metals-feature-requests).\\n\\n\\nHappy coding with Metals!"},{"id":"/2020/07/15/lithium","metadata":{"permalink":"/metals/blog/2020/07/15/lithium","source":"@site/blog/2020-07-15-lithium.md","title":"Metals v0.9.2 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.2, which mostly adds support","date":"2020-07-15T00:00:00.000Z","formattedDate":"July 15, 2020","tags":[],"readingTime":2.47,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.2 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"},"nextItem":{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.2, which mostly adds support\\nfor Scala 2.12.12.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release50
Merged PRs24
Contributors6
Closed issues14
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/25?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.12.12 support\\n- Reset notifications popup\\n\\n## Reset notifications popup\\n\\nPreviously, when either a build tool was chosen for a workspace or the build\\nimport notification was dismissed the only way to revert that choice was to\\ndelete the `.metals` directory. In this release we added two different ways to\\nreset it:\\n\\n- via a new button available in the doctor (Visual Studio Code):\\n\\n![doctor](https://i.imgur.com/Vz3vMpA.png)\\n\\n- using a new command `metals.reset-choice` (other editors):\\n\\n![command](https://user-images.githubusercontent.com/13974112/87051515-f3d70e00-c1ff-11ea-8758-dcd2283b114a.gif)\\n\\n## Miscellaneous improvements\\n\\n- Named parameters completions fixed to work in cases where the method was\\n defined later in the class.\\n- Add option to not add the Bloop plugin in Gradle builds. This might be useful\\n if you already define Bloop plugin in your workspace, otherwise it\'s not\\n recommended.\\n- Find all templates from the giter8 wiki page for the New Project Provider\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.1..v0.9.2\\nChris Kipp\\nKrzysztof Bochenek\\nTomasz Godzik\\nJorge Vicente Cantero\\nClaudio Bley\\nRobin Raju\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.2](https://github.com/scalameta/metals/tree/v0.9.2) (2020-07-15)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.1...v0.9.2)\\n\\n**Merged pull requests:**\\n\\n- Update interface to 0.0.24\\n [\\\\#1918](https://github.com/scalameta/metals/pull/1918)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.6.0\\n [\\\\#1920](https://github.com/scalameta/metals/pull/1920)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.1\\n [\\\\#1921](https://github.com/scalameta/metals/pull/1921)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.2.7\\n [\\\\#1919](https://github.com/scalameta/metals/pull/1919)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-23\\n [\\\\#1917](https://github.com/scalameta/metals/pull/1917)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update new-editor docs.\\n [\\\\#1914](https://github.com/scalameta/metals/pull/1914)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala 2.12.12\\n [\\\\#1907](https://github.com/scalameta/metals/pull/1907)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt version up to 2.6.3.\\n [\\\\#1910](https://github.com/scalameta/metals/pull/1910)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix missing completionCommand\\n [\\\\#1913](https://github.com/scalameta/metals/pull/1913)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove remants of fastpass.\\n [\\\\#1912](https://github.com/scalameta/metals/pull/1912)\\n ([ckipp01](https://github.com/ckipp01))\\n- small refactoring DoctorFormat\\n [\\\\#1906](https://github.com/scalameta/metals/pull/1906)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Don\'t filter out named parameters for methods defined later in a class\\n [\\\\#1901](https://github.com/scalameta/metals/pull/1901)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve gradle-bloop integration\\n [\\\\#1902](https://github.com/scalameta/metals/pull/1902)\\n ([jvican](https://github.com/jvican))\\n- Migrate final properties over to `InitializationOptions`.\\n [\\\\#1903](https://github.com/scalameta/metals/pull/1903)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove gson runtime reflection with manual reads for configuration.\\n [\\\\#1898](https://github.com/scalameta/metals/pull/1898)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure we take into account all templates from the wiki page\\n [\\\\#1899](https://github.com/scalameta/metals/pull/1899)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reset notifications popup\\n [\\\\#1897](https://github.com/scalameta/metals/pull/1897)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Reset notifications popup\\n [\\\\#1897](https://github.com/scalameta/metals/pull/1897)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Document -version flag and log clientType\\n [\\\\#1893](https://github.com/scalameta/metals/pull/1893)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update Vim docs and fix various typos\\n [\\\\#1892](https://github.com/scalameta/metals/pull/1892)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix unit test failure on Oracle JDK 8\\n [\\\\#1888](https://github.com/scalameta/metals/pull/1888)\\n ([robinraju](https://github.com/robinraju))\\n- Show imports in worksheet dependency example.\\n [\\\\#1882](https://github.com/scalameta/metals/pull/1882)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add `--version` command line option\\n [\\\\#1883](https://github.com/scalameta/metals/pull/1883)\\n ([avdv](https://github.com/avdv))\\n- Add release notes for 0.9.1 version\\n [\\\\#1858](https://github.com/scalameta/metals/pull/1858)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/07/01/lithium","metadata":{"permalink":"/metals/blog/2020/07/01/lithium","source":"@site/blog/2020-07-01-lithium.md","title":"Metals v0.9.1 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.1, which focused on fixing","date":"2020-07-01T00:00:00.000Z","formattedDate":"July 1, 2020","tags":[],"readingTime":11.625,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.1 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"},"nextItem":{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.1, which focused on fixing\\nissues with the recently released Scala 3 support, Ammonite support and a couple\\nof new features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release287
Merged PRs106
Contributors16
Closed issues49
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/24?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Ammonite support\\n- New project provider\\n- Worksheet dependency support\\n- Multiline string improvements\\n- Scala versions 2.13.3, 0.24.0, 0.25.0-RC2 support\\n- Dropped support for Scala 0.23.0 and deprecated the 0.24.0-RC1 version.\\n- Multiple build tool selection within a workspace\\n\\n## Ammonite support\\n\\nThanks to great work by [alexarchambault](https://github.com/alexarchambault) we\\nnow support [Ammonite](https://ammonite.io) script files. Ammonite enables you\\nto create scripts that can easily be ran from the command line, without the\\noverhead of setting up a build tool while still allowing you to download and use\\ndependencies.\\n\\nThe support includes most of the LSP features such as diagnostics, completions,\\nreferences, go to definition, but does not include running or debugging the\\nscripts. This new feature works by starting an additional Ammonite BSP server\\nthat compiles the scripts and provides additional information about them such as\\nScala version or information about the added dependencies. You can change the\\ndefault JVM parameters for the server such as `-Xmx`, which will limit the used\\nmemory in Metals settings. These can be added via your metals editor extension\\nusing the newly created `metals.ammoniteJvmProperties` setting. The Ammonite\\nserver can also be started and stopped manually using the new commands\\n`ammonite-start` and `ammonite-stop`.\\n\\nEach of the scripts first need to be imported into the Ammonite BSP server,\\nwhich can be done manually by clicking on the pop up whenever a new script is\\nopened or selecting automatic import at the start, which will import any open\\nscripts automatically.\\n\\nIt\'s important to note that this is an early approach to Ammonite support, which\\nmight still require some improvements both on the Metals and Ammonite side. You\\ncan learn more about the new feature or join the discussion in the\\n[blogpost](https://contributors.scala-lang.org/t/ammonite-support-in-metals/4306)\\non the Scala contributors forum.\\n\\nSome of the notable features of Ammonite scripts are:\\n\\n- Import other scripts: Metals provides completions to select existing files\\n based on the filesystem information\\n\\n```scala\\n//main.sc\\nimport $file.hello-world\\nval greeting = hello-world.greeting\\n\\n//hello-world.sc\\nval greeting = \\"Hello world!\\"\\n```\\n\\n- Import dependencies:\\n\\n```scala\\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\\nimport scalatags.Text.all._\\n\\nval rendered = div(\\"Moo\\").render\\n```\\n\\n- Set Scala version:\\n\\n```scala\\n// scala $scalaVersion\\n\\nimport scala.util.Properties\\n\\npprint.log(Properties.releaseVersion)\\n```\\n\\nThe Scala version is independent from any build tool used in the workspace and\\nwithout specifying the exact version it will use the default Ammonite Scala\\nversion.\\n\\nTo learn more about Ammonite please visit the documentation website at\\n[https://ammonite.io](https://ammonite.io).\\n\\n## Worksheet dependency support\\n\\nIn addition to Ammonite support, which will be useful to anyone interested in\\nScala scripting, we\'ve also improved the support for Metals Scala worksheets.\\nThanks to the efforts of [olafurpg](https://github.com/olafurpg) in\\n[mdoc](https://scalameta.org/mdoc/), which powers worksheets, users are now able\\nto import dependencies directly inside of their Scala worksheet with completions\\nand diagnostics working right from the start.\\n\\n![worksheet-imports](https://i.imgur.com/qXgdNWM.gif)\\n\\nYou can add them using the following syntax:\\n\\n```\\n$ivy.`organisation::artifact:version`\\n```\\n\\nFor example:\\n\\n```\\n$ivy.`com.lihaoyi::scalatags:0.9.0`\\n```\\n\\n`::` is the same as `%%` in sbt, which will append the current Scala binary\\nversion to the artifact name.\\n\\n## New project provider\\n\\nCreating new Scala projects is usually a bit of work to get started, which is a\\nproblem for both beginners and experts alike. Normally you don\'t want to spend a\\nlot of time figuring out the best setup for starting with a new technology or\\nthe language itself.\\n\\nThere are great tools like [giter8](http://www.foundweekends.org/giter8/), which\\nis used in the `sbt new` command, that enables people to use already existing\\nScala templates found on Github such as\\n[https://github.com/scala/scala-seed.g8](https://github.com/scala/scala-seed.g8).\\nThe problem is when you don\'t use sbt or you don\'t know the exact template you\\nwant to use.\\n\\nTo address this, we\'ve added an additional command called `New Scala Project`\\nthat enables users to reuse the same mechanism from the comfort of your editor.\\nFirstly, you can choose from existing templates, either curated by the Metals\\nteam, ones existing on the giter8\\n[wiki page](https://github.com/foundweekends/giter8/wiki/giter8-templates) or\\nalternatively an entirely custom template. Then you can choose the exact\\nlocation for the new project and the name. Afterwards, Metals will run giter8 to\\ncreate the project and offer to open that new project.\\n\\n![new-project](https://user-images.githubusercontent.com/3807253/81842954-2d1b3680-954d-11ea-934a-96fe53cafeb9.gif)\\n\\nThe command is also available as a button in the welcome view of the Visual\\nStudio Code Metals extension, which means it will be visible in case there are\\nno imported projects in the current workspace.\\n\\nThe first curated templates were chosen by the team, however we are happy to\\ninclude more so that it\'s easier for people to discover new amazing libraries or\\nframeworks.\\n\\n## Multiline string improvements\\n\\nThere are two new quality of life improvements when it comes to multiline\\nstrings. Firstly, thanks to [mlachkar](https://github.com/mlachkar) we now\\nautomatically add `stripMargin` method invocation when using newline in a\\nmultiline string if that string uses `|` and has no existing `stripMargin`:\\n\\n![strip-margin](https://i.imgur.com/Z2Q1glN.gif)\\n\\nThis behaviour can be disabled in Metals settings using\\n`metals.enableStripMarginOnTypeFormatting`.\\n\\nAnother useful improvement coming from [colineto](https://github.com/colineto)\\nis a new code action that can easily convert single string into the traditional\\nmultiline string with `|` and `stripMargin` at the end:\\n\\n![new-action](https://i.imgur.com/5ohRcl9.gif)\\n\\n## Multiple workspace build tools selection\\n\\nPreviously, Metals would only pick up a single build tool in a workspace even if\\nin reality there were multiple available ones. To help with that we added a\\nprompt to choose the desired build tool in workspaces with multiple build files.\\n\\nAn example situation where this is needed is when you have a project with both a\\n`build.sbt` and `build.sc`, but the `build.sc` is what you use for your build\\ndefinition. Previously if both were detected, it was automatically considered an\\nSbt workspace, however now it\'s possible to choose.\\n\\n![multiple-build-tool](https://i.imgur.com/pAgZK7u.gif)\\n\\nIn case of multiple build tools in single workspace you can see which one was\\nused to import project in \'Metals Doctor\' view. If you choose the wrong one, or\\nchange the main build tool later on, you\'ll need to remove the .metals/\\ndirectory to reset the decisions.\\n\\nThis great new feature was contributed by [ckipp01](https://github.com/ckipp01)!\\n\\n## Miscellaneous improvements\\n\\n- Fix run/debug in Maven workspaces.\\n- Always run newest sbt version if none is specified.\\n- Fix find references for Scala 3 on Windows.\\n- Pick jvm targets with higher priority when using run/debug without specifying\\n the exact build target.\\n- Make breakpoints work properly in Scala 3 and in case of nested classes.\\n- Exhaustive pattern matching in the case of sealed upper bound types.\\n- Compile before renaming instead of showing an error.\\n- Fix issue with symlinked source directories.\\n- Fix missing references for synthetic companion objects.\\n- Automatically add -J if it doesn\'t already exist to java properties when\\n running or debugging.\\n- Fix go to definition for JDK 11 library sources.\\n- Keep modifiers when implementing abstract members.\\n- Fix auto imports position when using package objects and multiple package\\n definitions.\\n- Fix issues in files with Scala 2.13 specific syntax like for example\\n underscore numeric literals (`val num = 100_000`).\\n- Always run Mill in interactive mode.\\n- Improvements to hover in Scala 3 files.\\n- Make sure auto imports are correct for Ammonite scripts\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.0..v0.9.1\\nTomasz Godzik\\nScala Steward\\nAlexandre Archambault\\nChris Kipp\\n\u0141ukasz Trojanowski\\nColine Thomas\\nKrzysztof Bochenek\\nMeriam Lachkar\\nbettyblue\\nDaniel King\\nNaoki Takezoe\\nOlafur Pall Geirsson\\nWin Wang\\nMartin Duhem\\nag91\\nfaizk\\n\u0141ukasz Wawrzyk\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.1](https://github.com/scalameta/metals/tree/v0.9.1) (2020-07-01)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.0...v0.9.1)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.3\\n [\\\\#1857](https://github.com/scalameta/metals/pull/1857)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.6.1\\n [\\\\#1879](https://github.com/scalameta/metals/pull/1879)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.3\\n [\\\\#1878](https://github.com/scalameta/metals/pull/1878)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.1.0\\n [\\\\#1877](https://github.com/scalameta/metals/pull/1877)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.13\\n [\\\\#1876](https://github.com/scalameta/metals/pull/1876)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.0\\n [\\\\#1875](https://github.com/scalameta/metals/pull/1875)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.1\\n [\\\\#1873](https://github.com/scalameta/metals/pull/1873)\\n ([scala-steward](https://github.com/scala-steward))\\n- Ensure the edit positions are correct for autoImports with Ammonite.\\n [\\\\#1871](https://github.com/scalameta/metals/pull/1871)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in a preparePr alias.\\n [\\\\#1867](https://github.com/scalameta/metals/pull/1867)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump default mill version\\n [\\\\#1861](https://github.com/scalameta/metals/pull/1861)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mdoc to 2.2.3 and power completions with worksheet\'s classpath\\n [\\\\#1856](https://github.com/scalameta/metals/pull/1856)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add jvm parameters configuration for Ammonite\\n [\\\\#1853](https://github.com/scalameta/metals/pull/1853)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove fastpass command line tool\\n [\\\\#1833](https://github.com/scalameta/metals/pull/1833)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Bloop to fix issues when using run/debug in Maven workspaces\\n [\\\\#1850](https://github.com/scalameta/metals/pull/1850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Added completions for \\\\$file in ammonite scripts\\n [\\\\#1846](https://github.com/scalameta/metals/pull/1846)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt up to 2.6.1\\n [\\\\#1847](https://github.com/scalameta/metals/pull/1847)\\n ([ckipp01](https://github.com/ckipp01))\\n- In case of no defined sbt version run bloopInstall with the newest one\\n [\\\\#1843](https://github.com/scalameta/metals/pull/1843)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump up the scalafmt version for the codebase\\n [\\\\#1840](https://github.com/scalameta/metals/pull/1840)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix adding unmanaged source directories for mtags3\\n [\\\\#1842](https://github.com/scalameta/metals/pull/1842)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove extra nested scala directory under `scala-3`\\n [\\\\#1841](https://github.com/scalameta/metals/pull/1841)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update dotty to 0.25.0-RC-2 and 0.24.0\\n [\\\\#1839](https://github.com/scalameta/metals/pull/1839)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in explicit `TextDocumentSyncOptions`.\\n [\\\\#1837](https://github.com/scalameta/metals/pull/1837)\\n ([ckipp01](https://github.com/ckipp01))\\n- Changes for decorationProvider if `isHttpEnabled` is true.\\n [\\\\#1834](https://github.com/scalameta/metals/pull/1834)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in spacing in vscode icons only.\\n [\\\\#1832](https://github.com/scalameta/metals/pull/1832)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit to 0.7.9\\n [\\\\#1828](https://github.com/scalameta/metals/pull/1828)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use g8 templates to provide \\"New Scala Project\\"\\n [\\\\#1728](https://github.com/scalameta/metals/pull/1728)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update coursier to 2.0.0-RC6-21\\n [\\\\#1822](https://github.com/scalameta/metals/pull/1822)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark ammonite suites flaky\\n [\\\\#1830](https://github.com/scalameta/metals/pull/1830)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.4.4\\n [\\\\#1825](https://github.com/scalameta/metals/pull/1825)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.3.Final\\n [\\\\#1824](https://github.com/scalameta/metals/pull/1824)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.3\\n [\\\\#1821](https://github.com/scalameta/metals/pull/1821)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.15\\n [\\\\#1829](https://github.com/scalameta/metals/pull/1829)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.2\\n [\\\\#1827](https://github.com/scalameta/metals/pull/1827)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.2.5\\n [\\\\#1823](https://github.com/scalameta/metals/pull/1823)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.17\\n [\\\\#1820](https://github.com/scalameta/metals/pull/1820)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite to fix issues with file watching\\n [\\\\#1819](https://github.com/scalameta/metals/pull/1819)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with semanticdb on windows\\n [\\\\#1818](https://github.com/scalameta/metals/pull/1818)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update directories to 12\\n [\\\\#1813](https://github.com/scalameta/metals/pull/1813)\\n ([tgodzik](https://github.com/tgodzik))\\n- Pick the most valued build target instead of least for running or debugging\\n [\\\\#1811](https://github.com/scalameta/metals/pull/1811)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for breakpoints in toplevel methods in Dotty\\n [\\\\#1808](https://github.com/scalameta/metals/pull/1808)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow for exhaustive pattern matching in case of sealed upper bound types\\n [\\\\#1787](https://github.com/scalameta/metals/pull/1787)\\n ([ltrojanowski](https://github.com/ltrojanowski))\\n- compile before rename instead of checking if compilation is not ongoing\\n [\\\\#1754](https://github.com/scalameta/metals/pull/1754)\\n ([ltrojanowski](https://github.com/ltrojanowski))\\n- Bug-fix: onTypeFormatting is adding .stripMargin even if it\'s present\\n [\\\\#1806](https://github.com/scalameta/metals/pull/1806)\\n ([mlachkar](https://github.com/mlachkar))\\n- Fix ammonite suite flakiness\\n [\\\\#1803](https://github.com/scalameta/metals/pull/1803)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use parser for detecting enclosing class for a breakpoint\\n [\\\\#1783](https://github.com/scalameta/metals/pull/1783)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update nuprocess to 2.0.1\\n [\\\\#1792](https://github.com/scalameta/metals/pull/1792)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issues with symlinks in source directories\\n [\\\\#1784](https://github.com/scalameta/metals/pull/1784)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update undertow-core to 2.1.1.Final\\n [\\\\#1794](https://github.com/scalameta/metals/pull/1794)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.0\\n [\\\\#1790](https://github.com/scalameta/metals/pull/1790)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.1.Final\\n [\\\\#1796](https://github.com/scalameta/metals/pull/1796)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.13\\n [\\\\#1800](https://github.com/scalameta/metals/pull/1800)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.12\\n [\\\\#1797](https://github.com/scalameta/metals/pull/1797)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-19\\n [\\\\#1793](https://github.com/scalameta/metals/pull/1793)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-dynamic to 2.5.3\\n [\\\\#1799](https://github.com/scalameta/metals/pull/1799)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.4.3\\n [\\\\#1795](https://github.com/scalameta/metals/pull/1795)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.2\\n [\\\\#1791](https://github.com/scalameta/metals/pull/1791)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix missing synthetic references\\n [\\\\#1727](https://github.com/scalameta/metals/pull/1727)\\n ([faizk](https://github.com/faizk))\\n- Use onTypeFormatting to create multiline string\\n [\\\\#1753](https://github.com/scalameta/metals/pull/1753)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add in setting to vim docs to help recognize \\\\*.sc as Scala files\\n [\\\\#1785](https://github.com/scalameta/metals/pull/1785)\\n ([ckipp01](https://github.com/ckipp01))\\n- Automatically add -J to jvm properties and make sure run JVM targets fists\\n [\\\\#1781](https://github.com/scalameta/metals/pull/1781)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure to persist users choice of build tool\\n [\\\\#1779](https://github.com/scalameta/metals/pull/1779)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove logging from ClasspathLoader\\n [\\\\#1778](https://github.com/scalameta/metals/pull/1778)\\n ([tgodzik](https://github.com/tgodzik))\\n- Organize imports with Scalafix\\n [\\\\#1775](https://github.com/scalameta/metals/pull/1775)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add file watcher for the standalone ammonite scripts\\n [\\\\#1771](https://github.com/scalameta/metals/pull/1771)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle workspaces with multiple build files.\\n [\\\\#1758](https://github.com/scalameta/metals/pull/1758)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add early support for Ammonite scripts\\n [\\\\#1538](https://github.com/scalameta/metals/pull/1538)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Try to fix breakpoint DAP suites\\n [\\\\#1755](https://github.com/scalameta/metals/pull/1755)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support java files inside java modules for go to definition\\n [\\\\#1763](https://github.com/scalameta/metals/pull/1763)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep modifiers when implementing abstract members\\n [\\\\#1762](https://github.com/scalameta/metals/pull/1762)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Export Pants 3rdparty sources\\n [\\\\#1761](https://github.com/scalameta/metals/pull/1761)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support Pants\' `strict_deps`\\n [\\\\#1716](https://github.com/scalameta/metals/pull/1716)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update coursier to 2.0.0-RC6-16\\n [\\\\#1741](https://github.com/scalameta/metals/pull/1741)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.15\\n [\\\\#1735](https://github.com/scalameta/metals/pull/1735)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.2.0\\n [\\\\#1747](https://github.com/scalameta/metals/pull/1747)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.1\\n [\\\\#1733](https://github.com/scalameta/metals/pull/1733)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.9.10.4\\n [\\\\#1736](https://github.com/scalameta/metals/pull/1736)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.3\\n [\\\\#1737](https://github.com/scalameta/metals/pull/1737)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.5.2\\n [\\\\#1738](https://github.com/scalameta/metals/pull/1738)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.1.0 [\\\\#1739](https://github.com/scalameta/metals/pull/1739)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.2\\n [\\\\#1740](https://github.com/scalameta/metals/pull/1740)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 0.0.22\\n [\\\\#1742](https://github.com/scalameta/metals/pull/1742)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.9.10\\n [\\\\#1743](https://github.com/scalameta/metals/pull/1743)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.0.Final\\n [\\\\#1744](https://github.com/scalameta/metals/pull/1744)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.4.2\\n [\\\\#1745](https://github.com/scalameta/metals/pull/1745)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.10\\n [\\\\#1746](https://github.com/scalameta/metals/pull/1746)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.7 [\\\\#1748](https://github.com/scalameta/metals/pull/1748)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.7.7\\n [\\\\#1749](https://github.com/scalameta/metals/pull/1749)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix CrossDefinitionLspSuite and additional logs to the DAP suites\\n [\\\\#1731](https://github.com/scalameta/metals/pull/1731)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bugfix - formatting for multilines adds pipe in the wrong place\\n [\\\\#1729](https://github.com/scalameta/metals/pull/1729)\\n ([mlachkar](https://github.com/mlachkar))\\n- Remove the declaration of the experimental features in initialize and add\\n `ServerInfo` [\\\\#1730](https://github.com/scalameta/metals/pull/1730)\\n ([ckipp01](https://github.com/ckipp01))\\n- teach metals to accept configuration of range formatting\\n [\\\\#1717](https://github.com/scalameta/metals/pull/1717)\\n ([danking](https://github.com/danking))\\n- Bump scalafmt to 2.5.2 [\\\\#1726](https://github.com/scalameta/metals/pull/1726)\\n ([takezoe](https://github.com/takezoe))\\n- Expose fastpass metadata in .bsp/bloop.json\\n [\\\\#1724](https://github.com/scalameta/metals/pull/1724)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- handle package object in autoImports\\n [\\\\#1722](https://github.com/scalameta/metals/pull/1722)\\n ([colineto](https://github.com/colineto))\\n- code action to make single string multiline with strip margin\\n [\\\\#1685](https://github.com/scalameta/metals/pull/1685)\\n ([colineto](https://github.com/colineto))\\n- Fix issues in files with Scala 2.13 specific syntax\\n [\\\\#1721](https://github.com/scalameta/metals/pull/1721)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Bloop version and update fastpass to new TraceSettings\\n [\\\\#1708](https://github.com/scalameta/metals/pull/1708)\\n ([wiwa](https://github.com/wiwa))\\n- Try to fix Debug Adapter Suites\\n [\\\\#1625](https://github.com/scalameta/metals/pull/1625)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix behavir when the format dialog is closed without choosing action\\n [\\\\#1718](https://github.com/scalameta/metals/pull/1718)\\n ([takezoe](https://github.com/takezoe))\\n- Always run mill in interactive mode and strip the \'--mill-version\'\\n [\\\\#1715](https://github.com/scalameta/metals/pull/1715)\\n ([meshake](https://github.com/meshake))\\n- When no build.properties is available run the recommended sbt version\\n [\\\\#1713](https://github.com/scalameta/metals/pull/1713)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we don\'t download invalid dependencies for Scala 3\\n [\\\\#1711](https://github.com/scalameta/metals/pull/1711)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve Scala 3 hover [\\\\#1701](https://github.com/scalameta/metals/pull/1701)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in some documentation for vim and `InitializationOptions`\\n [\\\\#1688](https://github.com/scalameta/metals/pull/1688)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Mill version to 0.6.2\\n [\\\\#1702](https://github.com/scalameta/metals/pull/1702)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the 0.9.0 Metals version\\n [\\\\#1689](https://github.com/scalameta/metals/pull/1689)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/05/04/lithium","metadata":{"permalink":"/metals/blog/2020/05/04/lithium","source":"@site/blog/2020-05-04-lithium.md","title":"Metals v0.9.0 - Lithium","description":"We are happy to announce the release of Metals v0.9.0, codename \\"Lithium\\", which","date":"2020-05-04T00:00:00.000Z","formattedDate":"May 4, 2020","tags":[],"readingTime":6.505,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.0 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"},"nextItem":{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"}},"content":"We are happy to announce the release of Metals v0.9.0, codename \\"Lithium\\", which\\nmain focus is introducing support for Scala 3 starting with versions 0.23.0 and\\n0.24.0-RC1. We also added support for Scala 2.13.2 and a number of other useful\\nimprovements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release140
Merged PRs45
Contributors14
Closed issues9
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/13?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.13.2 and basic Scala 3 support\\n- Improvements to the Bloop integration\\n- Automatically add \'+\' on newline when inside a string\\n- New Code action: \\"Import all missing symbols\\"\\n\\n## Basic Scala 3 support\\n\\nFor a couple of the last months we have been working on making Metals work with\\nthe Dotty compiler, which will become the new Scala 3. This effort included\\ncontributions to Metals, Bloop as well as to Dotty. Thanks to the great help\\nfrom the Dotty compiler team, we now have an option to generate semanticDB files\\nused for our internal indexes, which allowed some features to work without any\\nchanges to the core code. It is also important to mention that without\\n[jvican](https://github.com/jvican) and his Bloop project, which already\\nsupports Scala 3, all this would have taken a much longer time.\\n\\nThat said, there are some issues that are lacking in the Scala 3 support that\\nare available for 2.x versions. Most notably, we are still missing all of the\\nmore advanced completions, filtering and sorting of completion items or auto\\nimports. There are also some possible issues connected to optional braces and\\ntop level methods features. In the upcoming months we are planning to address\\nmost of these issues and implement the lacking features.\\n\\nYou can find missing features in the\\n[feature requests repository](https://github.com/scalameta/metals-feature-requests/issues?q=is%3Aissue+is%3Aopen+label%3Ascala3)\\nand currently known bugs in the\\n[main Metals repo.](https://github.com/scalameta/metals/issues?q=is%3Aissue+is%3Aopen+label%3A%22Scala+3%22)\\n\\nThe first supported versions will be `0.23.0` and `0.24.0-RC1`, which are the\\nlatest stable and the latest release candidate respectably. We plan to always\\nsupport the latest stable and release candidate until there is a more stable\\nrelease cycle for Scala 3.\\n\\nPlease do report any issues you encounter, especially connected to some new\\nScala 3 features, which will be an immense help to the team.\\n\\n## Improvements related to Bloop/Metals integration\\n\\nThere have been multiple reported issues in the last weeks about hanging\\ncompilation, which can make the Metals workspace hard to use. Our top priority\\nhas been figuring out all the possible issues both in Metals as well as in\\nBloop. Thanks to some fixes done by [jvican](https://github.com/jvican), and\\nsome work on the Metals side on the Bloop integration we\'re hopeful that some of\\nthe issues are becoming less frequent. These fixes are included in this release.\\n\\nWe also reworked the Metals tree view to highlight some commands that a user can\\nuse to fix their workspace as well as added two new commands:\\n\\n- `Clean compile workspace` - clean compile the whole workspace - might be\\n needed in case of broken compiler caches.\\n- `Restart Bloop server` - restart the Bloop build server, which should help\\n with the cases where compilation would hang.\\n\\n ![reworked-tree-view](https://i.imgur.com/PERfNqt.png)\\n\\nEven if those commands help, do not hesitate to report any issues. We are also\\nmonitoring the situation ourselves and investigating all problems encountered.\\n\\n## Automatically add \'+\' on newline inside a string\\n\\nThe Metals team was recently joined by [mlachkar](https://github.com/mlachkar),\\nan engineer from the Scala Center, who already contributed a number of features\\nand bug fixes to the project. Thanks to her, we can now easily enter a newline\\ninside a single line string and that string will be correctly split with an\\nadditional `+`.\\n\\n![split-line](https://i.imgur.com/uhF0MOx.gif)\\n\\n## Code action to import all missing symbols\\n\\nPreviously, it was only available to import one symbol at a time in case of\\nmissing imports. Thanks to [colineto](https://github.com/colineto) we now have\\nthe ability to import everything in bulk for every unambiguous import available.\\nUnambiguous in this case meaning that there is only one possible import to\\nchoose from.\\n\\n![import-all](https://i.imgur.com/mmzgJs7.gif)\\n\\n## Miscellaneous improvements\\n\\n- Added an option to ignore .scalafmt.conf creation message.\\n- Fixed hanging while debugging if workspace had errors.\\n- Fixed issue with folding in non 2.12.11 workspaces.\\n- Turn off \\"Go to parent\\" code lenses by default due to performance problems in\\n large workspaces.\\n- Fixed false parsing errors in 2.13.x workspaces.\\n- Added date string to metals logs.\\n- Fixed issue with additional src directories being created automatically.\\n- Fixed \\"Go to implementation\\" to work with local aliases.\\n- Fixed auto-import issue in package objects.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release! We had a lot of new\\ncontributors doing some really exemplary work.\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.4..v0.9.0\\nAyoub Benali\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nColine Thomas\\nMeriam Lachkar\\nWin Wang\\nElie Poussou\\nKrzysztof Bochenek\\nOlafur Pall Geirsson\\nAleksei Alefirov\\nNaoki Takezoe\\nNathaniel Fischer\\nTomasz Pasternak\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.0](https://github.com/scalameta/metals/tree/v0.9.0) (2020-05-04)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.4...v0.9.0)\\n\\n**Merged pull requests:**\\n\\n- Reworked Bloop connection and Tree View\\n [\\\\#1677](https://github.com/scalameta/metals/pull/1677)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix auto import position when package object inside package\\n [\\\\#1686](https://github.com/scalameta/metals/pull/1686)\\n ([colineto](https://github.com/colineto))\\n- Move additional settings to InitializationOptions\\n [\\\\#1684](https://github.com/scalameta/metals/pull/1684)\\n ([ckipp01](https://github.com/ckipp01))\\n- Improve code lens generation time\\n [\\\\#1679](https://github.com/scalameta/metals/pull/1679)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Don\'t ask .scalafmt.conf creation again\\n [\\\\#1607](https://github.com/scalameta/metals/pull/1607)\\n ([takezoe](https://github.com/takezoe))\\n- Create a `ClientConfig` to contain all configuration\\n [\\\\#1674](https://github.com/scalameta/metals/pull/1674)\\n ([ckipp01](https://github.com/ckipp01))\\n- Handle return to line in strings in OnTypeFormatting\\n [\\\\#1611](https://github.com/scalameta/metals/pull/1611)\\n ([mlachkar](https://github.com/mlachkar))\\n- Bump Bloop version to check if it solves issues with hanging compilation\\n [\\\\#1680](https://github.com/scalameta/metals/pull/1680)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve rendering of Pants command errors.\\n [\\\\#1681](https://github.com/scalameta/metals/pull/1681)\\n ([olafurpg](https://github.com/olafurpg))\\n- Allow amending without editor prompt\\n [\\\\#1676](https://github.com/scalameta/metals/pull/1676)\\n ([tpasternak](https://github.com/tpasternak))\\n- Add Bloop zipkin trace debug and verbose settings\\n [\\\\#1678](https://github.com/scalameta/metals/pull/1678)\\n ([wiwa](https://github.com/wiwa))\\n- Update Scala 3 version to 0.23.0\\n [\\\\#1671](https://github.com/scalameta/metals/pull/1671)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that the workspace contains no errors when running\\n [\\\\#1658](https://github.com/scalameta/metals/pull/1658)\\n ([tgodzik](https://github.com/tgodzik))\\n- Turn off go to parent code lenses by default\\n [\\\\#1666](https://github.com/scalameta/metals/pull/1666)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use DefinitionProvider instead of index in RenameProvider\\n [\\\\#1637](https://github.com/scalameta/metals/pull/1637)\\n ([tgodzik](https://github.com/tgodzik))\\n- Feature : Code action Import all missing symbols\\n [\\\\#1652](https://github.com/scalameta/metals/pull/1652)\\n ([coline-lunatech](https://github.com/coline-lunatech))\\n- Add support for Scala 2.13.2\\n [\\\\#1659](https://github.com/scalameta/metals/pull/1659)\\n ([tgodzik](https://github.com/tgodzik))\\n- Properly set the arguments field in sever commands documentation\\n [\\\\#1606](https://github.com/scalameta/metals/pull/1606)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Handle initialization options\\n [\\\\#1626](https://github.com/scalameta/metals/pull/1626)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Remove optimisation to reuse semanticdb jar from the classpath\\n [\\\\#1657](https://github.com/scalameta/metals/pull/1657)\\n ([tgodzik](https://github.com/tgodzik))\\n- update dialect of worksheet to scala213\\n [\\\\#1656](https://github.com/scalameta/metals/pull/1656)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add in updated documentation for vim\\n [\\\\#1651](https://github.com/scalameta/metals/pull/1651)\\n ([ckipp01](https://github.com/ckipp01))\\n- Dynamically read fastpass zipkin properties from fastpass/fastpass.properties\\n [\\\\#1655](https://github.com/scalameta/metals/pull/1655)\\n ([wiwa](https://github.com/wiwa))\\n- Detect Scala 3 main outer methods to create code lenses\\n [\\\\#1640](https://github.com/scalameta/metals/pull/1640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Delete all created folders created for the FileWatcher\\n [\\\\#1629](https://github.com/scalameta/metals/pull/1629)\\n ([mlachkar](https://github.com/mlachkar))\\n- goto Implementations with local alias types\\n [\\\\#1598](https://github.com/scalameta/metals/pull/1598)\\n ([eilite](https://github.com/eilite))\\n- Fix NewFileLspSuite on Windows\\n [\\\\#1624](https://github.com/scalameta/metals/pull/1624)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sublime in the editors overview doc\\n [\\\\#1631](https://github.com/scalameta/metals/pull/1631)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Show date in logs [\\\\#1630](https://github.com/scalameta/metals/pull/1630)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add support for Scala 3\\n [\\\\#1523](https://github.com/scalameta/metals/pull/1523)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bloop-config, bloop-frontend, ... to 1.4.0-RC1-192-72a856b6\\n [\\\\#1615](https://github.com/scalameta/metals/pull/1615)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 29.0-jre\\n [\\\\#1618](https://github.com/scalameta/metals/pull/1618)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.3.3\\n [\\\\#1619](https://github.com/scalameta/metals/pull/1619)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.0.1\\n [\\\\#1621](https://github.com/scalameta/metals/pull/1621)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.8\\n [\\\\#1623](https://github.com/scalameta/metals/pull/1623)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.9\\n [\\\\#1620](https://github.com/scalameta/metals/pull/1620)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.10\\n [\\\\#1617](https://github.com/scalameta/metals/pull/1617)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.14\\n [\\\\#1616](https://github.com/scalameta/metals/pull/1616)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, sbt-munit to 0.7.2\\n [\\\\#1622](https://github.com/scalameta/metals/pull/1622)\\n ([scala-steward](https://github.com/scala-steward))\\n- Don\'t generate timestamp in `.bsp/bloop.json` file.\\n [\\\\#1612](https://github.com/scalameta/metals/pull/1612)\\n ([olafurpg](https://github.com/olafurpg))\\n- Http client delegates `metalsInputBox` to the underlying client\\n [\\\\#1613](https://github.com/scalameta/metals/pull/1613)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Add properties for bloop zipkin tracing to fastpass\\n [\\\\#1582](https://github.com/scalameta/metals/pull/1582)\\n ([wiwa](https://github.com/wiwa))\\n- Update millw.bat [\\\\#1602](https://github.com/scalameta/metals/pull/1602)\\n ([kag0](https://github.com/kag0))\\n- Update installation guide for Sublime\\n [\\\\#1597](https://github.com/scalameta/metals/pull/1597)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add release notes for 0.8.4 version\\n [\\\\#1596](https://github.com/scalameta/metals/pull/1596)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/04/12/mercury","metadata":{"permalink":"/metals/blog/2020/04/12/mercury","source":"@site/blog/2020-04-12-mercury.md","title":"Metals v0.5.0 (Redirect)","description":"This blog post has been moved to","date":"2020-04-12T00:00:00.000Z","formattedDate":"April 12, 2020","tags":[],"readingTime":0.04,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Metals v0.5.0 (Redirect)","unlisted":true},"prevItem":{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"},"nextItem":{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"}},"content":"This blog post has been moved to\\nhttps://scalameta.org/metals/blog/2019/04/12/mercury.html"},{"id":"/2020/04/10/cobalt","metadata":{"permalink":"/metals/blog/2020/04/10/cobalt","source":"@site/blog/2020-04-10-cobalt.md","title":"Metals v0.8.4 - Cobalt","description":"We are happy to announce the release of Metals v0.8.4, which will most likely be","date":"2020-04-10T00:00:00.000Z","formattedDate":"April 10, 2020","tags":[],"readingTime":6.755,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.4 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"},"nextItem":{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"}},"content":"We are happy to announce the release of Metals v0.8.4, which will most likely be\\nthe last 0.8.x version.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release174
Merged PRs55
Contributors9
Closed issues13
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/22?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- navigating to parent method\\n- support for `launch.json`\\n- new \\"Create new symbol\\" code action\\n- miscellaneous improvements\\n\\n## Navigating to parent method\\n\\nMetals will now calculate if any definition of a method in the current file\\noverrides another method, in which case it will show a new lens next to the\\nmethod\'s position. Once clicked, the user will be able to go to the super\\nmethod. Lenses also link to methods in external dependencies and are displayed\\nin files from libraries. For this new feature to work make sure that you enable\\ncode lenses in your client.\\n\\n![Screenshot 2020-03-10 at 09 24 41](https://user-images.githubusercontent.com/10478402/76293237-fad12c80-62b0-11ea-9952-d8b536ffd374.png)\\n\\nIf they are found to be disturbing your workflow they can be easily disabled via\\nthe `metals.superMethodLensesEnabled` configuration option - they are enabled by\\ndefault. For example in Visual Studio Code:\\n\\n![Screenshot 2020-03-09 at 16 24 21](https://user-images.githubusercontent.com/10478402/76293133-cbbabb00-62b0-11ea-84be-06c992af768b.png)\\n\\nThese new lenses should be quick to calculate but if you notice significant\\nslowdown you can also disable them, since when disabled they are not only not\\ndisplayed but also not calculated at all.\\n\\nThere is also an exposed server command `goto-super-method` that can be mapped\\nand used through shortcut in Visual Studio Code.\\n\\n![Screenshot 2020-03-10 at 09 38 49](https://user-images.githubusercontent.com/10478402/76294356-fd348600-62b2-11ea-880e-7074df2928a6.png)\\n\\nIt is possible to also navigate the whole inheritance hierachy at once using the\\nnew `super-method-hierarchy` command.\\n\\n![super-hierarchy](https://user-images.githubusercontent.com/10478402/76294832-de82bf00-62b3-11ea-847d-bc1d94136671.gif)\\n\\nThis new command can be invoked on a method definition. It calculates super\\nmethod hierarchy and if more than one position is found it displays a quickPick\\nwindow (same as the new scala file feature) which displays all super methods and\\nallows a user to select one and jump to its definition.\\n\\nAs an example in Visual Studio Code it can be bound to a shortcut this way:\\n\\n![Screenshot 2020-03-10 at 09 48 55](https://user-images.githubusercontent.com/10478402/76295136-5d77f780-62b4-11ea-87bc-1d25c3e6d586.png)\\n\\nThanks to [kpbochenek](https://github.com/kpbochenek) from VirtusLab for this\\nnew feature!\\n\\n## Support for \'launch.json\'\\n\\nPreviously, it was only possible to launch main classes or tests via code lenses\\nthat would appear above a particular class. Now, we add a way for a user to be\\nable specify the name of the the class or test to run. We will then\\nautomatically try to detect the build target, which that class/test belongs to\\nand run it. In this release, we also add a way to specify the main class\\narguments.\\n\\n![launch_debug3](https://user-images.githubusercontent.com/10850363/78788713-73103800-79ac-11ea-94b3-2e2d898992e4.gif)\\n\\nWhile this will be primarily useful for the Visual Studio Code Metals extension,\\nit will also make it easier for other editors that support the Debug Adapter\\nProtocol. To obtain the uri needed for starting a debug session users can now\\nexecute the `debug-adapter-start` command with params:\\n\\n- for main class\\n\\n```json\\n{\\n \\"mainClass\\": \\"com.foo.App\\",\\n \\"buildTarget\\": \\"foo\\",\\n \\"args\\": [\\"bar\\"]\\n}\\n```\\n\\n- for test class\\n\\n```json\\n{\\n \\"testClass\\": \\"com.foo.FooSuite\\",\\n \\"buildTarget\\": \\"foo\\"\\n}\\n```\\n\\n`buildTarget` is an optional parameter, which might be useful if there are\\nidentically named classes in different modules. A uri will be returned that can\\nbe used by the DAP client.\\n\\nMore information about adding support for debugging is available\\n[here](/metals/docs/integrations/debug-adapter-protocol).\\n\\nThis awesome new feature was contributed by\\n[alekseiAlefirov](https://github.com/alekseiAlefirov) from VirtusLab.\\n\\n## New \'Create new symbol...\' code action\\n\\nPreviously we would propose to import a symbol (if available) in response to\\n\\"missing symbol\\" errors. Now, thanks to [gabro](https://github.com/gabro), we\\nalso propose to create a new class, case class, trait or object.\\n\\n![2020-03-23 17 49 31](https://user-images.githubusercontent.com/691940/77632315-1cd3db80-6f4e-11ea-9283-a2b522cedf1d.gif)\\n\\nThis might be useful when sketching out a domain model and should improve user\\nexperience for fast prototyping.\\n\\n## Miscellaneous improvements\\n\\n- `package` is no longer added on imports from package objects\\n- if user right clicks on a file in Visual Studio Code the option for\\n `New Scala file` also shows now the same as for directories\\n- a multiline string can now be formatted exclusively when using\\n `format selection` on that string\\n- added in `...` to signify truncation in worksheets\\n- fixed hover on Scala App trait and several other cases that showed up on Scala\\n Play projects\\n- messages about upgrading Scala versions are now more valid to the user\\n- references in a file are sorted before showing them\\n- better cursor position when creating new files using the `New Scala file`\\n command\\n- added \\"case class\\" option in NewFilesProvider\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.3..v0.8.4\\nOlafur Pall Geirsson\\nChris Kipp\\nAleksei Alefirov\\nGabriele Petronella\\nTomasz Godzik\\nKrzysztof Bochenek\\nAlexandre Archambault\\nScala Steward\\nMartin Duhem\\nTomasz Pasternak\\n\u0141ukasz Wawrzyk\\nMeriam Lachkar\\nduianto\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.4](https://github.com/scalameta/metals/tree/v0.8.4) (2020-04-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.3...v0.8.4)\\n\\n**Merged pull requests:**\\n\\n- Upgrade to latest Bloop.\\n [\\\\#1595](https://github.com/scalameta/metals/pull/1595)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix `package` added artificially on imports from package objects\\n [\\\\#1593](https://github.com/scalameta/metals/pull/1593)\\n ([tgodzik](https://github.com/tgodzik))\\n- Create a new file next to an existing one if user selected a file\\n [\\\\#1592](https://github.com/scalameta/metals/pull/1592)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix bug around resetting presentation compilers.\\n [\\\\#1590](https://github.com/scalameta/metals/pull/1590)\\n ([olafurpg](https://github.com/olafurpg))\\n- fix indentation for multiline string when using format selection\\n [\\\\#1585](https://github.com/scalameta/metals/pull/1585)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add disabled X-detectExternalProjectFiles flag\\n [\\\\#1589](https://github.com/scalameta/metals/pull/1589)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add VersionedDocsModifier\\n [\\\\#1584](https://github.com/scalameta/metals/pull/1584)\\n ([gabro](https://github.com/gabro))\\n- Remove .bloop symbolic link during Pants export\\n [\\\\#1587](https://github.com/scalameta/metals/pull/1587)\\n ([olafurpg](https://github.com/olafurpg))\\n- Small changes to Pants integration\\n [\\\\#1583](https://github.com/scalameta/metals/pull/1583)\\n ([olafurpg](https://github.com/olafurpg))\\n- \'StartDebugAdapter\' command now accepts user\'s parameters (launch.json)\\n [\\\\#1466](https://github.com/scalameta/metals/pull/1466)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Convert recursive Pants globs into directory entries.\\n [\\\\#1581](https://github.com/scalameta/metals/pull/1581)\\n ([olafurpg](https://github.com/olafurpg))\\n- Project root again [\\\\#1580](https://github.com/scalameta/metals/pull/1580)\\n ([tpasternak](https://github.com/tpasternak))\\n- Small tweaks to Pants export\\n [\\\\#1579](https://github.com/scalameta/metals/pull/1579)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support `extra_jvm_options` from Pants\\n [\\\\#1578](https://github.com/scalameta/metals/pull/1578)\\n ([Duhemm](https://github.com/Duhemm))\\n- Add in ... to signifigy truncation in worksheets\\n [\\\\#1576](https://github.com/scalameta/metals/pull/1576)\\n ([ckipp01](https://github.com/ckipp01))\\n- Small clean-ups [\\\\#1531](https://github.com/scalameta/metals/pull/1531)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Fix typo, double \\"the\\" [\\\\#1573](https://github.com/scalameta/metals/pull/1573)\\n ([duianto](https://github.com/duianto))\\n- Fix: don\'t show super lenses on synthetic methods e.g. toString\\n [\\\\#1572](https://github.com/scalameta/metals/pull/1572)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Forward compiler options in Pants export.\\n [\\\\#1571](https://github.com/scalameta/metals/pull/1571)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make sure we detect scala App trait when using hover.\\n [\\\\#1568](https://github.com/scalameta/metals/pull/1568)\\n ([tgodzik](https://github.com/tgodzik))\\n- More fixes for the Pants integration\\n [\\\\#1570](https://github.com/scalameta/metals/pull/1570)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix recommendations for Scala versions and add better messages.\\n [\\\\#1549](https://github.com/scalameta/metals/pull/1549)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update nuprocess to 2.0.0\\n [\\\\#1564](https://github.com/scalameta/metals/pull/1564)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove deprecations [\\\\#1561](https://github.com/scalameta/metals/pull/1561)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update lsp4j-debug [\\\\#1556](https://github.com/scalameta/metals/pull/1556)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix name of scala-steward file\\n [\\\\#1567](https://github.com/scalameta/metals/pull/1567)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update bloop-config, bloop-frontend, ... to 1.4.0-RC1-162-888454e1\\n [\\\\#1562](https://github.com/scalameta/metals/pull/1562)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.0\\n [\\\\#1566](https://github.com/scalameta/metals/pull/1566)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.6.2\\n [\\\\#1563](https://github.com/scalameta/metals/pull/1563)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add in the scala steward conf file\\n [\\\\#1558](https://github.com/scalameta/metals/pull/1558)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove scalacheck [\\\\#1559](https://github.com/scalameta/metals/pull/1559)\\n ([gabro](https://github.com/gabro))\\n- Add in new url for Chris\\n [\\\\#1560](https://github.com/scalameta/metals/pull/1560)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update coursier dependencies\\n [\\\\#1557](https://github.com/scalameta/metals/pull/1557)\\n ([ckipp01](https://github.com/ckipp01))\\n- A few more dependency updates\\n [\\\\#1555](https://github.com/scalameta/metals/pull/1555)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add FlakyWindows tags to the hover suite\\n [\\\\#1551](https://github.com/scalameta/metals/pull/1551)\\n ([ckipp01](https://github.com/ckipp01))\\n- Dependency updates [\\\\#1554](https://github.com/scalameta/metals/pull/1554)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support to query remote language server as fallback.\\n [\\\\#1547](https://github.com/scalameta/metals/pull/1547)\\n ([olafurpg](https://github.com/olafurpg))\\n- Sort references before returning them\\n [\\\\#1526](https://github.com/scalameta/metals/pull/1526)\\n ([ckipp01](https://github.com/ckipp01))\\n- Several small polishing touches for Pants integration\\n [\\\\#1552](https://github.com/scalameta/metals/pull/1552)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove Pants targets of type \'target\'\\n [\\\\#1550](https://github.com/scalameta/metals/pull/1550)\\n ([olafurpg](https://github.com/olafurpg))\\n- Specify cursor position when creating new files\\n [\\\\#1546](https://github.com/scalameta/metals/pull/1546)\\n ([gabro](https://github.com/gabro))\\n- Change go to parent lenses to true by default\\n [\\\\#1541](https://github.com/scalameta/metals/pull/1541)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc dependencies\\n [\\\\#1544](https://github.com/scalameta/metals/pull/1544)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta dependency\\n [\\\\#1545](https://github.com/scalameta/metals/pull/1545)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit plugin\\n [\\\\#1543](https://github.com/scalameta/metals/pull/1543)\\n ([ckipp01](https://github.com/ckipp01))\\n- Allow multiple \\"Create new symbol\\" actions on a range\\n [\\\\#1540](https://github.com/scalameta/metals/pull/1540)\\n ([gabro](https://github.com/gabro))\\n- Update to latest munit [\\\\#1534](https://github.com/scalameta/metals/pull/1534)\\n ([ckipp01](https://github.com/ckipp01))\\n- Goto super method in hierarchy of inheritance\\n [\\\\#1487](https://github.com/scalameta/metals/pull/1487)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Add one more version to list of known old Bloop versions\\n [\\\\#1533](https://github.com/scalameta/metals/pull/1533)\\n ([olafurpg](https://github.com/olafurpg))\\n- Export `tags` in `BloopPants`\\n [\\\\#1532](https://github.com/scalameta/metals/pull/1532)\\n ([Duhemm](https://github.com/Duhemm))\\n- Add \\"Create new symbol \'\\\\$name\'...\\" code action\\n [\\\\#1528](https://github.com/scalameta/metals/pull/1528)\\n ([gabro](https://github.com/gabro))\\n- Add \\"case class\\" option in NewFilesProvider\\n [\\\\#1525](https://github.com/scalameta/metals/pull/1525)\\n ([gabro](https://github.com/gabro))\\n- Update lsp4j to enable more 3.15 support\\n [\\\\#1522](https://github.com/scalameta/metals/pull/1522)\\n ([ckipp01](https://github.com/ckipp01))\\n- Minor polish for Pants integration\\n [\\\\#1521](https://github.com/scalameta/metals/pull/1521)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t run bloop install when opening intellij\\n [\\\\#1519](https://github.com/scalameta/metals/pull/1519)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Prepare for a new release\\n [\\\\#1518](https://github.com/scalameta/metals/pull/1518)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2020/03/19/cobalt","metadata":{"permalink":"/metals/blog/2020/03/19/cobalt","source":"@site/blog/2020-03-19-cobalt.md","title":"Metals v0.8.3 - Cobalt","description":"We are happy to announce the release of Metals v0.8.3, which main purpose is","date":"2020-03-19T00:00:00.000Z","formattedDate":"March 19, 2020","tags":[],"readingTime":2.74,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.3 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"},"nextItem":{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"}},"content":"We are happy to announce the release of Metals v0.8.3, which main purpose is\\nadding support for the new Scala version, 2.12.11. Additionally, we included a\\ncouple of recent fixes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release61
Merged PRs18
Contributors9
Closed issues14
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/21?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- support for Scala 2.12.11\\n- recent minor improvements\\n\\n## Miscellaneous improvements\\n\\n- fix bug where worksheets got stuck evaluating forever\\n- fix issue where Metals would incorrectly prompt about a Bloop version change\\n- fix a bug where rename symbol produced invalid code for class hierarchies\\n using generics\\n- ignore return type when renaming overriden methods and fields\\n- fix bug where docstrings for workspace sources returned stale documentation\\n- goto definition now works for standalone source files, even if the build has\\n not been imported\\n- fix issue with string alignment when multiple multiline strings were present\\n in a file\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.1..v0.8.3\\nTomasz Godzik\\nOlafur Pall Geirsson\\nChris Kipp\\nKrzysztof Bochenek\\nTomasz Pasternak\\nWin Wang\\n\u0141ukasz Wawrzyk\\nLorenzo Gabriele\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.3](https://github.com/scalameta/metals/tree/v0.8.3) (2020-03-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.1...v0.8.3)\\n\\n**Merged pull requests:**\\n\\n- Undeprecate 2.12.10 [\\\\#1517](https://github.com/scalameta/metals/pull/1517)\\n ([olafurpg](https://github.com/olafurpg))\\n- Always launch IntelliJ in the project\'s root directory\\n [\\\\#1516](https://github.com/scalameta/metals/pull/1516)\\n ([tpasternak](https://github.com/tpasternak))\\n- Generate bloop.settings.json with project refresh command\\n [\\\\#1506](https://github.com/scalameta/metals/pull/1506)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add release notes for v0.8.2 and bump versions\\n [\\\\#1515](https://github.com/scalameta/metals/pull/1515)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not include scala boot library\\n [\\\\#1507](https://github.com/scalameta/metals/pull/1507)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use a custom IDEA launcher under a new flag.\\n [\\\\#1513](https://github.com/scalameta/metals/pull/1513)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add support for Scala 2.12.11\\n [\\\\#1510](https://github.com/scalameta/metals/pull/1510)\\n ([tgodzik](https://github.com/tgodzik))\\n- Only check relevant text for default indent\\n [\\\\#1505](https://github.com/scalameta/metals/pull/1505)\\n ([ckipp01](https://github.com/ckipp01))\\n- Export packagePrefix to bloop\\n [\\\\#1470](https://github.com/scalameta/metals/pull/1470)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Update scalameta to 4.3.4 and fix existing tests\\n [\\\\#1499](https://github.com/scalameta/metals/pull/1499)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add helper to pre-download Metals dependencies.\\n [\\\\#1501](https://github.com/scalameta/metals/pull/1501)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add in new scalafmt default version\\n [\\\\#1504](https://github.com/scalameta/metals/pull/1504)\\n ([ckipp01](https://github.com/ckipp01))\\n- Do not generate synthetic modules\\n [\\\\#1500](https://github.com/scalameta/metals/pull/1500)\\n ([tpasternak](https://github.com/tpasternak))\\n- Fix Bloop sending a restart message when custom version of Bloop is used\\n [\\\\#1491](https://github.com/scalameta/metals/pull/1491)\\n ([tgodzik](https://github.com/tgodzik))\\n- New `create` option:--no-root-project option\\n [\\\\#1490](https://github.com/scalameta/metals/pull/1490)\\n ([tpasternak](https://github.com/tpasternak))\\n- Handle fatal exceptions when evaluating worksheets.\\n [\\\\#1498](https://github.com/scalameta/metals/pull/1498)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update github actions to checkout@v2\\n [\\\\#1492](https://github.com/scalameta/metals/pull/1492)\\n ([tgodzik](https://github.com/tgodzik))\\n- Skip coursier download in fastpass create with --coursier-binary option\\n [\\\\#1486](https://github.com/scalameta/metals/pull/1486)\\n ([wiwa](https://github.com/wiwa))\\n- Don\'t delete bloop.settings.json when exporting Pants builds\\n [\\\\#1488](https://github.com/scalameta/metals/pull/1488)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add ability to specify zipkin url for fastpass\\n [\\\\#1481](https://github.com/scalameta/metals/pull/1481)\\n ([wiwa](https://github.com/wiwa))\\n- During rename matching methods ignore return type\\n [\\\\#1485](https://github.com/scalameta/metals/pull/1485)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix rename for hierarchy with generics\\n [\\\\#1484](https://github.com/scalameta/metals/pull/1484)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Bump mill default version\\n [\\\\#1480](https://github.com/scalameta/metals/pull/1480)\\n ([lolgab](https://github.com/lolgab))\\n- Add in math max when looking for lastIndex\\n [\\\\#1479](https://github.com/scalameta/metals/pull/1479)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in new statusline info from latest release\\n [\\\\#1476](https://github.com/scalameta/metals/pull/1476)\\n ([ckipp01](https://github.com/ckipp01))\\n- Expire docstrings\' cache on save\\n [\\\\#1473](https://github.com/scalameta/metals/pull/1473)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove properties that are no longer needed\\n [\\\\#1475](https://github.com/scalameta/metals/pull/1475)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issue when warning about Bloop version change\\n [\\\\#1472](https://github.com/scalameta/metals/pull/1472)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the 0.8.1 release\\n [\\\\#1468](https://github.com/scalameta/metals/pull/1468)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/02/26/cobalt","metadata":{"permalink":"/metals/blog/2020/02/26/cobalt","source":"@site/blog/2020-02-26-cobalt.md","title":"Metals v0.8.1 - Cobalt","description":"We are excited to announce the release of Metals v0.8.1. This release includes a","date":"2020-02-26T00:00:00.000Z","formattedDate":"February 26, 2020","tags":[],"readingTime":8.75,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.1 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"},"nextItem":{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"}},"content":"We are excited to announce the release of Metals v0.8.1. This release includes a\\nlarge number of bug fixes and some new features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release313
Merged PRs100
Contributors19
Closed issues52
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/19?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/) and\\ngive Metals a try!\\n\\n- insert missing abstract members\\n- new file provider\\n- enable rename preview for Visual Studio Code\\n- debug and run working in Emacs\\n\\n## Insert missing abstract members\\n\\nThanks to yet again amazing work by\\n[tanishiking](https://github.com/tanishiking), we now support the quick fix code\\naction for implementing abstract class members. This code action is available in\\ncase of errors and works in the same way as the recent\\n[\\"Implement all members\\"](https://scalameta.org/metals/blog/#completion-to-add-all-abstract-members)\\ncompletion. It will add any missing abstract members at the top of the class\\nwith the default implementation of ???.\\n\\n![action](https://user-images.githubusercontent.com/9353584/75405616-81047f00-5951-11ea-9972-a12e25b1746a.gif)\\n\\n## New file provider\\n\\nIn the last release we added support for worksheets, which are an easy way to\\nquickly evaluate some code. To create a new worksheet you need to create a file\\nwith the extension `.worksheet.sc`, which was not that easy to figure out. To\\nfix that situation, thanks to\\n[alekseiAlefirov](https://github.com/alekseiAlefirov), we now have a menu to\\ncreate different types of new files including classes, traits, object, package\\nobjects and of course worksheets. At this time it\'s only available in the Visual\\nStudio Code and `coc-metals` extensions.\\n\\n![new-file-provider](https://user-images.githubusercontent.com/10850363/73563467-adfe6880-445d-11ea-89f6-a9a6398034da.gif)\\n\\nYou can also just use the command `Metals: New Scala File`, which will use the\\ncurrent file\'s directory and create the new file there. And additionally, when\\nusing a relative path like `a/b/C` Metals will create all needed directories and\\nadd a proper package declaration to the new file.\\n\\n## Enable rename preview for Visual Studio Code\\n\\nRename previews were added in the last Visual Studio Code\\n[release](https://code.visualstudio.com/updates/v1_42#_rename-preview), which\\nenable users to see what will be changed when a rename is executed. Due to\\noptimization and UX reasons Metals renamed symbols in closed files in the\\nbackground without informing the editor. However, this also causes the previews\\nto be misleading, since they might not be complete.\\n\\nTo fix that situation we now send all the files to VS Code, which then is able\\nto display the preview. We do it, however, for up to 300 files, which threshold\\nwas experimentally estimated. When the number of files reaches over that number,\\nwe revert to the old behavior of not opening closed files. The reason for this\\nis that in some cases for larger numbers of files the editor could hang and\\nbecome unresponsive.\\n\\n## Debug in Emacs\\n\\nIn the last release run and debug support was only available for Visual Studio\\nCode, but thanks to amazing work by the contributors it is now possible to use\\nit in Emacs via [lsp-mode\'s](https://github.com/emacs-lsp/lsp-mode) metals\\nsettings and dap-mode.\\n\\n## Other changes\\n\\nThis release includes mostly fixes and minor features, which is due to the large\\nscope of the last one. We concentrated this last month on stability and making\\nsure everything is up to scratch. Those minor changes included:\\n\\n- use bloop.export-jar-classifiers property when importing the build from sbt\\n- ignore bad compiler options passed by users in order not to break completions\\n- add an override for the Bloop plugin version and promote it to LSP settings\\n- fix onTypeFormatting when used in top level multi-line strings\\n- fix issues when `go to implementation` resolves local symbols\\n- change the non-fatal jar error to debug rather than log warning\\n- add support for worksheets without a build target by defaulting to Metals\\n Scala version\\n- rename file only if the renamed symbol is directly enclosed by a package\\n- fix exhaustive match completion on Java enums\\n- use workspace level Gradle wrapper if present for bloopInstall\\n- fix onTypeFormatting issue with multiple pipes on a line\\n- fix rename issues with backticks\\n- add documentation on how to use proxies and mirrors\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\nAgain, we have some new contributors and a lot of returning ones!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.0..v0.8.1\\nOlafur Pall Geirsson\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nGabriele Petronella\\nRikito Taniguchi\\nAleksei Alefirov\\nJakub Koz\u0142owski\\nArthur McGibbon\\nCarlos Rodriguez Guette\\nDanil Bykov\\nJakob Odersky\\nJoris\\nMartin Duhem\\nRuslans Tarasovs\\nWin Wang\\njoriscode\\nKei Sunagawa\\nZainab Ali\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.1](https://github.com/scalameta/metals/tree/v0.8.1) (2020-02-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.0...v0.8.1)\\n\\n**Merged pull requests:**\\n\\n- add openFilesOnRenameProvider to experimental\\n [\\\\#1463](https://github.com/scalameta/metals/pull/1463)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add new LSP extension \'metals/pickInput\' to implement the \\"Create Scala file\\"\\n command [\\\\#1447](https://github.com/scalameta/metals/pull/1447)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Restart the Bloop server for Pants users if it\'s running a known old version\\n [\\\\#1460](https://github.com/scalameta/metals/pull/1460)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polishing touches on Pants integration\\n [\\\\#1459](https://github.com/scalameta/metals/pull/1459)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix issues discovered while testing out IntelliJ integration.\\n [\\\\#1457](https://github.com/scalameta/metals/pull/1457)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in checkmark for debug on emacs\\n [\\\\#1458](https://github.com/scalameta/metals/pull/1458)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make use of latest Pants and Bloop improvements\\n [\\\\#1452](https://github.com/scalameta/metals/pull/1452)\\n ([olafurpg](https://github.com/olafurpg))\\n- add properties back in [\\\\#1455](https://github.com/scalameta/metals/pull/1455)\\n ([ckipp01](https://github.com/ckipp01))\\n- Record visited Scala files to make sure they are not duplicated\\n [\\\\#1451](https://github.com/scalameta/metals/pull/1451)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move some properties to clientExperimentalCapabilities\\n [\\\\#1414](https://github.com/scalameta/metals/pull/1414)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use proper range for references with backticks\\n [\\\\#1430](https://github.com/scalameta/metals/pull/1430)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we properly handle overflow events even if the path is null\\n [\\\\#1435](https://github.com/scalameta/metals/pull/1435)\\n ([tgodzik](https://github.com/tgodzik))\\n- Rename \\"link\\" subcommand to \\"switch\\"\\n [\\\\#1446](https://github.com/scalameta/metals/pull/1446)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix typo: s/lastVisistedParentTrees/lastVisitedParentTrees/\\n [\\\\#1444](https://github.com/scalameta/metals/pull/1444)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update sbt-munit to 0.5.2\\n [\\\\#1443](https://github.com/scalameta/metals/pull/1443)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.5.0\\n [\\\\#1442](https://github.com/scalameta/metals/pull/1442)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add missing config in Eglot\\n [\\\\#1441](https://github.com/scalameta/metals/pull/1441)\\n ([carlosrogue](https://github.com/carlosrogue))\\n- Update scalafmt-dynamic to 2.4.1\\n [\\\\#1440](https://github.com/scalameta/metals/pull/1440)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark most often failing tests as flaky and fix DefinitionLspSuite test\\n [\\\\#1439](https://github.com/scalameta/metals/pull/1439)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.4.0\\n [\\\\#1437](https://github.com/scalameta/metals/pull/1437)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix download URL for Coursier command-line interface\\n [\\\\#1436](https://github.com/scalameta/metals/pull/1436)\\n ([keiSunagawa](https://github.com/keiSunagawa))\\n- Document emacs integration with debug adapter and tree view protocol\\n [\\\\#1438](https://github.com/scalameta/metals/pull/1438)\\n ([zainab-ali](https://github.com/zainab-ali))\\n- Update bloop-config, bloop-launcher to 1.4.0-RC1-62-d098adda\\n [\\\\#1434](https://github.com/scalameta/metals/pull/1434)\\n ([scala-steward](https://github.com/scala-steward))\\n- Refactor: split Completions.scala into smaller files\\n [\\\\#1423](https://github.com/scalameta/metals/pull/1423)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update bloop-config, bloop-launcher to 1.4.0-RC1-56-a2040035\\n [\\\\#1429](https://github.com/scalameta/metals/pull/1429)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issue with multiple pipes in string\\n [\\\\#1427](https://github.com/scalameta/metals/pull/1427)\\n ([tgodzik](https://github.com/tgodzik))\\n- Return all rename file changes up to a threshold\\n [\\\\#1405](https://github.com/scalameta/metals/pull/1405)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.2.3\\n [\\\\#1426](https://github.com/scalameta/metals/pull/1426)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.8\\n [\\\\#1425](https://github.com/scalameta/metals/pull/1425)\\n ([tgodzik](https://github.com/tgodzik))\\n- Send stackTraces as paths rather than URIs\\n [\\\\#1418](https://github.com/scalameta/metals/pull/1418)\\n ([danilbykov](https://github.com/danilbykov))\\n- Revamp the BloopPants command-line interface.\\n [\\\\#1420](https://github.com/scalameta/metals/pull/1420)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update ujson to 0.9.9 [\\\\#1419](https://github.com/scalameta/metals/pull/1419)\\n ([scala-steward](https://github.com/scala-steward))\\n- CodeAction: insert missing abstract members\\n [\\\\#1379](https://github.com/scalameta/metals/pull/1379)\\n ([tanishiking](https://github.com/tanishiking))\\n- Don\'t insert parentheses when importing\\n [\\\\#1284](https://github.com/scalameta/metals/pull/1284)\\n ([kubukoz](https://github.com/kubukoz))\\n- Change config options to match coc\\n [\\\\#1390](https://github.com/scalameta/metals/pull/1390)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use workspace level Gradle wrapper if present\\n [\\\\#1412](https://github.com/scalameta/metals/pull/1412)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Update sbt-ci-release to 1.5.2\\n [\\\\#1408](https://github.com/scalameta/metals/pull/1408)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.12.2 [\\\\#1410](https://github.com/scalameta/metals/pull/1410)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove check for focused document on non-supporting editors\\n [\\\\#1407](https://github.com/scalameta/metals/pull/1407)\\n ([ckipp01](https://github.com/ckipp01))\\n- Added Command to create new worksheet\\n [\\\\#1339](https://github.com/scalameta/metals/pull/1339)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Add in tree view protocol docs for vim\\n [\\\\#1392](https://github.com/scalameta/metals/pull/1392)\\n ([ckipp01](https://github.com/ckipp01))\\n- Improve logic to merge Pants targets.\\n [\\\\#1400](https://github.com/scalameta/metals/pull/1400)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update pprint to 0.5.9 [\\\\#1403](https://github.com/scalameta/metals/pull/1403)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.2.2\\n [\\\\#1401](https://github.com/scalameta/metals/pull/1401)\\n ([scala-steward](https://github.com/scala-steward))\\n- Do not accept empty string values from the lsp settings\\n [\\\\#1397](https://github.com/scalameta/metals/pull/1397)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable verbose sbt loggers in CI.\\n [\\\\#1399](https://github.com/scalameta/metals/pull/1399)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix exhaustive match completion on Java enums\\n [\\\\#1393](https://github.com/scalameta/metals/pull/1393)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update munit, sbt-munit to 0.4.5\\n [\\\\#1395](https://github.com/scalameta/metals/pull/1395)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add .scalafmt.conf symbolic link when exporting Pants build.\\n [\\\\#1386](https://github.com/scalameta/metals/pull/1386)\\n ([olafurpg](https://github.com/olafurpg))\\n- Avoid long filename for Pants output file.\\n [\\\\#1385](https://github.com/scalameta/metals/pull/1385)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update interface to 0.0.18\\n [\\\\#1383](https://github.com/scalameta/metals/pull/1383)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.8\\n [\\\\#1384](https://github.com/scalameta/metals/pull/1384)\\n ([scala-steward](https://github.com/scala-steward))\\n- Rename file only if renamed symbol is directly enclosed by a package (closes\\n #1380) [\\\\#1382](https://github.com/scalameta/metals/pull/1382)\\n ([kubukoz](https://github.com/kubukoz))\\n- Several improvements to Pants integration\\n [\\\\#1375](https://github.com/scalameta/metals/pull/1375)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include ScalaBuildTarget in ScalaTarget\\n [\\\\#1374](https://github.com/scalameta/metals/pull/1374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade bloop-launcher to nightly version of Bloop.\\n [\\\\#1371](https://github.com/scalameta/metals/pull/1371)\\n ([olafurpg](https://github.com/olafurpg))\\n- Mark flaky tests as flaky.\\n [\\\\#1373](https://github.com/scalameta/metals/pull/1373)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update flyway-core to 6.2.1\\n [\\\\#1372](https://github.com/scalameta/metals/pull/1372)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade to the latest junit-interface.\\n [\\\\#1368](https://github.com/scalameta/metals/pull/1368)\\n ([olafurpg](https://github.com/olafurpg)) Cannot read PR 1352\\n- Add support for rambo worksheets without build target\\n [\\\\#1364](https://github.com/scalameta/metals/pull/1364)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add documentation for using proxy and mirrors\\n [\\\\#1356](https://github.com/scalameta/metals/pull/1356)\\n ([tgodzik](https://github.com/tgodzik))\\n- Merge pull request #1363 from olafurpg/pants-resources\\n [\\\\#1363](https://github.com/scalameta/metals/pull/1363)\\n ([olafurpg](https://github.com/olafurpg)) Cannot read PR 1361\\n- Start recording test reports with sbt-munit\\n [\\\\#1360](https://github.com/scalameta/metals/pull/1360)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update munit to 0.4.3 [\\\\#1358](https://github.com/scalameta/metals/pull/1358)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix testAsync -> test after a logical merge conflict\\n [\\\\#1357](https://github.com/scalameta/metals/pull/1357)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not accept synthetic symbol with matching qualifier\\n [\\\\#1338](https://github.com/scalameta/metals/pull/1338)\\n ([tgodzik](https://github.com/tgodzik))\\n- Replace utest with MUnit\\n [\\\\#1277](https://github.com/scalameta/metals/pull/1277)\\n ([gabro](https://github.com/gabro))\\n- Update interface to 0.0.17\\n [\\\\#1355](https://github.com/scalameta/metals/pull/1355)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.10\\n [\\\\#1351](https://github.com/scalameta/metals/pull/1351)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update nuprocess to 1.2.6\\n [\\\\#1350](https://github.com/scalameta/metals/pull/1350)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several Pants fixes [\\\\#1349](https://github.com/scalameta/metals/pull/1349)\\n ([olafurpg](https://github.com/olafurpg))\\n- Copy jars from Pants export-classpath into Bloop directory.\\n [\\\\#1348](https://github.com/scalameta/metals/pull/1348)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve uri from path properly for setting breakpoints\\n [\\\\#1346](https://github.com/scalameta/metals/pull/1346)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Nu Process to 1.2.5 and directory watcher to 0.9.9\\n [\\\\#1340](https://github.com/scalameta/metals/pull/1340)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.2.0\\n [\\\\#1344](https://github.com/scalameta/metals/pull/1344)\\n ([scala-steward](https://github.com/scala-steward))\\n- Updated \\"unsupported features\\"\\n [\\\\#1343](https://github.com/scalameta/metals/pull/1343)\\n ([rtar](https://github.com/rtar))\\n- fix logic for detected if bloop-sbt is already installed\\n [\\\\#1342](https://github.com/scalameta/metals/pull/1342)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add caching to github actions for Cousier\\n [\\\\#1276](https://github.com/scalameta/metals/pull/1276)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mention debugging in contributing docs\\n [\\\\#1337](https://github.com/scalameta/metals/pull/1337)\\n ([kubukoz](https://github.com/kubukoz))\\n- Make sure the path on windows is a proper URI\\n [\\\\#1335](https://github.com/scalameta/metals/pull/1335)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change last require in PC to warning\\n [\\\\#1333](https://github.com/scalameta/metals/pull/1333)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change the non-fatal jar error to debug rather than log warning\\n [\\\\#1331](https://github.com/scalameta/metals/pull/1331)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues when go to implementation resolves local symbols\\n [\\\\#1330](https://github.com/scalameta/metals/pull/1330)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use actual mill version in predef\\n [\\\\#1307](https://github.com/scalameta/metals/pull/1307)\\n ([jodersky](https://github.com/jodersky))\\n- Update recommended mappings with the latest\\n [\\\\#1289](https://github.com/scalameta/metals/pull/1289)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in fix for onTypeFormatting on top level multi-line strings\\n [\\\\#1329](https://github.com/scalameta/metals/pull/1329)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update lz4-java to 1.7.1\\n [\\\\#1327](https://github.com/scalameta/metals/pull/1327)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add an override for build tool plugin version and promote LSP settings\\n [\\\\#1310](https://github.com/scalameta/metals/pull/1310)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change require to warning for the presentation compiler\\n [\\\\#1324](https://github.com/scalameta/metals/pull/1324)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix version of sbt-metals for pre 0.8.0 instructions\\n [\\\\#1323](https://github.com/scalameta/metals/pull/1323)\\n ([gabro](https://github.com/gabro))\\n- Update sbt, scripted-plugin to 1.3.7\\n [\\\\#1319](https://github.com/scalameta/metals/pull/1319)\\n ([scala-steward](https://github.com/scala-steward))\\n- Typo [\\\\#1318](https://github.com/scalameta/metals/pull/1318)\\n ([joriscode](https://github.com/joriscode))\\n- Fix worksheet gif for cobalt release notes to show proper extension\\n [\\\\#1314](https://github.com/scalameta/metals/pull/1314)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update versions in issue templates\\n [\\\\#1312](https://github.com/scalameta/metals/pull/1312)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use bloop.export-jar-classifiers property\\n [\\\\#1212](https://github.com/scalameta/metals/pull/1212)\\n ([joriscode](https://github.com/joriscode))\\n- Update screen-record of Scaladoc auto-completion in v0.8.0 release-note.\\n [\\\\#1309](https://github.com/scalameta/metals/pull/1309)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update ujson to 0.9.8 [\\\\#1299](https://github.com/scalameta/metals/pull/1299)\\n ([scala-steward](https://github.com/scala-steward))\\n- Link authors\' github accounts for release notes\\n [\\\\#1295](https://github.com/scalameta/metals/pull/1295)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove nix publishing and add a reminder to update version\\n [\\\\#1294](https://github.com/scalameta/metals/pull/1294)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the epic version of Metals :D\\n [\\\\#1278](https://github.com/scalameta/metals/pull/1278)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/01/10/cobalt","metadata":{"permalink":"/metals/blog/2020/01/10/cobalt","source":"@site/blog/2020-01-10-cobalt.md","title":"Metals v0.8.0 - Cobalt","description":"We are excited to announce the release of Metals v0.8.0, codename Cobalt. This","date":"2020-01-10T00:00:00.000Z","formattedDate":"January 10, 2020","tags":[],"readingTime":18.95,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.0 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"},"nextItem":{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"}},"content":"We are excited to announce the release of Metals v0.8.0, codename Cobalt. This\\nrelease includes a large number of new features and improvements, which have\\nbeen under development since September 2019.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release772
Merged PRs214
Contributors19
Closed issues84
New features8
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/9?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community. Recently, Metals has also gained\\nsupport from [Lunatech](https://lunatech.com) with the contributions from\\n[@ckipp01](https://github.com/ckipp01). We are extremely grateful for the\\ngrowing support from the community and businesses alike, which shows in the\\nnumber of new contributions and their quality.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/) and\\ngive Metals a try!\\n\\n- run and debug for tests and main methods\\n- go to implementations\\n- rename symbol\\n- first code action - import missing symbol\\n- worksheet support\\n- improvements for Bloop integration\\n- better support for Vim via coc-metals\\n- completion to add all abstract members\\n- scaladoc auto completion on type `/**`\\n\\n## Debugging\\n\\nIt is now possible to run and test directly from VS Code using the new \\"Run\\",\\n\\"Test\\", \\"Debug\\" and \\"Debug test\\" buttons. The debug buttons support debugging\\nwith breakpoints. It\'s possible to insert breakpoints in Java and Scala sources\\nfor both workspace sources as well as library dependency sources.\\n\\n![debug](https://user-images.githubusercontent.com/3709537/70703645-d0cb9680-1cd0-11ea-9034-a2ef18ffb588.gif)\\n\\nTo support other editors please take a look into the documentation on the Metals\\nwebsite.\\n\\nKnown breakpoints limitations we are working on:\\n\\n- debugging is only supported in VS Code at this moment, we hope to increase the\\n editor support in the future. To support debugging, editors need to implement\\n the\\n [Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/)\\n- breakpoints may not work as expected in all source locations (example: inner\\n classes, ambiguous names, lambdas). Please share your feedback by reporting\\n issues!\\n\\n## Navigation\\n\\n### Go to implementations\\n\\nMetals now implements the textDocument/implementations LSP endpoint, which\\nenables all supported editors to display a list of all implementations of\\nabstract classes or members.\\n\\n![implementations](https://i.imgur.com/rke6iny.gif)\\n\\nFinding implementations also works for symbols outside of the workspace, at the\\nprice of a small performance penalty for the first invocation.\\n\\nThe work done for this feature was also instrumental for implementing the Rename\\nrefactor (see below).\\n\\n## Refactor\\n\\nRefactoring support is one of the most requested features in Metals. In this\\nrelease, we started by implementing the most commonly used refactors: rename and\\nimport missing symbol.\\n\\nWe plan to add more common refactors along the way. Make sure to check out the\\n[ones that have already been proposed](https://github.com/scalameta/metals/issues/707)\\nand consider suggesting other refactors that are essential in your development\\nworkflow.\\n\\n### Rename symbol\\n\\nThanks to the implementation of the `Go to implementations` feature, we were\\nable to work on a proper rename for any workspace symbol that will rename all\\noccurrences of a symbol even if that symbol is a part of a class hierarchy.\\n\\n![rename](https://i.imgur.com/QHaJCr0.gif)\\n\\nThere are a couple of cases in which rename might behave differently based on\\nthe particular symbol being renamed:\\n\\n- renaming an overriden symbol will rename all occurrences for both parent and\\n all children overriding that symbol\\n- java symbols are not renamed\\n- renaming \\"hashCode\\", \\"unapply\\", \\"unary\\\\_!\\", \\"!\\" is not supported, since they\\n change the semantics\\n- methods starting with `:` can only be renamed to ones with the same first\\n character to make sure code compiles afterwards\\n- renaming apply will change all occurrences with just `()` to a full name\\n `.newname()`\\n- if renaming a class with the same name as the file, the file\'s name will also\\n be renamed\\n- companion objects will also be renamed along with their companion classes\\n\\n### Import missing symbol\\n\\nAnother refactor that is commonly requested is the ability to fix a compilation\\nerror by auto-importing a symbol present on the classpath.\\n\\nThis was previously possible in Metals only during completions, but we were\\nlacking what LSP calls a code action.\\n\\nCode actions are context-sensitive actions that are proposed to the user in\\norder to fix an error or to perform a relevant refactor.\\n\\nThanks to the work of [@gabro](https://github.com/gabro) we now have a basic\\narchitecture in place for supporting code actions and we were able to implement\\nthis feature.\\n\\n![missing-symbol](https://user-images.githubusercontent.com/691940/68937367-8839bf80-079c-11ea-8401-4927f6531d24.gif)\\n\\n## Worksheet support\\n\\nThanks to great work by [@olafurpg](https://github.com/olafurpg) and some\\nadditional refinements by\\n[@alekseiAlefirov](https://github.com/alekseiAlefirov), worksheets are now\\navailable in all supported editors.\\n\\nWorksheets are a way to evaluate code in real time to test and prototype any new\\nfeatures in a simple way. To create a worksheet all that is needed is to create\\na file with the extension `.worksheet.sc` within the source directory of your\\nworkspace (like `/src/main/scala`) and Metals will take care of the rest.\\n\\nThere are two ways worksheets are implemented for different editors. One is with\\nan additional extension to LSP called `Decoration extension` and it\'s used by\\nVisual Studio Code and coc-metals.\\n\\nVisual Studio Code:\\n\\n![worksheet](https://i.imgur.com/8c1NkIx.gif)\\n\\nThe other way worksheets are implemented for all other editors that don\'t\\nsupport the `Decoration extension` is using workspace/applyEdits and comments\\nwith hover for larger results.\\n\\nSublime:\\n\\n![worksheet2](https://user-images.githubusercontent.com/10850363/70265661-29fc6d00-179b-11ea-842e-935045e27f96.gif)\\n\\n## Build tools\\n\\nIn order to make the integration between Bloop and Metals a smoother experience,\\nseveral new improvements are included in this release. There\'re based on\\nfeedback from users as well us our own experiences while working with Metals and\\nshould make the overall experience of importing the build and compiling much\\nbetter.\\n\\n### SemanticDB is resolved inside Bloop\\n\\nMetals requires the SemanticDB compiler plugin for a number of features to\\nfunction properly. Because of that it was quite difficult to add it\\nautomatically in all supported build tools even if those supported Bloop itself.\\nPerfect examples are Seed and Fury, which use Bloop to compile code, however\\nadding a plugin automatically would require changes to their core code.\\n\\nCurrently, thanks to\\n[recent changes](https://github.com/scalacenter/bloop/pull/942), Metals can send\\ninformation about the SemanticDB version, which Bloop uses to automatically\\ndownload and configure the SemanticDB scalac plugin. Thanks to that no changes\\nin the build tool itself are needed. Particular changes in regards to build\\ntools are:\\n\\n- Gradle - predef script code used in automatic import is now simplified a lot\\n and works with even more customized workspaces. The only thing it needs to do\\n is add the Bloop plugin and run `bloopInstall`, which can easily also be done\\n manually by the user.\\n- Maven - no manual configuration is now needed. To import automatically just\\n the plugin is needed to be invoked with a setting for downloading sources.\\n- Sbt - the `metals-sbt` plugin is now removed and the Bloop plugin is now added\\n via automatically generated `./project/metals.sbt` file and ran when imported\\n automatically. Thanks to this solution it should be possible to reuse Metals\\n compilation in the upcoming feature for offloading compilation in Sbt.\\n- Mill - logic for adding semanticDB plugin is removed from Mill.\\n- Fury, Seed - no changes were needed for the semanticDB integration and should\\n work out of the box.\\n\\n### Switch to to using Bloop Launcher\\n\\nInstead of using internal Metals logic, we now use the Bloop Launcher, which\\nenables us to either connect to an existing Bsp server or start a new Bloop\\ninstance with the specified version if none is running. This greatly simplified\\nthe connection to Bloop and enabled us to work on further improvements.\\n\\n### Restart Bloop automatically if newer version is needed\\n\\nWhenever Metals is started and connects to the Bloop build server it receives\\ninformation about the version it is running. We compare that version to the one\\nneeded by Metals to make sure everything is properly working. If the current\\nrunning version is older we offer to automatically restart it with the newer\\nversion. However, this may not work if Bloop was installed manually.\\n\\n### Automatically reconnect to Bsp/Bloop if connection is broken\\n\\nThere were numerous issues reported that the connection to Bps or Bloop was\\nbeing lost, which causes Metals to behave erratically due to no compilation\\nbeing run. To solve this, we now detect if the connection is closed and offer\\nthe user the option of automatic reconnection. This works both when the build\\nserver was down and when the connection was just interrupted. It should also\\nsolve the issues on MacOs with dropped connection.\\n\\n## Completions\\n\\n### Completion to add all abstract members\\n\\nIn the past when you were implementing an abstract member in a concrete class,\\nyou\'d see the completion option to override the member. However, if you wanted\\nto implement all of the abstract members, you\'d need to do each one\\nindividually. Now you\'ll see a new completion option in the scenario to\\nImplement all members which will implement all the members at once.\\n\\n![implement-all](https://camo.githubusercontent.com/d698c2adb18a420fcb4259e4264b6417a5e4bb54/68747470733a2f2f692e696d6775722e636f6d2f617942614344552e676966)\\n\\n### Support scaladoc auto completion on type `/**`\\n\\nThanks to recent work by [tanishiking](https://github.com/tanishiking) Metals\\nnow supports auto completing scaladoc for method definition and class definition\\non typing `/**`. More details about it can be found in\\n[the pull request](https://github.com/scalameta/metals/pull/1250).\\n\\n![scaladoc](https://user-images.githubusercontent.com/9353584/72444047-ae0e2f80-37f2-11ea-97b0-c5afac035340.gif)\\n\\n## Better support for Vim via coc-metals\\n\\nIn order to better support the Vim experience with Metals, coc-metals extension\\nwas created which is an extension for coc.nvim, the most popular LSP client for\\nVim and Neovim. With this new extension comes a whole bunch of new features for\\nMetals + Vim users.\\n\\n- automated installation\\n- easier configuration options\\n- easier workspace commands\\n- embedded doctor\\n- input box support\\n- implementation of the decoration protocol (Neovim only)\\n\\n![coc-metals](https://camo.githubusercontent.com/0f56f5a3a874e7c69eff3aaeb2dfe47dc586e3d3/68747470733a2f2f692e696d6775722e636f6d2f7a6f66753456492e706e67)\\n\\n## Support for java 11\\n\\nThanks to [@isomarcte](https://github.com/isomarcte) we now also run all tests\\non JDK 11, which enables us to be more confident about the support for it. With\\nsome additional changes to the documentation we now can fully claim that support\\nfor JDK 11 is available.\\n\\n## Other changes\\n\\nThis version includes approximately 25% of the Metals git commit log, which\\nmakes it impossible to explain every possible improvement in these release\\nnotes. Some other features and fixes that we should mention are:\\n\\n- fix for handling abstract var overrides\\n- add an empty line after the package declaration before import\\n- sort auto-completed exhaustive matches by declaration order\\n- encode the workspace path directory in build digests\\n- tone down \\"No SemanticDB\\" warning\\n- send Tree View update notification on first no-op compilation.\\n- enable `goToDefinition` when cursor is at end of symbol\\n- prioritize build targets with supported Scala versions.\\n- add automatic formatting of multi-line `stripMargin` strings on paste\\n- remove support for 2.12.7\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\nWe had a lot of new contributors that provided us with some amazing new features\\nand with some amazing quality.\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.6..v0.8.0\\n\xd3lafur P\xe1ll Geirsson\\nTomasz Godzik\\nMarek \u017barnowski\\nScala Steward\\nGabriele Petronella\\nChris Kipp\\nRikito Taniguchi\\nSzymon \u015awistun\\nDavid Strawn\\nAyoub Benali\\nAleksei Alefirov\\nAshwin Bhaskar\\nAlexandre Archambault\\nAndy Czerwonka\\nEnrique Molina\\nMarc A. Saegesser\\nSoham Rohankar\\nChris Birchall\\nkostafey\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.0](https://github.com/scalameta/metals/tree/v0.8.0) (2020-01-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.6...v0.8.0)\\n\\n**Merged pull requests:**\\n\\n- Silence noisy FlywayDB logs\\n [\\\\#1293](https://github.com/scalameta/metals/pull/1293)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support scaladoc auto completion on type `/**`\\n [\\\\#1250](https://github.com/scalameta/metals/pull/1250)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add ability to cancel build server connection\\n [\\\\#1292](https://github.com/scalameta/metals/pull/1292)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update utest to 0.7.3 [\\\\#1291](https://github.com/scalameta/metals/pull/1291)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 0.9.7 [\\\\#1290](https://github.com/scalameta/metals/pull/1290)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.5.8 [\\\\#1288](https://github.com/scalameta/metals/pull/1288)\\n ([scala-steward](https://github.com/scala-steward))\\n- Compute \'Import missing symbol\' code actions for all diagnostics in range\\n [\\\\#1286](https://github.com/scalameta/metals/pull/1286)\\n ([gabro](https://github.com/gabro))\\n- Change namespace to scalameta\\n [\\\\#1285](https://github.com/scalameta/metals/pull/1285)\\n ([ckipp01](https://github.com/ckipp01))\\n- Allow only to dismiss build server reconnection for 5 minutes\\n [\\\\#1282](https://github.com/scalameta/metals/pull/1282)\\n ([tgodzik](https://github.com/tgodzik))\\n- Automatically restart bsp connection when connection socket is closed\\n [\\\\#1266](https://github.com/scalameta/metals/pull/1266)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use scala.sys.Process for BloopPants command-line.\\n [\\\\#1280](https://github.com/scalameta/metals/pull/1280)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve IntelliJ application detection when launching Pants bui\u2026\\n [\\\\#1279](https://github.com/scalameta/metals/pull/1279)\\n ([olafurpg](https://github.com/olafurpg))\\n- Further polish to --vscode flag.\\n [\\\\#1274](https://github.com/scalameta/metals/pull/1274)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add --vscode flag to Pants export tool.\\n [\\\\#1274](https://github.com/scalameta/metals/pull/1274)\\n ([olafurpg](https://github.com/olafurpg))\\n- Minor Pants fixes . [\\\\#1273](https://github.com/scalameta/metals/pull/1273)\\n ([olafurpg](https://github.com/olafurpg))\\n- More small changes to the Pants export.\\n [\\\\#1271](https://github.com/scalameta/metals/pull/1271)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use unique name for synthetic Pants projects.\\n [\\\\#1269](https://github.com/scalameta/metals/pull/1269)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update coursier to 2.0.0-RC5-6\\n [\\\\#1267](https://github.com/scalameta/metals/pull/1267)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several improvements to Pants export\\n [\\\\#1265](https://github.com/scalameta/metals/pull/1265)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add separate \\"debug\\" code lens\\n [\\\\#1200](https://github.com/scalameta/metals/pull/1200)\\n ([marek1840](https://github.com/marek1840))\\n- Support breakpoints in java static methods and nested classes\\n [\\\\#1214](https://github.com/scalameta/metals/pull/1214)\\n ([marek1840](https://github.com/marek1840))\\n- Update flyway-core to 6.1.4\\n [\\\\#1264](https://github.com/scalameta/metals/pull/1264)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade Pants sbt testing interface.\\n [\\\\#1257](https://github.com/scalameta/metals/pull/1257)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update coursier to 2.0.0-RC5-5\\n [\\\\#1261](https://github.com/scalameta/metals/pull/1261)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.0.29.Final\\n [\\\\#1262](https://github.com/scalameta/metals/pull/1262)\\n ([scala-steward](https://github.com/scala-steward))\\n- Restart Bloop automatically if newer version is needed\\n [\\\\#1256](https://github.com/scalameta/metals/pull/1256)\\n ([tgodzik](https://github.com/tgodzik))\\n- typo - evaluating [\\\\#1255](https://github.com/scalameta/metals/pull/1255)\\n ([ckipp01](https://github.com/ckipp01))\\n- Failing test case for #1253\\n [\\\\#1254](https://github.com/scalameta/metals/pull/1254)\\n ([gabro](https://github.com/gabro))\\n- Slightly more compliant initialization of codeActionProvider\\n [\\\\#1251](https://github.com/scalameta/metals/pull/1251)\\n ([gabro](https://github.com/gabro))\\n- add in another test for multi-line string formatting\\n [\\\\#1249](https://github.com/scalameta/metals/pull/1249)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update geny to 0.4.2 [\\\\#1248](https://github.com/scalameta/metals/pull/1248)\\n ([gabro](https://github.com/gabro))\\n- Fix multi-line range formatting when on first line\\n [\\\\#1245](https://github.com/scalameta/metals/pull/1245)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-mdoc to 2.1.1\\n [\\\\#1247](https://github.com/scalameta/metals/pull/1247)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.1.1\\n [\\\\#1243](https://github.com/scalameta/metals/pull/1243)\\n ([gabro](https://github.com/gabro))\\n- Remove duplicated Arr in doctor json\\n [\\\\#1241](https://github.com/scalameta/metals/pull/1241)\\n ([ckipp01](https://github.com/ckipp01))\\n- Disable flaky test cases\\n [\\\\#1238](https://github.com/scalameta/metals/pull/1238)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add in server property for doctor-format and implement json format\\n [\\\\#1235](https://github.com/scalameta/metals/pull/1235)\\n ([ckipp01](https://github.com/ckipp01))\\n- Discard \'code\' from BSP diagnostics\\n [\\\\#1232](https://github.com/scalameta/metals/pull/1232)\\n ([gabro](https://github.com/gabro))\\n- Updates to vim section [\\\\#1227](https://github.com/scalameta/metals/pull/1227)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-ci-release to 1.5.0\\n [\\\\#1230](https://github.com/scalameta/metals/pull/1230)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.6\\n [\\\\#1228](https://github.com/scalameta/metals/pull/1228)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove showMessage and showMessageRequest configuration options\\n [\\\\#1222](https://github.com/scalameta/metals/pull/1222)\\n ([gabro](https://github.com/gabro))\\n- Update ujson to 0.9.6 [\\\\#1224](https://github.com/scalameta/metals/pull/1224)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.1.0\\n [\\\\#1225](https://github.com/scalameta/metals/pull/1225)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 28.2-jre\\n [\\\\#1223](https://github.com/scalameta/metals/pull/1223)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update Sublime settings regarding window/showMessage\\n [\\\\#1218](https://github.com/scalameta/metals/pull/1218)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update ujson to 0.9.5 [\\\\#1221](https://github.com/scalameta/metals/pull/1221)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.3\\n [\\\\#1216](https://github.com/scalameta/metals/pull/1216)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove unreachable code\\n [\\\\#1217](https://github.com/scalameta/metals/pull/1217)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update pprint to 0.5.7 [\\\\#1219](https://github.com/scalameta/metals/pull/1219)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC5-4\\n [\\\\#1215](https://github.com/scalameta/metals/pull/1215)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix scaladoc for methods in Completions\\n [\\\\#1213](https://github.com/scalameta/metals/pull/1213)\\n ([tanishiking](https://github.com/tanishiking))\\n- Continued improvements to Pants export\\n [\\\\#1210](https://github.com/scalameta/metals/pull/1210)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in documenation for coc-metals\\n [\\\\#1197](https://github.com/scalameta/metals/pull/1197)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t create Bloop projects for Pants targets of type \\"files\\".\\n [\\\\#1211](https://github.com/scalameta/metals/pull/1211)\\n ([olafurpg](https://github.com/olafurpg))\\n- Set the working directory to the workspace in Pants export.\\n [\\\\#1209](https://github.com/scalameta/metals/pull/1209)\\n ([olafurpg](https://github.com/olafurpg))\\n- Further polish to the Pants export.\\n [\\\\#1207](https://github.com/scalameta/metals/pull/1207)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update cats-core to 2.1.0\\n [\\\\#1206](https://github.com/scalameta/metals/pull/1206)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add breakpoint support while debugging\\n [\\\\#1163](https://github.com/scalameta/metals/pull/1163)\\n ([marek1840](https://github.com/marek1840))\\n- Update ujson to 0.9.0 [\\\\#1205](https://github.com/scalameta/metals/pull/1205)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several more improvements to the Pants export\\n [\\\\#1203](https://github.com/scalameta/metals/pull/1203)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include jdk in the job name\\n [\\\\#1202](https://github.com/scalameta/metals/pull/1202)\\n ([marek1840](https://github.com/marek1840))\\n- Avoid re-compilation when restarting Bloop in Pants workspace\\n [\\\\#1201](https://github.com/scalameta/metals/pull/1201)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several improvements to Pants export step\\n [\\\\#1198](https://github.com/scalameta/metals/pull/1198)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update bloop-config, bloop-launcher to 1.3.4+298-2c6ff971\\n [\\\\#1192](https://github.com/scalameta/metals/pull/1192)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update The Getting Started Documentation For Java 11\\n [\\\\#1194](https://github.com/scalameta/metals/pull/1194)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update flyway-core to 6.1.2\\n [\\\\#1193](https://github.com/scalameta/metals/pull/1193)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove Usage Of Deprecated `lines` Method\\n [\\\\#1171](https://github.com/scalameta/metals/pull/1171)\\n ([isomarcte](https://github.com/isomarcte))\\n- Sort auto-completed exhaustive match\'es by declaration order\\n [\\\\#1174](https://github.com/scalameta/metals/pull/1174)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update bloop-config, bloop-launcher to 1.3.4+297-48a21249\\n [\\\\#1187](https://github.com/scalameta/metals/pull/1187)\\n ([scala-steward](https://github.com/scala-steward))\\n- Hopefully fix flaky test failure\\n [\\\\#1186](https://github.com/scalameta/metals/pull/1186)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix renames for edited companion objects and case class apply\\n [\\\\#1186](https://github.com/scalameta/metals/pull/1169)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implement code action for importing missing symbols\\n [\\\\#1065](https://github.com/scalameta/metals/pull/1065)\\n ([gabro](https://github.com/gabro))\\n- Update bloop-config, bloop-launcher to 1.3.4+271-42941449\\n [\\\\#1184](https://github.com/scalameta/metals/pull/1184)\\n ([scala-steward](https://github.com/scala-steward))\\n- Improve Pants to Bloop export step.\\n [\\\\#1181](https://github.com/scalameta/metals/pull/1181)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update bloop-config, bloop-launcher to 1.3.4+260-896345c2\\n [\\\\#1180](https://github.com/scalameta/metals/pull/1180)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.1\\n [\\\\#1179](https://github.com/scalameta/metals/pull/1179)\\n ([scala-steward](https://github.com/scala-steward))\\n- Ignore flaky BspSwitchSuite and reenable FoldingRangeSuite on Windows.\\n [\\\\#1177](https://github.com/scalameta/metals/pull/1177)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update utest to 0.7.2 [\\\\#1178](https://github.com/scalameta/metals/pull/1178)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core, scalafmt-dynamic to 2.3.2\\n [\\\\#1173](https://github.com/scalameta/metals/pull/1173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Minor tweaks to CI jobs names\\n [\\\\#1176](https://github.com/scalameta/metals/pull/1176)\\n ([gabro](https://github.com/gabro))\\n- Disable EOL Conversion On /.jvmopts\\n [\\\\#1170](https://github.com/scalameta/metals/pull/1170)\\n ([isomarcte](https://github.com/isomarcte))\\n- Fix Runtime Error In Metals Bench\\n [\\\\#1165](https://github.com/scalameta/metals/pull/1165)\\n ([isomarcte](https://github.com/isomarcte))\\n- Try fixing the Windows CI\\n [\\\\#1164](https://github.com/scalameta/metals/pull/1164)\\n ([gabro](https://github.com/gabro))\\n- Upgrade to Scalafmt v2.3.1\\n [\\\\#1162](https://github.com/scalameta/metals/pull/1162)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update interface to 0.0.16\\n [\\\\#1159](https://github.com/scalameta/metals/pull/1159)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 0.8.0 [\\\\#1157](https://github.com/scalameta/metals/pull/1157)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update lz4-java to 1.7.0\\n [\\\\#1167](https://github.com/scalameta/metals/pull/1167)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0.0 [\\\\#1166](https://github.com/scalameta/metals/pull/1166)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use atomic file move operations.\\n [\\\\#1155](https://github.com/scalameta/metals/pull/1155)\\n ([olafurpg](https://github.com/olafurpg))\\n- Worksheets support for non-VS Code editors\\n [\\\\#1089](https://github.com/scalameta/metals/pull/1089)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Update import documentation for Emacs\\n [\\\\#1156](https://github.com/scalameta/metals/pull/1156)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add basic support for the Pants build tool\\n [\\\\#935](https://github.com/scalameta/metals/pull/935)\\n ([Sohamr](https://github.com/Sohamr))\\n- Cleanup MarkdownGenerator\\n [\\\\#1152](https://github.com/scalameta/metals/pull/1152)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Unused `packagePriority` Parameter From ClasspathSearch\\n [\\\\#1149](https://github.com/scalameta/metals/pull/1149)\\n ([isomarcte](https://github.com/isomarcte))\\n- Internal refactorings to prepare for Pants support\\n [\\\\#1145](https://github.com/scalameta/metals/pull/1145)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove Unnecessary `asInstanceOf` And Unused Values\\n [\\\\#1151](https://github.com/scalameta/metals/pull/1151)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Unused Local Variable `count`\\n [\\\\#1150](https://github.com/scalameta/metals/pull/1150)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Two More Usages Of Deprecated `lines` Method\\n [\\\\#1148](https://github.com/scalameta/metals/pull/1148)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update interface to 0.0.15\\n [\\\\#1147](https://github.com/scalameta/metals/pull/1147)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC5-3\\n [\\\\#1146](https://github.com/scalameta/metals/pull/1146)\\n ([scala-steward](https://github.com/scala-steward))\\n- Revert \\"Update directory watcher to 0.9.6\\"\\n [\\\\#1144](https://github.com/scalameta/metals/pull/1144)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update directory watcher to 0.9.6\\n [\\\\#1135](https://github.com/scalameta/metals/pull/1135)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scribe to 2.7.10 and remove duplicate newline\\n [\\\\#1137](https://github.com/scalameta/metals/pull/1137)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use git fetch --unshallow to restore version number\\n [\\\\#1143](https://github.com/scalameta/metals/pull/1143)\\n ([olafurpg](https://github.com/olafurpg))\\n- [DAP-tests] Adapt new lines to the underlying OS\\n [\\\\#1124](https://github.com/scalameta/metals/pull/1124)\\n ([marek1840](https://github.com/marek1840))\\n- Remove Deprecated Usage Of String#lines Method\\n [\\\\#1139](https://github.com/scalameta/metals/pull/1139)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update better-monadic-for to 0.3.1\\n [\\\\#1104](https://github.com/scalameta/metals/pull/1104)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.0.3\\n [\\\\#1141](https://github.com/scalameta/metals/pull/1141)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.0\\n [\\\\#1132](https://github.com/scalameta/metals/pull/1132)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.7.7.Final\\n [\\\\#1140](https://github.com/scalameta/metals/pull/1140)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt to 1.3.4 and fix flaky 2.13.0 test\\n [\\\\#1138](https://github.com/scalameta/metals/pull/1138)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid renaming synthetic occurrences\\n [\\\\#1077](https://github.com/scalameta/metals/pull/1077)\\n ([gabro](https://github.com/gabro))\\n- Update coursier interface to 0.0.14\\n [\\\\#1136](https://github.com/scalameta/metals/pull/1136)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to h2 v1.4.200.\\n [\\\\#1133](https://github.com/scalameta/metals/pull/1133)\\n ([olafurpg](https://github.com/olafurpg))\\n- Revert \\"Update jna, jna-platform to 5.5.0\\"\\n [\\\\#1134](https://github.com/scalameta/metals/pull/1134)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix renames in case of macro annotations\\n [\\\\#1095](https://github.com/scalameta/metals/pull/1095)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert \\"Update directory-watcher to 0.8.3\\"\\n [\\\\#1126](https://github.com/scalameta/metals/pull/1126)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update xnio-nio to 3.6.9.Final\\n [\\\\#1113](https://github.com/scalameta/metals/pull/1113)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update simulacrum to 1.0.0\\n [\\\\#1099](https://github.com/scalameta/metals/pull/1099)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.5.0\\n [\\\\#1131](https://github.com/scalameta/metals/pull/1131)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-jmh to 0.3.7\\n [\\\\#1121](https://github.com/scalameta/metals/pull/1121)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update org.eclipse.lsp4j, ... to 0.8.1\\n [\\\\#1111](https://github.com/scalameta/metals/pull/1111)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update utest to 0.7.1 [\\\\#1129](https://github.com/scalameta/metals/pull/1129)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.12.1 [\\\\#1114](https://github.com/scalameta/metals/pull/1114)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.4.31\\n [\\\\#1125](https://github.com/scalameta/metals/pull/1125)\\n ([marek1840](https://github.com/marek1840))\\n- Upgrade to latest Bloop.\\n [\\\\#1096](https://github.com/scalameta/metals/pull/1096)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update cats-core to 2.0.0\\n [\\\\#1120](https://github.com/scalameta/metals/pull/1120)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 4.5.2\\n [\\\\#1110](https://github.com/scalameta/metals/pull/1110)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.8.3\\n [\\\\#1108](https://github.com/scalameta/metals/pull/1108)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 28.1-jre\\n [\\\\#1100](https://github.com/scalameta/metals/pull/1100)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update paradise to 2.1.1\\n [\\\\#1116](https://github.com/scalameta/metals/pull/1116)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.0\\n [\\\\#1119](https://github.com/scalameta/metals/pull/1119)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.0.2\\n [\\\\#1117](https://github.com/scalameta/metals/pull/1117)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 5.2.4\\n [\\\\#1112](https://github.com/scalameta/metals/pull/1112)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.0.28.Final\\n [\\\\#1109](https://github.com/scalameta/metals/pull/1109)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0-M10 [\\\\#1106](https://github.com/scalameta/metals/pull/1106)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update utest to 0.6.9 [\\\\#1103](https://github.com/scalameta/metals/pull/1103)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.5.6 [\\\\#1102](https://github.com/scalameta/metals/pull/1102)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.11\\n [\\\\#1097](https://github.com/scalameta/metals/pull/1097)\\n ([scala-steward](https://github.com/scala-steward))\\n- Delay renaming in closed files until the first save is run\\n [\\\\#1094](https://github.com/scalameta/metals/pull/1094)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sublime documentation\\n [\\\\#1093](https://github.com/scalameta/metals/pull/1093)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Decode for better readability\\n [\\\\#1092](https://github.com/scalameta/metals/pull/1092)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix cross macro tests for older Scala versions\\n [\\\\#1091](https://github.com/scalameta/metals/pull/1091)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue with no source dependencies being downloaded by Bloop\\n [\\\\#1090](https://github.com/scalameta/metals/pull/1090)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update to the latest setup-scala.\\n [\\\\#1087](https://github.com/scalameta/metals/pull/1087)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in more documentatin for vim setup\\n [\\\\#1082](https://github.com/scalameta/metals/pull/1082)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update documentation [\\\\#1080](https://github.com/scalameta/metals/pull/1080)\\n ([ckipp01](https://github.com/ckipp01))\\n- Replace coursier-small with coursier-interface\\n [\\\\#1080](https://github.com/scalameta/metals/pull/1030)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Use exact match when computing file renames\\n [\\\\#1075](https://github.com/scalameta/metals/pull/1075)\\n ([gabro](https://github.com/gabro))\\n- Force sequential publishLocal for mtags 2.11/2.13.\\n [\\\\#1073](https://github.com/scalameta/metals/pull/1073)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update emacs docs to include yasnippet\\n [\\\\#1068](https://github.com/scalameta/metals/pull/1068)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Sublime settings since it does have auto-indent\\n [\\\\#1064](https://github.com/scalameta/metals/pull/1064)\\n ([ckipp01](https://github.com/ckipp01))\\n- Respect client capabilities for completion item snippets\\n [\\\\#1057](https://github.com/scalameta/metals/pull/1057)\\n ([gabro](https://github.com/gabro))\\n- Disable flaky test on Window\\n [\\\\#1060](https://github.com/scalameta/metals/pull/1060)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add completion to add all abstract members\\n [\\\\#1031](https://github.com/scalameta/metals/pull/1031)\\n ([ckipp01](https://github.com/ckipp01))\\n- Welcome Chris to the team!\\n [\\\\#1059](https://github.com/scalameta/metals/pull/1059)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/rename\\n [\\\\#1048](https://github.com/scalameta/metals/pull/1048)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle abstract var overrides\\n [\\\\#1056](https://github.com/scalameta/metals/pull/1056)\\n ([gabro](https://github.com/gabro))\\n- Add an empty line after the package declaration before import\\n [\\\\#1051](https://github.com/scalameta/metals/pull/1051)\\n ([ckipp01](https://github.com/ckipp01))\\n- Implement basic worksheet mode using mdoc and text decorations\\n [\\\\#1041](https://github.com/scalameta/metals/pull/1041)\\n ([olafurpg](https://github.com/olafurpg))\\n- Give Bloop more visibility on the website.\\n [\\\\#1053](https://github.com/scalameta/metals/pull/1053)\\n ([olafurpg](https://github.com/olafurpg))\\n- Only run tests on master branch or in PRs\\n [\\\\#1044](https://github.com/scalameta/metals/pull/1044)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt version to 1.3.2\\n [\\\\#1043](https://github.com/scalameta/metals/pull/1043)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sample Emacs configuration to avoid AutoSave files in src dir\\n [\\\\#1032](https://github.com/scalameta/metals/pull/1032)\\n ([marcsaegesser](https://github.com/marcsaegesser))\\n- Update SemanticDB version to 4.2.5 and enable previously broken test\\n [\\\\#1033](https://github.com/scalameta/metals/pull/1033)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add type annotations for public members with Scalafix\\n [\\\\#1034](https://github.com/scalameta/metals/pull/1034)\\n ([olafurpg](https://github.com/olafurpg))\\n- Delegating client should not always call configure\\n [\\\\#1039](https://github.com/scalameta/metals/pull/1039)\\n ([tgodzik](https://github.com/tgodzik))\\n- Suppress model-refresh if debugging is unsupported\\n [\\\\#1019](https://github.com/scalameta/metals/pull/1019)\\n ([marek1840](https://github.com/marek1840))\\n- trace the debug adapter protocol messages\\n [\\\\#1023](https://github.com/scalameta/metals/pull/1023)\\n ([marek1840](https://github.com/marek1840))\\n- Reenable and fix tests on Windows\\n [\\\\#1020](https://github.com/scalameta/metals/pull/1020)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add guards against nulls that happened in the HoverProvider code\\n [\\\\#1025](https://github.com/scalameta/metals/pull/1025)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move all tests into github actions\\n [\\\\#1018](https://github.com/scalameta/metals/pull/1018)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to Bloop v1.3.5.\\n [\\\\#1017](https://github.com/scalameta/metals/pull/1017)\\n ([olafurpg](https://github.com/olafurpg))\\n- Encode the workspace path directory in build digests\\n [\\\\#1015](https://github.com/scalameta/metals/pull/1015)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve problem with coc.nvim installation\\n [\\\\#1013](https://github.com/scalameta/metals/pull/1013)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Suppress code lenses if debugging is not supported\\n [\\\\#1012](https://github.com/scalameta/metals/pull/1012)\\n ([marek1840](https://github.com/marek1840))\\n- Switch to to using Bloop Launcher\\n [\\\\#1004](https://github.com/scalameta/metals/pull/1004)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep code lenses after error until next successful compilation\\n [\\\\#994](https://github.com/scalameta/metals/pull/994)\\n ([marek1840](https://github.com/marek1840))\\n- Send Tree View update notification on first no-op compilation.\\n [\\\\#997](https://github.com/scalameta/metals/pull/997)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix current CI flakiness with DiagnosticLspSuite and LensesLspSuite\\n [\\\\#1000](https://github.com/scalameta/metals/pull/1000)\\n ([tgodzik](https://github.com/tgodzik))\\n- Switch shutdownNow to shutdown due to excessive exceptions being logged\\n [\\\\#1003](https://github.com/scalameta/metals/pull/1003)\\n ([tgodzik](https://github.com/tgodzik))\\n- Strip \\"metals.\\" prefix from `workspace/executeCommand` requests.\\n [\\\\#998](https://github.com/scalameta/metals/pull/998)\\n ([olafurpg](https://github.com/olafurpg))\\n- Strip library version when comparing expected output in TreeViewLspSuite.\\n [\\\\#999](https://github.com/scalameta/metals/pull/999)\\n ([olafurpg](https://github.com/olafurpg))\\n- Install bloop server in CI\\n [\\\\#982](https://github.com/scalameta/metals/pull/982)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- A documentation change in support of Java 11 configuration\\n [\\\\#995](https://github.com/scalameta/metals/pull/995)\\n ([andyczerwonka](https://github.com/andyczerwonka))\\n- Make find implementation run on a separate thread for each file\\n [\\\\#989](https://github.com/scalameta/metals/pull/989)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue when on type formatting threw an exception on last newline\\n [\\\\#990](https://github.com/scalameta/metals/pull/990)\\n ([tgodzik](https://github.com/tgodzik))\\n- Re-introduce Azure pipelines for more stable CI.\\n [\\\\#988](https://github.com/scalameta/metals/pull/988)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add automatic formatting of multi-line `stripMargin` strings on paste\\n [\\\\#968](https://github.com/scalameta/metals/pull/968)\\n ([ckipp01](https://github.com/ckipp01))\\n- Clarify Emacs installation instructions\\n [\\\\#985](https://github.com/scalameta/metals/pull/985)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Add system property to disable project/metals.sbt generation\\n [\\\\#979](https://github.com/scalameta/metals/pull/979)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix typo: Occurence -> Occurrence\\n [\\\\#987](https://github.com/scalameta/metals/pull/987)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add link to new Discord server in the website footer.\\n [\\\\#981](https://github.com/scalameta/metals/pull/981)\\n ([olafurpg](https://github.com/olafurpg))\\n- (Spac)Emacs continuously crashing due to compilation of swap files\\n [\\\\#986](https://github.com/scalameta/metals/pull/986)\\n ([quiquedev](https://github.com/quiquedev))\\n- Remove automatic gitignoring.\\n [\\\\#983](https://github.com/scalameta/metals/pull/983)\\n ([tgodzik](https://github.com/tgodzik))\\n- Refactor slow suite name [\\\\#977](https://github.com/scalameta/metals/pull/977)\\n ([ckipp01](https://github.com/ckipp01))\\n- Tone down \\"No SemanticDB\\" warning\\n [\\\\#973](https://github.com/scalameta/metals/pull/973)\\n ([olafurpg](https://github.com/olafurpg))\\n- Print summary of test failures at the end of the logs.\\n [\\\\#972](https://github.com/scalameta/metals/pull/972)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enable goToDefinition when cursor is at end of symbol\\n [\\\\#965](https://github.com/scalameta/metals/pull/965)\\n ([ashwinbhaskar](https://github.com/ashwinbhaskar))\\n- Test code lenses within packages\\n [\\\\#971](https://github.com/scalameta/metals/pull/971)\\n ([marek1840](https://github.com/marek1840))\\n- Add .bloop and .metals paths to gitignore automatically\\n [\\\\#967](https://github.com/scalameta/metals/pull/967)\\n ([ashwinbhaskar](https://github.com/ashwinbhaskar))\\n- Fall back to mtags position occurrences\\n [\\\\#962](https://github.com/scalameta/metals/pull/962)\\n ([gabro](https://github.com/gabro))\\n- Bump server version in template\\n [\\\\#964](https://github.com/scalameta/metals/pull/964)\\n ([gabro](https://github.com/gabro))\\n- Change manual instalation section for sbt, gradle and maven\\n [\\\\#963](https://github.com/scalameta/metals/pull/963)\\n ([tgodzik](https://github.com/tgodzik))\\n- Warn if bloop version is older than 1.3.3\\n [\\\\#957](https://github.com/scalameta/metals/pull/957)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use consistent naming for metals experimental feature: debugging provider\\n [\\\\#960](https://github.com/scalameta/metals/pull/960)\\n ([marek1840](https://github.com/marek1840))\\n- Add support for running and testing via Debug Adapter Protocol\\n [\\\\#942](https://github.com/scalameta/metals/pull/942)\\n ([marek1840](https://github.com/marek1840))\\n- Add goto implementation [\\\\#934](https://github.com/scalameta/metals/pull/934)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve SemanticDB integration using Bloop\'s newest features\\n [\\\\#852](https://github.com/scalameta/metals/pull/852)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid race conditions during slow/test command.\\n [\\\\#951](https://github.com/scalameta/metals/pull/951)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t file watch inside jar files.\\n [\\\\#950](https://github.com/scalameta/metals/pull/950)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t propose completions for null or nothing\\n [\\\\#949](https://github.com/scalameta/metals/pull/949)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prioritize build targets with supported Scala versions.\\n [\\\\#948](https://github.com/scalameta/metals/pull/948)\\n ([olafurpg](https://github.com/olafurpg))\\n- Replace Azure pipelines with GitHub Actions\\n [\\\\#947](https://github.com/scalameta/metals/pull/947)\\n ([olafurpg](https://github.com/olafurpg))\\n- Replace mvn and mvn.cmd script with jar invocation\\n [\\\\#944](https://github.com/scalameta/metals/pull/944)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/09/23/thorium","metadata":{"permalink":"/metals/blog/2019/09/23/thorium","source":"@site/blog/2019-09-23-thorium.md","title":"Metals v0.7.6 - Thorium","description":"We are excited to announce the release of Metals v0.7.6, which will most likely","date":"2019-09-23T00:00:00.000Z","formattedDate":"September 23, 2019","tags":[],"readingTime":2.215,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.6 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"},"nextItem":{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"}},"content":"We are excited to announce the release of Metals v0.7.6, which will most likely\\nbe the last release before the v0.8.0 one. This release includes support for new\\nScala versions (2.12.10, 2.13.1) and a couple of fixes. It also adds a new\\nformatting on paste feature for multiline strings.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 11 PRs and closed 5 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/18?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- add support for Scala 2.12.10 and 2.13.1\\n- formatting on paste for multiline strings\\n- fixes for autofill feature\\n\\n## Add support for Scala 2.12.10 and 2.13.1\\n\\nThanks to @gabro\'s continuing effort we were able to add support for both new\\nScala versions. Those versions fix a couple of important regressions and are now\\navailable to use with Metals!\\n\\n## Formatting on paste for multiline strings\\n\\nWhenever text is pasted into a multiline string with `|` it will be properly\\nformatted by Metals:\\n\\n![format-on-paste](https://i.imgur.com/yJLAIxQ.gif)\\n\\nTo enable this feature you need to enable formatting on paste in your editor of\\nchoice. In Visual Studio Code it can be done via modifying a checkbox:\\n\\n![format-on-paste](https://i.imgur.com/OaBxwer.png)\\n\\n## Fixes for autofill feature\\n\\nAfter releasing the experimental autofill feature we addressed feedback by:\\n\\n- not filling in the default arguments\\n- adding `???` as a first option when alternative values are available to avoid\\n mistakes\\n- add subtypes as valid values\\n- only show autofill option when using named parameters or by explicitly typing\\n `autofill...`\\n\\nLet us know if you have any further feedback!\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.5..v0.7.6\\nTomasz Godzik\\nMarek \u017barnowski\\nGabriele Petronella\\n\xd3lafur P\xe1ll Geirsson\\nSam Halliday\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.6](https://github.com/scalameta/metals/tree/v0.7.6) (2019-09-23)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.5...v0.7.6)\\n\\n**Merged pull requests:**\\n\\n- replace java streams with generators\\n [\\\\#938](https://github.com/scalameta/metals/pull/938)\\n ([marek1840](https://github.com/marek1840))\\n- ENSIME is not an alternative\\n [\\\\#936](https://github.com/scalameta/metals/pull/936)\\n ([fommil](https://github.com/fommil))\\n- Swap field to type parameter for scala Type\\n [\\\\#933](https://github.com/scalameta/metals/pull/933)\\n ([tgodzik](https://github.com/tgodzik))\\n- Refactor autofill option [\\\\#932](https://github.com/scalameta/metals/pull/932)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we continue searching for symbols in try.\\n [\\\\#930](https://github.com/scalameta/metals/pull/930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Disable flaky test. [\\\\#918](https://github.com/scalameta/metals/pull/918)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix indentation when adding pipes in multiline string.\\n [\\\\#922](https://github.com/scalameta/metals/pull/922)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove dealias to properly support type\\n [\\\\#921](https://github.com/scalameta/metals/pull/921)\\n ([tgodzik](https://github.com/tgodzik))\\n- Simplify testing when calculating position and automatically add pipes when\\n copy pasting input [\\\\#919](https://github.com/scalameta/metals/pull/919)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Scala 2.12.10 support and use 2.12.10 on Metals\\n [\\\\#913](https://github.com/scalameta/metals/pull/913)\\n ([gabro](https://github.com/gabro))\\n- Update `isCompiled` status of the build target regardless of the compilation\\n result [\\\\#907](https://github.com/scalameta/metals/pull/907)\\n ([marek1840](https://github.com/marek1840))"},{"id":"/2019/09/12/thorium","metadata":{"permalink":"/metals/blog/2019/09/12/thorium","source":"@site/blog/2019-09-12-thorium.md","title":"Metals v0.7.5 - Thorium","description":"We are excited to announce the release of Metals v0.7.5 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-09-12T00:00:00.000Z","formattedDate":"September 12, 2019","tags":[],"readingTime":3.04,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.5 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"},"nextItem":{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"}},"content":"We are excited to announce the release of Metals v0.7.5 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes couple of bug fixes for 0.7.2, which were present in some\\nrare scenarios. We also added a new experimental feature, which we would be\\nhappy to get feedback about.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 12 PRs and closed 6 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/17?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- add auto-fill option to case classes\\n- deduce values for named parameters completions\\n- multiple fixes after adding support for Scala 2.12.9\\n- fixes for automatic addition of `|` in multiline strings\\n\\n## Add auto-fill option to case classes\\n\\nWhenever we invoke a method and try completions inside the brackets there is an\\nadditional option to allow Metals to deduce what should be filled for each\\nparameter.\\n\\n![auto-fill](https://i.imgur.com/8pCiMqE.gif)\\n\\nThis algorithm checks if there exists a value in scope with the same type as the\\nparameters\' and then works according to the rules below:\\n\\n```\\n1. If there is only one candidate, use it.\\n2. If there is more than one, give user an alternative to choose one of them.\\n3. Otherwise use use \\"???\\".\\n```\\n\\nThis feature also uses the snippets syntax to allow to quickly go over the\\nauto-filled parameters and choose or replace the auto-filled values.\\n\\n## Deduce values for named parameters completions\\n\\nLeveraging the work that went into the previous feature, we were also able to\\nprovide additional support for concrete values in named parameter completions.\\n\\n![deduce](https://i.imgur.com/m11xixy.gif)\\n\\nWe generate completion item for each value that fits the type of the parameter.\\n\\n## Multiple fixes after adding support for Scala 2.12.9\\n\\nAfter updating Metals to work with Scala 2.12.9 it turned out that completions\\nand hover didn\'t work correctly and due to the presentation compiler crashing in\\nthe following scenarios:\\n\\n- whenever an older version of SemanticDB plugin was used as was the case with\\n Mill\\n- when using Scala 2.12.8 without SemanticDB plugin\\n\\nBoth issues have now been fixed and additionally we updated the default Mill\\nversion to 0.5.1, which works correctly with Scala 2.12.9.\\n\\n## Fixes for automatic addition of `|` in multiline strings\\n\\nWe now make sure that `stripMargin` exists when adding `|` automatically in\\nmultiline strings. This could cause issues in some scenarios, where multiline\\nstring contained `|`, but it was not only used for formatting.\\n\\nAdditionally, we fixed the feature to also work in interpolated strings, which\\nwas missing in the previous release.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.2..v0.7.5\\nTomasz Godzik\\nGabriele Petronella\\n\u0141ukasz Byczy\u0144ski\\nOlafur Pall Geirsson\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.5](https://github.com/scalameta/metals/tree/v0.7.5) (2019-09-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.2...v0.7.5)\\n\\n**Merged pull requests:**\\n\\n- Revert sbt version to 1.2.8\\n [\\\\#915](https://github.com/scalameta/metals/pull/915)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to latest sbt-sonatype for faster and more stable releases\\n [\\\\#912](https://github.com/scalameta/metals/pull/912)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update with new Eclipse capabilities\\n [\\\\#911](https://github.com/scalameta/metals/pull/911)\\n ([mundacho](https://github.com/mundacho))\\n- Check for stripMargin when adding |\\n [\\\\#904](https://github.com/scalameta/metals/pull/904)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional tips & tricks to the sublime text documentation\\n [\\\\#906](https://github.com/scalameta/metals/pull/906)\\n ([LukaszByczynski](https://github.com/LukaszByczynski))\\n- Update sbt to 1.3.0 [\\\\#905](https://github.com/scalameta/metals/pull/905)\\n ([gabro](https://github.com/gabro))\\n- Fix more possible presentation compiler classpath issues\\n [\\\\#901](https://github.com/scalameta/metals/pull/901)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Mill to 0.5.1 [\\\\#899](https://github.com/scalameta/metals/pull/899)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update website overview and add information about Eclipse\\n [\\\\#894](https://github.com/scalameta/metals/pull/894)\\n ([tgodzik](https://github.com/tgodzik))\\n- Retry with clean compiler after ShutdownReq\\n [\\\\#898](https://github.com/scalameta/metals/pull/898)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add automatic value completions on named arguments\\n [\\\\#827](https://github.com/scalameta/metals/pull/827)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix links to merged PRs in blogpost\\n [\\\\#896](https://github.com/scalameta/metals/pull/896)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.7.2\\n [\\\\#886](https://github.com/scalameta/metals/pull/886)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/09/02/thorium","metadata":{"permalink":"/metals/blog/2019/09/02/thorium","source":"@site/blog/2019-09-02-thorium.md","title":"Metals v0.7.2 - Thorium","description":"We are excited to announce the release of Metals v0.7.2 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-09-02T00:00:00.000Z","formattedDate":"September 2, 2019","tags":[],"readingTime":6.14,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.2 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"},"nextItem":{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"}},"content":"We are excited to announce the release of Metals v0.7.2 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes mostly bug fixes with some smaller new features. We are\\nskipping over 0.7.1 due to a critical bug we discovered\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 39 PRs and closed 11 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/14?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- support for Scala 2.12.9\\n- fix completions in case of inline comments\\n- add support for non-directory sources\\n- automatically add package definition to new source files\\n- automatically insert pipes in multiline string\\n- a lot of miscellaneous fixes\\n\\n## Fix completions in case of inline comments\\n\\nPreviously, completions after a comment and newline would yield no results:\\n\\n```scala\\nval List(1,2,3)\\n .map(num => num + 1) // comment\\n @@\\n```\\n\\nThis was fixed by the Metals team in the presentation compiler itself for 2.12.9\\nand 2.13.1, however we also added a workaround for all supported older Scala\\nversions.\\n\\n## Add support for non-directory sources\\n\\nIn case that your build tool supports having single files as sources, we now\\noffer full support for them. That corresponds to the most recent BSP\\nspecification\\n[request](https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#build-target-sources-request)\\n\\n## Automatically add package definition to new source files\\n\\nFor every new Scala file we automatically add package definition based on the\\nrelative path between the new source file and source root. This is done using\\napplyWorkspaceEdit method, which causes the change to be done in editor and this\\ncan easily be rewerted like any other change you would type.\\n\\n![add-package](https://i.imgur.com/6V9gHnM.gif)\\n\\nWe also added support for package objects. Whenever you create `package.scala`\\nfile, we will automatically create the barebone definition of the package\\nobject.\\n\\n![package-object](https://i.imgur.com/CfF0cdE.gif)\\n\\nThere is still some work to be done about moving files between packages, which\\nwill be addressed in the next release.\\n\\nBig thanks to the first time contributor from VirtusLab Tomasz Dudzik for\\nimplementing most of the functionality! \ud83c\udf89\\n\\n## Automatically insert pipes in multiline string\\n\\nWe finally managed to properly support adding `|` in multiline strings using the\\n`onTypeFormatting` method. Previous implementation was very naive and often\\nadded pipes in wrong places.\\n\\n![pipes](https://i.imgur.com/iXGYOf0.gif)\\n\\nTo enable the functionality you need to enable `onTypeFormatting` inside your\\neditor if it\'s not enabled by default.\\n\\nIn Visual Studio Code this needs to be done in settings by checking\\n`Editor: Format On Type`:\\n\\n![on-type](https://i.imgur.com/4eVvSP5.gif)\\n\\nYou will also need the newest version of the Visual Studio Code plugin.\\n\\nThere is still some possible improvements in case of copy pasting entire text\\nfragments, but that needs some more work.\\n\\nBig thanks to another of our first time contributors from VirtusLab Karolina\\nBogacka! Great work! \ud83c\udf89\\n\\n## Add support for Scala 2.12.9\\n\\nMetals now supports Scala 2.12.9! No new Scala version has been deprecated in\\nthis release, since it is possible that Scala 2.12.10 version with some\\nimportant fixes will be released soon.\\n\\nBig thanks to [@gabro](https://github.com/gabro) for again leading the effort!\\nThis took considerably more time and effort than expected.\\n\\n## Miscellaneous fixes\\n\\n- erroneous warning for Scala 2.11 is no longer displayed\\n- don\'t infer build target for non-readonly files\\n- fix several small issues in the tree view protocol spec\\n- set h2.bindAddress to avoid exposing open ports (thanks @blast-hardcheese!)\\n- resolve symlinks that are used within workspaces\\n- fix issues when import was requested multiple times without any change\\n- detect openjdk as a valid jdk home\\n- warn when java sources were not found\\n- string interpolation completions now work properly in multiline string\\n- add ReloadDoctor to the list of all commands (thanks @kurnevsky!)\\n- add correct mill version in the predef script when running `bloopInstall`\\n- SemanticDB plugin issues are no longer reported in java only projects\\n- check if SeamnticDB really exists and only report issue when it doesn\'t\\n- update default scalafmt to 2.0.1\\n- use recommended version for build tools in UI message\\n- fix file leak when importing large Gradle workspaces\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release, a lot more people\\njoined this time to make the release better!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.0..v0.7.2\\nGabriele Petronella\\nTomasz Godzik\\n\xd3lafur P\xe1ll Geirsson\\nEvgeny Kurnevsky\\nMarek \u017barnowski\\nLucas Satabin\\nAyoub Benali\\nChris Birchall\\nCompro Prasad\\nDevon Stewart\\nJes\xfas Mart\xednez\\nKarolina Bogacka\\nTomasz Dudzik\\nChris Kipp\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.2](https://github.com/scalameta/metals/tree/v0.7.2) (2019-08-29)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.0...v0.7.2)\\n\\n**Merged pull requests:**\\n\\n- Fix not closing streams when using Files.list\\n [\\\\#892](https://github.com/scalameta/metals/pull/892)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid file leaks when digesting Gradle builds\\n [\\\\#889](https://github.com/scalameta/metals/pull/889)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix broken tests [\\\\#888](https://github.com/scalameta/metals/pull/888)\\n ([olafurpg](https://github.com/olafurpg))\\n- Bump Metals Scala version to 2.12.9\\n [\\\\#887](https://github.com/scalameta/metals/pull/887)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add check mark for formatting under vim\\n [\\\\#885](https://github.com/scalameta/metals/pull/885)\\n ([satabin](https://github.com/satabin))\\n- Recommend a recent version of the build tool when incompatible or unknown\\n [\\\\#881](https://github.com/scalameta/metals/pull/881)\\n ([gabro](https://github.com/gabro))\\n- Use BuildInfo.scalaCompilerVersion over Properties.versionNumberString\\n [\\\\#876](https://github.com/scalameta/metals/pull/876)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove use of early intializers\\n [\\\\#877](https://github.com/scalameta/metals/pull/877)\\n ([gabro](https://github.com/gabro))\\n- Catch ShutdownReq exception from stopping a presentation compiler.\\n [\\\\#873](https://github.com/scalameta/metals/pull/873)\\n ([olafurpg](https://github.com/olafurpg))\\n- Transpose features/editors table\\n [\\\\#875](https://github.com/scalameta/metals/pull/875)\\n ([gabro](https://github.com/gabro))\\n- Make presentation compiler work on 2.12.9\\n [\\\\#872](https://github.com/scalameta/metals/pull/872)\\n ([gabro](https://github.com/gabro))\\n- Scala 2.12.9 support [\\\\#867](https://github.com/scalameta/metals/pull/867)\\n ([gabro](https://github.com/gabro))\\n- Automatically add package objects when creating package.scala file\\n [\\\\#866](https://github.com/scalameta/metals/pull/866)\\n ([tgodzik](https://github.com/tgodzik))\\n- Automatically add package declaration when creating a file\\n [\\\\#862](https://github.com/scalameta/metals/pull/862)\\n ([tdudzik](https://github.com/tdudzik))\\n- Fix TreeViewSlowSuite tests\\n [\\\\#864](https://github.com/scalameta/metals/pull/864)\\n ([gabro](https://github.com/gabro))\\n- Update scalafmt to 2.0.1 [\\\\#863](https://github.com/scalameta/metals/pull/863)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for non-directory sources\\n [\\\\#857](https://github.com/scalameta/metals/pull/857)\\n ([tgodzik](https://github.com/tgodzik))\\n- Report an issue only if SemanticDB file doesn\'t really exist.\\n [\\\\#853](https://github.com/scalameta/metals/pull/853)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not report issues in Java only projects\\n [\\\\#850](https://github.com/scalameta/metals/pull/850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Emacs supports client commands now\\n [\\\\#848](https://github.com/scalameta/metals/pull/848)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Fix issue if exact query is longer than the class name\\n [\\\\#843](https://github.com/scalameta/metals/pull/843)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue with wrong mill version in predef script and update millw scripts\\n [\\\\#842](https://github.com/scalameta/metals/pull/842)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix Mercury blog post date by adding an unlisted redirect\\n [\\\\#836](https://github.com/scalameta/metals/pull/836)\\n ([gabro](https://github.com/gabro))\\n- Update sublime doc regarding autoimport\\n [\\\\#839](https://github.com/scalameta/metals/pull/839)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Improve handling of the java sources\\n [\\\\#825](https://github.com/scalameta/metals/pull/825)\\n ([marek1840](https://github.com/marek1840))\\n- Add exact libraries that are expected and fix the test\\n [\\\\#837](https://github.com/scalameta/metals/pull/837)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add ReloadDoctor to the list of all commands.\\n [\\\\#830](https://github.com/scalameta/metals/pull/830)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Install use-package if not already installed\\n [\\\\#828](https://github.com/scalameta/metals/pull/828)\\n ([Compro-Prasad](https://github.com/Compro-Prasad))\\n- Fix multiline edits [\\\\#826](https://github.com/scalameta/metals/pull/826)\\n ([tgodzik](https://github.com/tgodzik))\\n- Timestamps should use currentTimeMillis\\n [\\\\#822](https://github.com/scalameta/metals/pull/822)\\n ([tgodzik](https://github.com/tgodzik))\\n- resolve symlinks from client requests\\n [\\\\#824](https://github.com/scalameta/metals/pull/824)\\n ([marek1840](https://github.com/marek1840))\\n- Setting h2.bindAddress to avoid exposing open ports\\n [\\\\#821](https://github.com/scalameta/metals/pull/821)\\n ([blast-hardcheese](https://github.com/blast-hardcheese))\\n- Use Scalafmt 2.0.0 when setting the version in .scalafmt.conf\\n [\\\\#806](https://github.com/scalameta/metals/pull/806)\\n ([gabro](https://github.com/gabro))\\n- Don\'t infer build target for non-readonly files.\\n [\\\\#810](https://github.com/scalameta/metals/pull/810)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix versions in docs - wrong number of @ was used\\n [\\\\#820](https://github.com/scalameta/metals/pull/820)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update the list of supported Scala binary versions\\n [\\\\#818](https://github.com/scalameta/metals/pull/818)\\n ([cb372](https://github.com/cb372))\\n- Bump mill version [\\\\#817](https://github.com/scalameta/metals/pull/817)\\n ([satabin](https://github.com/satabin))\\n- Send treeViewDidChange only when the client supports it\\n [\\\\#816](https://github.com/scalameta/metals/pull/816)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Fix issue with missing completions after comment and newline.\\n [\\\\#814](https://github.com/scalameta/metals/pull/814)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix several issues in the tree view protocol spec\\n [\\\\#811](https://github.com/scalameta/metals/pull/811)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make test-release.sh script check that artifacts have synced to Maven\\n [\\\\#812](https://github.com/scalameta/metals/pull/812)\\n ([olafurpg](https://github.com/olafurpg))\\n- nvim version and updated info about required java versions\\n [\\\\#807](https://github.com/scalameta/metals/pull/807)\\n ([ckipp01](https://github.com/ckipp01))\\n- Lost a word in the last PR and adding it now\\n [\\\\#805](https://github.com/scalameta/metals/pull/805)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use sonatype:public in our own meta build\\n [\\\\#803](https://github.com/scalameta/metals/pull/803)\\n ([gabro](https://github.com/gabro))\\n- Fix an issue with wrong deprecation warning for 2.11 and update snapshot\\n version [\\\\#804](https://github.com/scalameta/metals/pull/804)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix version typo [\\\\#802](https://github.com/scalameta/metals/pull/802)\\n ([JesusMtnez](https://github.com/JesusMtnez))"},{"id":"/2019/06/28/thorium","metadata":{"permalink":"/metals/blog/2019/06/28/thorium","source":"@site/blog/2019-06-28-thorium.md","title":"Metals v0.7.0 - Thorium","description":"We are excited to announce the release of Metals v0.7.0 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-06-28T00:00:00.000Z","formattedDate":"June 28, 2019","tags":[],"readingTime":6.65,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://github.com/olafurpg.png"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.7.0 - Thorium","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://github.com/olafurpg.png"},"prevItem":{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"},"nextItem":{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"}},"content":"We are excited to announce the release of Metals v0.7.0 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes several new features along with bug fixes.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 21 PRs and closed 8 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/11?closed=1\\n\\n## TL;DR\\n\\n- New tree view in VS Code\\n- New support for Scala 2.13\\n- New support for JDK 11\\n- New improved classpath indexing performance\\n- New fallback to \\"find references\\" when calling \\"goto definition\\" on a symbol\\n definition\\n- Bug fixes for importing builds in Gradle, Mill and sbt\\n- Dropped support for deprecated Scala versions 2.11.9, 2.11.10, 2.11.11,\\n 2.12.4, 2.12.5 and 2.12.6.\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n## Tree views in VS Code\\n\\nThere is now a new \\"Metals\\" sidebar in VS Code that contains three tree views:\\n\\n- Build: overview of the build state, with buttons to manually trigger build\\n import.\\n- Compile: overview of ongoing compilations, with buttons to manually cascade\\n compilation and cancel ongoing compilation.\\n- Help and feedback: buttons to automate troubleshooting Metals issues and links\\n to relevant online resources such as GitHub, Gitter and Twitter.\\n\\n### Projects explorer\\n\\n![2019-06-26 20 28 14](https://user-images.githubusercontent.com/1408093/60208747-59589680-9859-11e9-8a09-2a6c38683975.gif)\\n\\n### Libraries explorer\\n\\nBrowse symbols that are defined in jars of library dependencies.\\n\\n![2019-06-26 20 28 51](https://user-images.githubusercontent.com/1408093/60208786-6e352a00-9859-11e9-8d55-2125c91d506f.gif)\\n\\n### Reveal active file in Metals side bar\\n\\nThere is a new command \\"Reveal active file in Metals side bar\\" that focuses the\\nlibrary and project explorer to the current open file.\\n\\n![2019-06-27 16 02 33](https://user-images.githubusercontent.com/1408093/60277613-33d19880-98fe-11e9-9aee-71c0a0c0861f.gif)\\n\\n### Compilation explorer\\n\\nGet an overview of all compilations that are ongoing in the build. Previously,\\nonly a single compilation progress was reported through the status bar.\\n\\n![2019-06-23 15 41 07](https://user-images.githubusercontent.com/1408093/60052207-f4743380-96d4-11e9-9192-f71db4100fe9.gif)\\n\\n### Help and feedback explorer\\n\\n\\"Screenshot\\n\\n## Support for Scala 2.13\\n\\nMetals now supports Scala 2.13.0! Please upgrade to Scalafmt v2.0.0 in order to\\nformat 2.13-specific syntax such as underscore separators (`1_000_000`). Note\\nthat completions may in rare situations not work perfectly for Scala 2.13, in\\nparticular:\\n\\n- whitebox string interpolator macros, we had to disable one unit test for 2.13.\\n See [#777](https://github.com/scalameta/metals/issues/777).\\n- better-monadic-for compile plugin, we had to disable one unit test for 2.13.\\n See [#777](https://github.com/scalameta/metals/issues/777).\\n\\nBig thanks to [@gabro](https://github.com/gabro) for leading this effort!\\n\\n## JDK 11 support\\n\\nMetals can now run on Java 11! To use Java 11 instead of Java 8, point the\\n`$JAVA_HOME` environment variable to a Java 11 installation.\\n\\nThe VS Code extension will continue to use Java 8 by default, update the \\"Java\\nHome\\" setting to use Java 11 instead.\\n\\n![](https://i.imgur.com/F5djfzt.png)\\n\\nTo obtain the Java 11 home on macOS, use the following command:\\n\\n```sh\\n$ /usr/libexec/java_home 11\\n/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home\\n```\\n\\nBig thanks to [@er1c](https://github.com/er1c) for pushing for the effort on\\nboth the Bloop and Metals side to support Java 11!\\n\\n## Improved classpath indexing performance\\n\\nPreviously, to support fuzzy symbol search Metals indexed classpath elements\\nusing an algorithm that required a quadratic iteration on the number of\\ncharacters in classfile names. Now, the fuzzy symbol search algorithm only\\nrequires a linear pass on the characters of a classfile name. This optimization\\nresulted in a 2x speedup for indexing a 235Mb classpath in our benchmarks.\\n\\n```diff\\n Benchmark Mode Cnt Score Error Units\\n- ClasspathIndexingBench.run ss 10 1809.068 \xb1 61.461 ms/op # JDK 8\\n+ ClasspathIndexingBench.run ss 10 919.237 \xb1 42.827 ms/op # JDK 8\\n+ ClasspathIndexingBench.run ss 10 1316.451 \xb1 22.595 ms/op # JDK 11\\n```\\n\\n## Fallback to \\"find references\\" from \\"goto definition\\"\\n\\nPreviously, nothing happened when invoking \\"goto definition\\" on the symbol\\ndefinition itself. Now, Metals falls back to \\"find references\\" in this\\nsituation.\\n\\n![Fallback](https://i.imgur.com/BT3h0FJ.gif)\\n\\nBig thanks to [@tanishiking](https://github.com/tanishiking) for contributing\\nthis new feature!\\n\\n## Dropping older Scala versions\\n\\nThe Scala versions supported by Metals are now the following.\\n\\n| Version | Old Status | New Status |\\n| :------ | ----------- | -------------------------------------------------------------- |\\n| 2.11.9 | Deprecated | Dropped |\\n| 2.11.10 | Deprecated | Dropped |\\n| 2.11.11 | Deprecated | Dropped |\\n| 2.11.12 | Supported | Deprecated, with no plans to be dropped in upcoming releases\\\\* |\\n| 2.12.4 | Deprecated | Dropped |\\n| 2.12.5 | Deprecated | Dropped |\\n| 2.12.6 | Deprecated | Dropped |\\n| 2.12.7 | Supported | Deprecated, please upgrade to 2.12.8 |\\n| 2.12.8 | Supported | Supported |\\n| 2.13.0 | Unsupported | Supported |\\n\\n\\\\* Scala 2.11 support will likely stay around for a while given the situation\\nwith Spark, Scala Native, Playframework and other libraries and frameworks that\\nhave been late to adopt 2.12. Our download numbers show that ~10% of Metals\\nusers are still on 2.11. Nevertheless, we encourage our users to upgrade to 2.12\\nto enjoy a better code editing experience thanks to multiple improvements in the\\ncompiler.\\n\\n## Fixes for auto importing builds\\n\\n- digest only `.sbt` files at workspace level for sbt projects (thanks\\n [@wojciechUrbanski](https://github.com/wojciechUrbanski)!)\\n- fix SemanticDB plugin path on Windows for Gradle workspaces\\n- update default Mill version to 0.4.1 to fix an issue with classpath not\\n containing Scala library\\n- Metals now pick up the version from `.mill-version` for the `millw` script\\n\\n## No more \\"work in progress\\"\\n\\nPreviously, the Metals website used the \\"Work-in-progress language server for\\nScala\\" tagline to reflect the experimental status of the project. Now, the\\ntagline on the website has been changed to \\"Scala language server with rich IDE\\nfeatures\\" to reflect that Metals is used by thousands of developers today for\\ntheir day-to-day coding.\\n\\n## Miscellaneous fixes\\n\\n- fix off-by-one for parameter hints when the cursor was after the closing `)`\\n parenthesis\\n- make sure we add an autoimport in the correct line in case of brackets\\n- document symbol outline no longer fails when `val _ = ()` is the only thing in\\n a block expression\\n- nested objects are now imported correctly in case of deeper nesting\\n- fix concurrent modification in text document cache (thanks\\n [@chikei](https://github.com/chikei)!)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release, it\'s amazing we had a\\ncouple of new contributors to Metals!\\n\\n```\\n$ git shortlog -sn --no-merges v0.6.1..v0.7.0\\nGabriele Petronella\\n\xd3lafur P\xe1ll Geirsson\\nTomasz Godzik\\nEric Peters\\ntanishiking\\nRuben Berenguel\\nTzeKei Lee\\nWojciech Urbanski\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.0](https://github.com/scalameta/metals/tree/v0.7.0) (2019-06-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.6.1...v0.7.0)\\n\\n**Merged pull requests:**\\n\\n- Upgrade to Scalameta v4.2.0\\n [\\\\#799](https://github.com/scalameta/metals/pull/799)\\n ([olafurpg](https://github.com/olafurpg))\\n- Introduce Tree View Protocol\\n [\\\\#797](https://github.com/scalameta/metals/pull/797)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add a benchmark for classpath indexing performance.\\n [\\\\#795](https://github.com/scalameta/metals/pull/795)\\n ([olafurpg](https://github.com/olafurpg))\\n- Migrate Java converters to 2.13\\n [\\\\#794](https://github.com/scalameta/metals/pull/794)\\n ([gabro](https://github.com/gabro))\\n- Remove dot as a commit character\\n [\\\\#793](https://github.com/scalameta/metals/pull/793)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make classpath indexing linear instead of quadratic.\\n [\\\\#792](https://github.com/scalameta/metals/pull/792)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use 2.13 dialect for syntax errors\\n [\\\\#789](https://github.com/scalameta/metals/pull/789)\\n ([gabro](https://github.com/gabro))\\n- Fix off-by-one for parameter hints.\\n [\\\\#786](https://github.com/scalameta/metals/pull/786)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make sure we add an autoimport in the correct line\\n [\\\\#785](https://github.com/scalameta/metals/pull/785)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix typo [\\\\#784](https://github.com/scalameta/metals/pull/784)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove Work-in-progress from the tagline\\n [\\\\#782](https://github.com/scalameta/metals/pull/782)\\n ([gabro](https://github.com/gabro))\\n- Fix JdkSources not to ignore JAVA_HOME environment variable\\n [\\\\#781](https://github.com/scalameta/metals/pull/781)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix importing nested objects\\n [\\\\#778](https://github.com/scalameta/metals/pull/778)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix an issue when `val \\\\_ = \\\\(\\\\)` is the only thing in the block\\n [\\\\#776](https://github.com/scalameta/metals/pull/776)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback to \\"show usages\\" from \\"Goto definition\\" if the symbol represents a\\n definition itself [\\\\#775](https://github.com/scalameta/metals/pull/775)\\n ([tanishiking](https://github.com/tanishiking))\\n- Move slow tests to separate directories and run them separately on Travis\\n [\\\\#773](https://github.com/scalameta/metals/pull/773)\\n ([tgodzik](https://github.com/tgodzik))\\n- Digest only sbt files at workspace level\\n [\\\\#772](https://github.com/scalameta/metals/pull/772)\\n ([wojciechUrbanski](https://github.com/wojciechUrbanski))\\n- Fix wrong windows SemanticDB file path\\n [\\\\#771](https://github.com/scalameta/metals/pull/771)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix concurrent modification\\n [\\\\#766](https://github.com/scalameta/metals/pull/766)\\n ([chikei](https://github.com/chikei))\\n- Factor out a ClasspathLoader.getURLs\\\\(classLoader\\\\) helper for java9+\\n compatability, update usages\\n [\\\\#765](https://github.com/scalameta/metals/pull/765)\\n ([er1c](https://github.com/er1c))\\n- Include mill version from .mill-version file\\n [\\\\#764](https://github.com/scalameta/metals/pull/764)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add 2.13 support and drop deprecated versions\\n [\\\\#763](https://github.com/scalameta/metals/pull/763)\\n ([gabro](https://github.com/gabro))\\n- Clarifiyng a setting [\\\\#759](https://github.com/scalameta/metals/pull/759)\\n ([rberenguel](https://github.com/rberenguel))\\n- Fix very small typo in docs\\n [\\\\#758](https://github.com/scalameta/metals/pull/758)\\n ([rberenguel](https://github.com/rberenguel))\\n- Fix completions to compilation in blog\\n [\\\\#757](https://github.com/scalameta/metals/pull/757)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update VS Code docs [\\\\#756](https://github.com/scalameta/metals/pull/756)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals Radium release\\n [\\\\#752](https://github.com/scalameta/metals/pull/752)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/06/11/radium","metadata":{"permalink":"/metals/blog/2019/06/11/radium","source":"@site/blog/2019-06-11-radium.md","title":"Metals v0.6.1 - Radium","description":"We are excited to announce the release of Metals v0.6.1, codename \\"Radium\\" \ud83c\udf89","date":"2019-06-11T00:00:00.000Z","formattedDate":"June 11, 2019","tags":[],"readingTime":3.915,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/tomekgodzik","imageURL":"https://avatars1.githubusercontent.com/u/3807253?s=460&v=4"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.6.1 - Radium","authorURL":"https://twitter.com/tomekgodzik","authorImageURL":"https://avatars1.githubusercontent.com/u/3807253?s=460&v=4"},"prevItem":{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"},"nextItem":{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"}},"content":"We are excited to announce the release of Metals v0.6.1, codename \\"Radium\\" \ud83c\udf89\\nThe release mostly focused on adding support for the build tools Gradle, Maven\\nand Mill.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this release we merged 24 PRs and closed 6 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/7?closed=1.\\n\\n## TL;DR\\n\\n- automatic \\"import build\\" for Gradle, Maven and Mill\\n- upgraded to Bloop v1.3.2\\n- better handling of requests that access the presentation compiler\\n- code completions on keywords\\n- VS Code doesn\'t compile projects until it is focused\\n- Metals is now a default server in the Sublime LSP package\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n## Bloop upgrade\\n\\nMetals now depends on Bloop v1.3.2 instead of v1.2.5. The v1.3 release of Bloop\\nhas a ton of nice improvements that benefit Metals users. For full details, see\\nthe\\n[Bloop v1.3.0 release notes](https://github.com/scalacenter/bloop/releases/tag/v1.3.0).\\n\\n## Automatic \\"import build\\" for Gradle, Maven and Mill\\n\\nNow, it\'s possible to use Metals with the build tools Gradle, Maven and Mill!\\nImporting a build with Gradle, Maven and Mill now works the same way it works\\nfor sbt.\\n\\nFor more details, see the corresponding documentation for each build tool:\\n\\n- [Overview](http://scalameta.org/metals/docs/build-tools/overview.html)\\n- [Gradle](http://scalameta.org/metals/docs/build-tools/gradle.html)\\n- [Maven](http://scalameta.org/metals/docs/build-tools/maven.html)\\n- [Mill](http://scalameta.org/metals/docs/build-tools/mill.html)\\n\\n## More reliable shutdown\\n\\nAn issue where the Metals process could continue running even after closing the\\neditor has now been fixed.\\n\\n## Completions freeze less\\n\\nAn issue where Metals could get stuck in an infinite loop using 100% CPU while\\nresponding to completions has now been fixed.\\n\\n## Keyword completions\\n\\nPreviously, Metals did not complete keywords like `import`, `new`, `lazy val` or\\n`trait`. Language keywords are now included in the auto-completions in most\\ncases.\\n\\n```scala\\nobject Main {\\n // Before\\n impo\\n // After\\n import\\n}\\n```\\n\\nKeywords are suggested based on the context (e.g. you won\'t see throw suggested\\nif the cursor is not inside a declaration)\\n\\nThe only keywords that are not completed are: `extends`, `finally`, `with`,\\n`forSome`, `catch` and `finally`.\\n\\n## VS Code doesn\'t compile projects until it is focused\\n\\nPreviously, Metals would trigger compilation in the background even if the VS\\nCode window was not focused. For example, switching git branches in a separate\\nterminal window would still trigger compilation in Metals. Now, Metals waits\\nuntil the VS Code window is focused to trigger compilation.\\n\\nThis feature is implemented as a LSP extension and is currently only supported\\nby VS Code. For details on how to implement this extension for another editor,\\nsee the\\n[documentation on integrating a new text editor](http://scalameta.org/metals/docs/integrations/new-editor#metals-windowstatedidchange).\\n\\n## Metals is now a default server in the Sublime LSP package\\n\\nMetals is now a default server for Scala source files in the LSP package, see\\n[tomv564/LSP#571](https://github.com/tomv564/LSP/pull/571). This greatly\\nsimplifies the installation steps for Sublime Text users.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.5.1..v0.6.1\\n\xd3lafur P\xe1ll Geirsson\\nAdam Gajek\\nTomasz Godzik\\nGabriele Petronella\\nAyoub Benali\\nCody Allen\\nEvgeny Kurnevsky\\nJeffrey Lau\\nMarek \u017barnowski\\nMarkus Hauck\\nGerman Greiner\\n```\\n\\n## Merged PRs\\n\\n- Avoid inifinite loop when shortening types\\n [\\\\#751](https://github.com/scalameta/metals/pull/751)\\n ([olafurpg](https://github.com/olafurpg))\\n- Move releasing info to the website\\n [\\\\#748](https://github.com/scalameta/metals/pull/748)\\n ([gabro](https://github.com/gabro))\\n- Update bloop to 1.3.2 [\\\\#747](https://github.com/scalameta/metals/pull/747)\\n ([tgodzik](https://github.com/tgodzik))\\n- Split build tool and executable name to show properly in output\\n [\\\\#746](https://github.com/scalameta/metals/pull/746)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bloop to 1.3.0 and BSP to 2.0.0-M4\\n [\\\\#745](https://github.com/scalameta/metals/pull/745)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add better hint in the doctor for Maven workspaces\\n [\\\\#744](https://github.com/scalameta/metals/pull/744)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update emacs docs as scala is supported by lsp-mode directly now\\n [\\\\#741](https://github.com/scalameta/metals/pull/741)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Remove Scalafix from pre-push git hook.\\n [\\\\#740](https://github.com/scalameta/metals/pull/740)\\n ([olafurpg](https://github.com/olafurpg))\\n- Setup git hooks for scalafmt and scalafix.\\n [\\\\#738](https://github.com/scalameta/metals/pull/738)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add automatic Mill import to metals\\n [\\\\#737](https://github.com/scalameta/metals/pull/737)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve handling of requests that access the presentation compiler.\\n [\\\\#736](https://github.com/scalameta/metals/pull/736)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enforce scala version for embedded bloop server\\n [\\\\#735](https://github.com/scalameta/metals/pull/735)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure build server shuts down before starting new build connection.\\n [\\\\#731](https://github.com/scalameta/metals/pull/731)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix blogpost typo [\\\\#730](https://github.com/scalameta/metals/pull/730)\\n ([zoonfafer](https://github.com/zoonfafer))\\n- Miscellaneous polish fixes\\n [\\\\#729](https://github.com/scalameta/metals/pull/729)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/codeLens to run main function\\n [\\\\#728](https://github.com/scalameta/metals/pull/728)\\n ([marek1840](https://github.com/marek1840))\\n- Fix newlines in process output.\\n [\\\\#727](https://github.com/scalameta/metals/pull/727)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sublime doc [\\\\#726](https://github.com/scalameta/metals/pull/726)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Fix transitive scala library dependency in Gradle builds.\\n [\\\\#725](https://github.com/scalameta/metals/pull/725)\\n ([tgodzik](https://github.com/tgodzik))\\n- Adds maven integration to metals\\n [\\\\#722](https://github.com/scalameta/metals/pull/722)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use CocRequestAsync in Vim docs\\n [\\\\#717](https://github.com/scalameta/metals/pull/717)\\n ([ceedubs](https://github.com/ceedubs))\\n- Set timeout for shutdown procedure, fixes \\\\#715.\\n [\\\\#716](https://github.com/scalameta/metals/pull/716)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add keyword completion [\\\\#712](https://github.com/scalameta/metals/pull/712)\\n ([markus1189](https://github.com/markus1189))\\n- Make bloop versions customizable via server properties.\\n [\\\\#710](https://github.com/scalameta/metals/pull/710)\\n ([olafurpg](https://github.com/olafurpg))\\n- Pause compile-on-save while the editor window is not focused\\n [\\\\#709](https://github.com/scalameta/metals/pull/709)\\n ([agajek](https://github.com/agajek))\\n- Add gradle support to imports in metals and refactor build tool support.\\n [\\\\#694](https://github.com/scalameta/metals/pull/694)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/04/26/mercury","metadata":{"permalink":"/metals/blog/2019/04/26/mercury","source":"@site/blog/2019-04-26-mercury.md","title":"Metals v0.5.1 - Mercury","description":"This release introduces minor improvements and bug fixes with highlights","date":"2019-04-26T00:00:00.000Z","formattedDate":"April 26, 2019","tags":[],"readingTime":3.29,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.5.1 - Mercury","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"},"nextItem":{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"}},"content":"This release introduces minor improvements and bug fixes with highlights\\nincluding:\\n\\n- auto-imports are inserted at the toplevel instead of locally\\n- document symbol lists inner methods and anonymous classes\\n- the recommended Vim client is now coc.nvim\\n- diagnostics are cleared for deleted files\\n- fuzzy symbol search no longer returns results for deleted files\\n- find all references now handles synthetic `update` calls\\n- deprecate older Scala versions\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this release we merged 15 PRs and closed 7 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/8?closed=1.\\n\\n## Automatic imports are placed globally instead of locally\\n\\nPreviously, auto-imports were placed locally like this:\\n\\n```scala\\nobject Main {\\n import scala.concurrent.Future // <- automatically added by Metals\\n val future = Future@@\\n}\\n```\\n\\nNow, the import is inserted at the toplevel instead\\n\\n```scala\\nimport scala.concurrent.Future // <- automatically added by Metals\\n\\nobject Main {\\n val future = Future@@\\n}\\n```\\n\\n## Document symbols now shows inner methods and anonymous classes\\n\\n**Before**:\\n\\n![image](https://user-images.githubusercontent.com/691940/56455884-dc92d300-6364-11e9-837e-c8aedd13e78d.png)\\n\\n**After**:\\n\\n![image](https://user-images.githubusercontent.com/691940/56455880-cab13000-6364-11e9-910a-4b55854df147.png)\\n\\n## Diagnostics gracefully handle deleted files\\n\\nPreviously, deleting a file with compile errors would result in the stale\\ndiagnostics to stay until you restarted the Metals server. Now, diagnostics are\\ncleared when a source file is deleted.\\n\\n## Fuzzy symbol search gracefully handles deleted files\\n\\nPreviously, fuzzy searching for a symbol could return results from deleted\\nfiles. Now, fuzzy symbol search only shows results from files that exist on\\ndisk.\\n\\n## Find all references handles synthetic `update` calls\\n\\nPreviously, find all references did not catch references where an `update()`\\nmethod call was synthesized.\\n\\n```scala\\nval cache = mutable.Map.empty[String, String]\\ncache(\\"a\\") = \\"b\\" // before: referenced `Map.update()` instead of `cache`\\n```\\n\\nNow, the reference to `cache` in `cache(\\"a\\") = \\"b\\"` is indexed as well as the\\nsynthetic call to the `Map.update()` method.\\n\\n## The recommended Vim client is now coc.nvim\\n\\nPreviously, the\\n[vim installation instructions](https://scalameta.org/metals/docs/editors/vim.html)\\nrecommended the vim-lsc client. Now, the installation instructions recommend\\ncoc.vim since it supports more functionality of the Language Server Protocol. If\\nyou use Vim, we recommend trying out coc.vim to enjoy more advanced features\\nlike completions with auto-imports.\\n\\n## Deprecate older Scala versions\\n\\nMetals works with Scala 2.11 and Scala 2.12. Starting from the next release,\\nMetals will drop support for the older patch versions of those series, and it\\nwill exclusively support these version:\\n\\n- 2.11.12\\n- 2.12.7\\n- 2.12.8\\n\\nStarting from this release, we will show a warning at startup if you\'re using an\\noutdated Scala version, prompting you to upgrade your project to the latest\\nversion.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.5.0..v0.5.1\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nGabriel Volpe\\nJesusMtnez\\nEric Peters\\nArnout Engelen\\nRobin Green\\nTomasz Godzik\\nDavid Strawn\\n```\\n\\n## Merged PRs\\n\\n- Upgrade to latest Scalameta.\\n [\\\\#702](https://github.com/scalameta/metals/pull/702)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add question template [\\\\#701](https://github.com/scalameta/metals/pull/701)\\n ([gabro](https://github.com/gabro))\\n- Don\'t return workspace/symbol results for deleted files.\\n [\\\\#695](https://github.com/scalameta/metals/pull/695)\\n ([olafurpg](https://github.com/olafurpg))\\n- Insert global imports instead of local imports.\\n [\\\\#692](https://github.com/scalameta/metals/pull/692)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix a dead link to Bloop site\\n [\\\\#691](https://github.com/scalameta/metals/pull/691)\\n ([gabro](https://github.com/gabro))\\n- Update a couple .lines to .linesIterator for java11\\n [\\\\#688](https://github.com/scalameta/metals/pull/688)\\n ([er1c](https://github.com/er1c))\\n- Fix typo [\\\\#687](https://github.com/scalameta/metals/pull/687)\\n ([greenrd](https://github.com/greenrd))\\n- Handle document symbols for nested declarations\\n [\\\\#686](https://github.com/scalameta/metals/pull/686)\\n ([gabro](https://github.com/gabro))\\n- Update Emacs docs [\\\\#681](https://github.com/scalameta/metals/pull/681)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Add \\"Coming from IntelliJ\\" section to VS Code docs.\\n [\\\\#678](https://github.com/scalameta/metals/pull/678)\\n ([olafurpg](https://github.com/olafurpg))\\n- Clear diagnostics on build import, fixes \\\\#644.\\n [\\\\#677](https://github.com/scalameta/metals/pull/677)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable flaky test on Appveyor.\\n [\\\\#676](https://github.com/scalameta/metals/pull/676)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update stable version in issue template\\n [\\\\#671](https://github.com/scalameta/metals/pull/671)\\n ([gabro](https://github.com/gabro))\\n- Documenting coc.nvim as the recommended LSP client for Vim\\n [\\\\#665](https://github.com/scalameta/metals/pull/665)\\n ([gvolpe](https://github.com/gvolpe))\\n- Remove Deprecated Usage Of `java.util.Date` API\\n [\\\\#663](https://github.com/scalameta/metals/pull/663)\\n ([isomarcte](https://github.com/isomarcte))\\n- Link to vscode marketplace\\n [\\\\#661](https://github.com/scalameta/metals/pull/661)\\n ([raboof](https://github.com/raboof))\\n- Use correct GIF for signature help on landing page.\\n [\\\\#660](https://github.com/scalameta/metals/pull/660)\\n ([olafurpg](https://github.com/olafurpg))\\n- Document new features and write release announcement.\\n [\\\\#655](https://github.com/scalameta/metals/pull/655)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make detail view in override not show unicode character.\\n [\\\\#654](https://github.com/scalameta/metals/pull/654)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/04/12/mercury","metadata":{"permalink":"/metals/blog/2019/04/12/mercury","source":"@site/blog/2019-04-12-mercury.md","title":"Metals v0.5.0 - Mercury","description":"We are excited to announce the release of Metals v0.5, codename \\"Mercury\\" \ud83c\udf89","date":"2019-04-12T00:00:00.000Z","formattedDate":"April 12, 2019","tags":[],"readingTime":6.49,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.5.0 - Mercury","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"},"nextItem":{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"}},"content":"We are excited to announce the release of Metals v0.5, codename \\"Mercury\\" \ud83c\udf89\\nThis release introduces new features, performance improvements and bug fixes\\nwith highlights including:\\n\\n- code completions\\n- parameter hints\\n- show type at point\\n- code folding\\n- document highlight\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this milestone we merged 76 PRs and closed 26 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/4?closed=1.\\n\\n## Code completions\\n\\nIt\'s now possible to use code completions to explore APIs, implement interfaces,\\ngenerate exhaustive pattern matches and more.\\n\\n![2019-04-12 14 19 39](https://user-images.githubusercontent.com/1408093/56036958-725bac00-5d2e-11e9-9cf7-46249125494a.gif)\\n\\n- **Auto-import**: symbols that are not in scope are automatically imported\\n locally. Imports still need to be organized manually, we are exploring ways to\\n automate this workflow in the future.\\n- **Override def**: implement methods from the super class.\\n- **Exhaustive match**: generate an exhaustive pattern match for sealed types.\\n- **String interpolator**: automatically convert string literals into string\\n interpolators.\\n- **Filename**: complete classnames based on the enclosing file.\\n- **Documentation**: read the docstring for method symbols by pressing\\n ctrl+space in VS Code.\\n\\n## Hover (aka. type at point)\\n\\nIt\'s now possible to see the expression type and symbol signature under the\\ncursor.\\n\\n![](https://i.imgur.com/2MfQvsM.gif)\\n\\n- **Expression type**: shows the non-generic type of the highlighted expression.\\n- **Symbol signature**: shows the generic signature of symbol under the cursor\\n along with its docstring, if available.\\n\\n## Signature help (aka. parameter hints)\\n\\nIt\'s now possible to view a method signature and overloads as you fill in\\narguments.\\n\\n![](https://i.imgur.com/DAWIrHu.gif)\\n\\n## Code folding\\n\\nIt\'s now possible to fold ranges such as large expressions, import groups and\\ncomments.\\n\\n![](https://camo.githubusercontent.com/3fdd7ae28907ac61c0a1ac5fdc07d085245957aa/68747470733a2f2f692e696d6775722e636f6d2f667149554a54472e676966)\\n\\nBig thanks to [@marek1840](https://github.com/marek1840) for contributing this\\nfeature!\\n\\n## Document highlight\\n\\nIt\'s now possible to highlight references to the same symbol in the open file.\\n\\n![](https://i.imgur.com/0uhc9P5.gif)\\n\\nBig thanks to [@tgodzik](https://github.com/tgodzik) for contributing this\\nfeature!\\n\\n## Faster and more relevant fuzzy symbol search\\n\\nPreviously, fuzzy symbol search (`workspace/symbol` in LSP) always returned\\nresults from both the workspace and library dependencies. Now, fuzzy symbol\\nsearch returns only results from the workspace unless the query contains a\\nsemicolon character `;`. For example:\\n\\n- query \\"Future\\": workspace only, with fallback to library dependencies if\\n workspace contains 0 results\\n- queries \\"Future;\\" or \\";Future\\" or \\"Fut;ure\\": workspace + library dependencies.\\n\\n![](https://i.imgur.com/w5yrK1w.gif)\\n\\nThis change improves the quality for the search results since most often you\\nwant to navigate to symbols defined in the workspace. A nice side-effect is that\\nworkspace-only searches are faster because we avoid redundant work by not\\nlooking at library dependencies.\\n\\nIn addition, this release introduces a new in-memory index for workspace-only\\nsymbol queries resulting in even better performance compared to the last\\nrelease.\\n\\n## Goto definition for in-memory edits\\n\\nPreviously, goto definition worked only for identifiers that had been saved and\\nsuccessfully compiled in the build tool. Now, you can use goto definition for\\nsymbols that you just typed even if the source file hasn\'t been saved or\\ncontains type errors.\\n\\n![](https://i.imgur.com/63PYPhX.gif)\\n\\n## Standalone Scala files outside a build tool\\n\\nPreviously, semantic features like goto definition worked only for sources that\\nbelong to a build project. Now, Metals provides completions, parameter hints,\\nhover and definition for local symbols in standalone Scala files. The classpath\\nfor standalone Scala files includes the JDK and the Scala standard library so\\nfeatures like completion will not understand symbols from external library\\ndependencies.\\n\\n**Known limitation**: only syntax errors are published for standalone Scala\\nfiles, the file must belong to a build in order to see type errors.\\n\\n## New collaboration with VirtusLab\\n\\nAs part of a new collaboration between [VirtusLab](https://virtuslab.com/) and\\nthe Scala Center, [Marek \u017barnowski (@marek1840)](https://github.com/marek1840)\\nand [Tomasz Godzik (@tgodzik)](https://github.com/tgodzik) will be contributing\\nto Metals development for the coming months. They have already contributed\\nseveral impressive pull requests:\\n\\n- `textDocument/foldingRange`\\n [(#632)](https://github.com/scalameta/metals/pull/632): code folding that\\n understands Scala syntax.\\n- `textDocument/documentHighlight`\\n [(#621)](https://github.com/scalameta/metals/pull/621): highlight occurrences\\n of a symbol in the current file.\\n- `textDocument/completion`\\n [(#640)](https://github.com/scalameta/metals/pull/640): override def\\n completions from without the need to type \\"override def \\".\\n\\nIt is our pleasure to welcome them to the team and we look forward to working\\ntogether with them to improve the Scala editing experience :)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release! In particular, big\\nthanks to [@jvican](https://github.com/jvican/) and\\n[@gabro](https://github.com/gabro/) for invaluable feedback both online and\\noffline.\\n\\n```\\n$ git shortlog -sn --no-merges v0.4.4..v0.5.0\\n\xd3lafur P\xe1ll Geirsson\\nMarek \u017barnowski\\nJohan Muedsam\\nJesusMtnez\\nTomasz Godzik\\nTim Nieradzik\\nAyoub Benali\\nEric Peters\\nAlexey Alekhin\\nkeiSunagawa\\n```\\n\\n## Merged PRs\\n\\n- Implement goto definition fallback with the presentation compiler.\\n [\\\\#645](https://github.com/scalameta/metals/pull/645)\\n ([olafurpg](https://github.com/olafurpg))\\n- Generate exhaustive pattern match for sealed types.\\n [\\\\#643](https://github.com/scalameta/metals/pull/643)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve quality and performance of workspace/symbol, fixes \\\\#639.\\n [\\\\#642](https://github.com/scalameta/metals/pull/642)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enable workspace query to match package object\\n [\\\\#641](https://github.com/scalameta/metals/pull/641)\\n ([mudsam](https://github.com/mudsam))\\n- Make completions work on overr\\\\ and def\\\\\\n [\\\\#640](https://github.com/scalameta/metals/pull/640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Give CompletionPosition finer control over sorting, fixes \\\\#619.\\n [\\\\#638](https://github.com/scalameta/metals/pull/638)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several UX improvements [\\\\#637](https://github.com/scalameta/metals/pull/637)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use fallback presentation compiler for missing build target.\\n [\\\\#634](https://github.com/scalameta/metals/pull/634)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix six bugs [\\\\#633](https://github.com/scalameta/metals/pull/633)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/foldingRange\\n [\\\\#632](https://github.com/scalameta/metals/pull/632)\\n ([marek1840](https://github.com/marek1840))\\n- Provide fuzzier type member matching and more polished sorting.\\n [\\\\#629](https://github.com/scalameta/metals/pull/629)\\n ([olafurpg](https://github.com/olafurpg))\\n- Sort symbols defined in the current file to the top, fixes \\\\#618.\\n [\\\\#628](https://github.com/scalameta/metals/pull/628)\\n ([olafurpg](https://github.com/olafurpg))\\n- Render @see as links. Improve inline link handling and update test cases.\\n [\\\\#627](https://github.com/scalameta/metals/pull/627)\\n ([mudsam](https://github.com/mudsam))\\n- Disable macro-paradise compiler plugin, fixes \\\\#622.\\n [\\\\#625](https://github.com/scalameta/metals/pull/625)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve completion snippets, fixes \\\\#610.\\n [\\\\#623](https://github.com/scalameta/metals/pull/623)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/documentHighlight\\n [\\\\#621](https://github.com/scalameta/metals/pull/621)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle exceptions when computing completion position.\\n [\\\\#616](https://github.com/scalameta/metals/pull/616)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t eagerly load presentation compiler during tests.\\n [\\\\#614](https://github.com/scalameta/metals/pull/614)\\n ([olafurpg](https://github.com/olafurpg))\\n- Eagerly load presentation compiler for open buffers.\\n [\\\\#605](https://github.com/scalameta/metals/pull/605)\\n ([olafurpg](https://github.com/olafurpg))\\n- Eagerly load Scalafmt during initialized\\n [\\\\#604](https://github.com/scalameta/metals/pull/604)\\n ([olafurpg](https://github.com/olafurpg))\\n- Complete filename when defining toplevel class/trait/object\\n [\\\\#603](https://github.com/scalameta/metals/pull/603)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove signature help fallback in hover.\\n [\\\\#602](https://github.com/scalameta/metals/pull/602)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#599, don\'t insert import above generated parameter accessors\\n [\\\\#600](https://github.com/scalameta/metals/pull/600)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several small fixes [\\\\#597](https://github.com/scalameta/metals/pull/597)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support navigation for library dependencies in Scala versions.\\n [\\\\#596](https://github.com/scalameta/metals/pull/596)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement hover \\\\(aka. type at point\\\\).\\n [\\\\#595](https://github.com/scalameta/metals/pull/595)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix auto-import position around definition annotations, fixes \\\\#593\\n [\\\\#594](https://github.com/scalameta/metals/pull/594)\\n ([olafurpg](https://github.com/olafurpg))\\n- Provide completions on `case` for valid subclasses.\\n [\\\\#592](https://github.com/scalameta/metals/pull/592)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polish snippets when completing with existing parentheses and braces\\n [\\\\#590](https://github.com/scalameta/metals/pull/590)\\n ([olafurpg](https://github.com/olafurpg))\\n- Handle generic unapply signatures in signature help.\\n [\\\\#589](https://github.com/scalameta/metals/pull/589)\\n ([olafurpg](https://github.com/olafurpg))\\n- Explicitly set filter text for all completions.\\n [\\\\#588](https://github.com/scalameta/metals/pull/588)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add server property config to disable features.\\n [\\\\#587](https://github.com/scalameta/metals/pull/587)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add support for non-Lightbend compilers\\n [\\\\#586](https://github.com/scalameta/metals/pull/586)\\n ([tindzk](https://github.com/tindzk))\\n- Fix signature help bug for tuple patterns.\\n [\\\\#585](https://github.com/scalameta/metals/pull/585)\\n ([olafurpg](https://github.com/olafurpg))\\n- Escape keyword identifier in packag prefixes.\\n [\\\\#584](https://github.com/scalameta/metals/pull/584)\\n ([olafurpg](https://github.com/olafurpg))\\n- Filter out ensuring and -\\\\> extension methods from Predef.\\n [\\\\#583](https://github.com/scalameta/metals/pull/583)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include method signature in completion item label.\\n [\\\\#581](https://github.com/scalameta/metals/pull/581)\\n ([olafurpg](https://github.com/olafurpg))\\n- Two completion improvements\\n [\\\\#579](https://github.com/scalameta/metals/pull/579)\\n ([olafurpg](https://github.com/olafurpg))\\n- Insert local import when completing workspace symbol.\\n [\\\\#578](https://github.com/scalameta/metals/pull/578)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Sublime Text doc regarding Goto symbol in workspace\\n [\\\\#577](https://github.com/scalameta/metals/pull/577)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Include `case` completion when writing partial function on tuples.\\n [\\\\#576](https://github.com/scalameta/metals/pull/576)\\n ([olafurpg](https://github.com/olafurpg))\\n- Restart the presentation compile more aggressively.\\n [\\\\#575](https://github.com/scalameta/metals/pull/575)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#573, provide unique filter text for each interpolator completion item\\n [\\\\#574](https://github.com/scalameta/metals/pull/574)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#569, remove completion items with `\\\\_CURSOR\\\\_` name.\\n [\\\\#572](https://github.com/scalameta/metals/pull/572)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement `override def` completions.\\n [\\\\#570](https://github.com/scalameta/metals/pull/570)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make bloop server startup more robust, reuse sockets wherever possible.\\n [\\\\#566](https://github.com/scalameta/metals/pull/566)\\n ([mudsam](https://github.com/mudsam))\\n- Implement type member selection in string interpolators.\\n [\\\\#563](https://github.com/scalameta/metals/pull/563)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Atom info [\\\\#561](https://github.com/scalameta/metals/pull/561)\\n ([laughedelic](https://github.com/laughedelic))\\n- Improve string interpolator completions\\n [\\\\#560](https://github.com/scalameta/metals/pull/560)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove root package from completion results.\\n [\\\\#559](https://github.com/scalameta/metals/pull/559)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve mtags from Sonatype Snapshots, fixes \\\\#554.\\n [\\\\#558](https://github.com/scalameta/metals/pull/558)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable `\\\\(` as commit character.\\n [\\\\#557](https://github.com/scalameta/metals/pull/557)\\n ([olafurpg](https://github.com/olafurpg))\\n- Wrap identifiers in backticks when necessary.\\n [\\\\#556](https://github.com/scalameta/metals/pull/556)\\n ([olafurpg](https://github.com/olafurpg))\\n- Trigger parameter hints command after completion, if supported.\\n [\\\\#552](https://github.com/scalameta/metals/pull/552)\\n ([olafurpg](https://github.com/olafurpg))\\n- Cross-publish mtags for all supported Scala versions.\\n [\\\\#541](https://github.com/scalameta/metals/pull/541)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement completions and signature help.\\n [\\\\#527](https://github.com/scalameta/metals/pull/527)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/02/01/tin","metadata":{"permalink":"/metals/blog/2019/02/01/tin","source":"@site/blog/2019-02-01-tin.md","title":"Metals v0.4.4 - Tin","description":"Metals is a language server for Scala that works with VS Code, Atom, Vim,","date":"2019-02-01T00:00:00.000Z","formattedDate":"February 1, 2019","tags":[],"readingTime":1.965,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.4.4 - Tin","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"},"nextItem":{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"}},"content":"Metals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nIn this milestone we merged 5 PRs, full details:\\nhttps://github.com/scalameta/metals/milestone/5?closed=1.\\n\\n### Improved code navigation\\n\\nSeveral \\"goto definition\\" and \\"find references\\" bugs have been fixed in this\\nrelease. In particular, code navigation should work more reliably now for the\\nfollowing language features\\n\\n- for comprehensions with multiple assignments and guards\\n- eta-expanded methods and functions passed as values\\n- val patterns like `val (a, b) = ...`\\n- named arguments in `apply` methods\\n- repeated parameter types (varargs)\\n\\n### Empty source directories are no longer created\\n\\nPreviously, Metals created all source directories like `src/main/java` and\\n`src/main/scala-2.12` even if they were unused. Now, Metals still creates these\\ndirectories but removes them again after the file watcher has started. Big\\nthanks to first-time contributor [@mudsam](https://github.com/mudsam) for\\nimplementing this fix!\\n\\n### Multiple workspace folders\\n\\nMetals now looks for `.scalafmt.conf` in all workspace folders instead of only\\nthe workspace root.\\n\\n### Avoid `metals.sbt` compile errors on old sbt versions\\n\\nThe generated `metals.sbt` file in `~/.sbt/0.13/plugins/metals.sbt` now compiles\\non all versions of sbt 0.13.x even if Metals itself still only works with sbt\\n0.13.17+.\\n\\n## Visual Studio Code\\n\\nThe Metals extension was installed over 1000 times over the past week!\\n\\n### `JAVA_OPTS`\\n\\nThe Metals extension now respects the `JAVA_OPTS` environment variable the same\\nit does the `.jvmopts` file. For example, set `JAVA_OPTS` to\\n`-Dhttps.proxyHost=\u2026 -Dhttps.proxyPort=\u2026` to configure HTTP proxies. It\'s\\nrecommended to start VS Code with the `code` binary from the terminal to ensure\\nenvironment variables propagate correctly.\\n\\n## Sublime Text\\n\\nThere\'s a WIP pull request\\n[tom654/LSP#501](https://github.com/tomv564/LSP/pull/501) adding support for\\nfuzzy symbol search (`workspace/symbol`). Please upvote with \ud83d\udc4d if you\'d like to\\nuse this feature!\\n\\n## Emacs\\n\\nThere is a new Gitter channel\\n[rossabaker/lsp-scala](https://gitter.im/rossabaker/lsp-scala) for Emacs and\\nMetals users.\\n\\nThe `lsp-scala` package is now published to MELPA\\n[melpa/melpa#5868](https://github.com/melpa/melpa/pull/5868).\\n\\n## Merged PRs\\n\\n- Upgrade to Bloop v1.2.5 [\\\\#513](https://github.com/scalameta/metals/pull/513)\\n ([olafurpg](https://github.com/olafurpg))\\n- Respect workspace folders for Scalafmt formatting, fixes \\\\#509.\\n [\\\\#512](https://github.com/scalameta/metals/pull/512)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix navigation bug for var setters.\\n [\\\\#511](https://github.com/scalameta/metals/pull/511)\\n ([olafurpg](https://github.com/olafurpg))\\n- Upgrade to Scalameta v4.1.3.\\n [\\\\#510](https://github.com/scalameta/metals/pull/510)\\n ([olafurpg](https://github.com/olafurpg))\\n- Change behavior of FileWatcher so that it doesn\'t create non-existing source\\n directories [\\\\#506](https://github.com/scalameta/metals/pull/506)\\n ([mudsam](https://github.com/mudsam))\\n- Reference pluginCrossBuild via reflection to support older sbt 0.13.\\n [\\\\#505](https://github.com/scalameta/metals/pull/505)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/01/24/tin","metadata":{"permalink":"/metals/blog/2019/01/24/tin","source":"@site/blog/2019-01-24-tin.md","title":"Metals v0.4.0 - Tin","description":"We are excited to announce the release of Metals v0.4, codename \\"Tin\\" \ud83c\udf89 Metals","date":"2019-01-24T00:00:00.000Z","formattedDate":"January 24, 2019","tags":[],"readingTime":6.37,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.4.0 - Tin","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"},"nextItem":{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"}},"content":"We are excited to announce the release of Metals v0.4, codename \\"Tin\\" \ud83c\udf89 Metals\\nis a language server for Scala that works with VS Code, Atom, Vim, Sublime Text\\nand Emacs. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nwith contributors from the community.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nIn this release we merged 50 PRs and closed 21 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/4?closed=1.\\n\\n### Upgraded Bloop\\n\\nThis release upgrades from Bloop v1.1.2 to v1.2.5, which includes several\\nimprovements to diagnostics and compilation performance. See release notes for\\nmore details and upgrade guide.\\n\\n- [v1.2.5](https://github.com/scalacenter/bloop/releases/tag/v1.2.5)\\n- [v1.2.4](https://github.com/scalacenter/bloop/releases/tag/v1.2.4)\\n- [v1.2.3](https://github.com/scalacenter/bloop/releases/tag/v1.2.3)\\n- [v1.2.1](https://github.com/scalacenter/bloop/releases/tag/v1.2.1)\\n- [v1.2.0](https://github.com/scalacenter/bloop/releases/tag/v1.2.0)\\n\\nMajor props to [@jvican](https://github.com/jvican) for his great work on Bloop.\\nBloop does the heavy lifting around build import and compilation for Metals.\\n\\n### Syntax errors as you type\\n\\nPreviously, Metals only published compile errors from the build on file save.\\nNow, a syntax error is also published as you type making it easier to catch\\ncommon errors like unclosed string literals and missing parentheses.\\n\\n![Syntax errors as you type](https://i.imgur.com/2nzeSQv.gif)\\n\\nThis change has an additional benefit in editors like Vim where compile errors\\nwould previously disappear if you for example inserted a newline above an error.\\nNow, Metals updates the positions of errors as you type.\\n\\n### Faster and more reliable clearing of fixed compile errors\\n\\nA bug where red squiggles for fixed errors would occasionally not be cleared has\\nnow been fixed.\\n\\nAlso red squiggles for fixed errors disappear faster thanks to an improvement in\\nBloop. Previously, diagnostics were cleared after the bytecode generation phase\\nin the compiler and now they are cleared after the typer phase.\\n\\n### More detailed compilation progress\\n\\nThe status bar now includes information which individual build targets are being\\ncompiled along with a percentage estimate for how much remains of the\\ncompilation.\\n\\n![Detailed compile progress](https://i.imgur.com/fbQysxW.gif)\\n\\n### Cascade compile command\\n\\nUse the new \\"Cascade compile\\" command to trigger compilation in downstream build\\ntargets in the workspace. For example, if you have made changes in the main\\nsources of you project you can run cascade compile to trigger compilation in the\\ntest sources.\\n\\n![Cascade compile](https://i.imgur.com/EbKPn6g.png)\\n\\n### Formatting with Scalafmt\\n\\nIt\'s now possible to format code with\\n[Scalafmt](https://scalameta.org/scalafmt/).\\n\\n![Formatting with scalafmt](https://user-images.githubusercontent.com/1408093/50635748-b0894880-0f53-11e9-913b-acfd5f505351.gif)\\n\\nIt\'s possible to use different version of Scalafmt between different workspaces.\\nTo configure which Scalafmt version to use for a given workspace update the\\n`version` setting in `.scalafmt.conf`.\\n\\n```conf\\n# .scalafmt.conf\\nversion = \\"1.5.1\\"\\n```\\n\\n### Symbol outline\\n\\nIt\'s now possible to browse the symbol outline of a source file.\\n\\n![Document Symbols](https://user-images.githubusercontent.com/1408093/50635569-014c7180-0f53-11e9-8898-62803898781c.gif)\\n\\nMetals returns a hierarchical outline for editor that support it (like Visual\\nStudio Code, Atom, Emacs) and otherwise returns a flat outline.\\n\\n### Find symbol references\\n\\nIt\'s now possible to look up all usages of a given symbol in the workspace.\\n\\n![Find symbol references](https://user-images.githubusercontent.com/1408093/51531254-3a368280-1e3d-11e9-8df2-4560c6294e35.gif)\\n\\n### Fuzzy symbol search\\n\\nIt\'s now possible to look up a symbol definition in the workspace or library\\ndependencies by typing its name. All-lowercase queries are treated as\\ncase-insensitive searches.\\n\\n![Fuzzy symbol search example](https://user-images.githubusercontent.com/1408093/51537603-44fa1300-1e4f-11e9-84f2-eb7d4c6fc7ef.gif)\\n\\nThis feature is not supported yet in Sublime Text.\\n\\n### Blog post on low-memory symbol indexing with Bloom filters\\n\\nRead the post\\n[\\"Low-memory symbol indexing with bloom filters\\"](https://olafurpg.github.io/metals/blog/2019/01/22/bloom-filters.html)\\nto learn how Metals implements indexing for the features \\"fuzzy symbol search\\"\\nand \\"find symbol references\\".\\n\\n## Visual Studio Code\\n\\nFull changelog:\\nhttps://github.com/scalameta/metals-vscode/blob/master/CHANGELOG.md\\n\\n### Lower default memory settings\\n\\nThe extension now starts Metals with the JVM option `-Xms100M` instead of\\n`-Xms1G`. The exact memory usage of Metals depends on the size of the project\\nand whether Bloop is installed on the computer or not, but only 50-100Mb can be\\nsufficient memory for Metals in many cases.\\n\\n### Improved Java home detection\\n\\nThe extension now chooses the latest available JDK home for Java 8. Previously,\\nthe extension sometimes picked the JRE over JDK or an older version of Java 8\\nwhen newer security updates were installed on the computer.\\n\\n### .jvmopts detection\\n\\nThe extension now uses JVM options from `.jvmopts` when launching Metals so it\'s\\npossible to configure HTTP proxy settings without custom configuration. Memory\\noptions like `-Xms100M` are ignored in `.jvmopts`, use the \\"Server Properties\\"\\nsetting to customize memory settings.\\n\\n## Vim\\n\\nIt\'s recommended to update vim-lsc to the latest version, full changelog:\\nhttps://github.com/natebosch/vim-lsc/blob/master/CHANGELOG.md\\n\\n### Update log_level setting\\n\\nA recent change in how log messages are displayed makes the status bar updates\\nfrom Metals disappear unless you set the default `log_level` setting to `Log`.\\nUpdate `.vimrc` as follows:\\n\\n```diff\\n let g:lsc_server_commands = {\\n- \\\\ \'scala\': \'metals-vim\'\\n+ \\\\ \'scala\': {\\n+ \\\\ \'command\': \'metals-vim\',\\n+ \\\\ \'log_level\': \'Log\'\\n+ \\\\ }\\n+ \\\\}\\n```\\n\\n### View multi-line error messages\\n\\nRun the new `:LSClientLineDiagnostics` command to display all diagnostics on the\\ncurrent line and to un-truncate multi-line error messages. Big thanks to\\n[@ayoub-benali](https://github.com/ayoub-benali) for contributing several\\n[improvements to LSP](https://github.com/tomv564/LSP/pulls?q=is%3Apr+author%3Aayoub-benali+sort%3Aupdated-desc).\\n\\n## Sublime Text\\n\\nIt\'s recommended to upgrade to LSP v0.8.1, full changelogs:\\n\\n- https://github.com/tomv564/LSP/releases/tag/0.8.1\\n- https://github.com/tomv564/LSP/releases/tag/0.8.0\\n\\n### Built-in \\"import build\\" dialogue\\n\\nIt\'s now possible to respond to the \\"Import build\\" dialogue from Sublime Text\\nwithout using the HTTP server.\\n\\n### Manual \\"import build\\" command\\n\\nIt\'s now possible to manually trigger a build import from the command palette.\\n\\n![Import build command](https://i.imgur.com/LViPc95.png)\\n\\nSee\\n[manually trigger build import](https://scalameta.org/metals/docs/editors/sublime#manually-trigger-build-import)\\nfor instructions how to configure this command.\\n\\n## Emacs\\n\\nThe\\n[Emacs installation instructions](https://scalameta.org/metals/docs/editors/emacs.html)\\nhave been improved thanks to [@JesusMtnez](https://github.com/JesusMtnez).\\n\\n## Merged PRs\\n\\n- Trigger didFocus when current compile may affect focused buffer.\\n [\\\\#500](https://github.com/scalameta/metals/pull/500)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several polish improvements to workspace symbols\\n [\\\\#498](https://github.com/scalameta/metals/pull/498)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update sublime doc for manual build import trigger\\n [\\\\#495](https://github.com/scalameta/metals/pull/495)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Handle sbt pluginsDirectory as symbolic link\\n [\\\\#417](https://github.com/scalameta/metals/pull/417)\\n ([gabro](https://github.com/gabro))\\n- Update feature_request.md\\n [\\\\#491](https://github.com/scalameta/metals/pull/491)\\n ([gabro](https://github.com/gabro))\\n- Avoid redundant didFocus compiles, fixes \\\\#483.\\n [\\\\#488](https://github.com/scalameta/metals/pull/488)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polish before v0.4 release.\\n [\\\\#485](https://github.com/scalameta/metals/pull/485)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Emacs docs [\\\\#484](https://github.com/scalameta/metals/pull/484)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Upgrade to Bloop v1.2.4 [\\\\#481](https://github.com/scalameta/metals/pull/481)\\n ([olafurpg](https://github.com/olafurpg))\\n- Clean up indexing pipeline.\\n [\\\\#480](https://github.com/scalameta/metals/pull/480)\\n ([olafurpg](https://github.com/olafurpg))\\n- Avoid duplicate classpath indexing.\\n [\\\\#477](https://github.com/scalameta/metals/pull/477)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support navigation for visited dependency sources via workspace/symbol.\\n [\\\\#476](https://github.com/scalameta/metals/pull/476)\\n ([olafurpg](https://github.com/olafurpg))\\n- Limit classpath search to jars.\\n [\\\\#475](https://github.com/scalameta/metals/pull/475)\\n ([olafurpg](https://github.com/olafurpg))\\n- Small fixes to workspace symbol\\n [\\\\#472](https://github.com/scalameta/metals/pull/472)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement workspace/symbol to search symbol by name.\\n [\\\\#471](https://github.com/scalameta/metals/pull/471)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement fast, low-overhead and synthetics-aware find references.\\n [\\\\#469](https://github.com/scalameta/metals/pull/469)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add \\"Cascade compile\\" and \\"Cancel compile\\" tasks.\\n [\\\\#467](https://github.com/scalameta/metals/pull/467)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve \\"No SemanticDB\\" error message\\n [\\\\#466](https://github.com/scalameta/metals/pull/466)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve the status bar redirection to window/logMessage\\n [\\\\#465](https://github.com/scalameta/metals/pull/465)\\n ([olafurpg](https://github.com/olafurpg))\\n- Lower recommended memory settings.\\n [\\\\#464](https://github.com/scalameta/metals/pull/464)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable SbtSlowSuite in Appveyor CI.\\n [\\\\#460](https://github.com/scalameta/metals/pull/460)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve diagnostic reporting.\\n [\\\\#459](https://github.com/scalameta/metals/pull/459)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add test case for \\"missing scalafmt version\\"\\n [\\\\#458](https://github.com/scalameta/metals/pull/458)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use scalafmt-dynamic module to simplify formatting implementation.\\n [\\\\#452](https://github.com/scalameta/metals/pull/452)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve compilation tracking in the status bar.\\n [\\\\#451](https://github.com/scalameta/metals/pull/451)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve eglot documentation\\n [\\\\#450](https://github.com/scalameta/metals/pull/450)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Feature/appveyor memory limits\\n [\\\\#449](https://github.com/scalameta/metals/pull/449)\\n ([PanAeon](https://github.com/PanAeon))\\n- Preinit sbt on appveyor, because it usually fails the first time\\n [\\\\#448](https://github.com/scalameta/metals/pull/448)\\n ([PanAeon](https://github.com/PanAeon))\\n- Add note to Emacs docs about Eglot usage\\n [\\\\#446](https://github.com/scalameta/metals/pull/446)\\n ([olafurpg](https://github.com/olafurpg))\\n- Removed ansi colors & fixed TimerSuite for non standard locales\\n [\\\\#445](https://github.com/scalameta/metals/pull/445)\\n ([entangled90](https://github.com/entangled90))\\n- Update sublime doc to reflect the changes in the LSP plugin\\n [\\\\#443](https://github.com/scalameta/metals/pull/443)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Upgrade to mdoc v1.0.0 [\\\\#442](https://github.com/scalameta/metals/pull/442)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add snapshot resolver since we\'re publishing snapshots\\n [\\\\#441](https://github.com/scalameta/metals/pull/441)\\n ([mpollmeier](https://github.com/mpollmeier))\\n- Document textDocument/documentSymbol and textDocument/formatting\\n [\\\\#440](https://github.com/scalameta/metals/pull/440)\\n ([gabro](https://github.com/gabro))\\n- Remove -Dmetals.documentSymbol in favor of client capabilities\\n [\\\\#439](https://github.com/scalameta/metals/pull/439)\\n ([gabro](https://github.com/gabro))\\n- Fix wrong log [\\\\#437](https://github.com/scalameta/metals/pull/437)\\n ([gabro](https://github.com/gabro))\\n- Add log when skipping formatting of a file due to Scalafmt configuration\\n [\\\\#436](https://github.com/scalameta/metals/pull/436)\\n ([gabro](https://github.com/gabro))\\n- Don\'t attempt build import if sbt version is \\\\< 0.13.17\\n [\\\\#434](https://github.com/scalameta/metals/pull/434)\\n ([gabro](https://github.com/gabro))\\n- Implement textDocument/formatting using Scalafmt\\n [\\\\#429](https://github.com/scalameta/metals/pull/429)\\n ([gabro](https://github.com/gabro))\\n- Move critical file watching in-house.\\n [\\\\#427](https://github.com/scalameta/metals/pull/427)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/documentSymbols\\n [\\\\#424](https://github.com/scalameta/metals/pull/424)\\n ([gabro](https://github.com/gabro))\\n- Add test to CreateDirectoriesSuite\\n [\\\\#421](https://github.com/scalameta/metals/pull/421)\\n ([gabro](https://github.com/gabro))\\n- Improve Emacs docs [\\\\#419](https://github.com/scalameta/metals/pull/419)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Fix incorrect docs [\\\\#418](https://github.com/scalameta/metals/pull/418)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add more steps to release process.\\n [\\\\#414](https://github.com/scalameta/metals/pull/414)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/01/22/bloom-filters","metadata":{"permalink":"/metals/blog/2019/01/22/bloom-filters","source":"@site/blog/2019-01-22-bloom-filters.md","title":"Low-memory symbol indexing with bloom filters","description":"The latest Metals release introduces three new in-memory indexes to implement","date":"2019-01-22T00:00:00.000Z","formattedDate":"January 22, 2019","tags":[],"readingTime":12.545,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Low-memory symbol indexing with bloom filters","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"},"nextItem":{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"}},"content":"The latest Metals release introduces three new in-memory indexes to implement\\nthe features \\"find symbol references\\" and \\"fuzzy symbol search\\". Indexes are\\nimportant to provide fast response times for user requests but they come at the\\nprice of higher memory usage. To keep memory usage low, Metals uses a data\\nstructure called bloom filters that implements space-efficient sets. Thanks to\\nbloom filters, the three new indexes added in the last release use only a few\\nmegabytes of memory even for large projects with >500k lines of code.\\n\\nIn this post, we look into how Metals uses bloom filters for fast indexing with\\nsmall memory footprint. We explain what bloom filters are and how we can encode\\nproblems like fuzzy searching to take advantage of the nice properties of bloom\\nfilters. Finally, we evaluate these new features on a real-world project: the\\n[Akka](https://github.com/akka/akka) build.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe work presented in this post was done as part of my job at the\\n[Scala Center](https://scala.epfl.ch/).\\n\\n## Bloom filters\\n\\n[Bloom filters](https://en.wikipedia.org/wiki/Bloom_filter) are a probabilistic\\ndata structure that implements space-efficient sets. The difference between a\\nbloom filter and a regular set such as `HashSet` is that bloom filters have the\\nfollowing limitations:\\n\\n- the `contains(element)` method may return false positives, meaning it can\\n occasionally return true even when the element is not a member of the set.\\n- when creating a bloom filter, you must provide an estimate for how many\\n elements will be added to the set. A large estimate results in lower false\\n positive rates for the `contains(element)` method at the cost of higher space\\n usage. Conversely, a low estimate results in lower memory usage at the cost of\\n higher false positives for the `contains(element)` method.\\n- you can\'t iterate through the elements of a bloom filter.\\n\\nIn exchange for these limitations, bloom filters are able to compress a large\\nnumber of elements into a small number of bits. Due to their space-efficiency,\\nbloom filters are used in many applications ranging from browsers, CDNs and\\ncryptocurrencies. In the next sections, we\'ll explore how bloom filters can also\\nbe used in the context of a language server like Metals.\\n\\n## Find symbol references\\n\\nThe \\"find symbol references\\" feature shows all usages of a given symbol. For\\nexample, in the demo below we find 843 references to the method `Actor.sender()`\\nin the Akka build.\\n\\n![Find symbol references example](https://user-images.githubusercontent.com/1408093/51531254-3a368280-1e3d-11e9-8df2-4560c6294e35.gif)\\n\\nFind symbol references is helpful for users when exploring a codebase and it\'s\\nalso an important component for Metals to implement other features down the road\\nsuch as \\"rename symbol\\".\\n\\nThe challenge when implementing find references is that large projects have many\\nsymbol references. Iterating through all symbol references for every source file\\non every request is too slow. Most symbols appear only in a few source files so\\nwe need some way to reduce the search space.\\n\\nMetals uses bloom filters to reduce the number of files we search when looking\\nfor a symbol reference. For every file on disk, we keep an in-memory bloom\\nfilter which contains the set of all referenced symbols in that file. When\\nlooking for references to a given symbol, we skip files\xa0when their accompanying\\nbloom filter does not contain a reference to that symbol. False positive results\\nfrom the bloom filter are not a problem\xa0because they only slow down the response\\nbut don\'t compromise the correctness of the final result.\\n\\nConcretely, Metals keeps an in-memory map where keys are paths to source files\\nin the workspace.\\n\\n```scala\\nval references: Map[Path, BloomFilter[Symbol]]\\n```\\n\\nThe values represent the set of\\n[SemanticDB symbols](https://scalameta.org/docs/semanticdb/specification.html)\\nreferenced in that file. A nice property of keying the map by file paths is that\\nwe can incrementally update the map as files change. When a file is re-compiled\\nproducing a new SemanticDB file, we throw out the old bloom filter and compute a\\nnew one from scratch.\\n\\nTo implement the search, we iterate through all entries of the map and only read\\nSemanticDB files from disk when their accompanying bloom filter contains the\\nquery symbol (recap: false positives are OK).\\n\\n```scala\\nval query = // ...\\nfor {\\n (path, bloom) <- references\\n if bloom.mightContain(query)\\n symbolOccurrence <- readSemanticdbOccurrences(path) // read from disk\\n if isSameSymbol(query, symbolOccurrence)\\n} yield symbolOccurrence\\n```\\n\\nIn the actual Metals implementation, we additionally take care of adjusting\\npositions of the results in case the source file contents have changed since the\\nSemanticDB file was created.\\n\\n## Fuzzy symbol search\\n\\nThe \\"fuzzy symbol search\\" feature allows you to navigate to a symbol definition\\nin the workspace sources or library dependencies by typing the symbol\'s name.\\n\\n![Fuzzy symbol search example](https://user-images.githubusercontent.com/1408093/51537603-44fa1300-1e4f-11e9-84f2-eb7d4c6fc7ef.gif)\\n\\nThe search is fuzzy, meaning the query doesn\'t have to be an exact match or a\\nsubstring match with the target symbol. For example, we want the query `ReaSer`\\nto match the symbol `ReactDOMServer`. Additionally, all-lowercase queries are\\ntreated as case-insensitive so that searching for `nelis` matches the symbol\\n`NonEmptyList`.\\n\\nLike with find symbol references, the challenge when implementing fuzzy symbol\\nsearch is that we have little time to respond and a lot of symbols to search.\\nTesting\xa0the search query against every source file the workspace and every entry\\nin the library classpath is too slow.\\n\\nMetals uses bloom filters to reduce the search space so that we only look at\\nplaces that are likely to contain matches for the query. We have two different\\nindexes, one for workspace sources and another one for the library classpath.\\n\\n### Workspace sources\\n\\nThe first index is a map keyed by source files in the workspace.\\n\\n```scala\\nval inWorkspace: Map[Path, BloomFilter[String]]\\n```\\n\\nThe values of the map is the set of all possible sub-queries that match symbols\\ndefined in that source file. For example, consider the code below.\\n\\n```scala\\npackage data\\nclass NonEmptyListSpec { ... }\\nobject Props { ... }\\n```\\n\\nFor this source file, we insert the following sub-queries into the index.\\n\\n```txt\\nd\\nda\\ndat\\ndata\\nN\\nNo\\nNon\\nL\\nLi\\nLis\\nList\\nS\\nSp\\nSpe\\nSpec\\nNEL\\nNES\\nELS\\nP\\nPr\\nPro\\nProp\\nProps\\n```\\n\\nWhen searching for a query like `NoLi`, we split the query into the words `No`\\nand `Li` and visit only files whose bloom filter contains all of those exact\\nsub-queries. We include trigrams of the uppercase characters to further reduce\\nthe search space for queries like `NELS` that have few lowercase character.\\n\\nFor all-lowercase queries, we return the union of results from multiple\\ncapitalization combinations in order to support case-insensitive searches. For\\nexample, the query `neli` returns all results matching any of the following\\nqueries.\\n\\n```txt\\nneli\\nNeli\\nNEli\\nNeLi\\nNelI\\nNELi\\nNElI\\nNeLI\\nNELI\\n```\\n\\nTo implement the search, we iterate through all entries of the in-memory map and\\nonly visit the source files on disk whose bloom filter contain a match for the\\nquery.\\n\\n```scala\\nval query = ...\\nfor {\\n (file, bloom) <- inWorkspace\\n if bloom.mightContain(query)\\n symbol <- parseSymbols(file) // reads from disk\\n if isFuzzyMatch(query, symbol)\\n} yield symbol\\n```\\n\\nLike with find symbol references, false positive results from the bloom filter\\nslow down the response but don\'t compromise the correctness of the result. Also,\\nwe incrementally update the map as files in the workspace change by removing old\\nentries and compute a new bloom filter for the updated source file.\\n\\n### Library classpath\\n\\nThe library classpath index is similar to the workspace sources index except the\\nkeys of the map are package symbols (example `scala/collection/`) instead of\\nfile paths.\\n\\n```scala\\nval inClasspath: Map[Symbol, (BloomFilter[String], Seq[Symbol])]\\n```\\n\\nUnlike the workspace sources index, the library classpath index does not need to\\nbe incrementally updated when files re-compile. The bloom filters in the values\\nof the map use the same sub-query technique as the bloom filters in the\\nworkspace sources index. For each bloom filter, we additionally store a listing\\nof all members of that package. If a query matches a given bloom filter, we test\\nthe fuzzy search against all members of the package.\\n\\n```scala\\nval query = ...\\nfor {\\n (pkg, (bloom, packageMembers)) <- inClasspath\\n if bloom.mightContain(query)\\n member <- packageMembers\\n if isFuzzyMatch(query, symbol(pkg, member))\\n definitionOnDisk <- findDefinition(member) // writes to disk\\n} yield definitionOnDisk\\n```\\n\\nDue to how the Language Server Protocol works, the `findDefinition` method\\nwrites sources of library dependencies to disk so the editor can find the symbol\\ndefinition location. To reduce the number of files written to disk, Metals\\nlimits the number of non-exact search results from the library classpath index.\\n\\nIn the actual Metals implementation, the listing of package members is GZIP\\ncompressed to reduce memory usage and the members are decompressed on-demand\\nwhen a bloom filter matches the query.\\n\\n## Evaluation\\n\\nWe test Metals on the [Akka codebase](https://github.com/akka/akka) to evaluate\\nthe performance of our bloom filter indexes. Akka is a library to build highly\\nconcurrent, distributed, and resilient message-driven applications on the JVM.\\n\\n![Akka repository](https://user-images.githubusercontent.com/1408093/51541018-159bd400-1e58-11e9-9181-cf2e32a0a40b.png)\\n\\nThe Akka codebase has 300-600k lines of code depending on whether you include\\ncomments and/or Java sources. Metals indexes both Java and Scala sources for\\nfuzzy symbol search but only Scala sources for find symbol references.\\n\\n```\\n$ git clone https://github.com/akka/akka.git\\n$ cd akka\\n$ loc\\nLanguage Files Lines Blank Comment Code\\nScala 1,951 358,149 57,528 76,605 224,016\\nJava 486 250,609 19,838 51,291 179,480\\n```\\n\\nWe open the base directory with Visual Studio Code and update the \\"Metals Server\\nProperties\\" setting to `-Dmetals.statistics=all` to enable additional\\nlogging\xa0output. We import the build, open the file `Actor.scala` and wait until\\ncompilation has finished. It is normal if this step takes several minutes to\\ncomplete.\\n\\n### Response times\\n\\nFirst, we measure the response times for find symbol references.\\n\\n```\\ntime: found 8 references to symbol \'akka/actor/ActorCell.contextStack.\' in 8ms\\ntime: found 11 references to symbol \'akka/actor/Actor#postRestart().\' in 17ms\\ntime: found 146 references to symbol \'akka/actor/PoisonPill.\' in 0.16s\\ntime: found 163 references to symbol \'scala/collection/IterableLike#head().\' in 0.23s\\ntime: found 1027 references to symbol \'akka/actor/Actor#\' in 0.5s\\ntime: found 816 references to symbol \'scala/package.Throwable#\' in 0.63s\\ntime: found 6103 references to symbol \'scala/Predef.String#\' in 1.54s\\n```\\n\\nResponse times range from 8ms up to 1.6s depending on the number of results. The\\n6103 references to `String` origin from 913 source files, which is almost half\\nof all Scala source files in the repository. These numbers do not take into\\naccount the delay in the editor to display the results in the UI. For large\\nresults like `String`, this delay can be several seconds depending on the\\neditor.\\n\\nNext, we measure the response times for fuzzy symbol search.\\n\\n```\\ntime: found 0 results for query \'ConfigSEr\' in 13ms\\ntime: found 10 results for query \'ConfigSer\' in 0.1s\\ntime: found 105 results for query \'ActorRef\' in 0.21s\\ntime: found 105 results for query \'actorref\' in 0.31s\\ntime: found 1002 results for query \'actor\' in 0.54s\\ntime: found 3974 results for query \'S\' in 1.98s\\n```\\n\\nResponse times range from 13ms up to 2s depending on the query and number of\\nresults. Queries with typos like `ConfigSEr` have 0 results and respond\\ninstantly, while generic queries like `S` have ~4k results and take 2 seconds to\\nrespond. Observe that all-lowercase queries like `actorref` are slower than\\ncapitalized queries like `ActorRef`, which is expected because we test multiple\\ncapitalization combinations for case-insensitive searches.\\n\\n### Memory usage\\n\\nNext, we look at the memory usage of the bloom filter indexes. The numbers are\\ncomputed with [JOL](https://openjdk.java.net/projects/code-tools/jol/)\\n`GraphLayout` and the element counts are approximate number of insertions into\\nthe bloom filters.\\n\\n```\\nmemory: references index using 3.72M (274,747 elements)\\nmemory: workspace symbol index using 1.89M (173,419 elements)\\nmemory: classpath symbol index using 1.72M (382,243 elements)\\n```\\n\\nThe three bloom filter indexes use 8Mb combined for the entire Akka build. The\\n8Mb include the maps with file/symbol keys and also a GZIP compressed listing of\\npackage members for the classpath symbol index. For comparison, the\\n[goto definition index](https://scalameta.org/metals/blog/2018/12/12/fast-goto-definition.html)\\nthat does not use bloom filters requires 16Mb alone.\\n\\n```\\nmemory: definition index using 15.9M (337,532 lines Scala)\\n```\\n\\n### Indexing time\\n\\nNext, we look at the time it takes to construct the indexes after build import.\\n\\n```\\ntime: imported build in 2.41s\\ntime: updated build targets in 0.12s\\ntime: started file watcher in 4.36s\\ntime: indexed library classpath in 0.8s\\ntime: indexed workspace SemanticDBs in 2.18s\\ntime: indexed workspace sources in 3.35s\\ntime: indexed library sources in 1.59s\\n```\\n\\nThe Akka build contains many source files but few library dependencies. The\\nbottle-neck appears to be starting the file watcher and parsing all `*.scala`\\nand `*.java` sources in the workspace. The following flamegraph shows a detailed\\nbreakdown of what goes on during indexing.\\n\\n![Akka indexing flamegraph](https://i.imgur.com/Xhr1wXp.jpg)(https://geirsson.com/assets/metals-akka-initialize.svg)\\n\\n> Click on image to interactively explore the flamegraph.\\n\\nSome observations:\\n\\n- it\'s slower to start the file watcher than compute all three indexes for find\\n symbol references and fuzzy symbol search, combined.\\n- the method `BloomFilter.put()` accounts for 2.26% of the total runtime.\\n\\nFor comparison, below is another flamegraph for the same indexing pipeline but\\nin a different project, [Prisma](https://github.com/prisma/prisma). The total\\nindexing time is around 8 seconds on a cold server for both Akka and Prisma but\\nthe distribution is different for how long each indexing task takes. Prisma has\\nfewer sources (80k lines of Scala code, no Java) and a larger number of library\\ndependencies compared to Akka.\\n\\n![Prisma indexing flamegraph](https://i.imgur.com/JR3SNx6.jpg)(https://geirsson.com/assets/metals-prisma-initialize.svg)\\n\\n> Click on image to interactively explore the flamegraph.\\n\\nComputing the bloom filter indexes for find symbol references and fuzzy symbol\\nsearch takes proportionally even less time in Prisma compared to Akka. The\\nPrisma project is a good representation\xa0for projects with less than 100k lines\\nof code and a large number of library dependencies.\\n\\n## Conclusion\\n\\nMetals uses three bloom filter indexes to implement the features \\"find symbol\\nreferences\\" and \\"fuzzy symbol search\\". On a case study project containing 600k\\nlines of code, all three indexes use 8Mb of memory combined and enable\\nsub-second response times for most user requests. Response times for fuzzy\\nsymbol search is occasionally slower for short queries like `S` but this\\nlimitation is not inherent with the bloom filter indexing approach and may be\\naddressed in future releases.\\n\\nComputing the bloom filter indexes takes 4s in our case-study project, out of\\ntotal 16s for the combined \\"import build\\" and \\"indexing\\" steps. These steps run\\nwhenever Metals starts in an existing project or after the build changes. Can\\nindexing be made faster? Probably yes, but the user experience will still remain\\nbottle-necked by sbt build export and compilation of workspace sources, which\\nfrequently take many minutes\xa0to complete on large projects.\\n\\nThe indexes are in-memory maps where the keys are file paths and values are\\nbloom filters. When files change, we can incrementally update the indexes\xa0by\\ncomputing a new bloom filter for the updated source file.\\n\\nThe bloom filter indexes are only used to narrow down the search space by\\neliminating files and packages that don\'t contain relevant results for the user\\nquery. False positive results slow down response times but don\'t compromise the\\ncorrectness of the final result.\\n\\nTry out Metals today with VS Code, Atom, Vim, Sublime Text or Emacs using the\\ninstallation instructions here\\nhttps://scalameta.org/metals/docs/editors/overview.html.\\n\\nThe indexer is working when the status bar says `Indexing\u280b`\\n![Indexing status bar](https://i.imgur.com/6VLPu9c.gif)"},{"id":"/2018/12/14/iron","metadata":{"permalink":"/metals/blog/2018/12/14/iron","source":"@site/blog/2018-12-14-iron.md","title":"Metals v0.3.2 - Iron","description":"We are pleased to announce the release of Metals v0.3.2. Metals is a language","date":"2018-12-14T00:00:00.000Z","formattedDate":"December 14, 2018","tags":[],"readingTime":1.595,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.3.2 - Iron","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"},"nextItem":{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"}},"content":"We are pleased to announce the release of Metals v0.3.2. Metals is a language\\nserver for Scala that works with VS Code, Atom, Vim, Sublime Text and Emacs.\\nMetals is developed at the [Scala Center](https://scala.epfl.ch/) with\\ncontributors from the community.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nFull details: https://github.com/scalameta/metals/milestone/3?closed=1\\n\\nIn this release we closed 7 issues and merged 17 PRs.\\n\\n### Improved sbt launcher\\n\\nMetals now respects `.sbtopts` and `.jvmopts` when running `sbt bloopInstall`.\\nIf you need further customization like reading environment variables, then you\\ncan configure the \\"Sbt Script\\" setting (`-Dmetals.sbt-script=/path/to/sbt`).\\n\\n![sbt script](https://user-images.githubusercontent.com/1408093/50009698-e4f29000-ffb7-11e8-8d05-acb11f575748.png)\\n\\n### Build server discovery\\n\\nMetals now works with any build tool that implements\\n[\\"BSP Connection Protocol\\"](https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#bsp-connection-protocol).\\nSee the Metals docs for more information:\\nhttps://scalameta.org/metals/docs/integrations/new-build-tool#custom-build-server\\n\\n### Blog post on fast goto definition with low memory footprint\\n\\nNew blog post on how Metals implements Goto Definition:\\nhttps://scalameta.org/metals/blog/2018/12/12/fast-goto-definition.html\\n\\n## VS Code\\n\\nRelease notes: https://github.com/scalameta/metals-vscode/releases/tag/v1.1.0\\n\\n### Improved Java home detection\\n\\nThe extension now automatically detects a Java 8 home directory even if Java 11\\nis installed on the computer. Also, the extension now works for `jenv` users.\\n\\n### Outdated server version detection\\n\\nThe extension now automatically detects when you have a custom \\"Server Version\\"\\nsetting with an outdated version.\\n\\n![Reload Window](https://user-images.githubusercontent.com/1408093/50012764-cdb7a080-ffbf-11e8-9549-82ec6c216376.jpg)\\n\\n## Sublime Text\\n\\nThe Metals process now exits when Sublime Text quits so that you no longer end\\nup with zombie `metals-sublime` processes.\\n\\n[@ayoub-benali](https://github.com/ayoub-benali) has contributed several\\nimprovements to [tomv564/LSP](https://github.com/tomv564/LSP) to improve the\\nexperience of using Metals with Sublime Text.\\n\\nWatch the\\n[scalameta/metals-sublime](https://github.com/scalameta/metals-sublime/)\\nrepository for updates on further improvements to the Sublime Text integration.\\n\\n## Emacs\\n\\nThe website now documents the installation steps for Emacs:\\nhttps://scalameta.org/metals/docs/editors/emacs.html\\n\\nNote that the Emacs LSP client has several known issues so the experience is not\\nas good as it could be.\\n\\n## Contributors\\n\\nBig thanks to all contributors who reported issues, reviewed PRs and contributed\\ncode!\\n\\n```sh\\n$ git shortlog -sn --no-merges v0.3.1..v0.3.2\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nChris\\nJakub Koz\u0142owski\\n```"},{"id":"/2018/12/12/fast-goto-definition","metadata":{"permalink":"/metals/blog/2018/12/12/fast-goto-definition","source":"@site/blog/2018-12-12-fast-goto-definition.md","title":"Fast goto definition with low memory footprint","description":"Metals throws away its navigation index when it shuts down. Next time it starts,","date":"2018-12-12T00:00:00.000Z","formattedDate":"December 12, 2018","tags":[],"readingTime":8.42,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Fast goto definition with low memory footprint","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"},"nextItem":{"title":"Metals v0.3 - Iron","permalink":"/metals/blog/2018/12/06/iron"}},"content":"Metals throws away its navigation index when it shuts down. Next time it starts,\\nthe index is computed again from scratch. Although this approach is simple, it\\nrequires indexing to be fast enough so you don\'t mind running it again and\\nagain. Also, because we don\'t persist the index to disk, we need to be careful\\nwith memory usage.\\n\\nThis post covers how Metals achieves fast source indexing for Scala with a small\\nmemory footprint. We describe the problem statement, explain the initial\\nsolution and how an optimization delivered a 10x speedup. Finally, we evaluate\\nthe result on a real-world project.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe work presented in this post was done as part of my job at the\\n[Scala Center](https://scala.epfl.ch/).\\n\\n## Problem statement\\n\\nWhat happens when you run Goto Definition? In reality, a lot goes on but in this\\npost we\'re gonna focus on a specific problem: given a method like\\n`scala.Some.isEmpty` and many thousand source files with millions of lines of\\ncode, how do we quickly find the source file that defines that method?\\n\\n![goto-definition](https://user-images.githubusercontent.com/1408093/49591684-67070700-f96f-11e8-873d-90c40480528b.gif)\\n\\nThere are some hard constraints:\\n\\n- we must answer quickly, normal requests should respond within 100-200ms.\\n- memory usage should not exceed 10-100Mb since we also need memory to implement\\n other features and we\'re sharing the computer with other applications.\\n- computing an index should not take more than ~10 seconds after importing the\\n build, even for large projects with millions of lines of source code\\n (including dependencies).\\n\\nTo keep things simple, imagine we have all source files available in a directory\\nthat we can walk and read.\\n\\n```scala\\nwalk()\\n// Stream(\\"scala/Option.scala\\", \\"scala/Predef.scala\\", ...)\\n\\nread(\\"scala/Option.scala\\")\\n// \\"sealed abstract class Option { ... }; class Some extends Option { ... }\\"\\n```\\n\\n### Java\\n\\nFor Java, the challenge is not so difficult since the compiler enforces that\\neach source file contains a single public class with matching filename.\\n\\n```java\\n// java/nio/file/Files.java\\npackage java.nio.file;\\npublic class Files {\\n public static byte[] readAllBytes(path: Path) {\\n // ...\\n }\\n}\\n```\\n\\nTo respond to a Goto Definition request for the `Files.readAllBytes` method, we\\n\\n- take the enclosing toplevel class `java.nio.file.Files`\\n- read the corresponding file `java/nio/File/Files.java`\\n- parse `Files.java` to find the exact position of `readAllBytes`\\n\\nThis approach is fast (parsing one file is cheap) and it also requires no index\\n(0Mb memory!).\\n\\n### Scala\\n\\nFor Scala, the problem is trickier because the compiler allows multiple toplevel\\nclasses in the same source file.\\n\\n```scala\\n// scala/Option.scala\\npackage scala\\nsealed abstract class Option[+T] { /* ... */ }\\nfinal class Some[+T](value: T) extends Option[T] {\\n def isEmpty = false\\n // ...\\n}\\n```\\n\\nTo navigate to the `scala.Some.isEmpty` method we can\'t use the same approach as\\nin Java because the class `scala.Some` is in `scala/Option.scala`, not\\n`scala/Some.scala`.\\n\\nOne possible solution is to read the `scala/Some.class` classfile that contains\\nthe filename `Option.scala` where `scala.Some` is defined.\\n\\n```sh\\n$ javap -classpath $(coursier fetch org.scala-lang:scala-library:2.12.8) scala.Some\\nCompiled from \\"Option.scala\\"\\n...\\n```\\n\\nHowever, source information in classfiles is not always reliable and it may be\\nremoved by tools that process jar files. Let\'s restrict the problem to only use\\nsource files.\\n\\nInstead of using JVM classfiles, we can walk all Scala source files and build an\\nindex that maps toplevel classes to the source file that defines that class. The\\nindex looks something like this:\\n\\n```scala\\nval index = Map[Symbol, Path](\\n Symbol(\\"scala.Some\\") -> Path(\\"scala/Option.scala\\"),\\n // ...\\n)\\n```\\n\\nWith this index, we find the definition of `Some.isEmpty` using the same steps\\nas for `Files.readAllBytes` in Java:\\n\\n- take the enclosing toplevel class `scala.Some`\\n- query index to know that `scala.Some` is defined in `scala/Option.scala`\\n- parse `scala/Option.scala` to find exact position of `isEmpty` method.\\n\\nThe challenge is to efficiently build the index.\\n\\n## Initial solution\\n\\nOne approach to build the index is to use the\\n[Scalameta](https://scalameta.org/) parser to extract the toplevel classes of\\neach source file. This parser does not desugar the original code making it\\nuseful for refactoring and code-formatting tools like\\n[Scalafix](http://scalacenter.github.io/scalafix/)/[Scalafmt](http://scalameta.org/scalafmt).\\nI\'m also familiar with Scalameta parser API so it was fast to get a working\\nimplementation. However, is the parser fast enough to parse millions of lines of\\ncode on every server startup?\\n\\nAccording to JMH benchmarks, the Scalameta parser handles ~92k lines/second\\nmeasured against a sizable corpus of Scala code. The benchmarks use the\\n\\"single-shot\\" mode of JMH, for which the documentation says:\\n\\n> \\"This mode is useful to estimate the \\"cold\\" performance when you don\'t want to\\n> hide the warmup invocations.\\"\\n\\nCold performance is an OK estimate for our use-case since indexing happens\\nduring server startup.\\n\\nThe Scala standard library is ~36k lines so at 92k lines/second this solution\\nscales up to a codebase with up to 20-30 similarly-sized library dependencies.\\nIf we add more library dependencies, we exceed the 10 second constraint for\\nindexing time. For a codebase with 5 million lines of code, users might have to\\nwait one minute for indexing to complete. We should aim for better.\\n\\n## Optimized solution\\n\\nWe can speed up indexing by writing a custom parser that extracts only the\\ninformation we need from a source file. For example, the Scalameta parser\\nextracts method implementations that are irrelevant for our indexer. Our indexer\\nneeds to know the toplevel classes and nothing more.\\n\\nThe simplified algorithm for this custom parser goes something like this:\\n\\n- tokenize source file\\n- on consecutive `package object` keywords, record package object\\n- on `package` keyword, record package name\\n- on `class` and `trait` and `object` keywords, record toplevel class\\n- on `(` and `[` and `{` delimiters, skip tokens until we find matching closing\\n delimiter\\n\\nThere are a few more cases to handle, but the implementation ended up being ~200\\nlines of code that took an afternoon to write and test (less time than it took\\nto write this blog post!).\\n\\nBenchmarks show that the custom parser is almost 10x faster compared to the\\ninitial solution.\\n\\n```text\\n[info] Benchmark Mode Cnt Score Error Units\\n[info] MetalsBench.toplevelParse ss 30 0.349 \xb1 0.003 s/op\\n[info] MetalsBench.scalametaParse ss 30 3.370 \xb1 0.175 s/op\\n```\\n\\nAt ~920k lines/second it takes ~6 seconds to index a codebase with 5 million\\nlines of code, a noticeable improvement to the user experience compared to the\\none minute it took with the previous solution.\\n\\n## Evaluation\\n\\nMicro-benchmarks are helpful but they don\'t always reflect user experience. To\\nevaluate how our indexer performs in the real world, we test Metals on the\\n[Prisma](https://www.prisma.io/) codebase. Prisma is a server\xa0implemented in\\nScala that replaces traditional ORMs and data access layers with a universal\\ndatabase abstraction.\\n\\n![prisma](https://user-images.githubusercontent.com/1408093/49875321-08cf9d80-fe21-11e8-9f02-54ff4960a7af.png)\\n\\nThe project has around 80k lines of Scala code.\\n\\n```sh\\n$ git clone https://github.com/prisma/prisma.git\\n$ cd prisma/server\\n$ loc\\nLanguage Files Lines Blank Comment Code\\nScala 673 88730 12811 1812 74107\\n```\\n\\nWe open VS Code with the Metals extension, enable the server property\\n`-Dmetals.statistics=all` and import the build.\\n\\n```sh\\n$ tail -f .metals/metals.log\\ntime: ran \'sbt bloopInstall\' in 1m4s\\ntime: imported workspace in 13s\\nmemory: index using 13.1M (923,085 lines Scala)\\n```\\n\\nWe run \\"Import build\\" again to get a second measurement.\\n\\n```sh\\ntime: ran \'sbt bloopInstall\' in 41s\\ntime: imported workspace in 7s\\nmemory: index using 13.1M (990,144 Scala)\\n```\\n\\n- **\\"ran \'sbt bloopInstall\'\\"**: the time it takes to dump the sbt build\\n structure with [Bloop](https://scalacenter.github.io/bloop/), the build server\\n used by Metals.\\n - The Prisma build has 44 sbt projects.\\n - Running `sbt` takes 23 seconds to reach the sbt shell.\\n- **\\"imported workspace\\"**: the time it takes to import the build structure into\\n Metals and index sources of all projects, including the following steps:\\n 1. Query Bloop for the dumped build structure, listing all project\\n dependencies, sources and compiler options.\\n 2. Walk, read and index all Scala sources in the workspace, happens in both\\n runs.\\n 3. Walk, read and index all library dependency sources, happens only for the\\n first run since the indexer caches\xa0`*-sources.jar` file results.\\n - It\'s expected that \\"lines of code\\" increased by ~70k lines in the second run\\n since we indexed the workspace sources again.\\n - It\'s expected that indexing was faster in the second run since indexes are\\n cached for `*-sources.jar` files and the JVM has also warmed up.\\n- **\\"index using 13.1M\\"**: the memory footprint of the index mapping toplevel\\n Scala classes to which file they are defined in.\\n - Memory is measured using\\n [OpenJDK JOL](https://openjdk.java.net/projects/code-tools/jol/)\\n `GraphLayout.totalSize()`.\\n - Note that the server uses more memory in total, this is only for the\\n navigation index.\\n - The index does not contain entries where the toplevel classname matches the\\n filename, for the same reason we don\'t index Java sources.\\n\\nOn average, Goto Definition responds well within our 100ms goal.\\n\\n```text\\ntime: definition in 0.03s\\ntime: definition in 0.02s\\n```\\n\\nHowever, occasional definition requests take much longer to respond.\\n\\n```text\\ninfo time: definition in 8s\\ninfo time: definition in 0.62s\\n```\\n\\nThe outliers happen when navigating inside library dependency sources, which is\\nexpected to be slower since we need to type-check those sources before querying\\nthe index.\\n\\n## Conclusion\\n\\nMetals uses a custom Scala parser to index sources at roughly 1 million\\nlines/second in micro-benchmarks. The index is used to quickly respond to Goto\\nDefinition requests. On a case-study project containing 44 modules and ~900k\\nlines of Scala sources (including library dependencies), it takes ~10 seconds to\\nimport the build structure (including source indexing) and the resulting index\\nuses 13M memory.\\n\\nThe Java+Scala source indexers used by Metals are available in a standalone\\nlibrary called mtags.\\n\\n```scala\\nlibraryDependencies += \\"org.scalameta\\" %% \\"mtags\\" % \\"0.3.1\\"\\n```\\n\\nThe mtags library is already being used by the\\n[Almond Scala kernel for Jupyter](http://almond-sh.github.io/almond/stable/docs/intro)\\nto support Goto Definition inside Jupyter notebooks.\\n\\nCan the indexer become faster? Sure, I suspect there\'s still room for 2-3x\\nspeedups with further optimizations. However, I\'m not convinced it will make a\\nsignificant improvement to the user experience since we remain bottle-necked by\\ndumping sbt build structure and compiling the sources.\\n\\nTry out Goto Definition with Metals today using VS Code, Atom, Vim, Sublime Text\\nor Emacs using the installation instructions here:\\nhttps://scalameta.org/metals/docs/editors/overview.html. The indexer is working\\nwhen you see \\"Importing build\\" in the status bar\\n![imageedit_3_3576623823](https://user-images.githubusercontent.com/1408093/49924982-f5234600-feb7-11e8-9edd-715388bb546f.gif)"},{"id":"/2018/12/06/iron","metadata":{"permalink":"/metals/blog/2018/12/06/iron","source":"@site/blog/2018-12-06-iron.md","title":"Metals v0.3 - Iron","description":"We are excited to announce the release of Metals v0.3, codename \\"Iron\\" \ud83c\udf89 Metals","date":"2018-12-06T00:00:00.000Z","formattedDate":"December 6, 2018","tags":[],"readingTime":2.265,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.3 - Iron","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"}},"content":"We are excited to announce the release of Metals v0.3, codename \\"Iron\\" \ud83c\udf89 Metals\\nis a language server for Scala.\\n\\n## TL;DR\\n\\n- simple installation\\n- accurate diagnostics\\n- goto definition\\n- text editors: Visual Studio Code, Atom, Vim and Sublime Text\\n- no completions\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n\x3c!-- truncate --\x3e\\n\\n## Simple installation\\n\\nA useful IDE needs to understand your project\'s directory structure and library\\ndependencies. Metals can now import sbt and Bloop builds with the following\\nworkflow\\n\\n- Open a directory in your editor\\n- Click on a button to import the build\\n- Wait for the build import step to complete, this may take a while\\n- Enjoy IDE features \ud83d\udc4c\\n- When your build changes, Metals asks you to import again.\\n\\n![vscode-import-build](https://user-images.githubusercontent.com/1408093/49659280-26c58880-fa44-11e8-92e6-b3df984fbdd2.png)\\n\\n## Accurate diagnostics\\n\\nOnce your build has been imported, Metals triggers compilation on file save and\\npublishes compiler errors as red squiggles in your editor. By construction, this\\napproach avoids the situation where users see different errors in their editor\\nand the build tool.\\n\\n![accurate-diagnostics](https://user-images.githubusercontent.com/1408093/49591682-666e7080-f96f-11e8-9fc0-e48bbe13187d.png)\\n\\n## Goto definition\\n\\nMetals supports goto definition for project sources and Scala+Java library\\ndependencies. Navigation works even when the open buffer contains syntax errors.\\n\\nNavigation in Metals is fast and consumes little memory. For a case study\\nproject, Metals indexes 800k lines of Scala code per second and the resulting\\nsearch index requires 25Mb RAM per million lines of code.\\n\\n![goto-definition](https://user-images.githubusercontent.com/1408093/49591684-67070700-f96f-11e8-873d-90c40480528b.gif)\\n\\n## Text editors\\n\\nThanks to the\\n[Language Server Protocol](https://microsoft.github.io/language-server-protocol/),\\nMetals works multiple text editors. The following editors have been validated to\\nwork with Metals and the installation steps have been documented on the Metals\\nwebsite.\\n\\n- Overview: https://scalameta.org/metals/docs/editors/overview.html\\n- Visual Studio Code: https://scalameta.org/metals/docs/editors/vscode.html\\n- Atom: https://scalameta.org/metals/docs/editors/atom.html\\n- Vim: https://scalameta.org/metals/docs/editors/vim.html\\n- Sublime Text: https://scalameta.org/metals/docs/editors/sublime.html\\n- guide to integrate new editors:\\n https://scalameta.org/metals/docs/editors/new-editor.html\\n\\n## Contributors\\n\\nBig thanks to all the contributors who contributed to this release. In\\nparticular, I want to thank the following people:\\n\\n- Jorge Vicente Cantero (@jvican) for his great work in Bloop and helping out\\n with unblocking a lot of Metals issues on the build side. Most the heavy\\n lifting in \\"simple installation\\" is provided by Bloop.\\n- Gabriele Petronella (@gabro) for his great work on the VS Code plugin and\\n heroic code reviews of multiple large PRs (of which one that was +12,645\\n \u22121,126!!).\\n- Alexey Alekhin (@laughedelic) for his great work on the Atom `ide-scala`\\n package.\\n- Eugene Burmako (@xeno-by) for close collaboration on Scalameta and SemanticDB\\n that made the features in this release possible.\\n- Justin Kaeser (@jastice) from Jetbrains for collaboration on the Build Server\\n Protocol specification and bsp4j library.\\n\\n```sh\\n$ git shortlog -sn --no-merges v0.1.0..v0.3.1\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nCorey O\'Connor\\nPavel Logvinov\\nCody Allen\\n```"}]}')}}]); \ No newline at end of file diff --git a/assets/js/da363e62.68ffe055.js b/assets/js/da363e62.68ffe055.js deleted file mode 100644 index 1e155009d75..00000000000 --- a/assets/js/da363e62.68ffe055.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5555],{7688:t=>{t.exports=JSON.parse('{"blogPosts":[{"id":"/2023/08/28/silver","metadata":{"permalink":"/metals/blog/2023/08/28/silver","source":"@site/blog/2023-08-28-silver.md","title":"Metals v1.0.1 - Silver","description":"We\'re happy to announce the release of Metals v1.0.1, which comes with","date":"2023-08-28T00:00:00.000Z","formattedDate":"August 28, 2023","tags":[],"readingTime":7.85,"hasTruncateMarker":false,"authors":[{"name":"Jakub Ciesluk","url":"https://github.com/jkciesluk","imageURL":"https://github.com/jkciesluk.png"}],"frontMatter":{"author":"Jakub Ciesluk","title":"Metals v1.0.1 - Silver","authorURL":"https://github.com/jkciesluk","authorImageURL":"https://github.com/jkciesluk.png"},"nextItem":{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"}},"content":"We\'re happy to announce the release of Metals v1.0.1, which comes with\\na couple of exciting new features and stability improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release86
Merged PRs78
Contributors13
Closed issues20
New features4
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/59?closed=1]\\n(https://github.com/scalameta/metals/milestone/59?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n\\n- [Completions in java files](#completions-in-java-files)\\n- [Liveness monitor](#liveness-monitor)\\n- [Improvements for enums](#improvements-for-enums)\\n- [Semantic highlighting](#semantic-highlighting)\\n- [Miscellaneous](#miscellaneous)\\n- [Plugin authors](#plugin-authors)\\n\\n\\n## Completions in Java files\\n\\nThanks to amazing work done by [VankaTaganai](https://github.com/VankaTaganai) and further improvements by [tgodzik](https://github.com/tgodzik),\\nyou will be able to get completions in Java files. It should make \\nworking with Java sources easier, though Metals will not strive to be a full Java language server.\\n\\n![java-completion](https://i.imgur.com/wLlh7ig.gif)\\n\\n## Liveness monitor\\n\\nUp to the current release, users would not be informed if something happened\\nand the build server stopped responding. Thanks to [kasiaMarek](https://github.com/kasiaMarek) Metals will now monitor the state \\nof the build server and notify the user if it becomes unresponsive.\\n\\n![not-responsive](https://imgur.com/R2T5x3t.png)\\n\\nDismissing the notification will dismiss it for the current connection.\\n\\n## Improvements for enums\\n\\nThis release also brings in multiple fixes connected to enums: \\n\\n- better highlighting on enum cases\\n- improved navigation on enum parameters\\n- multiple fixes on enum type parameters\\n\\nThis great work was done by [kasiaMarek](https://github.com/kasiaMarek)\\n\\n![enum](https://i.imgur.com/tZrSDYC.gif)\\n\\n## Semantic highlighting\\n\\nSemantic highlighting enables syntax highlighting based on knowledge from the compiler.\\nThanks to this, users can have specific colors for parameters, methods, mutable `var`s, packages etc. \\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it\'s ready \\nto be turned on by default. You can always change this using `metals.enableSemanticHighlighting` setting. \\nSome editors also require enabling this feature in other places. \\nIn VS Code, you also need to set `editor.semanticHighlighting.enabled` to `true`.\\n\\nMore details can be found [here](https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens).\\n\\n## Plugin authors\\n\\nFixing the display of encoded test names for JUnit [here](https://github.com/scalameta/metals/pull/5485) required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names.\\n\\n## Miscellaneous\\n\\n- improvement: create java semanticdb info using JDK instead of javac CLI\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Don\'t enable * kind project syntax by default\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: offer amend to handle single file scala-cli config on new file\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Go to definition for named constructor params\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add date and time to reports and backup log files\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Semantic tokens misaligned in triple quote s-string\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Completion item resolve for symbolic names\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: suggest correct arg name completions for lambda expressions\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: don\'t decode nor encode URIs\\n ([adpi2](https://github.com/adpi2))\\n- feature: Add hover on class,object,type def in Scala 2\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t report tokenizer errors as stale\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Support Java when using sbt server via BSP\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add proper Stable Presentation Compiler Support\\n ([rochala](https://github.com/rochala))\\n- docs: Add info about the versioning strategy\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: do not emit cases in pattern match as enum cases\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: accommodate junit encoded test names\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t show completions ending with CURSOR\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: better heuristic for fixing imports unpon file move\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: show args completions for all matching overloaded methods\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: hover on nested selectable\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Docstring on apply method\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: adjust parsing `ScalafmtConfig` for `StandardConvention` layout\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: add `minimal` option for inferred type decorations\\n ([doofin](https://github.com/doofin))\\n- bugfix: Implement all members with end marker\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: deduplicate NamedArgParams with Def params\\n ([dos65](https://github.com/dos65))\\n- chore: Don\'t show semantic tokens warning for Java files\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: restart sbt after java home change\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v1.0.0..v1.0.1\\n21\\tKatarzyna Marek\\n 21\\tTomasz Godzik\\n 19\\tScalameta Bot\\n 11\\tJakub Ciesluk\\n 4\\tscalameta-bot\\n 3\\ttgodzik\\n 1\\tAdrien Piquerez\\n 1\\tArthur McGibbon\\n 1\\tJ\u0119drzej Rochala\\n 1\\tPanov Ivan\\n 1\\tVadim Chelyshov\\n 1\\tdependabot[bot]\\n 1\\teason du\\n```\\n\\n## Merged PRs\\n\\n## [v1.0.1](https://github.com/scalameta/metals/tree/v1.0.1) (2023-08-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Catch exception from the compiler when coursier api is on cla\u2026\\n [\\\\#5586](https://github.com/scalameta/metals/pull/5586)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update protobuf-java from 3.24.1 to 3.24.2\\n [\\\\#5591](https://github.com/scalameta/metals/pull/5591)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- create java semanticdb info using JDK instead of javac CLI\\n [\\\\#5352](https://github.com/scalameta/metals/pull/5352)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Don\'t enable * kind project syntax by default\\n [\\\\#5579](https://github.com/scalameta/metals/pull/5579)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: highlight and definition for enum type params\\n [\\\\#5550](https://github.com/scalameta/metals/pull/5550)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: offer amend to handle single file scala-cli config on new file\\n [\\\\#5434](https://github.com/scalameta/metals/pull/5434)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- docs: Add some more details about the release\\n [\\\\#5574](https://github.com/scalameta/metals/pull/5574)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\\n [\\\\#5584](https://github.com/scalameta/metals/pull/5584)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.21.1 to 9.21.2\\n [\\\\#5582](https://github.com/scalameta/metals/pull/5582)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.5 to 2.1.6\\n [\\\\#5581](https://github.com/scalameta/metals/pull/5581)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\\n [\\\\#5580](https://github.com/scalameta/metals/pull/5580)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Don\'t collect map, flatMap, withFilter in for-comprehension\\n [\\\\#5552](https://github.com/scalameta/metals/pull/5552)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.24.0 to 3.24.1\\n [\\\\#5569](https://github.com/scalameta/metals/pull/5569)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Try to fix issues with sbt integration tests\\n [\\\\#5557](https://github.com/scalameta/metals/pull/5557)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: unignore tests for dotty pc after c90ad6b\\n [\\\\#5565](https://github.com/scalameta/metals/pull/5565)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\\n [\\\\#5549](https://github.com/scalameta/metals/pull/5549)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\\n [\\\\#5563](https://github.com/scalameta/metals/pull/5563)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\\n [\\\\#5564](https://github.com/scalameta/metals/pull/5564)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: don\'t show build server not responding error just after coming out of idle\\n [\\\\#5537](https://github.com/scalameta/metals/pull/5537)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Go to definition for named constructor params\\n [\\\\#5541](https://github.com/scalameta/metals/pull/5541)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add date and time to reports and backup log files\\n [\\\\#5450](https://github.com/scalameta/metals/pull/5450)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Semantic tokens misaligned in triple quote s-string\\n [\\\\#5556](https://github.com/scalameta/metals/pull/5556)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: InverseSemanticdbSymbols for symbolic names\\n [\\\\#5481](https://github.com/scalameta/metals/pull/5481)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: suggest correct arg name completions for lambda expressions\\n [\\\\#5533](https://github.com/scalameta/metals/pull/5533)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\\n [\\\\#5547](https://github.com/scalameta/metals/pull/5547)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update protobuf-java from 3.23.4 to 3.24.0\\n [\\\\#5546](https://github.com/scalameta/metals/pull/5546)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #5518: don\'t decode nor encode URIs\\n [\\\\#5519](https://github.com/scalameta/metals/pull/5519)\\n ([adpi2](https://github.com/adpi2))\\n- build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\\n [\\\\#5545](https://github.com/scalameta/metals/pull/5545)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC5\\n [\\\\#5544](https://github.com/scalameta/metals/pull/5544)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Don\'t try formatting in auto releases\\n [\\\\#5551](https://github.com/scalameta/metals/pull/5551)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: port `extension-methods-complex` test fix from dotty\\n [\\\\#5542](https://github.com/scalameta/metals/pull/5542)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: highlight enum cases correctly\\n [\\\\#5529](https://github.com/scalameta/metals/pull/5529)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Add hover on class,object,type def in Scala 2\\n [\\\\#5540](https://github.com/scalameta/metals/pull/5540)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Fix lines numbers for CI testing\\n [\\\\#5538](https://github.com/scalameta/metals/pull/5538)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Set semantic highlighting to true by default\\n [\\\\#5532](https://github.com/scalameta/metals/pull/5532)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t report tokenizer errors as stale\\n [\\\\#5530](https://github.com/scalameta/metals/pull/5530)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: print better bracket suffix in label, Scala 3 completions\\n [\\\\#5497](https://github.com/scalameta/metals/pull/5497)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Support Java when using sbt server via BSP\\n [\\\\#5535](https://github.com/scalameta/metals/pull/5535)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add info about the versioning strategy\\n [\\\\#5524](https://github.com/scalameta/metals/pull/5524)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add proper Stable Presentation Support\\n [\\\\#5476](https://github.com/scalameta/metals/pull/5476)\\n ([rochala](https://github.com/rochala))\\n- bugfix: Fix issues with select in debugger completions\\n [\\\\#5526](https://github.com/scalameta/metals/pull/5526)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: do not emit cases in pattern match as enum cases\\n [\\\\#5520](https://github.com/scalameta/metals/pull/5520)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: emit type for enum cases when needed\\n [\\\\#5501](https://github.com/scalameta/metals/pull/5501)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Show direct members first\\n [\\\\#5523](https://github.com/scalameta/metals/pull/5523)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: accommodate junit encoded test names\\n [\\\\#5485](https://github.com/scalameta/metals/pull/5485)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\\n [\\\\#5517](https://github.com/scalameta/metals/pull/5517)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\\n [\\\\#5515](https://github.com/scalameta/metals/pull/5515)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\\n [\\\\#5514](https://github.com/scalameta/metals/pull/5514)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\\n [\\\\#5513](https://github.com/scalameta/metals/pull/5513)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\\n [\\\\#5516](https://github.com/scalameta/metals/pull/5516)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix type issue after last two PRs\\n [\\\\#5521](https://github.com/scalameta/metals/pull/5521)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Don\'t show completions ending with CURSOR\\n [\\\\#5196](https://github.com/scalameta/metals/pull/5196)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t show keywords or constructors on select\\n [\\\\#5509](https://github.com/scalameta/metals/pull/5509)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make debug completions work for Java files\\n [\\\\#5505](https://github.com/scalameta/metals/pull/5505)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: monitor build server liveness\\n [\\\\#5462](https://github.com/scalameta/metals/pull/5462)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Automatically add colon to get better completions for Java\\n [\\\\#5506](https://github.com/scalameta/metals/pull/5506)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\\n [\\\\#5499](https://github.com/scalameta/metals/pull/5499)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- improvement: better heuristic for fixing imports unpon file move\\n [\\\\#5134](https://github.com/scalameta/metals/pull/5134)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: show args completions for all matching overloaded methods\\n [\\\\#5287](https://github.com/scalameta/metals/pull/5287)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.21.0 to 9.21.1\\n [\\\\#5489](https://github.com/scalameta/metals/pull/5489)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\\n [\\\\#5488](https://github.com/scalameta/metals/pull/5488)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\\n [\\\\#5490](https://github.com/scalameta/metals/pull/5490)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Bump scalatest to fix zip issue\\n [\\\\#5495](https://github.com/scalameta/metals/pull/5495)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add java completion\\n [\\\\#5314](https://github.com/scalameta/metals/pull/5314)\\n ([VankaTaganai](https://github.com/VankaTaganai))\\n- bugfix: hover on nested selectable\\n [\\\\#5493](https://github.com/scalameta/metals/pull/5493)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Docstring on apply method\\n [\\\\#5465](https://github.com/scalameta/metals/pull/5465)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\\n [\\\\#5491](https://github.com/scalameta/metals/pull/5491)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: adjust parsing `ScalafmtConfig` for `StandardConvention` layout\\n [\\\\#5470](https://github.com/scalameta/metals/pull/5470)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement:don\'t show types for match case for showInferredType\\n [\\\\#5284](https://github.com/scalameta/metals/pull/5284)\\n ([doofin](https://github.com/doofin))\\n- fix: Implement all members with end marker\\n [\\\\#5412](https://github.com/scalameta/metals/pull/5412)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix memory leak in tests\\n [\\\\#5477](https://github.com/scalameta/metals/pull/5477)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update flyway-core from 9.20.1 to 9.21.0\\n [\\\\#5474](https://github.com/scalameta/metals/pull/5474)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\\n [\\\\#5473](https://github.com/scalameta/metals/pull/5473)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Scala2 - deduplicate NamedArgParams with Def params\\n [\\\\#5466](https://github.com/scalameta/metals/pull/5466)\\n ([dos65](https://github.com/dos65))\\n- chore: Don\'t show semantic tokens warning for Java files\\n [\\\\#5463](https://github.com/scalameta/metals/pull/5463)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: restart sbt after java home change\\n [\\\\#5381](https://github.com/scalameta/metals/pull/5381)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Change release notes to properly show in VS Code\\n [\\\\#5464](https://github.com/scalameta/metals/pull/5464)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add release notes for Metals 1.0.0\\n [\\\\#5453](https://github.com/scalameta/metals/pull/5453)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/07/19/silver","metadata":{"permalink":"/metals/blog/2023/07/19/silver","source":"@site/blog/2023-07-19-silver.md","title":"Metals v1.0.0 - Silver","description":"We\'re happy to announce the release of of Metals v1.0.0, which was a long time","date":"2023-07-19T00:00:00.000Z","formattedDate":"July 19, 2023","tags":[],"readingTime":18.23,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v1.0.0 - Silver","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v1.0.1 - Silver","permalink":"/metals/blog/2023/08/28/silver"},"nextItem":{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"}},"content":"We\'re happy to announce the release of of Metals v1.0.0, which was a long time\\nin the making. This release is a culmination of a lot of work from the community\\nand the core Metals team. As it stands, Metals supports most of the important\\nLSP features and beyond, which makes it equivalent to many IDEs, but in your\\nfavorite editor.\\n\\nBringing in version 1.0.0 doesn\'t mean that we don\'t have anything else to\\nimprove, but it means that we are confident that Metals is ready for production\\nuse in business and personal projects. We will continue to improve Metals and\\nadd new features, but we will also fully focus on making Metals the most\\nproductive and stable environment for all Scala developers. For that goal we are\\nproviding a number of reporting improvements that can help identify any problems\\nyou might have. There are more of these type of features coming your way.\\n\\nNote for plugin authors: Starting from this release, any changes in minor\\nversion will mean that there are changes to the Metals behavior or json APIs\\nthat need to be accounted for.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release211
Merged PRs181
Contributors17
Closed issues67
New features5
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/_num_?closed=1]\\n(https://github.com/scalameta/metals/milestone/_num_?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Add multi-root projects support](#add-multi-root-projects-support)\\n- [Hover support in Java files](#hover-support-in-java-files)\\n- [Command for running specified scalafix rules](#command-for-running-specified-scalafix-rules)\\n- [Add clean-all command](#add-clean-all-command)\\n- [Better support for Scala CLI](#better-support-for-scala-cli)\\n- [Support new Scala versions](#support-new-scala-versions)\\n- [Miscellaneous](#miscellaneous)\\n\\n## Add multi-root projects support\\n\\nUp until this release, Metals could only be used in workspaces with a single\\nroot. This means that if for example you used the `Add folder to Workspace`\\noption in Visual Studio Code to add a new folder to your workspace, Metals would\\nnot work in that folder. This is no longer the case and Metals will work in all\\nfolders in your workspace.\\n\\nThe work included making sure that all existing features work reliably and\\nsensibly within multi root workspaces. For instance users will properly be shown\\na single Metals doctor (or a single HTTP server for editors that do not support\\nthe doctor interface). Test explorer will also show all tests from all folders\\nclearly marked with the folder name. Most other commands will be invoked in the\\ncurrently active folder in order not to create large cascading computations such\\nas multiple folders compiling everything.\\n\\nThis tremendously useful improvement was authored by\\n[kasiaMarek](https://github.com/kasiaMarek). Take a look at the\\n[blogpost](https://scalameta.org/metals/blog/2023/07/17/workspace-folders) for\\nmore details!\\n\\n## Hover support in Java files\\n\\nAnother improvement for a better experience in Java files was contributed by\\n[VankaTaganai](https://github.com/VankaTaganai). Starting from this release you\\nwill be able to hover on names in Java files to see more information about them.\\nThis feature is primarily aimed at Scala developers that need to from time to\\ntime look into Java source and figure out what\'s going on there. This will not\\nprovide an experience of a full Java language server, but it will provide some\\nbasic functionality that will make it easier to work with Java sources.\\n\\n![java-hover](https://i.imgur.com/mp1BKse.gif)\\n\\nPlease let us know about any issues! This is a new feature and we expect that it\\nmight take some time to get it ironed out.\\n\\n## Command for running specified scalafix rules\\n\\nUsers will now be able to run a single Scalafix rule on a file in their project.\\nThis might be particularly useful if you don\'t want to run everything at once\\nand see exactly what is being done by each Scalafix rule.\\n\\nThis great usability improvement was done by\\n[LaurenceWarne](https://github.com/LaurenceWarne).\\n\\n## Add clean-all command\\n\\nThis new feature has been demanded by users for a long while. Thanks to work\\ndone by [jkciesluk](https://github.com/jkciesluk), you will be able to run the\\n`metals.reset-workspace` command to remove all the possible caches and\\ncompilation artifacts that might be causing issues in your workspace.\\n\\nThis should be seen as a last resort and used in as an alternative to the\\nsomewhat popular practice of blowing away your `.metals/` and `.bloop/`\\ndirectories. Please do keep in mind that if you\'re finding that you need this\\noften, it\'s probably a bug and should be reported.\\n\\n## Better support for Scala CLI\\n\\nWith Scala CLI becoming the official runner for Scala 3, we have been working on\\nimproving the support for it in Metals. This release brings a number of\\nimprovements that aim to improve both Scala CLI experience and the overall Scala\\nexperience.\\n\\nThis includes the following:\\n\\n- If there are no build tools present Metals will now fallback to Scala CLI,\\n which means that even if a user creates a single file they will be able to run\\n it and get all the proper support users would expect. If a build tool\\n configuration appears in the workspace, Metals will suggest switching to that\\n instead.\\n- Scala CLI gets the same status as the already supported build tools, which\\n means that we will not automatically suggest importing another build tool if\\n we have Scala CLI already configured.\\n- If `project.scala` is present in the workspace, Metals will suggest importing\\n Scala CLI project, which includes automatically using the `setupIde` command\\n to setup the .bsp configuration.\\n\\nThis splendid work was done by [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Support new Scala versions\\n\\n### Support for Scala 3.3.0\\n\\nFor more information about the release take a look at\\n[https://www.scala-lang.org/blog/2023/05/30/scala-3.3.0-released.html](https://www.scala-lang.org/blog/2023/05/30/scala-3.3.0-released.html)\\n\\nHere we only show a short summary of the main feature from the release notes.\\n\\n#### Linting\\n\\nScala 3.3.0 brings back linting to the Scala compiler. Right now, you can enable\\nchecking for unused symbols and discarded values. More linting options will come\\nsoon in the following Scala 3.3.x releases.\\n\\n#### Fewer braces\\n\\nBraces around method parameters can now be replaced with a colon. This can lead\\nto cleaner, shorter, and often more readable code in places like configuration\\nDSLs or test case definitions.\\n\\n#### Boundary and break\\n\\nTwo new methods were added to the standard library: boundary and break. They are\\nsafer and more expressive replacements for non-local returns, which were\\ndeprecated recently.\\n\\nbreak allows for a type-safe early escape from anywhere inside the block\\ndelimited by boundary to its end, returning the passed value from the entire\\nblock.\\n\\n#### The new default implementation of lazy vals\\n\\nLast but not least, we have changed the default implementation of lazy vals. The\\nnew implementation has better performance and is safer under parallel access.\\nThis may result in improvements in the performance of effect systems.\\n\\n### Support for Scala 2.12.18\\n\\nThis release improves compatibility by adding support for JDK 20 and 21 with ASM\\n9.5 upgrade.\\n\\nIt also aids migration to Scala 2.13 and Scala 3 with improvements for the\\n-Xsource flag.\\n\\nFor more information about the release take a look at\\n[https://github.com/scala/scala/releases/tag/v2.12.18](https://github.com/scala/scala/releases/tag/v2.12.18)\\n\\n### Support for Scala 2.13.11\\n\\nSimilar to Scala 2.12.18 this release improves compatibility by adding support\\nfor JDK 20 and 21 with ASM 9.5 upgrade.\\n\\nIt also aids migration to Scala 3 with improvements for the -Xsource flag with\\neven more warnings. For more information about the release take a look at\\n[https://github.com/scala/scala/releases/tag/v2.13.11](https://github.com/scala/scala/releases/tag/v2.13.11)\\n\\n## Miscellaneous\\n\\n- bugfix: Show named argument completions inside constructors\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix semantic highlight for `@@` symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix semantic highlight for multiline comments `@@` symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Add selection expansion for multiline comments\\n [doofin](https://github.com/doofin)\\n- bugfix: Ignore shebang in .sc scripts [tgodzik](https://github.com/tgodzik)\\n- bugfix: Semantic hightlight for extension methods type params\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Add bloop package for mill bloop import command (fix for newer Mill\\n versions) [mehdimas](https://github.com/mehdimas)\\n- bugfix: Fix support for Java 12 to 16 [adpi2](https://github.com/adpi2)\\n- bugfix: Argument name completion for context function parameter\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix highlight and rename for unapply in for comprehensions\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Always change the correct comment when changing to mill syntax in\\n Scala CLI scripts [tgodzik](https://github.com/tgodzik)\\n- bugfix: Correctly index semanticdb when reconnecting to sbt BSP server\\n [tgodzik](https://github.com/tgodzik)\\n- bugfix: Don\'t backtick soft keywords in select position of statements\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Properly backtick types when needed\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Fix semantic highlight in files starting with annotation\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Show hover when cursor is right after symbol\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Provide extension method code completions when typing\\n `xxx.@@`[Mee-Tree](https://github.com/Mee-Tree)\\n- bugfix: properly index all toplevel given\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Argument completions for case class in apply calls\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add semantic highlight for docstring\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Improve indexing of regions based on indentation\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix issues with worksheets using outdated dependencies\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Use relative uri for interactive java TextDocument when browsing Java\\n sources from dependencies ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Fix reversed version order in dep completions in scala 2\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Use semantic highlight for using directives\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix semantic highlight for named arguments in Scala 2\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Shorten dependency diagnostic ranges for scala-cli\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bugfix: Scala 3 fix override completions starting w/ def\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Properly index vals in constructors\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Index cases for enum ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t show import completions with case class members\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Refactor type completions to provide both type symbol and object\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Check parent docs even when class is indexed\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Properly restart sbt server\\n [\\\\#5340](https://github.com/scalameta/metals/pull/5340)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Check if possible java home is a correct path\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: find correctly symbols for type companion objects\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: make sure we capture `.config/mill-version` for Mill builds\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Update default Bloop to 1.5.8 [tgodzik](https://github.com/tgodzik)\\n- bugfix: Peovide `textDocument/documentSymbol` for scripts\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: backup old log files when too long\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix scala-cli dependency completions for scala-cli 1.0.1\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Dependency version completions for scala native\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Correctly sort params in markdown\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add error reports upon compiler access error\\n [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.12..v1.0.0\\n 55\\tTomasz Godzik\\n 40\\tKatarzyna Marek\\n 32\\tJakub Ciesluk\\n 5\\tChris Kipp\\n 5\\tdoofin\\n 4\\tArthur McGibbon\\n 3\\trochala\\n 2\\tLaurence Warne\\n 2\\teason du\\n 1\\tAlexandre Archambault\\n 1\\tBrice Jaglin\\n 1\\tDmitry Polchinsky\\n 1\\tEthan Atkins\\n 1\\tLorenzo Gabriele\\n 1\\tMehdi Massoudi\\n 1\\tPanov Ivan\\n 1\\tadpi2\\n```\\n\\n## Merged PRs\\n\\n## [v1.0.0](https://github.com/scalameta/metals/tree/v1.0.0) (2023-07-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.12...v1.0.0)\\n\\n**Merged pull requests:**\\n\\n- chore: Rename blogpost to be of correct date\\n [\\\\#5460](https://github.com/scalameta/metals/pull/5460)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update scalafmt bootstrap\\n [\\\\#5459](https://github.com/scalameta/metals/pull/5459)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Small reword account for release timeline [skip ci]\\n [\\\\#5458](https://github.com/scalameta/metals/pull/5458)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: blog about multi-root\\n [\\\\#5215](https://github.com/scalameta/metals/pull/5215)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.7 to 3.11.8\\n [\\\\#5454](https://github.com/scalameta/metals/pull/5454)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.9 to 3.7.10\\n [\\\\#5455](https://github.com/scalameta/metals/pull/5455)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 1.0.1 to 1.0.2\\n [\\\\#5457](https://github.com/scalameta/metals/pull/5457)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Make ResetWorkspace more stable\\n [\\\\#5440](https://github.com/scalameta/metals/pull/5440)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Change namePos to namePosition\\n [\\\\#5448](https://github.com/scalameta/metals/pull/5448)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Revert H2 update to avoid issues with database version bump\\n [\\\\#5449](https://github.com/scalameta/metals/pull/5449)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improvement: compiler access error reporting\\n [\\\\#5439](https://github.com/scalameta/metals/pull/5439)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update semanticdb-java from 0.8.22 to 0.8.24\\n [\\\\#5442](https://github.com/scalameta/metals/pull/5442)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-xml from 2.1.0 to 2.2.0\\n [\\\\#5444](https://github.com/scalameta/metals/pull/5444)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.20.0 to 9.20.1\\n [\\\\#5443](https://github.com/scalameta/metals/pull/5443)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.9.1 to 1.9.2\\n [\\\\#5445](https://github.com/scalameta/metals/pull/5445)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.7 to 3.7.9\\n [\\\\#5446](https://github.com/scalameta/metals/pull/5446)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Reduce the level when mtags was found to debug\\n [\\\\#5436](https://github.com/scalameta/metals/pull/5436)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.1-RC4 and move older versions into\\n removedScalaVersions [\\\\#5430](https://github.com/scalameta/metals/pull/5430)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Correctly sort params in markdown\\n [\\\\#5414](https://github.com/scalameta/metals/pull/5414)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Don\'t publish for Scala 3.0.2\\n [\\\\#5429](https://github.com/scalameta/metals/pull/5429)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Dependency version completions for scala native\\n [\\\\#5373](https://github.com/scalameta/metals/pull/5373)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: detect scala cli when `project.scala`\\n [\\\\#5383](https://github.com/scalameta/metals/pull/5383)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Fix scala-cli dep completions for scala-cli 1.0.1\\n [\\\\#5335](https://github.com/scalameta/metals/pull/5335)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Don\'t publish nightlies any longer since they are available in\u2026\\n [\\\\#5428](https://github.com/scalameta/metals/pull/5428)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update lihaoyi\'s and scalameta dependencies\\n [\\\\#5425](https://github.com/scalameta/metals/pull/5425)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for stable presentation compiler\\n [\\\\#5423](https://github.com/scalameta/metals/pull/5423)\\n ([rochala](https://github.com/rochala))\\n- bugfix: backup log files instead of truncating\\n [\\\\#5399](https://github.com/scalameta/metals/pull/5399)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: `textDocument/documentSymbol` for scripts\\n [\\\\#5422](https://github.com/scalameta/metals/pull/5422)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.4 to 3.7.7\\n [\\\\#5418](https://github.com/scalameta/metals/pull/5418)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Only print debug compile queue if not empty\\n [\\\\#5410](https://github.com/scalameta/metals/pull/5410)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update semanticdb-java from 0.8.21 to 0.8.22\\n [\\\\#5421](https://github.com/scalameta/metals/pull/5421)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.5 to 3.11.7\\n [\\\\#5417](https://github.com/scalameta/metals/pull/5417)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update h2 from 2.1.214 to 2.2.220\\n [\\\\#5416](https://github.com/scalameta/metals/pull/5416)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update protobuf-java from 3.23.3 to 3.23.4\\n [\\\\#5415](https://github.com/scalameta/metals/pull/5415)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.8.0 to 4.8.2\\n [\\\\#5419](https://github.com/scalameta/metals/pull/5419)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Bump Scala 3 RC to 3.3.1-RC3\\n [\\\\#5413](https://github.com/scalameta/metals/pull/5413)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.8 to 4.8.0\\n [\\\\#5393](https://github.com/scalameta/metals/pull/5393)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update Bloop to 1.5.8\\n [\\\\#5398](https://github.com/scalameta/metals/pull/5398)\\n ([tgodzik](https://github.com/tgodzik))\\n- get more info from mill test\\n [\\\\#5394](https://github.com/scalameta/metals/pull/5394)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: make sure we capture `.config/mill-version` for Mill builds\\n [\\\\#5404](https://github.com/scalameta/metals/pull/5404)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Change information about finding java home to debug\\n [\\\\#5402](https://github.com/scalameta/metals/pull/5402)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: a bit more details in logs about whether the java path exists\\n [\\\\#5401](https://github.com/scalameta/metals/pull/5401)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: account for `ScalaDiagnostic` in diagnostic data\\n [\\\\#5338](https://github.com/scalameta/metals/pull/5338)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update guava from 32.1.0-jre to 32.1.1-jre\\n [\\\\#5396](https://github.com/scalameta/metals/pull/5396)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.8.3 to 1.9.1\\n [\\\\#5391](https://github.com/scalameta/metals/pull/5391)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix:[Scala 3] correctly find imports for toplevel type companion objects\\n [\\\\#5377](https://github.com/scalameta/metals/pull/5377)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Check if possible java home is a correct path\\n [\\\\#5240](https://github.com/scalameta/metals/pull/5240)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Show current compilation queue when debugging flag is on\\n [\\\\#5386](https://github.com/scalameta/metals/pull/5386)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update guava from 32.0.1-jre to 32.1.0-jre\\n [\\\\#5389](https://github.com/scalameta/metals/pull/5389)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC2\\n [\\\\#5388](https://github.com/scalameta/metals/pull/5388)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Catch an error if thrown during tokenization\\n [\\\\#5385](https://github.com/scalameta/metals/pull/5385)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: if no build tool fallback to scala-cli\\n [\\\\#5221](https://github.com/scalameta/metals/pull/5221)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Improvement: restart sbt server\\n [\\\\#5340](https://github.com/scalameta/metals/pull/5340)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- implement Java folding using JDK scanner\\n [\\\\#5328](https://github.com/scalameta/metals/pull/5328)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Check parent docs even when class is indexed\\n [\\\\#5382](https://github.com/scalameta/metals/pull/5382)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Refactor type completions to provide both type symbol and object\\n [\\\\#5326](https://github.com/scalameta/metals/pull/5326)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Make mtags-shared published with full scala version\\n [\\\\#5380](https://github.com/scalameta/metals/pull/5380)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use public API for java hover\\n [\\\\#5375](https://github.com/scalameta/metals/pull/5375)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- improvement: Add error reports upon compiler access error\\n [\\\\#5315](https://github.com/scalameta/metals/pull/5315)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Don\'t show completions with case class members\\n [\\\\#5324](https://github.com/scalameta/metals/pull/5324)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: emit cases for enum\\n [\\\\#5372](https://github.com/scalameta/metals/pull/5372)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update mill-contrib-testng from 0.10.12 to 0.11.1\\n [\\\\#5376](https://github.com/scalameta/metals/pull/5376)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #5367: Support comma-separated paths in -Xplugin\\n [\\\\#5368](https://github.com/scalameta/metals/pull/5368)\\n ([lolgab](https://github.com/lolgab))\\n- bugfix: emit symbols for vals in constructors\\n [\\\\#5358](https://github.com/scalameta/metals/pull/5358)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.19.4 to 9.20.0\\n [\\\\#5371](https://github.com/scalameta/metals/pull/5371)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.4 to 2.1.5\\n [\\\\#5370](https://github.com/scalameta/metals/pull/5370)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Scala 3 adjust edit range for override completions starting w/ def\\n [\\\\#5365](https://github.com/scalameta/metals/pull/5365)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Shorten Dep Diagnostic Ranges for scala-cli\\n [\\\\#5362](https://github.com/scalameta/metals/pull/5362)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- improvement: add scala cli as a build tool\\n [\\\\#5291](https://github.com/scalameta/metals/pull/5291)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: handle backticks in inverse semanticdb path\\n [\\\\#5347](https://github.com/scalameta/metals/pull/5347)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Properly check symbol before invoking owner\\n [\\\\#5360](https://github.com/scalameta/metals/pull/5360)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Ammonite supported versions\\n [\\\\#5355](https://github.com/scalameta/metals/pull/5355)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update warnings list after Scala version bump\\n [\\\\#5359](https://github.com/scalameta/metals/pull/5359)\\n ([tgodzik](https://github.com/tgodzik))\\n- deps: update millw to 0.4.7\\n [\\\\#5353](https://github.com/scalameta/metals/pull/5353)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: Move scalacli tests to a separate job\\n [\\\\#5351](https://github.com/scalameta/metals/pull/5351)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Highlight for named arguments in Scala 2\\n [\\\\#5350](https://github.com/scalameta/metals/pull/5350)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update ammonite-util from 2.5.8 to 2.5.9\\n [\\\\#5348](https://github.com/scalameta/metals/pull/5348)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Semantic highlight for using directives\\n [\\\\#5301](https://github.com/scalameta/metals/pull/5301)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix reversed version order in dep completions in scala 2\\n [\\\\#5206](https://github.com/scalameta/metals/pull/5206)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.23.2 to 3.23.3\\n [\\\\#5343](https://github.com/scalameta/metals/pull/5343)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.20 to 0.8.21\\n [\\\\#5344](https://github.com/scalameta/metals/pull/5344)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.16 to 1.0.18\\n [\\\\#5345](https://github.com/scalameta/metals/pull/5345)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.19.1 to 9.19.4\\n [\\\\#5331](https://github.com/scalameta/metals/pull/5331)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: truncate `metals.log`\\n [\\\\#5311](https://github.com/scalameta/metals/pull/5311)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: add in a null check after calling `stabilizedType`\\n [\\\\#5336](https://github.com/scalameta/metals/pull/5336)\\n ([ckipp01](https://github.com/ckipp01))\\n- use relative uri for interactive java TextDocument\\n [\\\\#5325](https://github.com/scalameta/metals/pull/5325)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- bugfix: Fix issues with recent nightlies\\n [\\\\#5327](https://github.com/scalameta/metals/pull/5327)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update semanticdb-java from 0.8.18 to 0.8.20\\n [\\\\#5330](https://github.com/scalameta/metals/pull/5330)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: keep evaluated worksheets synced with dependencies in presentation\\n compiler [\\\\#5248](https://github.com/scalameta/metals/pull/5248)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update munit from 1.0.0-M7 to 1.0.0-M8\\n [\\\\#5332](https://github.com/scalameta/metals/pull/5332)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update gradle-bloop from 1.6.0 to 1.6.1\\n [\\\\#5329](https://github.com/scalameta/metals/pull/5329)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-jmh from 0.4.4 to 0.4.5\\n [\\\\#5323](https://github.com/scalameta/metals/pull/5323)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 32.0.0-jre to 32.0.1-jre\\n [\\\\#5319](https://github.com/scalameta/metals/pull/5319)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 2.13.11\\n [\\\\#5316](https://github.com/scalameta/metals/pull/5316)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: make sure tmpl point is within source file bounds\\n [\\\\#5310](https://github.com/scalameta/metals/pull/5310)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Regions based on indent\\n [\\\\#5260](https://github.com/scalameta/metals/pull/5260)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Scalafix 0.11.0 [\\\\#5304](https://github.com/scalameta/metals/pull/5304)\\n ([bjaglin](https://github.com/bjaglin))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.7 to 4.7.8\\n [\\\\#5299](https://github.com/scalameta/metals/pull/5299)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.3 to 3.7.4\\n [\\\\#5298](https://github.com/scalameta/metals/pull/5298)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 2.12.18\\n [\\\\#5297](https://github.com/scalameta/metals/pull/5297)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump @docusaurus/preset-classic from 2.4.0 to 2.4.1 in /website\\n [\\\\#5296](https://github.com/scalameta/metals/pull/5296)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/core from 2.4.0 to 2.4.1 in /website\\n [\\\\#5295](https://github.com/scalameta/metals/pull/5295)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.4.0 to 2.4.1 in\\n /website [\\\\#5294](https://github.com/scalameta/metals/pull/5294)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- feature: create single http server and doctor result\\n [\\\\#5208](https://github.com/scalameta/metals/pull/5208)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Fix issues with Bloop and new Java module\\n [\\\\#5290](https://github.com/scalameta/metals/pull/5290)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: handle delete file events notifications\\n [\\\\#5270](https://github.com/scalameta/metals/pull/5270)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update protobuf-java from 3.23.1 to 3.23.2\\n [\\\\#5286](https://github.com/scalameta/metals/pull/5286)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update guava from 31.1-jre to 32.0.0-jre\\n [\\\\#5285](https://github.com/scalameta/metals/pull/5285)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Add semantic highlight for docstring\\n [\\\\#5153](https://github.com/scalameta/metals/pull/5153)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Remove all warnings from the code\\n [\\\\#5282](https://github.com/scalameta/metals/pull/5282)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make sure \'isAccessibleFrom\' always succeeds\\n [\\\\#5271](https://github.com/scalameta/metals/pull/5271)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix[Scala 3]: Fix issues when shortened type is used in type bounds\\n [\\\\#5281](https://github.com/scalameta/metals/pull/5281)\\n ([tgodzik](https://github.com/tgodzik))\\n- website : clarify Manual tests\\n [\\\\#5264](https://github.com/scalameta/metals/pull/5264)\\n ([doofin](https://github.com/doofin))\\n- feat: Add clean-all command\\n [\\\\#5060](https://github.com/scalameta/metals/pull/5060)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Update test shards with all the new test suites\\n [\\\\#5283](https://github.com/scalameta/metals/pull/5283)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure we don\'t fail when restarting the compiler\\n [\\\\#5278](https://github.com/scalameta/metals/pull/5278)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.18.0 to 9.19.1\\n [\\\\#5275](https://github.com/scalameta/metals/pull/5275)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.1-RC1\\n [\\\\#5273](https://github.com/scalameta/metals/pull/5273)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.3 to 3.11.5\\n [\\\\#5274](https://github.com/scalameta/metals/pull/5274)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.0 and deprecated older 3.2.x\\n [\\\\#5261](https://github.com/scalameta/metals/pull/5261)\\n ([tgodzik](https://github.com/tgodzik))\\n- website fix [\\\\#5263](https://github.com/scalameta/metals/pull/5263)\\n ([doofin](https://github.com/doofin))\\n- fix: Arg completions for case class in nested apply\\n [\\\\#5207](https://github.com/scalameta/metals/pull/5207)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: skip package objects as completions & never `backtickify` package\\n objects [\\\\#5259](https://github.com/scalameta/metals/pull/5259)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add Command for Running Specified Scalafix Rules\\n [\\\\#5223](https://github.com/scalameta/metals/pull/5223)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- build(deps): Update scala-debug-adapter from 3.0.9 to 3.1.3\\n [\\\\#5218](https://github.com/scalameta/metals/pull/5218)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: NoPosition on Bind in semantic tokens for scala 2\\n [\\\\#5257](https://github.com/scalameta/metals/pull/5257)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- buigfix: given scala toplevel mtags\\n [\\\\#5247](https://github.com/scalameta/metals/pull/5247)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Only log message if it\'s not null\\n [\\\\#5255](https://github.com/scalameta/metals/pull/5255)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update protobuf-java from 3.22.5 to 3.23.1\\n [\\\\#5252](https://github.com/scalameta/metals/pull/5252)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.17.0 to 9.18.0\\n [\\\\#5253](https://github.com/scalameta/metals/pull/5253)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Java hover [\\\\#5024](https://github.com/scalameta/metals/pull/5024)\\n ([VankaTaganai](https://github.com/VankaTaganai))\\n- Provide extension method code completions when typing `xxx.@@`\\n [\\\\#5235](https://github.com/scalameta/metals/pull/5235)\\n ([Mee-Tree](https://github.com/Mee-Tree))\\n- fix: Show hover when cursor is right after symbol\\n [\\\\#5133](https://github.com/scalameta/metals/pull/5133)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Semantic highlight on for-comp with `=` line\\n [\\\\#5132](https://github.com/scalameta/metals/pull/5132)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix semantic highlight in files starting with annotation\\n [\\\\#5187](https://github.com/scalameta/metals/pull/5187)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update protobuf-java from 3.22.3 to 3.22.5\\n [\\\\#5243](https://github.com/scalameta/metals/pull/5243)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.1 to 3.11.3\\n [\\\\#5244](https://github.com/scalameta/metals/pull/5244)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.3 to 2.1.4\\n [\\\\#5245](https://github.com/scalameta/metals/pull/5245)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Log message while unexpected error happens.\\n [\\\\#5239](https://github.com/scalameta/metals/pull/5239)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Retry indexing source file\\n [\\\\#5236](https://github.com/scalameta/metals/pull/5236)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Don\'t fail on refreshing semantic tokens\\n [\\\\#5237](https://github.com/scalameta/metals/pull/5237)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Check position before invoking .pos.point\\n [\\\\#5238](https://github.com/scalameta/metals/pull/5238)\\n ([tgodzik](https://github.com/tgodzik))\\n- Backtick types [\\\\#5159](https://github.com/scalameta/metals/pull/5159)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Don\'t backting soft keywords in Select\\n [\\\\#5234](https://github.com/scalameta/metals/pull/5234)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Add test for arg completions with second arg first\\n [\\\\#5211](https://github.com/scalameta/metals/pull/5211)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: move ClasspathSearch and PackageIndex to mtags-shared\\n [\\\\#5229](https://github.com/scalameta/metals/pull/5229)\\n ([rochala](https://github.com/rochala))\\n- chore: Add support for Scala 3.3.0-RC6\\n [\\\\#5228](https://github.com/scalameta/metals/pull/5228)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly index semanticdb when reconnecting\\n [\\\\#5222](https://github.com/scalameta/metals/pull/5222)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.8.2 to 1.8.3\\n [\\\\#5227](https://github.com/scalameta/metals/pull/5227)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Always change the correct comment when changing to mill syntax\\n [\\\\#5214](https://github.com/scalameta/metals/pull/5214)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Update `architecture.md` after adding support for multi root\\n [\\\\#5209](https://github.com/scalameta/metals/pull/5209)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Fix highlight and rename for unapply in for-comp\\n [\\\\#5210](https://github.com/scalameta/metals/pull/5210)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: argument name completion for context function parameter\\n [\\\\#5175](https://github.com/scalameta/metals/pull/5175)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: send folder name and uri with information about tests\\n [\\\\#5212](https://github.com/scalameta/metals/pull/5212)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Add support for the no-longer supported Java 12 to 16\\n [\\\\#5213](https://github.com/scalameta/metals/pull/5213)\\n ([adpi2](https://github.com/adpi2))\\n- refactor: use -release instead of -target\\n [\\\\#5177](https://github.com/scalameta/metals/pull/5177)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep exception cause in some mtags exceptions\\n [\\\\#5205](https://github.com/scalameta/metals/pull/5205)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- fix: Add bloop package for bloop command\\n [\\\\#5200](https://github.com/scalameta/metals/pull/5200)\\n ([mehdimas](https://github.com/mehdimas))\\n- build(deps): Update interface from 1.0.15 to 1.0.16\\n [\\\\#5204](https://github.com/scalameta/metals/pull/5204)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-ci-release from 1.5.11 to 1.5.12\\n [\\\\#5201](https://github.com/scalameta/metals/pull/5201)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.2 to 2.1.3\\n [\\\\#5203](https://github.com/scalameta/metals/pull/5203)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.16 to 0.8.18\\n [\\\\#5202](https://github.com/scalameta/metals/pull/5202)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump coursier/setup-action from 1.3.0 to 1.3.3\\n [\\\\#5194](https://github.com/scalameta/metals/pull/5194)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: hightlight for extension methods type params\\n [\\\\#5166](https://github.com/scalameta/metals/pull/5166)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update jsoup from 1.15.4 to 1.16.1\\n [\\\\#5192](https://github.com/scalameta/metals/pull/5192)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: add multi-root projects support\\n [\\\\#5033](https://github.com/scalameta/metals/pull/5033)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.16.3 to 9.17.0\\n [\\\\#5186](https://github.com/scalameta/metals/pull/5186)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.15 to 0.8.16\\n [\\\\#5185](https://github.com/scalameta/metals/pull/5185)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- improvement: Fail the build if supported sbt version wasn\'t updated\\n [\\\\#5146](https://github.com/scalameta/metals/pull/5146)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Auto comment shebang for scripts\\n [\\\\#5180](https://github.com/scalameta/metals/pull/5180)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.3.0-RC5\\n [\\\\#5184](https://github.com/scalameta/metals/pull/5184)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore[skip ci]: Switch to 0.11.12_mtags_release to avoid locking issue\\n [\\\\#5183](https://github.com/scalameta/metals/pull/5183)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump swoval version [\\\\#5181](https://github.com/scalameta/metals/pull/5181)\\n ([eatkins](https://github.com/eatkins))\\n- fix:selection expansion in comments\\n [\\\\#4921](https://github.com/scalameta/metals/pull/4921)\\n ([doofin](https://github.com/doofin))\\n- fix: Fix semantic tokens for multiline comments\\n [\\\\#5178](https://github.com/scalameta/metals/pull/5178)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix PcCollector for `@@` symbol\\n [\\\\#5100](https://github.com/scalameta/metals/pull/5100)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: arguments name completions for constructors\\n [\\\\#5174](https://github.com/scalameta/metals/pull/5174)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- chore: Add back locking mechanism with using jq syntax for selection\\n [\\\\#5171](https://github.com/scalameta/metals/pull/5171)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Small change to run release\\n [\\\\#5170](https://github.com/scalameta/metals/pull/5170)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix[skip ci] Remove lock mechanism since it stopped working\\n [\\\\#5169](https://github.com/scalameta/metals/pull/5169)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: release notes v0.11.12\\n [\\\\#5148](https://github.com/scalameta/metals/pull/5148)\\n ([kasiaMarek](https://github.com/kasiaMarek))"},{"id":"/2023/07/17/workspace-folders","metadata":{"permalink":"/metals/blog/2023/07/17/workspace-folders","source":"@site/blog/2023-07-17-workspace-folders.md","title":"Workspace folders","description":"In the upcoming version of metals we will add support for LSP workspace folders. This feature allows you to load multiple Scala projects/modules into the same workspace without the need to switch between multiple windows.","date":"2023-07-17T00:00:00.000Z","formattedDate":"July 17, 2023","tags":[],"readingTime":3.805,"hasTruncateMarker":false,"authors":[{"name":"Katarzyna Marek","url":"https://github.com/kasiaMarek","imageURL":"https://github.com/kasiaMarek.png"}],"frontMatter":{"author":"Katarzyna Marek","title":"Workspace folders","authorURL":"https://github.com/kasiaMarek","authorImageURL":"https://github.com/kasiaMarek.png"},"prevItem":{"title":"Metals v1.0.0 - Silver","permalink":"/metals/blog/2023/07/19/silver"},"nextItem":{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"}},"content":"In the upcoming version of metals we will add support for [LSP workspace folders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_workspaceFolders). This feature allows you to load multiple Scala projects/modules into the same workspace without the need to switch between multiple windows.\\n\\n## The new multi-root approach\\n\\nBefore this feature metals would only support a single project treating a workspace root folder as the root of the project. The workspace root was established based on the `rootUri` field of [`InitializeParams`](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initializeParams) sent by the client upon initialization.\\n\\nNow a single metals instance can accommodate several projects (or multiple roots of a project) at the time. In `InitializeParams` metals first looks for projects\' roots under `workspaceFolders` in `InitializeParams` and if empty we still fallback to the `rootUri`. Loaded projects can be changed dynamically though `didChangeWorkspaceFolders` notifications, which allow the client (editor) to inform metals about any added or removed projects.\\n\\nAll workspace folders are handled in metals separately and are oblivious of each other.\\nE.g. for the following multi project structure\\n\\n```\\nproject1\\n|- build.sbt\\n|- src\\n |- Main.scala\\n\\nproject2\\n|- build.sbt\\n|- src\\n |- Main.scala\\n```\\n\\nwe will keep two separate entities: one responsible for `project1`, and another one for `project2`.\\nUpon receiving most requests metals will redirect them to the entity responsible for the project of interest. If there are no other clues the project is chosen based on the currently opened file. E.g. if the user wants to insert an inferred type in the file `../project1/src/Main`, the request received by Metals will be redirected to the entity responsible for `project1`.\\n\\nFor some requests we collect information from all the projects and send a joint result, e.g. when searching for workspace symbols.\\n\\n\\n## How do I use the multi-root feature?\\n\\n### VSCode\\n\\nIn VSCode workspace folder support is achieved by [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces). To load multiple projects into a single workspace you can simply open one of the projects and add the other one using `File > Add Folder to Workspace` and then choosing the correct folder.\\n\\n![add-workspace-folder](https://i.imgur.com/LTYrx9V.gif)\\n\\nNow you have two projects loaded side by side, so you can easily see both and switch between them. All of the current metals functionality accommodates multiple projects, so you can use metals the same way as you did before. The biggest changes will be visible in the places where information from the whole workspace is collected, like workspace symbol search, test explorer, or metals doctor.\\n\\n![multi-root-tests](https://i.imgur.com/zWmmsC2.gif)\\n\\nThe target project for a command is usually chosen based on the currently opened file. E.g. if you run `Switch build server` the command it will be executed for the project in focus. If no project is in focus the editor will explicitly ask for which project the command should be executed.\\n\\n![target-folder](https://i.imgur.com/tV7K822.gif)\\n\\nFinally, logs can still be found in the `.metals/metals.log` in the root of each project. Note, that for the time being all information is logged to all opened workspace folders, so anything logged for `project1` will also be visible in logs for `project2`.\\n\\n### nvim-metals (_section written by [ckipp01](https://github.com/ckipp01)_)\\n\\nWhen using nvim-metals, you\'ll start just like you do with any other project.\\nSince the idea of a workspace is a bit \\"artificial\\" with Neovim, you can really\\njust add any new root to have a multi-root workspace. All you\'ll need to do is\\nnavigate to a file at the root level of the workspace you\'d like to add, and use\\nthe\\n[`vim.lsp.buf.add_workspace_folder()`](https://neovim.io/doc/user/lsp.html#vim.lsp.buf.add_workspace_folder()) function to add the folder containing the file you\'re in as another root.\\n\\n![add_workspace_folder](https://i.imgur.com/E8iriR9.gif)\\n\\nTo make this easier, you can also just create a mapping to use.\\n\\n```lua\\nvim.keymap.set(\\"n\\", \\"awf\\", vim.lsp.buf.add_workspace_folder)\\n```\\n\\nTo verify that this has worked correctly you should be able to now see both\\nworkspaces reflected in your Metals Doctor.\\n\\n![nvim-metals doctor](https://i.imgur.com/2u48wDK.gif)\\n\\nYou should also see that some commands, like the\\n[`vim.lsp.buf.workspace_symbol()`](https://neovim.io/doc/user/lsp.html#vim.lsp.buf.workspace_symbol())\\nnow show results from all the added workspaces.\\n\\n![workspace_symbols](https://i.imgur.com/RczJIcp.gif)\\n\\n## Changes for the clients\\n\\nSince workspace folders are a part of the LSP for any client implementing this capability the multi-root support should work out of the box, however, there will be a few minor changes to needed accommodate the new approach.\\n\\n1. The metals doctor result json format will change to contain a list of diagnostics for each workspace folder. Current format can be found in the description of `RunDoctor` command (visible in `ClientCommands.scala` in `metals` repo).\\n2. For test explorer users `BuildTargetUpdate` will also now contain information about the target folder.\\n\\n## Quick summary\\n\\nMetals now supports the [LSP workspace folders](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_workspaceFolders), which in VSCode are implemented by [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces).\\n\\nIf you haven\'t yet make sure to try out our new multi-root support!"},{"id":"/2023/04/21/aluminium","metadata":{"permalink":"/metals/blog/2023/04/21/aluminium","source":"@site/blog/2023-04-21-aluminium.md","title":"Metals v0.11.12 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.12. This release brings mostly stability fixes, some various improvements, and a start towards better issue identification and reporting when users experience issues.","date":"2023-04-21T00:00:00.000Z","formattedDate":"April 21, 2023","tags":[],"readingTime":9.27,"hasTruncateMarker":false,"authors":[{"name":"Katarzyna Marek","url":"https://github.com/kasiaMarek","imageURL":"https://github.com/kasiaMarek.png"}],"frontMatter":{"author":"Katarzyna Marek","title":"Metals v0.11.12 - Aluminium","authorURL":"https://github.com/kasiaMarek","authorImageURL":"https://github.com/kasiaMarek.png"},"prevItem":{"title":"Workspace folders","permalink":"/metals/blog/2023/07/17/workspace-folders"},"nextItem":{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.12. This release brings mostly stability fixes, some various improvements, and a start towards better issue identification and reporting when users experience issues.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release105
Merged PRs85
Contributors20
Closed issues38
New features5
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/56?closed=1]\\n(https://github.com/scalameta/metals/milestone/56?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Introducing Error Reports](#introducing-error-reports)\\n- [New code action for converting dependencies from sbt to scala-cli compliant ones](#new-code-action-for-converting-dependencies-from-sbt-to-scala-cli-compliant-ones)\\n- [Improvements to semantic highlighting](#improvements-to-semantic-highlighting)\\n- [Miscellaneous](#miscellaneous)\\n\\n## Introducing Error Reports\\n\\nStarting with this release, upon chosen errors or incorrect states in metals error reports will be automatically generated and saved in the `.metals/.reports` directory within the workspace. Such an error report can later be used by users to attach to a github issue with additional information. All the reports have their paths anonymised.\\n\\nCurrently, we create two types of reports:\\n\\n- _incognito_ under `.metals/.reports/metals`: these error reports contain only metals related stacktraces and should not contain any sensitive/private information\\n- _unsanitized_ under `.metals/.reports/metals-full`: these error reports may contain come sensitive/private information (e.g. code snippets)\\n\\nTo make it easier to attach reports to github issues the `zip-reports` command will zip all the **incognito** reports into `.metals/.reports/report.zip`, while unsanitized reports will have to be browsed and attached by hand. In order not to clutter the workspace too much, only up to 30 last reports of each kind are kept at a time.\\n\\nWhen running into a problem in VSCode (or any editor that implements this command) users can use the `Metals: Open new github issue` command. This will create a template for an issue with all basic info such as Metals version, used build server etc.. Next, you can browse through reports and drag and drop chosen ones to your GitHub issue. Invoking the `Metals: Zip reports` command will create a zip of all the incognito that reports can also be included in the issue.\\n\\n![Reports](https://i.imgur.com/wBwFjpZ.gif)\\n![Zip reports](https://i.imgur.com/YN3U3N9.gif)\\n\\n## New code action for converting dependencies from sbt to scala-cli compliant ones\\n\\nNew code action for scala-cli `using (dep | lib | plugin)` directives, which allows to convert dependencies from sbt style to scala-cli compliant ones.\\n\\n![Convert dependency](https://i.imgur.com/G9W7Nox.gif)\\n\\nA great contribution by [majk-p](https://github.com/majk-p).\\n\\n## Improvements to semantic highlighting\\n\\nThis release brings a lot of improvements for semantic highlighting thanks to [jkciesluk](https://github.com/scalameta/metals/pulls/jkciesluk) and [tgodzik](https://github.com/tgodzik). This includes:\\n\\n- Added declaration and definition tokens.\\n- Parameters are now read only.\\n- Added semantic highlighting for using directives.\\n- Fixed semantic highlighting for Scala 3 worksheets.\\n- Changed token type for predef aliases to \\"class\\".\\n- Fixed sematic highlighting in sbt files.\\n\\n## Miscellaneous\\n\\n- bugfix: Ignored tests now show up in the test explorer. [kpodsiad](https://github.com/kpodsiad)\\n- improvement: Reworked package rename upon file move.\\n- bugfix: Fixed go to and hover for `TypeTest`. [tgodzik](https://github.com/tgodzik)\\n- feature: Auto connect to bazel-bsp if it\'s installed. [tanishiking](https://github.com/tanishiking)\\n- docs: Updated emacs support table. [kurnevsky](https://github.com/kurnevsky)\\n- bugfix: Placing cursor on primary contructor type parameter no longer incorrectly highlights type parameter with the same name used in a member definiton. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Added Reload sbt after changes in the `metals.sbt` plugin file. [adpi2](https://github.com/adpi2)\\n- bugfix: Added handling fixing wildcard imports upon file rename.\\n- bugfix: Added refresh test case code lenses after test discovery. [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Fixed lacking newline for new imports added upon file move. [susliko](https://github.com/susliko)\\n- bugfix: Add showing lenses when BSP server is plain Scala.\\n- bugfix: A workaround for running BSP sbt when it\'s installed in a directory with a space on Widows. [tgodzik](https://github.com/tgodzik)\\n- improvement: If an aliased inferred type is not in scope dealias it.\\n- feature: Add hover information for structural types. [jkciesluk](https://github.com/jkciesluk)\\n- feature: Inline code action will be no longer executed if any of the references used on the right-hand side of the value to be inlined are shadowed by local definitions. In this case a warning will be shown to the user instead.\\n- bugfix: Fixed test suite discovery in presence of a companion object. [xydrolase](https://github.com/xydrolase)\\n- bugfix: Fixed shown return type of completions, that are no argument members, which return type depends on the ower type parameter.\\n- bugfix: Strip ANSI colors before printing worksheet results.\\n- improvement: Force close thread when file watching cancel hangs. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Add end condition for tokenizing partially written code, so tokenizing doesn\'t hang. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Correctly adjust span for extension methods for correctly displayed highligh. [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Correctly show `Expression type` (dealiased type) for parametrized types.\\n- bugfix: Filter out `-Ycheck-reentrant` option for worksheets, so worksheets correctly show results. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Show correct defaults when named parameters order is mixed in Scala 2. [tgodzik](https://github.com/tgodzik)\\n- bugfix: Print better constructors in synthetic decorator.\\n- bugfix: Show synthetic objects as options for case classes and AnyVal implicit classes in `Metals Analayze Source`. [kpodsiad](https://github.com/kpodsiad)\\n- bugfix: Corrrectly handle testfiles renames in test explorer. [kpodsiad](https://github.com/kpodsiad)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.11..v0.11.12\\n 23\\tscalameta-bot\\n 21\\tTomasz Godzik\\n 11\\tKatarzyna Marek\\n 10\\tJakub Ciesluk\\n 7\\tMichal Pawlik\\n 6\\tKamil Podsiadlo\\n 5\\tRikito Taniguchi\\n 3\\tadpi2\\n 3\\tKamil Podsiad\u0142o\\n 3\\tMicha\u0142 Pawlik\\n 3\\tdependabot[bot]\\n 2\\ttgodzik\\n 1\\tChris Kipp\\n 1\\tVadim Chelyshov\\n 1\\tVasiliy Morkovkin\\n 1\\tXin Yin\\n 1\\tLaurence Warne\\n 1\\tJ\u0119drzej Rochala\\n 1\\tEvgeny Kurnevsky\\n 1\\tScalameta Bot\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.12](https://github.com/scalameta/metals/tree/v0.11.12) (2023-04-21)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.11...v0.11.12)\\n\\n**Merged pull requests:**\\n\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.1 to 4.7.7\\n [\\\\#5163](https://github.com/scalameta/metals/pull/5163)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.1 to 2.1.2\\n [\\\\#5162](https://github.com/scalameta/metals/pull/5162)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.13 to 0.8.15\\n [\\\\#5161](https://github.com/scalameta/metals/pull/5161)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.3.0-RC4\\n [\\\\#5158](https://github.com/scalameta/metals/pull/5158)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: mtags compilation with Java 11\\n [\\\\#5157](https://github.com/scalameta/metals/pull/5157)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Reduce IO when querying if file exists\\n [\\\\#5152](https://github.com/scalameta/metals/pull/5152)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix Scala CLI script for release notes\\n [\\\\#5151](https://github.com/scalameta/metals/pull/5151)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: properly handle testfiles renames in Test Explorer\\n [\\\\#5042](https://github.com/scalameta/metals/pull/5042)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add a description about MtagsIndexer in architecture.md\\n [\\\\#4794](https://github.com/scalameta/metals/pull/4794)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: properly index Java sources\\n [\\\\#5009](https://github.com/scalameta/metals/pull/5009)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update coursier from 2.1.0 to 2.1.1\\n [\\\\#5142](https://github.com/scalameta/metals/pull/5142)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix test after changes in #5124\\n [\\\\#5147](https://github.com/scalameta/metals/pull/5147)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore[skip ci]: Switch nightly releases to branch with fixed test\\n [\\\\#5145](https://github.com/scalameta/metals/pull/5145)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.14 to 1.0.15\\n [\\\\#5143](https://github.com/scalameta/metals/pull/5143)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Auto spawn/connect to bazel-bsp if it\'s installed\\n [\\\\#5139](https://github.com/scalameta/metals/pull/5139)\\n ([tanishiking](https://github.com/tanishiking))\\n- improvement: report on an empty hover\\n [\\\\#5128](https://github.com/scalameta/metals/pull/5128)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.16.1 to 9.16.3\\n [\\\\#5136](https://github.com/scalameta/metals/pull/5136)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Update emacs support table\\n [\\\\#5131](https://github.com/scalameta/metals/pull/5131)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- bugfix: Show document highlight with cursor on primary cosntructor\\n [\\\\#5127](https://github.com/scalameta/metals/pull/5127)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update mima last artifacts and make an explicit step in the docs\\n [\\\\#5130](https://github.com/scalameta/metals/pull/5130)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reload sbt after writing metals plugin\\n [\\\\#5126](https://github.com/scalameta/metals/pull/5126)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: handling wildcard imports for file rename\\n [\\\\#4986](https://github.com/scalameta/metals/pull/4986)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Refresh test case code lenses after discovery\\n [\\\\#5124](https://github.com/scalameta/metals/pull/5124)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bugfix: add newline in new imports when moving files\\n [\\\\#5120](https://github.com/scalameta/metals/pull/5120)\\n ([susliko](https://github.com/susliko))\\n- bugfix: Show lenses when BSP server is plain Scala\\n [\\\\#5118](https://github.com/scalameta/metals/pull/5118)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix running BSP sbt when it\'s installed in a directory with space\\n [\\\\#5107](https://github.com/scalameta/metals/pull/5107)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Make fallback semantic tokens readonly\\n [\\\\#5067](https://github.com/scalameta/metals/pull/5067)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Extract shared mtags without scalameta dependency\\n [\\\\#5075](https://github.com/scalameta/metals/pull/5075)\\n ([rochala](https://github.com/rochala))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.3.1 to 2.4.0 in /website\\n [\\\\#5111](https://github.com/scalameta/metals/pull/5111)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): Update xnio-nio from 3.8.8.Final to 3.8.9.Final\\n [\\\\#5113](https://github.com/scalameta/metals/pull/5113)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump @docusaurus/preset-classic from 2.3.1 to 2.4.0 in /website\\n [\\\\#5109](https://github.com/scalameta/metals/pull/5109)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): Update interface from 1.0.13 to 1.0.14\\n [\\\\#5112](https://github.com/scalameta/metals/pull/5112)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump @docusaurus/core from 2.3.1 to 2.4.0 in /website\\n [\\\\#5110](https://github.com/scalameta/metals/pull/5110)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Fix go to definition and hover for TypeTest\\n [\\\\#5103](https://github.com/scalameta/metals/pull/5103)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add definition and declaration properties\\n [\\\\#5047](https://github.com/scalameta/metals/pull/5047)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt-mima-plugin from 1.1.1 to 1.1.2\\n [\\\\#5104](https://github.com/scalameta/metals/pull/5104)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update versions from 0.3.1 to 0.3.2\\n [\\\\#5105](https://github.com/scalameta/metals/pull/5105)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.2 to 3.7.3\\n [\\\\#5106](https://github.com/scalameta/metals/pull/5106)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: pkgs renames for file move\\n [\\\\#5014](https://github.com/scalameta/metals/pull/5014)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Code action to convert dependencies from sbt to mill style\\n [\\\\#5078](https://github.com/scalameta/metals/pull/5078)\\n ([majk-p](https://github.com/majk-p))\\n- improvement: Change token type to class for predef aliases\\n [\\\\#5044](https://github.com/scalameta/metals/pull/5044)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: dealias inferred types if not in scope\\n [\\\\#5051](https://github.com/scalameta/metals/pull/5051)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix semantic highlight in sbt files\\n [\\\\#5098](https://github.com/scalameta/metals/pull/5098)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: Hover on structural types in Scala 3\\n [\\\\#5074](https://github.com/scalameta/metals/pull/5074)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix #5096: run doc on java target with semanticdb\\n [\\\\#5097](https://github.com/scalameta/metals/pull/5097)\\n ([adpi2](https://github.com/adpi2))\\n- build(deps): Update mill-contrib-testng from 0.10.11 to 0.10.12\\n [\\\\#5081](https://github.com/scalameta/metals/pull/5081)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-jmh from 0.4.3 to 0.4.4\\n [\\\\#5094](https://github.com/scalameta/metals/pull/5094)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.20 to 0.2.1\\n [\\\\#5093](https://github.com/scalameta/metals/pull/5093)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.6.1 to 3.7.2\\n [\\\\#5091](https://github.com/scalameta/metals/pull/5091)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.15.2 to 9.16.1\\n [\\\\#5090](https://github.com/scalameta/metals/pull/5090)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.6 to 2.3.7\\n [\\\\#5089](https://github.com/scalameta/metals/pull/5089)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jol-core from 0.16 to 0.17\\n [\\\\#5088](https://github.com/scalameta/metals/pull/5088)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.15.0 to 9.15.2\\n [\\\\#5086](https://github.com/scalameta/metals/pull/5086)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.15.3 to 1.15.4\\n [\\\\#5087](https://github.com/scalameta/metals/pull/5087)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.20.0 to 0.20.1\\n [\\\\#5085](https://github.com/scalameta/metals/pull/5085)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-RC6 to 2.1.0\\n [\\\\#5084](https://github.com/scalameta/metals/pull/5084)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.0 to 3.11.1\\n [\\\\#5083](https://github.com/scalameta/metals/pull/5083)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scala-debug-adapter from 3.0.7 to 3.0.9\\n [\\\\#5080](https://github.com/scalameta/metals/pull/5080)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: use scala-cli for script instead of Ammonite\\n [\\\\#5077](https://github.com/scalameta/metals/pull/5077)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: find companion object of AnyVal, implicit class in class finder\\n [\\\\#4974](https://github.com/scalameta/metals/pull/4974)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Switch from algolia to easyops-cn/docusaurus-search-local\\n [\\\\#5066](https://github.com/scalameta/metals/pull/5066)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: Adjust semantic tokens tests for select dynamic in 3.3.1-RC1\\n [\\\\#5069](https://github.com/scalameta/metals/pull/5069)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: Fix select dynamic hover tests for 3.3.1-RC1\\n [\\\\#5068](https://github.com/scalameta/metals/pull/5068)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Make semantic tokens parameters readonly\\n [\\\\#5049](https://github.com/scalameta/metals/pull/5049)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: print better constructors in synthetic decorator\\n [\\\\#5023](https://github.com/scalameta/metals/pull/5023)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feature: metals error reports\\n [\\\\#4971](https://github.com/scalameta/metals/pull/4971)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix wrong default when named params are mixed\\n [\\\\#5058](https://github.com/scalameta/metals/pull/5058)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Filter out -Ycheck-reentrant\\n [\\\\#5059](https://github.com/scalameta/metals/pull/5059)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: use value class to for new semanticDB path type\\n [\\\\#5043](https://github.com/scalameta/metals/pull/5043)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Welcome Kasia to the team\\n [\\\\#5054](https://github.com/scalameta/metals/pull/5054)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Check if span in def is correct\\n [\\\\#5046](https://github.com/scalameta/metals/pull/5046)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feat: discover Scalatest ignored tests\\n [\\\\#5035](https://github.com/scalameta/metals/pull/5035)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- improvement: Add semantic highlight for using directives\\n [\\\\#5037](https://github.com/scalameta/metals/pull/5037)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: dealias applied type params\\n [\\\\#5048](https://github.com/scalameta/metals/pull/5048)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix span for extension methods\\n [\\\\#5040](https://github.com/scalameta/metals/pull/5040)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Make sure that tokenizing doesn\'t hang\\n [\\\\#5050](https://github.com/scalameta/metals/pull/5050)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Force closing thread if file watching cancel hanged\\n [\\\\#5010](https://github.com/scalameta/metals/pull/5010)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Fix semantic tokens for worksheets in Scala 3\\n [\\\\#5038](https://github.com/scalameta/metals/pull/5038)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: strip ANSI colours before printing worksheet results\\n [\\\\#5039](https://github.com/scalameta/metals/pull/5039)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: perform `substituteTypeVars` also for methods with no args\\n [\\\\#5045](https://github.com/scalameta/metals/pull/5045)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- Force update of scala-debug-adapter by Scala Steward\\n [\\\\#5032](https://github.com/scalameta/metals/pull/5032)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Fixed test suite discovery with the presence of companion object.\\n [\\\\#5030](https://github.com/scalameta/metals/pull/5030)\\n ([xydrolase](https://github.com/xydrolase))\\n- docs: Link to Scala release\\n [\\\\#5022](https://github.com/scalameta/metals/pull/5022)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: inline value scoping\\n [\\\\#4943](https://github.com/scalameta/metals/pull/4943)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- docs: Add release notes for 0.11.11\\n [\\\\#4973](https://github.com/scalameta/metals/pull/4973)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/03/02/aluminium","metadata":{"permalink":"/metals/blog/2023/03/02/aluminium","source":"@site/blog/2023-03-02-aluminium.md","title":"Metals v0.11.11 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.11, which brings in a couple","date":"2023-03-02T00:00:00.000Z","formattedDate":"March 2, 2023","tags":[],"readingTime":15.415,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.11 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.12 - Aluminium","permalink":"/metals/blog/2023/04/21/aluminium"},"nextItem":{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.11, which brings in a couple\\nof new features and improvements as well as stability fixes. Further releases\\nand possibly 1.0.0 release will focus on providing a better stable development\\nenvironment.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release177
Merged PRs138
Contributors11
Closed issues42
New features7
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/55?closed=1]\\n(https://github.com/scalameta/metals/milestone/55?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Added support for Scala 3.2.2](#support-for-scala-322).\\n- [Introduce Support for Semantic Tokens](#introduce-support-for-semantic-tokens)\\n- [New Inline value code action](#new-inline-value-code-action)\\n- [Expanded workspace symbol search to include fields](#expanded-workspace-symbol-search-to-include-fields)\\n- [Allow users to use older Scala versions](#allow-users-to-use-older-scala-versions)\\n- [Improve match-case completions in Scala 2](#improve-match-case-completions-in-scala-2)\\n- [Fallback to symbol search for code navigation](#fallback-to-symbol-search-for-code-navigation)\\n- [Automatically add details to github issue](#automatically-add-details-to-github-issue)\\n\\n## Support for Scala 3.2.2\\n\\nRelease notes from\\n[https://www.scala-lang.org/news/3.2.2](https://www.scala-lang.org/news/3.2.2)\\n\\nThis version not only fixes bugs but also brings two new flags:\\n\\n- `-Vrepl-max-print-characters` allows you to configure how many characters can\\n be printed in the REPL before truncating the output. The default limit was\\n also raised from 1,000 to 50,000 characters.\\n\\n- `-Ylightweight-lazy-vals` enables new lazy vals implementation. It can be much\\n more performant, especially in cases of parallel access. However, it can cause\\n problems when used inside of GraalVM native image. We will make the new\\n implementation the default one as soon as we fix those problems.\\n\\n## Introduce Support for Semantic Tokens\\n\\nSemantic tokens is a newer addition to the language server protocol that enables\\neditors to provide syntax highlighting based on the knowledge provided by the\\nlanguage server. Each symbol within the Scala file should now have a more\\nmeaningful color dependent on whether it\'s a class, field, operator, etc.\\n\\nThis feature is now available in Metals thanks to the main work done by\\n[ShintaroSasaki](https://github.com/ShintaroSasaki) during last year\'s Google\\nsummer of code and some later additional effort by other Metals contributors\\nmainly [jkciesluk](https://github.com/jkciesluk). Since this feature would\\nimpact all the users in every file they open, we decided to put it first behind\\nan additional user setting `metals.enableSemanticHighlighting`, which needs to\\nbe set to true. Later depending on your editor, you might also need to enable it\\nin some other places.\\n\\nFor example in VS Code you also need to set\\n`editor.semanticHighlighting.enabled` to `true`. So the settings json files\\nwould look like this:\\n\\n```json\\n...\\n \\"metals.enableSemanticHighlighting\\": true,\\n \\"editor.semanticHighlighting.enabled\\": true,\\n...\\n```\\n\\nYou can also modify your theme colors and styles for some particular types of\\nsymbols. For example:\\n\\n```json\\n \\"editor.semanticTokenColorCustomizations\\": {\\n \\"[Adapta Nokto]\\": {\\n \\"rules\\": {\\n \\"variable\\": \\"#c95252\\",\\n \\"*.readonly\\": \\"#8d91b8\\",\\n \\"*.deprecated\\": {\\n \\"strikethrough\\": true\\n }\\n }\\n }\\n },\\n```\\n\\nwill make vars red and values light blue while also crossing out any deprecated\\nmethods or classes.\\n\\n![semantic-tokens](https://i.imgur.com/vkllczg.png)\\n\\nFor setting up semantic tokens in editors other than VS Code please consult the\\nrelevant documentation.\\n\\n## New inline value code action\\n\\nInline value is a new code action contributed by\\n[kasiaMarek](https://github.com/kasiaMarek) that allows users to inline the\\nright hand side of any value if the definition of that value is located within\\nthe same file. This works in two ways:\\n\\n- if inlining at a reference we will only replace the current value reference\\n\\n![replace-one](https://i.imgur.com/yLuM079.gif)\\n\\n- if inlining at the definition we will try to replace all the references and\\n remove the definition if the definition cannot be accessed from outside the\\n current file\\n\\n![replace-all](https://i.imgur.com/LdlSQsB.gif)\\n\\n## Expanded workspace symbol search to include fields\\n\\nPreviously, when searching the workspace Metals would only look for classes,\\ntrait, interfaces, enums and objects. If you wanted to search for a particularly\\nnamed method you would need to use normal text search, which would be much less\\nconvenient. This release adds the ability to also search for method, types or\\nvalues within the workspace. This will not work for dependencies in order to not\\nincrease indexes used by Metals too much.\\n\\n![search](https://i.imgur.com/YQCinNz.gif)\\n\\nAnother great contribution from [kasiaMarek](https://github.com/kasiaMarek)!\\n\\n## Allow users to use older Scala versions\\n\\nTo provide support for a particular Scala version Metals needs to release a\\nseparate version for each of them, which causes a strain on CI infrastructure.\\nBecause of that previously we would stop supporting some older Scala versions.\\nHowever, now instead of entirely dropping support for older versions, we will\\nonly freeze the amount of features and not fix any new bugs for any of those\\nolder versions.\\n\\nWe will still recommend updating to the newest possible binary compatible\\nversion of the Scala version you are using, but in case it\'s not possible for\\nyou it should be safe to use Metals with those older versions.\\n\\nIn this release we removed Scala 3.0.0, 2.13.1, 2.13.2, 2.12.9, 3.0.0 and 3.0.1.\\nYou can still use them, but some of the newest features will not be available\\nfor them including inline and semantic tokens.\\n\\n## Improve match-case completions in Scala 2\\n\\nLast release introduced some improvements for completions in pattern matching in\\nScala 3. This release brings them also to Scala 2 including:\\n\\n- pattern only completions, i.e. completions in:\\n\\n```scala\\nOption(1) match {\\n case No@@\\n case _: So@@\\n```\\n\\n- completions like:\\n\\n```scala\\ncase class Foo(a: Int, b: Int)\\nList(Foo(1,2)).map{ case F@@ }\\n// turns into\\nList(Foo(1,2)).map{ case Foo(a,b) => }\\n```\\n\\n- exhaustive match completions in anonymous functions:\\n\\n```scala\\nList(Option(1)).map { case@@ }\\n// turns into\\nList(Option(1)).map {\\n case Some(value) =>\\n case None =>\\n}\\n```\\n\\nIn all the examples `@@` denotes the position of the cursor.\\n\\nThis cool improvement was added by [jkciesluk](https://github.com/jkciesluk).\\n\\n## Fallback to symbol search for code navigation\\n\\nMetals uses both global semanticdb indexes as well as the compiler itself to\\nfind the definition of any symbol. However, whenever your workspace had problems\\nwith compilation both those methods could have failed to actually find that\\ndefinition. Instead of giving up, since Metals indexes all the names of types,\\nmethods etc. we will try to find the symbol by name within the user\'s workspace.\\n\\nThis heuristic might sometimes offer false positives, but it\'s much more useful\\nthan being left with no definition location at all. We will continue to improve\\nthose heuristics to make sure that the number of false positives is reduced.\\n\\n## Automatically add details to github issue\\n\\nThanks to [kasiaMarek](https://github.com/kasiaMarek) whenever users open an\\nissue from the Metals tree view or via the `open-new-github-issue` command, the\\nissue will have all the details filled out automatically. This should reduce the\\namount of information that the users need to type manually and make it much more\\nefficient to submit new issues.\\n\\n## Miscellaneous\\n\\n- bugfix: Correctly sort dependency completions in case of non standard\\n versions. [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix issues with spaces in workspace path on Windows.\\n- improvement: Allow rename in lambdas even if code doesn\'t compile.\\n- bugfix: Fix running main when spaces are involved on Windows.\\n- improvement: Allow extracting member when file contains toplevel definition.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix [Scala 3]: Don\'t show named argument completions on infix methods.\\n- improvement[Scala 3]: add `*` completion when at `import foo.`.\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Automatically add repositories to init script for gradle\\n ([kasiaMarek](https://github.com/kasiaMarek)).\\n- fix: Correctly insert type annotation in tuples lambda args\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Use classpath jar for defining run classpath.\\n- improvement: Allow manual cancel of starting debug session.\\n- bugfix: ensure a new `.metals/` dir isn\'t create when/where undesired.\\n- bugfix: Fix issues with jars containing + on windows.\\n- bugfix: Always check if a file with scala/java extension is not a directory.\\n- bugfix: Fix issues with go to definition in derived clauses.\\n- bugfix[Scala 3]: Correctly highlight enum case in lists.\\n- bugfix: Don\'t show completions in patterns when writing `new`\\n [kasiaMarek](https://github.com/kasiaMarek).\\n- bugfix: Don\'t highlight generated given if it doesn\'t exist.\\n- bugfix: Do not convert to named arguments for a Java class.\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Implement all members for case classes in Scala 3\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Insert imports in the correct place in ScalaCLI scripts\\n- bugfix: Also accept interfaces for go to implementation\\n- bugfix: Support Scala 3.0.x worksheets\\n- bugfix: Support scala command as BSP server for debug\\n- improvement: add completion for scala cli `//> using dep@@`\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Fix issues with auto imports not showing up on windows\\n- bugfix: Correctly highlight last name when using trailing comma\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Suggest `derives` after `extend` or instead of it.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Don\'t change packages in files if they move outside workspace\\n- feature: Add the possibility to discover the main class command to run\\n- improvement: Add better exhaustive completions for &, | types\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Automatically add details to github issue\\n [kasiaMarek](https://github.com/kasiaMarek)\\n- bugfix: Always check if a Scala file is an actual file\\n- bugfix: Remove additional indent for auto imports in worksheets\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix [Scala 3]: Fix infinite loop in case of complex inline expressions\\n- bugfix: Fix JDK version when Java home is jre folder\\n [adpi2](https://github.com/adpi2)\\n- bugfix [Scala 3]: Suggest class constructors when importing symbols\\n- bugfix: Fix infinite loop when searching for munit test cases\\n- bugfix: inner methods passed as params for extract method code action\\n [kasiaMarek](https://github.com/kasiaMarek)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.10..v0.11.11\\n Tomasz Godzik\\n Jakub Ciesluk\\n Katarzyna Marek\\n Chris Kipp\\n Kamil Podsiad\u0142o\\n Tobias Roeser\\n Joao Azevedo\\n Maciej Gajek\\n Shintaro Sasaki\\n Adrien Piquerez\\n J\u0119drzej Rochala\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.11](https://github.com/scalameta/metals/tree/v0.11.11) (2023-03-02)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.10...v0.11.11)\\n\\n**Merged pull requests:**\\n\\n- dep: bump gradleBloop from 1.5.8.to 1.6.0\\n [\\\\#5020](https://github.com/scalameta/metals/pull/5020)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): bump @docusaurus/core from 2.3.0 to 2.3.1 in /website\\n [\\\\#5018](https://github.com/scalameta/metals/pull/5018)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/plugin-client-redirects from 2.3.0 to 2.3.1 in\\n /website [\\\\#5017](https://github.com/scalameta/metals/pull/5017)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- build(deps): bump @docusaurus/preset-classic from 2.3.0 to 2.3.1 in /website\\n [\\\\#5016](https://github.com/scalameta/metals/pull/5016)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- improvement: Add test for type completion out of scope\\n [\\\\#5015](https://github.com/scalameta/metals/pull/5015)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: Move SemanticTokens to metals package\\n [\\\\#5002](https://github.com/scalameta/metals/pull/5002)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Cancel and create new server in test retry\\n [\\\\#5011](https://github.com/scalameta/metals/pull/5011)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: inner methods passed as params for extract method code action\\n [\\\\#5004](https://github.com/scalameta/metals/pull/5004)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix infinite loop when searching for munit test cases\\n [\\\\#5008](https://github.com/scalameta/metals/pull/5008)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Suggest class constructors when importing symbols\\n [\\\\#5000](https://github.com/scalameta/metals/pull/5000)\\n ([tgodzik](https://github.com/tgodzik))\\n- [sbt-metals] Fix JDK version when Java home is jre folder\\n [\\\\#4910](https://github.com/scalameta/metals/pull/4910)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Don\'t collect symbols from Inline expansion\\n [\\\\#4999](https://github.com/scalameta/metals/pull/4999)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.0-RC3\\n [\\\\#4998](https://github.com/scalameta/metals/pull/4998)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Remove additional indent for imports in worksheets\\n [\\\\#4927](https://github.com/scalameta/metals/pull/4927)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: remove leftover from PR #4954\\n [\\\\#4996](https://github.com/scalameta/metals/pull/4996)\\n ([rochala](https://github.com/rochala))\\n- bugfix: Always check if a Scala file is an actual file\\n [\\\\#4997](https://github.com/scalameta/metals/pull/4997)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.12.0 to 9.15.0\\n [\\\\#4994](https://github.com/scalameta/metals/pull/4994)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.19.0 to 0.20.0\\n [\\\\#4993](https://github.com/scalameta/metals/pull/4993)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-RC4 to 2.1.0-RC6\\n [\\\\#4992](https://github.com/scalameta/metals/pull/4992)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.7 to 3.11.0\\n [\\\\#4990](https://github.com/scalameta/metals/pull/4990)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update semanticdb-java from 0.8.9 to 0.8.13\\n [\\\\#4991](https://github.com/scalameta/metals/pull/4991)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: Add Semantic Tokens support in Scala 3\\n [\\\\#4946](https://github.com/scalameta/metals/pull/4946)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update sbt-welcome from 0.2.2 to 0.3.1\\n [\\\\#4980](https://github.com/scalameta/metals/pull/4980)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bsp4j from 2.1.0-M3 to 2.1.0-M4\\n [\\\\#4979](https://github.com/scalameta/metals/pull/4979)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.10.10 to 0.10.11\\n [\\\\#4982](https://github.com/scalameta/metals/pull/4982)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.6 to 2.5.8\\n [\\\\#4981](https://github.com/scalameta/metals/pull/4981)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.6 to 3.10.7\\n [\\\\#4983](https://github.com/scalameta/metals/pull/4983)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Wrong semantic token for renamed imported classes\\n [\\\\#4976](https://github.com/scalameta/metals/pull/4976)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Don\'t use cache when querying for Scala nightlies\\n [\\\\#4972](https://github.com/scalameta/metals/pull/4972)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Merge input and input3 projects used for tests\\n [\\\\#4959](https://github.com/scalameta/metals/pull/4959)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add better exhaustive completions for &, | types\\n [\\\\#4965](https://github.com/scalameta/metals/pull/4965)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Improvement: adds details to github issue\\n [\\\\#4966](https://github.com/scalameta/metals/pull/4966)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feature: Add the possibility to discover the main class to run\\n [\\\\#4968](https://github.com/scalameta/metals/pull/4968)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t change packages in files if they move outside workspace\\n [\\\\#4967](https://github.com/scalameta/metals/pull/4967)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: completions for keyword lookalikes\\n [\\\\#4922](https://github.com/scalameta/metals/pull/4922)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Add `derives` keyword completion\\n [\\\\#4953](https://github.com/scalameta/metals/pull/4953)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Set terminated to true when timeout\\n [\\\\#4964](https://github.com/scalameta/metals/pull/4964)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Remove scalameta parsing in InferredTypeProvider\\n [\\\\#4954](https://github.com/scalameta/metals/pull/4954)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Adjust position in PcCollector for trailing comma\\n [\\\\#4952](https://github.com/scalameta/metals/pull/4952)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix issues with auto imports not showing up\\n [\\\\#4956](https://github.com/scalameta/metals/pull/4956)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: add completion for scala cli //> using dep@@\\n [\\\\#4963](https://github.com/scalameta/metals/pull/4963)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Support scala command as BSP server for debug\\n [\\\\#4962](https://github.com/scalameta/metals/pull/4962)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Don\'t fail on no shutdown message\\n [\\\\#4960](https://github.com/scalameta/metals/pull/4960)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix completion tests and make them more stable\\n [\\\\#4957](https://github.com/scalameta/metals/pull/4957)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add classpath to expect semantic tokens suite\\n [\\\\#4958](https://github.com/scalameta/metals/pull/4958)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Catch StackOverflowException from the parser\\n [\\\\#4902](https://github.com/scalameta/metals/pull/4902)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add null check in SemanticTokenProvider\\n [\\\\#4951](https://github.com/scalameta/metals/pull/4951)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Support Scala 3.0.x worksheets\\n [\\\\#4949](https://github.com/scalameta/metals/pull/4949)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Also accept interfaces for go to implementation\\n [\\\\#4948](https://github.com/scalameta/metals/pull/4948)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Remove check for stacktrace markers\\n [\\\\#4947](https://github.com/scalameta/metals/pull/4947)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Allow users to use older Scala support\\n [\\\\#4935](https://github.com/scalameta/metals/pull/4935)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Fix expected line in FindTextInDependencyJarsSuite\\n [\\\\#4942](https://github.com/scalameta/metals/pull/4942)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Insert imports in the correct place in ScalaCLI scripts\\n [\\\\#4940](https://github.com/scalameta/metals/pull/4940)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Print information if compiler failed to infer edits for import\\n [\\\\#4941](https://github.com/scalameta/metals/pull/4941)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Also allow nonboostrapped to fall back to the last nightly\\n [\\\\#4938](https://github.com/scalameta/metals/pull/4938)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs[skip ci]: Don\'t suggest updating mima\\n [\\\\#4937](https://github.com/scalameta/metals/pull/4937)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: when inlining lambda value add brackets\\n [\\\\#4890](https://github.com/scalameta/metals/pull/4890)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: Implement all members for case classes in Scala 3\\n [\\\\#4923](https://github.com/scalameta/metals/pull/4923)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: do not convert to named arguments for a Java class\\n [\\\\#4870](https://github.com/scalameta/metals/pull/4870)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Don\'t highlight generated given if it doesn\'t exist\\n [\\\\#4916](https://github.com/scalameta/metals/pull/4916)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add the possibility to only support running the code\\n [\\\\#4919](https://github.com/scalameta/metals/pull/4919)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly highlight enum case in lists\\n [\\\\#4917](https://github.com/scalameta/metals/pull/4917)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not show run lenses for other platforms than JVM\\n [\\\\#4918](https://github.com/scalameta/metals/pull/4918)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Fix `select.nameSpan` for expressions in parentheses\\n [\\\\#4907](https://github.com/scalameta/metals/pull/4907)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update test for Windows\\n [\\\\#4913](https://github.com/scalameta/metals/pull/4913)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: case pattern completions for bind\\n [\\\\#4912](https://github.com/scalameta/metals/pull/4912)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Fix issues with go to definition in derived clauses\\n [\\\\#4909](https://github.com/scalameta/metals/pull/4909)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: workspace symbol search global var/val/def/type\\n [\\\\#4798](https://github.com/scalameta/metals/pull/4798)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- bugfix: Always check if a scala/java file is actually a file\\n [\\\\#4891](https://github.com/scalameta/metals/pull/4891)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.3.0-RC2\\n [\\\\#4908](https://github.com/scalameta/metals/pull/4908)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix issues with jars containing + on windows\\n [\\\\#4899](https://github.com/scalameta/metals/pull/4899)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: make scala3RC easier to work with\\n [\\\\#4900](https://github.com/scalameta/metals/pull/4900)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Add checks if span exists\\n [\\\\#4901](https://github.com/scalameta/metals/pull/4901)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure a new `.metals/` dir isn\'t create when/where undesired\\n [\\\\#4895](https://github.com/scalameta/metals/pull/4895)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: add support for 3.3.0-RC1\\n [\\\\#4897](https://github.com/scalameta/metals/pull/4897)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix(ci): don\'t run scripted tests twice\\n [\\\\#4898](https://github.com/scalameta/metals/pull/4898)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Mill documentation\\n [\\\\#4887](https://github.com/scalameta/metals/pull/4887)\\n ([lefou](https://github.com/lefou))\\n- improvement: Allow manual cancel of starting debug session\\n [\\\\#4873](https://github.com/scalameta/metals/pull/4873)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.19 to 0.1.20\\n [\\\\#4878](https://github.com/scalameta/metals/pull/4878)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore[Scala 3]: Add back unused warnings and remove all unused\\n [\\\\#4880](https://github.com/scalameta/metals/pull/4880)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert scalafmt update [\\\\#4882](https://github.com/scalameta/metals/pull/4882)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Use classpath jar for defining run classpath\\n [\\\\#4868](https://github.com/scalameta/metals/pull/4868)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.6.1 to 3.7.0\\n [\\\\#4876](https://github.com/scalameta/metals/pull/4876)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.11.0 to 9.12.0\\n [\\\\#4875](https://github.com/scalameta/metals/pull/4875)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: inline values [\\\\#4759](https://github.com/scalameta/metals/pull/4759)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- fix: correctly insert type annotation in tuples lambda args\\n [\\\\#4859](https://github.com/scalameta/metals/pull/4859)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix compilation with newest nightlies\\n [\\\\#4866](https://github.com/scalameta/metals/pull/4866)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: update sbt-launcher.jar to 1.8.2\\n [\\\\#4865](https://github.com/scalameta/metals/pull/4865)\\n ([ckipp01](https://github.com/ckipp01))\\n- improvement: Fallback to symbol search as the last possibility for definition\\n [\\\\#4861](https://github.com/scalameta/metals/pull/4861)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: init script repositories for gradle\\n [\\\\#4773](https://github.com/scalameta/metals/pull/4773)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Better exhaustive-case completion\\n [\\\\#4831](https://github.com/scalameta/metals/pull/4831)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix: add star to import completions in Scala 3\\n [\\\\#4855](https://github.com/scalameta/metals/pull/4855)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- refactor: Split DebugAdapterStart command into separate commands\\n [\\\\#4860](https://github.com/scalameta/metals/pull/4860)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add semantic tokens for sbt and script files\\n [\\\\#4853](https://github.com/scalameta/metals/pull/4853)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix [Scala 3]: Don\'t show named argument completions on infix methods\\n [\\\\#4857](https://github.com/scalameta/metals/pull/4857)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: In bloop directories were seen as scala/java files\\n [\\\\#4856](https://github.com/scalameta/metals/pull/4856)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- refactor: adding wrapper for metals server configuration\\n [\\\\#4845](https://github.com/scalameta/metals/pull/4845)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- improvement: Allow extracting member when file contains toplevel\\n `val`|`def`|`given` etc.\\n [\\\\#4803](https://github.com/scalameta/metals/pull/4803)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update interface from 1.0.12 to 1.0.13\\n [\\\\#4854](https://github.com/scalameta/metals/pull/4854)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Check if symbol exists before invoking .owner\\n [\\\\#4838](https://github.com/scalameta/metals/pull/4838)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure that correct extension param is highlighted\\n [\\\\#4852](https://github.com/scalameta/metals/pull/4852)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add support for Scala 3.2.2\\n [\\\\#4850](https://github.com/scalameta/metals/pull/4850)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure doctor reports that diagnostics in sbt targets work\\n [\\\\#4842](https://github.com/scalameta/metals/pull/4842)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Properly check symbol in classOf\\n [\\\\#4846](https://github.com/scalameta/metals/pull/4846)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Improve performance of `SemanticTokens`\\n [\\\\#4835](https://github.com/scalameta/metals/pull/4835)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Always log issues with BSP requests\\n [\\\\#4843](https://github.com/scalameta/metals/pull/4843)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure when we go from quickpick to showMessageRequest we include type\\n [\\\\#4841](https://github.com/scalameta/metals/pull/4841)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Update Ammonite to 2.5.6\\n [\\\\#4840](https://github.com/scalameta/metals/pull/4840)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Disable -Wunused:all for Scala 3\\n [\\\\#4836](https://github.com/scalameta/metals/pull/4836)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Add benchmarks for SemanticHighlight\\n [\\\\#4833](https://github.com/scalameta/metals/pull/4833)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: properly shut down Metals server\\n [\\\\#4829](https://github.com/scalameta/metals/pull/4829)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: fix name shadowing in pc collector\\n [\\\\#4818](https://github.com/scalameta/metals/pull/4818)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.5 to 3.10.6\\n [\\\\#4830](https://github.com/scalameta/metals/pull/4830)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- docs: update `architecture.md` after #4776 (split MetalsLanguageServer` into\\n separate two parts) [\\\\#4826](https://github.com/scalameta/metals/pull/4826)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Only request build targets from a connection\\n [\\\\#4825](https://github.com/scalameta/metals/pull/4825)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: split `MetalsLanguageServer` into language server and language\\n service [\\\\#4776](https://github.com/scalameta/metals/pull/4776)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Fix running when spaces are involved on windows\\n [\\\\#4815](https://github.com/scalameta/metals/pull/4815)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.10.2 to 9.11.0\\n [\\\\#4819](https://github.com/scalameta/metals/pull/4819)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-dynamic from 3.5.9 to 3.6.1\\n [\\\\#4822](https://github.com/scalameta/metals/pull/4822)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ipcsocket from 1.6.1 to 1.6.2\\n [\\\\#4821](https://github.com/scalameta/metals/pull/4821)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.8.0 to 1.8.2\\n [\\\\#4820](https://github.com/scalameta/metals/pull/4820)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: improve reporting on Semanticdb from Mill for Java Modules\\n [\\\\#4816](https://github.com/scalameta/metals/pull/4816)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: ensure semanticdb-java gets updated by Scala\\n [\\\\#4817](https://github.com/scalameta/metals/pull/4817)\\n ([ckipp01](https://github.com/ckipp01))\\n- Semantic Highlighting [\\\\#4444](https://github.com/scalameta/metals/pull/4444)\\n ([ShintaroSasaki](https://github.com/ShintaroSasaki))\\n- refactor: Move `jvmRunEnvironment` to after indexing\\n [\\\\#4777](https://github.com/scalameta/metals/pull/4777)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Update semanticdb-java version to 0.8.9\\n [\\\\#4812](https://github.com/scalameta/metals/pull/4812)\\n ([lefou](https://github.com/lefou))\\n- improvement: Allow compiler rename in lambdas\\n [\\\\#4808](https://github.com/scalameta/metals/pull/4808)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): bump react from 17.0.2 to 18.2.0 in /website\\n [\\\\#4811](https://github.com/scalameta/metals/pull/4811)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- chore(ci): allow dependabot to update website stuff\\n [\\\\#4809](https://github.com/scalameta/metals/pull/4809)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Fix issues with spaces in workspace path\\n [\\\\#4807](https://github.com/scalameta/metals/pull/4807)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: add a note about supported test frameworks\\n [\\\\#4805](https://github.com/scalameta/metals/pull/4805)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(site): bump docusaurus to 2.2.0\\n [\\\\#4806](https://github.com/scalameta/metals/pull/4806)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: correctly sort dependency completions\\n [\\\\#4804](https://github.com/scalameta/metals/pull/4804)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Deprecate and remove more Scala versions\\n [\\\\#4720](https://github.com/scalameta/metals/pull/4720)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix(website): Make sure Markdown link is rendered correctly in Metals v0.11.10\\n announcement [\\\\#4800](https://github.com/scalameta/metals/pull/4800)\\n ([jcazevedo](https://github.com/jcazevedo))\\n- feat: Improve match-case completions in Scala 2\\n [\\\\#4744](https://github.com/scalameta/metals/pull/4744)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update Metals and Scala versions\\n [\\\\#4797](https://github.com/scalameta/metals/pull/4797)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add release notes for Metals 0.11.10\\n [\\\\#4740](https://github.com/scalameta/metals/pull/4740)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2023/01/02/aluminium","metadata":{"permalink":"/metals/blog/2023/01/02/aluminium","source":"@site/blog/2023-01-02-aluminium.md","title":"Metals v0.11.10 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.10, which brings in a lot of","date":"2023-01-02T00:00:00.000Z","formattedDate":"January 2, 2023","tags":[],"readingTime":19.36,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.10 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.11 - Aluminium","permalink":"/metals/blog/2023/03/02/aluminium"},"nextItem":{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.10, which brings in a lot of\\nnew contributions with exciting features as well as stability improvements,\\nwhich will become the primary focus over the next releases.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release249
Merged PRs195
Contributors21
Closed issues83
New features8
\\n\\nFor full details:\\n[https://github.com/scalameta/metals/milestone/54?closed=1](https://github.com/scalameta/metals/milestone/54?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Converting sbt style to mill style dependencies](#converting-sbt-style-to-mill-style-dependencies)\\n- [Additional completions for dependencies](#additional-completions-for-dependencies)\\n- [Actionable diagnostics for scala-cli](#actionable-diagnostics-for-scala-cli)\\n- [Expose Test Cases as Separate Lenses](#expose-test-cases-as-separate-lenses)\\n- [Add support for goto type definition](#add-support-for-goto-type-definition)\\n- [Run main classes in terminal when using code lenses](#run-main-classes-in-terminal-when-using-code-lenses)\\n- [Allow rename for local names for non compiled code](#allow-rename-for-local-names-for-non-compiled-code)\\n- [Enable run and debug in Scala CLI scripts in Metals](#enable-run-and-debug-in-scala-cli-scripts-in-metals)\\n- [Refactor package definition when moving files between packages](#refactor-package-definition-when-moving-files-between-packages)\\n- [Scala debugger improvements](#scala-debugger-improvements)\\n\\n## Converting sbt style to mill style dependencies\\n\\nThanks to [LaurenceWarne](https://github.com/LaurenceWarne) there is a new code\\naction that allows users to automatically convert sbt style defined dependencies\\nto Mill ones whenever pasting in scripts or mill files.\\n\\nFor example if we have an incorrect `build.sc` file:\\n\\n```scala\\nobject MyModule extends ScalaModule {\\n def ivyDeps = Agg(\\n \\"org.scalameta\\" %% \\"metals\\" % \\"1.0\\"\\n )\\n}\\n```\\n\\nMetals will now suggest to convert the incorrect line with the dependency to a\\ncorrect one when hovering or moving the cursor to its location. Afterwards to\\ncode will turn to:\\n\\n```scala\\nobject MyModule extends ScalaModule {\\n def ivyDeps = Agg(\\n ivy\\"org.scalameta::metals:1.0\\"\\n )\\n}\\n```\\n\\nSimilarly, it will also help with ammonite scripts and turn:\\n\\n```scala\\nimport $ivy.\\"org.scalameta\\" %% \\"metals\\" % \\"1.0\\"\\"\\n```\\n\\ninto:\\n\\n```scala\\nimport $ivy.`org.scalameta::metals:1.0`\\n```\\n\\n## Additional completions for dependencies\\n\\nIn the previous version of Metals additional library dependency suggestions were\\nadded in Ammonite scripts and worksheets. This version expands the number of\\nplaces where you can use this feature:\\n\\n- Scala CLI scripts and files when writing `//> using lib ...`\\n- When writing `ivy\\"dependency...\\"` in build.sc file\\n- Inside sbt files when adding dependencies.\\n\\nThis feature allows you to explore the available libraries and their versions\\nwithout leaving the comforts of your editor.\\n\\nThanks [jkciesluk](https://github.com/jkciesluk) and\\n[LaurenceWarne](https://github.com/LaurenceWarne) for all the great work!\\n\\n## Actionable diagnostics for scala-cli\\n\\nActionable diagnostics is a new idea within the Scala tooling ecosystem that\\nfocuses on providing users with a potential fix for any errors or warnings that\\nmay show up. This reduces the amount of time users will spend on fixing their\\ncode and helps them be more productive in daily development.\\n\\nThe first experiment within that area was done by\\n[lwronski](https://github.com/lwronski) in\\n[Scala CLI](https://scala-cli.virtuslab.org/). When using the newest Scala CLI\\nyou will see a warning whenever a library has a newer version available and\\nyou\'ll have a quick fix suggested via code action.\\n\\n![actionable](https://i.imgur.com/3D9WcQb.gif) These warnings can be disabled\\nwithin ScalaCLi using:\\n\\n```\\nscala-cli config actions false\\n```\\n\\nNOTE: that if you do this, you\'ll turn off actionable diagnostics from scala-cli\\nglobally until this command is ran again with `true`.\\n\\nThere is ongoing work on adding more actionable diagnostics in the Scala 3\\ncompiler as well, so look forward to more features like this in the future!\\n\\n## Expose Test Cases as Separate Lenses\\n\\nUp until the current release it was only possible to run a single test case\\nwithin Visual Studio Code and nvim-metals which use an additional Test Explorer\\nthat is not available for all the editors. However, thanks to\\n([LaurenceWarne](https://github.com/LaurenceWarne)) Metals will now show lenses\\nto run a single test case in case of all other editors.\\n\\nNOTE: While Metals detects test suites for most of existing testing frameworks,\\nsupport for recognizing individual tests is more limited. Metals supports the\\ncurrent set of test frameworks when it comes to individual test discovery:\\n\\n- Junit\\n- MUnit\\n- Scalatest\\n\\nMore details can be found in the\\n[PR \\\\#4569](https://github.com/scalameta/metals/pull/4569).\\n\\n## Add support for goto type definition\\n\\nUsers were able for a long time to navigate to the definition of a particular\\nsymbol, which can be a method, object, class etc. After that they could\\nsometimes also find the definition of the type of that symbol. However, it\'s not\\nalways easy and convenient to do that. From now on Metals also allows users to\\nuse the `go to type definition` feature within all the supported editors. User\\nwill be able to go directly to the type of a particular symbol.\\n\\n![type-def](https://i.imgur.com/t77kB1S.gif)\\n\\nThis feature might work a bit differently depending on the symbol you are\\nchecking:\\n\\n- for methods it will show the location of the return type\\n- for any values, vars or parameters it will show the type of that symbol\\n- for classes, object or types it will only find that particular type, which\\n will work the same as `go to definition`\\n\\n## Run main classes in terminal when using code lenses\\n\\nThere are two ways of running main classes within Metals. You can decide to run\\nthem with or without debugging with the latter stopping at the breakpoints.\\nThese two types would both use the debug server with the first one just ignoring\\nbreakpoints. However, setting up the whole infrastructure for debugging, when\\nusers just want to run a main method, is adding a lot of unnecessary burden and\\ntakes longer than if you just run it within your terminal.\\n\\nIn this version we introduce the change to include information about the exact\\nJava command to run within the code lenses, that can be used by the editors. It\\ncurrently works with VS Code and it will run main classes within the task\\nterminal.\\n\\n![run-main](https://i.imgur.com/tXfSSj7.gif)\\n\\nIn next release, we also plan to use the same mechanism for running main classes\\nfrom all the other places. We also want to make tests runnable without the\\ndebugging infrastructure, but it\'s a bit more complicated than for main methods.\\n\\n## Allow rename for local names for non compiled code\\n\\nPreviously, whenever you wanted to rename anything, Metals would need to compile\\nyour entire workspace. The reason for that was twofold. First we needed the data\\nfrom the compilation and second we wanted to make sure that will not break your\\ncode. This however is not needed for anything that is defined in a local scope,\\nwhich can\'t be used outside the current file.\\n\\nMetals will now allow users to rename any local code irrelevant of whether the\\nworkspace was compiled or not.\\n\\n![rename-local](https://i.imgur.com/EEKchJB.gif)\\n\\nWhen renaming symbols that might be use outside the current file the previous\\nlimitations will apply.\\n\\n## Enable run and debug in Scala CLI scripts in Metals\\n\\nThanks to [lwronski](https://github.com/lwronski) it\'s now possible to run and\\ndebug scripts when using Scala CLI.\\n\\n![script-debug](https://i.imgur.com/bwfoEFY.gif)\\n\\nFor running scripts without debugging we will also provide the possibility of\\nusing the explicit Java command to run from code lenses.\\n\\n## Refactor package definition when moving files between packages\\n\\nOne of the more requested features was the ability to automatically rename\\npackages when moving files, which helps reduce the burden of reorganizing the\\ncode. Thanks to some amazing works from [susliko](https://github.com/susliko)\\nthis is now possible and should tackle most of the possible situations.\\n\\nThe feature will rename both the current package name as well as all the\\nreferences to it in other files.\\n\\nYou can see some great examples of it in the\\n[\\\\#4655 PR](https://github.com/scalameta/metals/pull/4655) that introduced the\\nfeature.\\n\\n## Scala debugger improvements\\n\\nMetals v0.11.10 ships a new major version of the Scala Debug Adapter, featuring\\nbetter debugging steps (step filter), conditional breakpoints, logpoints and\\nmore. See a full list of features in the release notes of the Scala Debug\\nAdapter\\n[3.0.1](https://github.com/scalacenter/scala-debug-adapter/releases/tag/v3.0.1)\\nand\\n[3.0.3](https://github.com/scalacenter/scala-debug-adapter/releases/tag/v3.0.3).\\n\\n## Miscellaneous\\n\\n- bugfix: Clean diagnostics after importing a script\\n- bugfix: Properly show hover even if decoration spans multiple lines\\n- chore: Support for Scala versions 2.13.10, 3.2.1.\\n- bugfix: Don\'t backtick Scala 3 soft keywords in imports.\\n [susliko](https://github.com/susliko)\\n- bugfix: Highlight transparent inline usages correctly.\\n- bugfix: Don\'t show case completions if already in case body.\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Sort versions in reverse for coursier completions.\\n [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: [Scala 3] Properly index top level extension method to allow\\n navigation and completions.\\n- bugfix: Don\'t show type parameter in outgoing calls.\\n [riiswa](https://github.com/riiswa)\\n- bugfix: Prepend package in case of conflicts in match case completions.\\n [dos65](https://github.com/dos65)\\n- bugfix: Fix `exhaustive match` completion when using `TypeA with TypeB` to not\\n show TypeA or TypeB as possible cases.\\n [jciesluk](https://github.com/jkciesluk)\\n- bugfix: Also rename companion when renaming renamed import.\\n- feat: capture and forward `diagnosticCode`.\\n [ckipp01](https://github.com/ckipp01)\\n- bugfix: Fix go to in external classes in jars with special chars.\\n [narma](https://github.com/narma)\\n- bugfix: add special case for auto import inside already existing to add the\\n needed prefix inline. [dos65](https://github.com/dos65)\\n- bugfix: Fix detecting companions for classes defined directly in method for\\n document highlight and rename.\\n- bugfix: exhaustive match when using renamed symbol.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Retry starting Ammonite when the script file changed and was fixed.\\n- bugfix: Properly highlight package object name.\\n- bugfix: Properly highlight named arguments in case class constructors.\\n [jkciesluk](https://github.com/jkciesluk)\\n- fix: automatically import companion object instead of apply method.\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Add showing semanticdb for sbt files and worksheets.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Correctly display statuses for Ammonite scripts in Doctor.\\n- bugfix: Don\'t show string code actions when they are enclosed within selected\\n range.\\n- bugfix: [Scala 3] Allow to automatically complete already overridden symbols.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 3] Make implementAll work properly with type aliases and\\n higher. kind type[jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 3] use braces for match completion with -no-indent option.\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Take into account the length of interpolator for code actions related.\\n to string interpolation.\\n- bugfix: Make multistage Mill scripts work.\\n- bugfix: implement methods with path-dependent type arguments.\\n- bugfix: Properly reindex build after reloading sbt.\\n- bugfix: Recommend newer RC Scala versions when project is using a RC\\n [rkrzewski](https://github.com/rkrzewski)\\n- chore: Try and print all dependencies used by Metals.\\n- bugfix: [Scala 3] Fix highlight for extension methods.\\n [jkciesluk](https://github.com/jkciesluk)\\n- improvement: Improve behaviour of Initial ivy Completions when backticks are\\n not added. [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Call hierarchy incoming calls includes also incoming calls of super.\\n methods [kasiaMarek](https://github.com/kasiaMarek)\\n- feature: Show @main lenses with scala cli scripts.\\n [LaurenceWarne](https://github.com/LaurenceWarne)\\n- bugfix: Don\'t encode paths on Windows to fix issues with dependencies in\\n directories with non alphanumeric characters.\\n- bugfix: Fix document highlighting mechanism for Java files.\\n [MaciejG604](https://github.com/MaciejG604)\\n- improvement: Better folding of definitions and overall improvements to folded\\n regions. [MaciejG604](https://github.com/MaciejG604)\\n- bugfix: stop watching generated files to avoid compilation loop.\\n [adpi2](https://github.com/adpi2)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.9..v0.11.10\\n 67\\tTomasz Godzik\\n 51\\tscalameta-bot\\n 40\\tJakub Ciesluk\\n 15\\tLaurence Warne\\n 15\\tChris Kipp\\n 6\\tAdrien Piquerez\\n 5\\tkmarek\\n 4\\t\u0141ukasz Wro\u0144ski\\n 4\\tKamil Podsiadlo\\n 3\\tMaciej Gajek\\n 3\\tVadim Chelyshov\\n 2\\tSergey Rublev\\n 2\\tShardul Chiplunkar\\n 2\\tWaris Radji\\n 2\\tdependabot[bot]\\n 2\\tsusliko\\n 1\\tEugene Bulavin\\n 1\\tRafa\u0142 Krzewski\\n 1\\tSeth Tisue\\n 1\\tVasiliy Morkovkin\\n 1\\tmattkohl-flex\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.10](https://github.com/scalameta/metals/tree/v0.11.10) (2023-01-02)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.9...v0.11.10)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Make finding filename more reliant\\n [\\\\#4784](https://github.com/scalameta/metals/pull/4784)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ipcsocket from 1.5.0 to 1.6.1\\n [\\\\#4790](https://github.com/scalameta/metals/pull/4790)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core from 3.5.9 to 3.6.1\\n [\\\\#4791](https://github.com/scalameta/metals/pull/4791)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-dynamic from 3.5.3 to 3.5.9\\n [\\\\#4792](https://github.com/scalameta/metals/pull/4792)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalafmt-core, scalafmt-dynamic from 3.5.3 to 3.5.9\\n [\\\\#4783](https://github.com/scalameta/metals/pull/4783)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Bring back previous document highlighting mechanism for Java files\\n [\\\\#4779](https://github.com/scalameta/metals/pull/4779)\\n ([MaciejG604](https://github.com/MaciejG604))\\n- refactor: remove `compat` in tests for 2.11\\n [\\\\#4778](https://github.com/scalameta/metals/pull/4778)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Add log when message could not be parsed\\n [\\\\#4775](https://github.com/scalameta/metals/pull/4775)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix #4772: stop watching generated files to avoid compilation loop\\n [\\\\#4774](https://github.com/scalameta/metals/pull/4774)\\n ([adpi2](https://github.com/adpi2))\\n- Fix nested function def not folding\\n [\\\\#4669](https://github.com/scalameta/metals/pull/4669)\\n ([MaciejG604](https://github.com/MaciejG604))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.18 to 0.1.19\\n [\\\\#4771](https://github.com/scalameta/metals/pull/4771)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.2.2-RC2\\n [\\\\#4767](https://github.com/scalameta/metals/pull/4767)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update coursier from 2.1.0-RC3-1 to 2.1.0-RC4\\n [\\\\#4762](https://github.com/scalameta/metals/pull/4762)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fixes for the extract value feature\\n [\\\\#4725](https://github.com/scalameta/metals/pull/4725)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- build(deps): Update flyway-core from 9.10.1 to 9.10.2\\n [\\\\#4764](https://github.com/scalameta/metals/pull/4764)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.7.0 to 4.7.1\\n [\\\\#4766](https://github.com/scalameta/metals/pull/4766)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.11 to 1.0.12\\n [\\\\#4763](https://github.com/scalameta/metals/pull/4763)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Set gh_token separate from github_token\\n [\\\\#4758](https://github.com/scalameta/metals/pull/4758)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Only use fine grained PUSH_TAG_GH_TOKEN\\n [\\\\#4755](https://github.com/scalameta/metals/pull/4755)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Set PUSH_TAG_GH_TOKEN for GH_TOKEN\\n [\\\\#4754](https://github.com/scalameta/metals/pull/4754)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add GH_TOKEN variable for github cli\\n [\\\\#4751](https://github.com/scalameta/metals/pull/4751)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Use repository scoped token for pushing tags\\n [\\\\#4750](https://github.com/scalameta/metals/pull/4750)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t encode paths on Windows\\n [\\\\#4748](https://github.com/scalameta/metals/pull/4748)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Update all GH_TOKEN refs to GITHUB_TOKEN\\n [\\\\#4749](https://github.com/scalameta/metals/pull/4749)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: use GITHUB_TOKEN instead, which is the default env variable\\n [\\\\#4746](https://github.com/scalameta/metals/pull/4746)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Explain how to write messages for commits\\n [\\\\#4726](https://github.com/scalameta/metals/pull/4726)\\n ([tgodzik](https://github.com/tgodzik))\\n- ci: fix check_scala3_nightly\\n [\\\\#4745](https://github.com/scalameta/metals/pull/4745)\\n ([dos65](https://github.com/dos65))\\n- chore: Bump Scalameta to 4.7.0\\n [\\\\#4732](https://github.com/scalameta/metals/pull/4732)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update coursier from 2.1.0-RC3 to 2.1.0-RC3-1\\n [\\\\#4742](https://github.com/scalameta/metals/pull/4742)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.10.0 to 9.10.1\\n [\\\\#4743](https://github.com/scalameta/metals/pull/4743)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: check for the left in diagnosticCode\\n [\\\\#4737](https://github.com/scalameta/metals/pull/4737)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update coursier from 2.1.0-RC2 to 2.1.0-RC3\\n [\\\\#4735](https://github.com/scalameta/metals/pull/4735)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update gradle-bloop from 1.5.7-RC1 to 1.5.8\\n [\\\\#4734](https://github.com/scalameta/metals/pull/4734)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-maven-plugin from 2.0.0-RC4 to 2.0.0\\n [\\\\#4733](https://github.com/scalameta/metals/pull/4733)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Show @main lenses with scala cli scripts\\n [\\\\#4729](https://github.com/scalameta/metals/pull/4729)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- refactor: start using newly published bloop-gradle\\n [\\\\#4731](https://github.com/scalameta/metals/pull/4731)\\n ([ckipp01](https://github.com/ckipp01))\\n- Call hierarchy incoming calls include also incoming calls of super methods\\n [\\\\#4707](https://github.com/scalameta/metals/pull/4707)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- refactor: use the newly published bloop-maven-plugin\\n [\\\\#4728](https://github.com/scalameta/metals/pull/4728)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Show completions in parens after newline\\n [\\\\#4722](https://github.com/scalameta/metals/pull/4722)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Try and print all dependencies used by Metals\\n [\\\\#4719](https://github.com/scalameta/metals/pull/4719)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve `rename` for local symbols and worksheets\\n [\\\\#4694](https://github.com/scalameta/metals/pull/4694)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Bump Bloop to 1.5.6\\n [\\\\#4718](https://github.com/scalameta/metals/pull/4718)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.3 to 9.10.0\\n [\\\\#4716](https://github.com/scalameta/metals/pull/4716)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add tests for hover on annotation\\n [\\\\#4712](https://github.com/scalameta/metals/pull/4712)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix highlight for extension methods\\n [\\\\#4705](https://github.com/scalameta/metals/pull/4705)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Recommend newer RC Scala versions when project is using a RC\\n [\\\\#4709](https://github.com/scalameta/metals/pull/4709)\\n ([rkrzewski](https://github.com/rkrzewski))\\n- bugfix: Properly reindex build after reloading sbt\\n [\\\\#4710](https://github.com/scalameta/metals/pull/4710)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update mill-contrib-testng from 0.10.9 to 0.10.10\\n [\\\\#4715](https://github.com/scalameta/metals/pull/4715)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix adjusting range for hovers\\n [\\\\#4713](https://github.com/scalameta/metals/pull/4713)\\n ([tgodzik](https://github.com/tgodzik))\\n- `PresentationCompiler` returns custom `Hover`\\n [\\\\#4704](https://github.com/scalameta/metals/pull/4704)\\n ([kasiaMarek](https://github.com/kasiaMarek))\\n- feat: Refactor package definition when moving files between packages\\n [\\\\#4655](https://github.com/scalameta/metals/pull/4655)\\n ([susliko](https://github.com/susliko))\\n- Improve Behaviour of Initial ivy Completions (scala 2)\\n [\\\\#4641](https://github.com/scalameta/metals/pull/4641)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Update Bloop to the newest one\\n [\\\\#4696](https://github.com/scalameta/metals/pull/4696)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.17 to 0.1.18\\n [\\\\#4693](https://github.com/scalameta/metals/pull/4693)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config from 1.5.4-67-c910a45b to 1.5.4-78-d8126ad2\\n [\\\\#4691](https://github.com/scalameta/metals/pull/4691)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix coursier completions in ScalaCli scripts\\n [\\\\#4689](https://github.com/scalameta/metals/pull/4689)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable run and debug Scala CLI scripts in Metals\\n [\\\\#4605](https://github.com/scalameta/metals/pull/4605)\\n ([lwronski](https://github.com/lwronski))\\n- build(deps): bump hmarr/auto-approve-action from 2 to 3\\n [\\\\#4688](https://github.com/scalameta/metals/pull/4688)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Make multistage Mill scripts work\\n [\\\\#4687](https://github.com/scalameta/metals/pull/4687)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Take into account the length of interpolator\\n [\\\\#4679](https://github.com/scalameta/metals/pull/4679)\\n ([tgodzik](https://github.com/tgodzik))\\n- exempt Scala nightlies from a test\\n [\\\\#4681](https://github.com/scalameta/metals/pull/4681)\\n ([SethTisue](https://github.com/SethTisue))\\n- docs: Point bootstrap commands to latest release version\\n [\\\\#4680](https://github.com/scalameta/metals/pull/4680)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.4-54-cfc03bdc to\\n 1.5.4-67-c910a45b [\\\\#4677](https://github.com/scalameta/metals/pull/4677)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.4-14-7cb43276 to\\n 1.5.4-54-cfc03bdc [\\\\#4672](https://github.com/scalameta/metals/pull/4672)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: avoid newlines in json doctor output\\n [\\\\#4676](https://github.com/scalameta/metals/pull/4676)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: implement methods with path-dependent type arguments\\n [\\\\#4674](https://github.com/scalameta/metals/pull/4674)\\n ([susliko](https://github.com/susliko))\\n- docs: Add separate information about scripts\\n [\\\\#4643](https://github.com/scalameta/metals/pull/4643)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.2 to 9.8.3\\n [\\\\#4673](https://github.com/scalameta/metals/pull/4673)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: match completion with -no-indent option\\n [\\\\#4639](https://github.com/scalameta/metals/pull/4639)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.18.0 to 0.19.0\\n [\\\\#4659](https://github.com/scalameta/metals/pull/4659)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update sbt-ci-release to new org\\n [\\\\#4667](https://github.com/scalameta/metals/pull/4667)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t add package for worksheets and scripts\\n [\\\\#4666](https://github.com/scalameta/metals/pull/4666)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.8.1 to 9.8.2\\n [\\\\#4660](https://github.com/scalameta/metals/pull/4660)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Don\'t show wildcard param completions\\n [\\\\#4665](https://github.com/scalameta/metals/pull/4665)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.4 to 3.10.5\\n [\\\\#4658](https://github.com/scalameta/metals/pull/4658)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update munit from 1.0.0-M6 to 1.0.0-M7\\n [\\\\#4661](https://github.com/scalameta/metals/pull/4661)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- change version in ivy completions tests\\n [\\\\#4663](https://github.com/scalameta/metals/pull/4663)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: ensure name for scala-cli is correct\\n [\\\\#4653](https://github.com/scalameta/metals/pull/4653)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update coursier from 2.1.0-RC1 to 2.1.0-RC2\\n [\\\\#4651](https://github.com/scalameta/metals/pull/4651)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: ensure we\'re testing the connection with Mill\\n [\\\\#4642](https://github.com/scalameta/metals/pull/4642)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): remove coc-metals from issue template\\n [\\\\#4648](https://github.com/scalameta/metals/pull/4648)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add scala-debug-adapter 2x support by Scala CLI\\n [\\\\#4649](https://github.com/scalameta/metals/pull/4649)\\n ([lwronski](https://github.com/lwronski))\\n- fix: prevent NPE in import missing symbol code action\\n [\\\\#4645](https://github.com/scalameta/metals/pull/4645)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feature: Use Presentation Compiler for local rename\\n [\\\\#4542](https://github.com/scalameta/metals/pull/4542)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add completions for plugins in ScalaCLI\\n [\\\\#4598](https://github.com/scalameta/metals/pull/4598)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: implementAll with type aliases and higher kind type\\n [\\\\#4630](https://github.com/scalameta/metals/pull/4630)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Fix compliation issues with 3.3.x\\n [\\\\#4640](https://github.com/scalameta/metals/pull/4640)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.7.0 to 9.8.1\\n [\\\\#4637](https://github.com/scalameta/metals/pull/4637)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M7 to 2.1.0-RC1\\n [\\\\#4632](https://github.com/scalameta/metals/pull/4632)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.16 to 0.1.17\\n [\\\\#4638](https://github.com/scalameta/metals/pull/4638)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.17.0 to 0.18.0\\n [\\\\#4634](https://github.com/scalameta/metals/pull/4634)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt, scripted-plugin from 1.7.3 to 1.8.0\\n [\\\\#4635](https://github.com/scalameta/metals/pull/4635)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- docs: remove old resolver in docs\\n [\\\\#4627](https://github.com/scalameta/metals/pull/4627)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update mill-contrib-testng from 0.10.8 to 0.10.9\\n [\\\\#4631](https://github.com/scalameta/metals/pull/4631)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.10 to 1.0.11\\n [\\\\#4633](https://github.com/scalameta/metals/pull/4633)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Drop support for scala-debug-adapter 1.x\\n [\\\\#4628](https://github.com/scalameta/metals/pull/4628)\\n ([adpi2](https://github.com/adpi2))\\n- Update scala-debug-adapter to 3.0.4\\n [\\\\#4626](https://github.com/scalameta/metals/pull/4626)\\n ([adpi2](https://github.com/adpi2))\\n- fix: complete already overridden symbols in scala 3\\n [\\\\#4621](https://github.com/scalameta/metals/pull/4621)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: more accurate signature on error in override comp\\n [\\\\#4622](https://github.com/scalameta/metals/pull/4622)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Don\'t show string code actions when they are enclosed within range\\n [\\\\#4608](https://github.com/scalameta/metals/pull/4608)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Correctly display statuses for Ammonite scripts in Doctor\\n [\\\\#4619](https://github.com/scalameta/metals/pull/4619)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.2.2-RC1\\n [\\\\#4618](https://github.com/scalameta/metals/pull/4618)\\n ([tgodzik](https://github.com/tgodzik))\\n- add showing semanticdb for sbt files and worksheets\\n [\\\\#4616](https://github.com/scalameta/metals/pull/4616)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Update nightly release branch to use Scala 3.3.x fixes\\n [\\\\#4620](https://github.com/scalameta/metals/pull/4620)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Try to make suites less flaky\\n [\\\\#4615](https://github.com/scalameta/metals/pull/4615)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add lsp-keep-workspace-alive to emacs config\\n [\\\\#4617](https://github.com/scalameta/metals/pull/4617)\\n ([shardulc](https://github.com/shardulc))\\n- fix: correctly import companion object for apply method\\n [\\\\#4567](https://github.com/scalameta/metals/pull/4567)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: swap scalameta Mill g8 for com-lihaoyi one\\n [\\\\#4614](https://github.com/scalameta/metals/pull/4614)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): remove Steward run from this repo\\n [\\\\#4613](https://github.com/scalameta/metals/pull/4613)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: don\'t show incorrect `extension` keyword completion\\n [\\\\#4607](https://github.com/scalameta/metals/pull/4607)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Highlight for named arg in case class constructors\\n [\\\\#4599](https://github.com/scalameta/metals/pull/4599)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Default to empty jvm environment instead of failing\\n [\\\\#4611](https://github.com/scalameta/metals/pull/4611)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix compilation issues with Scala 3.3.x\\n [\\\\#4612](https://github.com/scalameta/metals/pull/4612)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(deps): bump millw to 0.4.4\\n [\\\\#4609](https://github.com/scalameta/metals/pull/4609)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Add shell command required to run main classes\\n [\\\\#4566](https://github.com/scalameta/metals/pull/4566)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.6.0 to 9.7.0\\n [\\\\#4603](https://github.com/scalameta/metals/pull/4603)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix wrong namePos on package objects\\n [\\\\#4602](https://github.com/scalameta/metals/pull/4602)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.7.2 to 1.7.3\\n [\\\\#4604](https://github.com/scalameta/metals/pull/4604)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Ignore failing tests on Java 8\\n [\\\\#4601](https://github.com/scalameta/metals/pull/4601)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: change where we stick millw\\n [\\\\#4586](https://github.com/scalameta/metals/pull/4586)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Deduplicate coursier completions\\n [\\\\#4597](https://github.com/scalameta/metals/pull/4597)\\n ([tgodzik](https://github.com/tgodzik))\\n- Workaround fix for double escaping % for jar URIs\\n [\\\\#4595](https://github.com/scalameta/metals/pull/4595)\\n ([narma](https://github.com/narma))\\n- bugfix: Retry starting Ammonite when file changed\\n [\\\\#4582](https://github.com/scalameta/metals/pull/4582)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.2.1\\n [\\\\#4592](https://github.com/scalameta/metals/pull/4592)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Check if client returned null in configuration\\n [\\\\#4588](https://github.com/scalameta/metals/pull/4588)\\n ([meadofpoetry](https://github.com/meadofpoetry))\\n- Refactor override completions, move auto import generator\\n [\\\\#4590](https://github.com/scalameta/metals/pull/4590)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: exhaustive match on renamed symbol\\n [\\\\#4589](https://github.com/scalameta/metals/pull/4589)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: get rid of resolver warning on startup\\n [\\\\#4587](https://github.com/scalameta/metals/pull/4587)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): bump coursier/setup-action from 1.2.1 to 1.3.0\\n [\\\\#4583](https://github.com/scalameta/metals/pull/4583)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- bugfix: Handle null being sent in the user configuration\\n [\\\\#4580](https://github.com/scalameta/metals/pull/4580)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.9 to 1.0.10\\n [\\\\#4579](https://github.com/scalameta/metals/pull/4579)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Move some logic from CompletionProvider\\n [\\\\#4572](https://github.com/scalameta/metals/pull/4572)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix Test Case Code Lenses Appearing with Test Explorer\\n [\\\\#4578](https://github.com/scalameta/metals/pull/4578)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- bump ivy dep version in completions tests\\n [\\\\#4576](https://github.com/scalameta/metals/pull/4576)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add support for type definition\\n [\\\\#4507](https://github.com/scalameta/metals/pull/4507)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update flyway-core from 9.5.1 to 9.6.0\\n [\\\\#4575](https://github.com/scalameta/metals/pull/4575)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix detecting companions for classes defined directly in method\\n [\\\\#4573](https://github.com/scalameta/metals/pull/4573)\\n ([tgodzik](https://github.com/tgodzik))\\n- Expose Test Cases as Separate Lenses\\n [\\\\#4569](https://github.com/scalameta/metals/pull/4569)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- Fix go to in external classes in jars with special chars\\n [\\\\#4560](https://github.com/scalameta/metals/pull/4560)\\n ([narma](https://github.com/narma))\\n- feat: capture and forward `diagnosticCode`\\n [\\\\#4239](https://github.com/scalameta/metals/pull/4239)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use new scala-debug-adapter 3\\n [\\\\#4565](https://github.com/scalameta/metals/pull/4565)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Also rename companion when renaming renamed import\\n [\\\\#4556](https://github.com/scalameta/metals/pull/4556)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: add special case for autoimport inside Import tree\\n [\\\\#4555](https://github.com/scalameta/metals/pull/4555)\\n ([dos65](https://github.com/dos65))\\n- Add Ammonite Ivy completions for Scala 3\\n [\\\\#4508](https://github.com/scalameta/metals/pull/4508)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.15.0 to 0.17.0\\n [\\\\#4552](https://github.com/scalameta/metals/pull/4552)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.4.0 to 9.5.1\\n [\\\\#4553](https://github.com/scalameta/metals/pull/4553)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Fix #4532: catch ZipException when opening jar files\\n [\\\\#4550](https://github.com/scalameta/metals/pull/4550)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Try to fix flaky ScalaCLI test\\n [\\\\#4519](https://github.com/scalameta/metals/pull/4519)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala cli actionable diagnostic\\n [\\\\#4297](https://github.com/scalameta/metals/pull/4297)\\n ([lwronski](https://github.com/lwronski))\\n- Fix `exhaustive match` completion for type `TypeA with TypeB`\\n [\\\\#4547](https://github.com/scalameta/metals/pull/4547)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Add support for Scala 3.2.1-RC3 and 3.2.1-RC4\\n [\\\\#4549](https://github.com/scalameta/metals/pull/4549)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update default Scala 2.13 version for Ammonite\\n [\\\\#4525](https://github.com/scalameta/metals/pull/4525)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Set connecting-scalacli test as flaky\\n [\\\\#4546](https://github.com/scalameta/metals/pull/4546)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala3 match-case completions - improve autoimports\\n [\\\\#4397](https://github.com/scalameta/metals/pull/4397)\\n ([dos65](https://github.com/dos65))\\n- Add sbt lib completions\\n [\\\\#4496](https://github.com/scalameta/metals/pull/4496)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafix-interfaces from 0.10.3 to 0.10.4\\n [\\\\#4538](https://github.com/scalameta/metals/pull/4538)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: [Scala 3] Properly prepend package to toplevel methods\\n [\\\\#4544](https://github.com/scalameta/metals/pull/4544)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.4-35-ebdeebe4 to 2.5.5\\n [\\\\#4539](https://github.com/scalameta/metals/pull/4539)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Documentation fixes [\\\\#4543](https://github.com/scalameta/metals/pull/4543)\\n ([mattkohl-flex](https://github.com/mattkohl-flex))\\n- Add mill ivy completions\\n [\\\\#4497](https://github.com/scalameta/metals/pull/4497)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Sort versions in reverse for coursier completions\\n [\\\\#4536](https://github.com/scalameta/metals/pull/4536)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.3 to 3.10.4\\n [\\\\#4540](https://github.com/scalameta/metals/pull/4540)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Highlight transparent inline usages correctly\\n [\\\\#4529](https://github.com/scalameta/metals/pull/4529)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.15 to 0.1.16\\n [\\\\#4541](https://github.com/scalameta/metals/pull/4541)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Remove to check for Scala versions in worksheets\\n [\\\\#4535](https://github.com/scalameta/metals/pull/4535)\\n ([tgodzik](https://github.com/tgodzik))\\n- improvement: Try to download mtags for latest supported nightly Scala\u2026\\n [\\\\#4511](https://github.com/scalameta/metals/pull/4511)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bsp4j to 2.1.0-M3\\n [\\\\#4527](https://github.com/scalameta/metals/pull/4527)\\n ([lwronski](https://github.com/lwronski))\\n- fix: incorrect case completion position\\n [\\\\#4517](https://github.com/scalameta/metals/pull/4517)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Revert undertow and ignore\\n [\\\\#4526](https://github.com/scalameta/metals/pull/4526)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.4-34-1c7b3c38 to 2.5.4-35-ebdeebe4\\n [\\\\#4521](https://github.com/scalameta/metals/pull/4521)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update undertow-core from 2.2.20.Final to 2.3.0.Final\\n [\\\\#4524](https://github.com/scalameta/metals/pull/4524)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.3 to 0.10.4\\n [\\\\#4520](https://github.com/scalameta/metals/pull/4520)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mill-contrib-testng from 0.10.7 to 0.10.8\\n [\\\\#4522](https://github.com/scalameta/metals/pull/4522)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update qdox from 2.0.2 to 2.0.3\\n [\\\\#4523](https://github.com/scalameta/metals/pull/4523)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Fix compiler warnings\\n [\\\\#4516](https://github.com/scalameta/metals/pull/4516)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Filter out `` symbol for exhaustive matches\\n [\\\\#4514](https://github.com/scalameta/metals/pull/4514)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Wrap `isPublic` in try\\n [\\\\#4513](https://github.com/scalameta/metals/pull/4513)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add links for easier navigation in the blogpost\\n [\\\\#4512](https://github.com/scalameta/metals/pull/4512)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix show declaration type on outgoing calls request\\n [\\\\#4490](https://github.com/scalameta/metals/pull/4490)\\n ([riiswa](https://github.com/riiswa))\\n- Update User Config Options Doc\\n [\\\\#4506](https://github.com/scalameta/metals/pull/4506)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Fix issues within the community suite for Scala 2\\n [\\\\#4509](https://github.com/scalameta/metals/pull/4509)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: soft-keyword-matching autoimports in Scala 3\\n [\\\\#4491](https://github.com/scalameta/metals/pull/4491)\\n ([susliko](https://github.com/susliko))\\n- chore: Add support for Scala 2.13.10\\n [\\\\#4503](https://github.com/scalameta/metals/pull/4503)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update undertow-core from 2.2.19.Final to 2.2.20.Final\\n [\\\\#4504](https://github.com/scalameta/metals/pull/4504)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Move calculating description, kind and label to CompletionValue\\n [\\\\#4500](https://github.com/scalameta/metals/pull/4500)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show Scala completions first in ScalaCli using directives\\n [\\\\#4499](https://github.com/scalameta/metals/pull/4499)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Properly extract multiline ranges\\n [\\\\#4501](https://github.com/scalameta/metals/pull/4501)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Connect automatically when `.bsp` folder shows up\\n [\\\\#4486](https://github.com/scalameta/metals/pull/4486)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.15.0 to 0.16.0\\n [\\\\#4493](https://github.com/scalameta/metals/pull/4493)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Welcome Jakub to the team\\n [\\\\#4485](https://github.com/scalameta/metals/pull/4485)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt, scripted-plugin from 1.7.1 to 1.7.2\\n [\\\\#4494](https://github.com/scalameta/metals/pull/4494)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feature: Add completions for `//> using lib @@` in Scala CLI\\n [\\\\#4417](https://github.com/scalameta/metals/pull/4417)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Clean diagnostics after importing a script\\n [\\\\#4483](https://github.com/scalameta/metals/pull/4483)\\n ([tgodzik](https://github.com/tgodzik))\\n- Proposal: New Code Action for Converting sbt Style to mill style Deps\\n [\\\\#4465](https://github.com/scalameta/metals/pull/4465)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- chore: Add release notes for v0.11.9\\n [\\\\#4469](https://github.com/scalameta/metals/pull/4469)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/10/06/aluminium","metadata":{"permalink":"/metals/blog/2022/10/06/aluminium","source":"@site/blog/2022-10-06-aluminium.md","title":"Metals v0.11.9 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.9, which brings some of the","date":"2022-10-06T00:00:00.000Z","formattedDate":"October 6, 2022","tags":[],"readingTime":17.575,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.9 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.10 - Aluminium","permalink":"/metals/blog/2023/01/02/aluminium"},"nextItem":{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.9, which brings some of the\\nfinal missing features in Scala 3 and greatly improves its performance. We also\\nhad quite a number of contributions in this release and I wanted to thank all\\nthe new contributors for their great work!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release203
Merged PRs167
Contributors14
Closed issues37
New features21
\\n\\nFor full details: [https://github.com/scalameta/metals/milestone/53?closed=1](https://github.com/scalameta/metals/milestone/53?closed=1)\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Adjust mismatched type](#adjust-mismatched-type)\\n- [[Scala 3] Ammonite completions](#ammonite-completions-for-scala-3)\\n- [Better Scala CLI support](#better-scala-cli-support)\\n- [[Scala 3] Auto import symbols in string interpolation](#scala-3-auto-import-symbols-in-string-interpolation)\\n- [[Scala 3] Add autofill named arguments completion](#scala-3-add-autofill-named-arguments-completion)\\n- [[Scala 3] Improved performance](#scala-3-improved-performance)\\n- [Make document highlight more reliable](#make-documenthighlight-more-reliable)\\n- [[Scala 3] Add completions for case and match](#scala-3-add-completions-for-case-and-match)\\n- [\\"Extract Method\\" code action](#extract-method-code-action)\\n- [[Scala 2] Add Completions for ivy Imports in Ammonite scripts and worksheets](#scala-2-add-completions-for-ivy-imports-in-ammonite-scripts-and-worksheets)\\n- [Call hierarchy](#call-hierarchy)\\n- [[Scala 3] Enable fewer braces for Scala 3 nightly versions](#scala-3-enable-fewer-braces-for-scala-3-nightly-versions)\\n- Add support for Scala 3.2.0, 2.12.17, 2.13.9 and RC versions of 3.2.1\\n\\n## Adjust mismatched type\\n\\nUntil recently it was only possible to add the type to a definition that didn\'t\\nhave it defined. However, it\'s also quite common for users to change the\\nreturned type of the body of a function and in that case any adjustments had to\\nbe made manually. Now, whenever the compiler shows type mismatch error Metals\\nshould be able to adjust the type for you automatically.\\n\\n![adjust-type](https://i.imgur.com/R7z7JNf.gif)\\n\\nAs this feature is quite new and might still require some tinkering, please\\nreport any issues you find.\\n\\n## Ammonite completions for Scala 3\\n\\nUntil recently Metals was only offering `$file` completions for Scala 2, but\\nthanks to [zmerr](https://github.com/zmerr) it\'s also possible to get them in\\nScala 3.\\n\\nFor more details take a look at the previous\\n[announcement](https://scalameta.org/metals/blog/2020/07/01/lithium/#ammonite-support)\\n\\n## Better Scala CLI support\\n\\n[ScalaCLI](https://scala-cli.virtuslab.org/) is a tool developed by VirtusLab in\\nan effort to create a simple experience of using Scala for all its users. It has\\na lot of nice features, but one of the main ones is\\n[the possibility to use it in scripts](https://scala-cli.virtuslab.org/docs/guides/scripts).\\nThanks to [alexarchambault](https://github.com/alexarchambault), who is also\\nleading the effort on ScalaCLI, Metals now supports ScalaCLI scripts along with\\nthe Ammonite ones.\\n\\n![scala-cli](https://i.imgur.com/ghR1Src.gif)\\n\\nWhenever, Metals will be opened on a file with `*.sc` extension (but not\\n`*.worksheet.sc`), users will be prompted to choose which tool they want to use\\nfor the script.\\n\\nSimilar to Ammonite, support for it can also be turned on manually with\\n`Metals: Start Scala CLI BSP server` and stopped with\\n`Metals: Stop Scala CLI BSP server`. These commands can be used for more fine\\ngrained control when to turn on or of scripting support. This is especially\\nuseful since ScalaCLI supports will run an additional BSP server running\\nunderneath and that can take up some additional resources.\\n\\nIf the script is in a dedicated folder, by default we will treat all the scripts\\nand scala files in that directory as ones that can be used together. So you\\nwould be able to import method and classes from those files. However, if the\\nscript is contained within a directory that also contains other sources, that\\nscript will be treated as a standalone one in order to avoid flaky compilation\\nerrors coming from normal files in the workspace.\\n\\n## [Scala 3] Auto import symbols in string interpolation\\n\\nPreviously, the only suggestions for string interpolations were coming from the\\ncurrently available symbols in scope. This meant that if you wanted to import\\nsomething from another package, you would need to do it manually.\\n\\nThis problem is now resolved. Users can easily get such symbols automatically\\nimported, which creates a seamless more workflow.\\n\\n![auto-import](https://i.imgur.com/COKtciq.gif)\\n\\nThese completions will also allow you to automatically import extension methods.\\n\\nThe feature is already available for Scala 2.\\n\\n## [Scala 3] Add autofill named arguments completion\\n\\nThanks to great work by [jkciesluk](https://github.com/jkciesluk) Scala 3\\ncompletions will also show an `autofill all` completion item, which will try to\\nfill in all the arguments of the current method using the symbol in scope or\\nwith `???` if no symbols match. Users can later tabulate over the different\\nproposal to adjust them.\\n\\n![auto-fill](https://i.imgur.com/tZTKnSw.gif)\\n\\nThe feature was already available for Scala 2.\\n\\n## [Scala 3] Improved performance\\n\\nWe\'ve noticed that previous versions of Metals could cause CPU spikes for anyone\\nusing Scala 3. To address this, we managed to include a couple performance\\nimprovements in this release. This will improve several editor features such as\\nhover, completions, document highlight, and some code actions.\\n\\nFor more details, see the pull requests.\\n\\n- [Don\'t run InteractiveDriver.run if the content didn\'t \\"change\\" by tanishiking \xb7 Pull Request #4225 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/4225)\\n- [fix: \\\\[Scala3\\\\] Don\'t compute docs on textDocument/completion by tanishiking \xb7 Pull Request #4396 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/4396)\\n\\nThanks to [tanishiking](https://github.com/tanishiking)) for investigation and\\nhis great fixes.\\n\\n## Make documentHighlight more reliable\\n\\nDocument highlight allows users to see all occurrences of the symbol currently\\nunder the cursor in a single file. This was one of the first\\n[features](https://scalameta.org/metals/blog/2019/04/12/mercury#document-highlight)\\ndeveloped by me for Metals and previously it would only work in a fully compiled\\nworkspace. This means that if users have errors, some of the occurrences might\\nnot be highlighted.\\n\\nSince the feature only works within a single file, this was a perfect candidate\\nfor turning into a more interactive feature, which would use the Scala\\npresentation compiler already used in such features as hovers or completions.\\nThanks to this change document highlight should work even if your code doesn\'t\\ncompile.\\n\\n![document-highlight](https://i.imgur.com/0uhc9P5.gif)\\n\\nThis should also make it easier for us to fix any issue that might pop up and it\\nhas already improved support for locally defined classes.\\n\\n## [Scala 3] Add completions for case and match\\n\\nMetals provides additional completions whenever users write match clauses to\\nautomatically fill either a single case with one of the possible subtypes or an\\nexhaustive completion with all of them. This was previously not available for\\nScala 3, but thanks to ([jkciesluk](https://github.com/jkciesluk)) users can now\\nbenefit from this feature in their Scala 3 codebases.\\n\\n![exhaustive](https://i.imgur.com/6wynpRq.gif)\\n\\nThe Scala 3 version will additionally work with the Scala enums as well as offer\\ncompletions for simple cases with one possible type, which might be useful to\\naccess values inside it. Moreover, exhaustive completions will also be offered\\nwithin partial function, for example in a `.map{}`.\\n\\n## Extract Method code action\\n\\nAnother great feature contributed by [jkciesluk](https://github.com/jkciesluk)\\nis the possibility to extract arbitrary parts of code into a separate function.\\nIt will also add any values unavailable in the selected scope as parameters in\\nthe new function.\\n\\n![extract-method](https://i.imgur.com/VMXLKPg.gif)\\n\\nThe code action will currently not turn any methods or classes into parameters\\neven if they is not available in the scope into which the code is being\\nextracted.\\n\\n## [Scala 2] Add Completions for ivy Imports in Ammonite scripts and worksheets\\n\\nBoth in worksheets and in ammonite scripts you can add dependencies using\\nimports such as:\\n\\n```scala\\nimport $$ivy.`io.circe::circe-core:0.14.2`\\n```\\n\\nwhich will bring in the `circe-core` dependency. Starting in this version it\\nwill be possible to auto complete group ids, artifact names and their versions.\\n\\n![import-dep](https://i.imgur.com/TWgIIVp.gif)\\n\\nThanks to [LaurenceWarne](https://github.com/LaurenceWarne) for the great\\nfeature!\\n\\nWe are also working on enabling this feature in Mill, sbt, ScalaCLI and later\\nfor Scala 3.\\n\\n## Call hierarchy\\n\\nThis release brings about\\n[call hierarchy support](https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/#textDocument_prepareCallHierarchy),\\nwhich is an LSP feature that enables users to see which method are invoked in a\\ncurrent method or which methods invoke the current one.\\n\\n![call-hierarchy-dep](https://i.imgur.com/1lTYFmu.gif)\\n\\nThis non trivial feature was brought to you by\\n[riiswa](https://github.com/riiswa), thanks for the great work!\\n\\nA current limitation is that it will only work for methods within the workspace.\\n\\n## [Scala 3] Enable fewer braces for Scala 3 nightly versions\\n\\nFewer braces is an experimental Scala 3 feature that enables users to drop\\nbraces in more places than the default, for example in function invocations.\\nPreviously, Metals would show it as error, but since this version fewer braces\\noption will be recognized by default for the Scala 3 nightly versions.\\n\\nRead more about fewer braces\\n[here](https://docs.scala-lang.org/scala3/reference/experimental/fewer-braces.html).\\n\\nMore work is required to enable auto formatting with this option and will be\\nworked on in the near future.\\n\\n## Various\\n\\nThis release also features a number of smaller fixes and improvements, some of\\nthe user facing ones are mentioned here:\\n\\n- feature: Include anon classes (`val x = new Trait {}`) in \'find all\\n implementations\' [kpodsiad](https://github.com/kpodsiad)\\n- feature: Implement basic Text Explorer support for scalatest\\n [kpodsiad](https://github.com/kpodsiad) and allow running single tests.\\n- feature: Better mill-bsp semanticdb support\\n [ckipp01](https://github.com/ckipp01)\\n- feature: Allow extract value code action when using `new` keyword\\n [jkciesluk](https://github.com/jkciesluk)\\n- feature: Provide ConvertToNamedArg code action for constructor invocations\\n [jkciesluk](https://github.com/jkciesluk))\\n- feature: Add Analyze Stacktrace command to metals menu\\n- feature: Improved completions in type positions\\n- feature: Add completion for extends keyword after classes/traits/objects/enums\\n- improvement: Don\'t show misconfigured test message\\n- bugfix: Add backticks where needed in \\"convert to named arguments\\" [kubukoz](https://github.com/kubukoz)\\n- bugfix: Try to download semanticdb even if it might not be supported\\n- bugfix: Properly write constant types in signatures\\n- bugfix: Allow to add jvmopts and env variables when running tests\\n- bugfix: Compile project on file deletion [PeuTit](https://github.com/PeuTit)\\n- bugfix: Limit running multiple import build\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Request import build after restart even if notification was dismissed\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: Properly cancel all current compilations\\n- bugfix: Remove worksheet diagnostics on close\\n- bugfix: [Scala 3] Don\'t throw exception if template ends at end of file\\n- bugfix: [Scala 2] Fix argument completions in nested method invocation\\n [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: [Scala 2] Fix signature help when named params are present\\n- bugfix: Don\'t show preparing PC message when in fact it was already downloaded\\n- bugfix: Properly restart worksheet presentation compiler to show the newest\\n completions from the workspace after the compilation finished\\n- bugfix: [Scala 3] Fix implement-all members for anonymous class\\n [tanishiking](https://github.com/tanishiking)\\n- bugfix: Allow to run/debug in ScalaCli when it was started from Metals without\\n `.bsp`\\n- bugfix: Show both companion object and case class when searching of definition\\n for synthetic apply\\n- bugfix: [Scala 3] Properly filter symbols if they don\'t exist in the code\\n anymore [jkciesluk](https://github.com/jkciesluk)\\n- bugfix: don\'t break using-directives by an auto-import for `.sc` in scala-cli\\n [dos65](https://github.com/dos65) For a full list take a look at the list of\\n PRs below.\\n- bugfix: [Scala 3] - provide a correct defitions for symbols from\\n `stdLibPatched` package [dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.8..v0.11.9\\nTomasz Godzik\\nWaris Radji\\nRikito Taniguchi\\nVadim Chelyshov\\nscalameta-bot\\nJakub Ciesluk\\nJakub Koz\u0142owski\\nKamil Podsiad\u0142o\\nChris Kipp\\nLaurence Warne\\nTitouan\\nAlexandre Archambault\\nAnton\\nIna Zimmer\\ndependabot[bot]\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.9](https://github.com/scalameta/metals/tree/v0.11.9) (2022-10-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.8...v0.11.9)\\n\\n**Merged pull requests:**\\n\\n- chore: Update Bloop to 1.5.4\\n [\\\\#4480](https://github.com/scalameta/metals/pull/4480)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly import extension methods in string interpolation\\n [\\\\#4479](https://github.com/scalameta/metals/pull/4479)\\n ([tgodzik](https://github.com/tgodzik))\\n- Import enum owner in case comp and in java enum match\\n [\\\\#4478](https://github.com/scalameta/metals/pull/4478)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Fix: Remove multiple enum owner imports\\n [\\\\#4477](https://github.com/scalameta/metals/pull/4477)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- improvement: Always specify enum owner\\n [\\\\#4475](https://github.com/scalameta/metals/pull/4475)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add backticks where needed in \\"convert to named arguments\\"\\n [\\\\#4470](https://github.com/scalameta/metals/pull/4470)\\n ([kubukoz](https://github.com/kubukoz))\\n- build(deps): Update ammonite-util from 2.5.4-33-0af04a5b to 2.5.4-34-1c7b3c38\\n [\\\\#4472](https://github.com/scalameta/metals/pull/4472)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Fix issues when renaming variables\\n [\\\\#4458](https://github.com/scalameta/metals/pull/4468)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Enable fewer braces for Scala 3 nightly versions\\n [\\\\#4458](https://github.com/scalameta/metals/pull/4458)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.13 to 4.6.0\\n [\\\\#4463](https://github.com/scalameta/metals/pull/4463)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.14 to 0.1.15\\n [\\\\#4464](https://github.com/scalameta/metals/pull/4464)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.3.1 to 9.4.0\\n [\\\\#4460](https://github.com/scalameta/metals/pull/4460)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, sbt-mdoc from 2.3.4 to 2.3.5\\n [\\\\#4461](https://github.com/scalameta/metals/pull/4461)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc-interfaces from 2.3.3 to 2.3.5\\n [\\\\#4462](https://github.com/scalameta/metals/pull/4462)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Remove old workaround\\n [\\\\#4459](https://github.com/scalameta/metals/pull/4459)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: bunch of fixes for ScalaCli scripts import\\n [\\\\#4455](https://github.com/scalameta/metals/pull/4455)\\n ([dos65](https://github.com/dos65))\\n- refactor: Don\'t log \\"navigation doesn\'t work\\" if fallback to compiler based\\n navigation [\\\\#4457](https://github.com/scalameta/metals/pull/4457)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Don\'t show misconfigured test message\\n [\\\\#4454](https://github.com/scalameta/metals/pull/4454)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Bloop to newest version\\n [\\\\#4453](https://github.com/scalameta/metals/pull/4453)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Try to download semanticdb even if it might not be supported\\n [\\\\#4450](https://github.com/scalameta/metals/pull/4450)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix document highlight in for comprehensions\\n [\\\\#4448](https://github.com/scalameta/metals/pull/4448)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: [scala3] findSuffix to return a data structure so we can tell what\\n kinds of suffix will be added to the edit.\\n [\\\\#4412](https://github.com/scalameta/metals/pull/4412)\\n ([tanishiking](https://github.com/tanishiking))\\n- Offer exhaustive completions for map and other methods\\n [\\\\#4415](https://github.com/scalameta/metals/pull/4415)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add Ammonite completions to worksheets\\n [\\\\#4443](https://github.com/scalameta/metals/pull/4443)\\n ([tgodzik](https://github.com/tgodzik))\\n- bufix: Properly write constant types in signatures\\n [\\\\#4442](https://github.com/scalameta/metals/pull/4442)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Allow to run tests with Scala nightlies\\n [\\\\#4435](https://github.com/scalameta/metals/pull/4435)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Update Scala version used by sbt\\n [\\\\#4440](https://github.com/scalameta/metals/pull/4440)\\n ([tgodzik](https://github.com/tgodzik))\\n- move isImportInProgress to runUnconditionally\\n [\\\\#4439](https://github.com/scalameta/metals/pull/4439)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Auto-Import After Ammonite Headers\\n [\\\\#4436](https://github.com/scalameta/metals/pull/4436)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- Don\'t show private members in case completions\\n [\\\\#4431](https://github.com/scalameta/metals/pull/4431)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update scalafix-interfaces from 0.10.2 to 0.10.3\\n [\\\\#4437](https://github.com/scalameta/metals/pull/4437)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.3 to 2.3.4\\n [\\\\#4438](https://github.com/scalameta/metals/pull/4438)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Properly cancel all current compilations\\n [\\\\#4421](https://github.com/scalameta/metals/pull/4421)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Bump Scala versions for Ammonite\\n [\\\\#4433](https://github.com/scalameta/metals/pull/4433)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove all cancallables on finish\\n [\\\\#4432](https://github.com/scalameta/metals/pull/4432)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala 2.13.9 [\\\\#4414](https://github.com/scalameta/metals/pull/4414)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update flyway-core from 9.3.0 to 9.3.1\\n [\\\\#4427](https://github.com/scalameta/metals/pull/4427)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M6 to 2.1.0-M7\\n [\\\\#4426](https://github.com/scalameta/metals/pull/4426)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-22-4a9e6989 to 2.5.4-33-0af04a5b\\n [\\\\#4425](https://github.com/scalameta/metals/pull/4425)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.2 to 0.10.3\\n [\\\\#4424](https://github.com/scalameta/metals/pull/4424)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- ci(Mergify): Don\'t check the number of check-success\\n [\\\\#4429](https://github.com/scalameta/metals/pull/4429)\\n ([tanishiking](https://github.com/tanishiking))\\n- feat: extends keyword completion\\n [\\\\#4416](https://github.com/scalameta/metals/pull/4416)\\n ([tanishiking](https://github.com/tanishiking))\\n- refactor: Change code action ids sets to val\\n [\\\\#4418](https://github.com/scalameta/metals/pull/4418)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Make it easier to define commands to run in code actions\\n [\\\\#4413](https://github.com/scalameta/metals/pull/4413)\\n ([tgodzik](https://github.com/tgodzik))\\n- Feature/call hierarchy [\\\\#4115](https://github.com/scalameta/metals/pull/4115)\\n ([riiswa](https://github.com/riiswa))\\n- bugfix Try to fix flaky import tests\\n [\\\\#4408](https://github.com/scalameta/metals/pull/4408)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalafix-interfaces from 0.10.1 to 0.10.2\\n [\\\\#4400](https://github.com/scalameta/metals/pull/4400)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- ci(Mergify): configuration update / use squash\\n [\\\\#4409](https://github.com/scalameta/metals/pull/4409)\\n ([tanishiking](https://github.com/tanishiking))\\n- ci(Mergify): configuration update\\n [\\\\#4407](https://github.com/scalameta/metals/pull/4407)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: Scala3 properly inverse semanticdb type symbol\\n [\\\\#4383](https://github.com/scalameta/metals/pull/4383)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Allow to add jvmopts and env variables when running tests\\n [\\\\#4393](https://github.com/scalameta/metals/pull/4393)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ivy Completions Dash Fix\\n [\\\\#4405](https://github.com/scalameta/metals/pull/4405)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- ci(Mergify): configuration update\\n [\\\\#4404](https://github.com/scalameta/metals/pull/4404)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.12 to 0.1.14\\n [\\\\#4403](https://github.com/scalameta/metals/pull/4403)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update xnio-nio from 3.8.7.Final to 3.8.8.Final\\n [\\\\#4401](https://github.com/scalameta/metals/pull/4401)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: [Scala3] Don\'t compute docs on textDocument/completion\\n [\\\\#4396](https://github.com/scalameta/metals/pull/4396)\\n ([tanishiking](https://github.com/tanishiking))\\n- add 3.2.1-RC2 support [\\\\#4392](https://github.com/scalameta/metals/pull/4392)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Fix document highlight for type projections and bind\\n [\\\\#4394](https://github.com/scalameta/metals/pull/4394)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Revert ammonite to 2.5.4-22-4a9e6989\\n [\\\\#4395](https://github.com/scalameta/metals/pull/4395)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Fix tests using circe for completions\\n [\\\\#4391](https://github.com/scalameta/metals/pull/4391)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update interface from 1.0.8 to 1.0.9\\n [\\\\#4390](https://github.com/scalameta/metals/pull/4390)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-22-4a9e6989 to 2.5.4-26-9cd15abe\\n [\\\\#4388](https://github.com/scalameta/metals/pull/4388)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Always check if import is in progress\\n [\\\\#4384](https://github.com/scalameta/metals/pull/4384)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.1 to 0.10.2\\n [\\\\#4387](https://github.com/scalameta/metals/pull/4387)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: rename CompletionProvider\\n [\\\\#4385](https://github.com/scalameta/metals/pull/4385)\\n ([dos65](https://github.com/dos65))\\n- chore: Add support for Scala 2.12.17\\n [\\\\#4382](https://github.com/scalameta/metals/pull/4382)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add cross tests for pattern only case completions, fix for typed case\\n completions [\\\\#4356](https://github.com/scalameta/metals/pull/4356)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: use proper semanticdb document for `.sc` in scala-cli\\n [\\\\#4359](https://github.com/scalameta/metals/pull/4359)\\n ([dos65](https://github.com/dos65))\\n- Add Highlighting and Fix Formatting for Emacs Snippets in Documentation\\n [\\\\#4381](https://github.com/scalameta/metals/pull/4381)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- improvement: Change string actions to RefactorRewrite\\n [\\\\#4380](https://github.com/scalameta/metals/pull/4380)\\n ([tgodzik](https://github.com/tgodzik))\\n- Compile project on file deletion\\n [\\\\#4377](https://github.com/scalameta/metals/pull/4377)\\n ([PeuTit](https://github.com/PeuTit))\\n- Add Completions for ivy Imports (Ammonite)\\n [\\\\#4376](https://github.com/scalameta/metals/pull/4376)\\n ([LaurenceWarne](https://github.com/LaurenceWarne))\\n- fix: scala3 - provide a correct defitions for symbols from `stdLibPatched`\\n package [\\\\#4370](https://github.com/scalameta/metals/pull/4370)\\n ([dos65](https://github.com/dos65))\\n- Add Extract Method code action\\n [\\\\#4164](https://github.com/scalameta/metals/pull/4164)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Request import build after restart\\n [\\\\#4373](https://github.com/scalameta/metals/pull/4373)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Limit running multiple import build\\n [\\\\#4375](https://github.com/scalameta/metals/pull/4375)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update flyway-core from 9.2.3 to 9.3.0\\n [\\\\#4371](https://github.com/scalameta/metals/pull/4371)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-runner from 0.3.3 to 0.4.0\\n [\\\\#4363](https://github.com/scalameta/metals/pull/4363)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: Detect pull_request label event for auto-approve\\n [\\\\#4365](https://github.com/scalameta/metals/pull/4365)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update ammonite-util from 2.5.4-19-cd76521f to 2.5.4-22-4a9e6989\\n [\\\\#4362](https://github.com/scalameta/metals/pull/4362)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.2.2 to 9.2.3\\n [\\\\#4364](https://github.com/scalameta/metals/pull/4364)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- fix: type completions additonal fixes\\n [\\\\#4234](https://github.com/scalameta/metals/pull/4234)\\n ([dos65](https://github.com/dos65))\\n- Change adding space after case completions\\n [\\\\#4353](https://github.com/scalameta/metals/pull/4353)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- build(deps): Update qdox from 2.0.1 to 2.0.2\\n [\\\\#4344](https://github.com/scalameta/metals/pull/4344)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- Auto approve PR by scalameta-bot\\n [\\\\#4346](https://github.com/scalameta/metals/pull/4346)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix case completions for enum with params\\n [\\\\#4354](https://github.com/scalameta/metals/pull/4354)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Add case completions for single case classes in Scala3\\n [\\\\#4351](https://github.com/scalameta/metals/pull/4351)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Enable enum completions in pattern matching\\n [\\\\#4349](https://github.com/scalameta/metals/pull/4349)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Add completions for case and match for scala 3\\n [\\\\#4229](https://github.com/scalameta/metals/pull/4229)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: add scala 3.2.1-RC1\\n [\\\\#4347](https://github.com/scalameta/metals/pull/4347)\\n ([dos65](https://github.com/dos65))\\n- Replace toLSP occurences by toLsp.\\n [\\\\#4331](https://github.com/scalameta/metals/pull/4331)\\n ([riiswa](https://github.com/riiswa))\\n- build(deps): Update flyway-core from 9.1.6 to 9.2.2\\n [\\\\#4345](https://github.com/scalameta/metals/pull/4345)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- refactor: Add labels to scala-steward PRs\\n [\\\\#4337](https://github.com/scalameta/metals/pull/4337)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Add Analyze Stacktrace command to metals menu\\n [\\\\#4340](https://github.com/scalameta/metals/pull/4340)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala-steward cron (again)\\n [\\\\#4342](https://github.com/scalameta/metals/pull/4342)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: scala-steward cron\\n [\\\\#4336](https://github.com/scalameta/metals/pull/4336)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix wrong condition for logging in CodeActionBuilder\\n [\\\\#4334](https://github.com/scalameta/metals/pull/4334)\\n ([tgodzik](https://github.com/tgodzik))\\n- [skip ci] bugfix: Fix Scala Steward cron\\n [\\\\#4335](https://github.com/scalameta/metals/pull/4335)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix ConvertToNamedArg for constructor invocations\\n [\\\\#4313](https://github.com/scalameta/metals/pull/4313)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- feature: Use PC for documentHighlight\\n [\\\\#4307](https://github.com/scalameta/metals/pull/4307)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Always set changes or document changes\\n [\\\\#4332](https://github.com/scalameta/metals/pull/4332)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: update scala-steward configs (run more frequently and limit number\\n of PRs) [\\\\#4329](https://github.com/scalameta/metals/pull/4329)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.2 to 3.10.3\\n [\\\\#4320](https://github.com/scalameta/metals/pull/4320)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): bump coursier/setup-action from 1.2.0 to 1.2.1\\n [\\\\#4326](https://github.com/scalameta/metals/pull/4326)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- workflows: specify java version\\n [\\\\#4327](https://github.com/scalameta/metals/pull/4327)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update mill-contrib-testng from 0.10.5 to 0.10.7\\n [\\\\#4319](https://github.com/scalameta/metals/pull/4319)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.1.3 to 9.1.6\\n [\\\\#4321](https://github.com/scalameta/metals/pull/4321)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.15.2 to 1.15.3\\n [\\\\#4322](https://github.com/scalameta/metals/pull/4322)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.11 to 4.5.13\\n [\\\\#4323](https://github.com/scalameta/metals/pull/4323)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.11 to 0.1.12\\n [\\\\#4324](https://github.com/scalameta/metals/pull/4324)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update ammonite-util from 2.5.4-13-1ebd00a6 to 2.5.4-19-cd76521f\\n [\\\\#4318](https://github.com/scalameta/metals/pull/4318)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update metaconfig-core from 0.11.0 to 0.11.1\\n [\\\\#4317](https://github.com/scalameta/metals/pull/4317)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Add support for Scala 3.2.0\\n [\\\\#4315](https://github.com/scalameta/metals/pull/4315)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix extract value for `new` keyword\\n [\\\\#4314](https://github.com/scalameta/metals/pull/4314)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- chore: Fix nightlies after recent changes\\n [\\\\#4312](https://github.com/scalameta/metals/pull/4312)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: check_scala3_nightly - switch from bash on Scala\\n [\\\\#4311](https://github.com/scalameta/metals/pull/4311)\\n ([dos65](https://github.com/dos65))\\n- Issue#4154: Add builder for lsp code actions\\n [\\\\#4302](https://github.com/scalameta/metals/pull/4302)\\n ([PeuTit](https://github.com/PeuTit))\\n- update TestGroups [\\\\#4310](https://github.com/scalameta/metals/pull/4310)\\n ([dos65](https://github.com/dos65))\\n- chore: mention Scala CLi in new file provider\\n [\\\\#4306](https://github.com/scalameta/metals/pull/4306)\\n ([dos65](https://github.com/dos65))\\n- fix: don\'t break using-directives by an auto-import for `.sc` in scala-cli\\n [\\\\#4291](https://github.com/scalameta/metals/pull/4291)\\n ([dos65](https://github.com/dos65))\\n- fix: Fix docs copy paste error.\\n [\\\\#4305](https://github.com/scalameta/metals/pull/4305)\\n ([antosha417](https://github.com/antosha417))\\n- chore: mark buildTarget/javacOptions as unsupported for ammonite\\n [\\\\#4303](https://github.com/scalameta/metals/pull/4303)\\n ([dos65](https://github.com/dos65))\\n- refactor: Do not index extension methods in workspaceSymbolIndex\\n [\\\\#4300](https://github.com/scalameta/metals/pull/4300)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: reuse code actions kinds for all code actions\\n [\\\\#4299](https://github.com/scalameta/metals/pull/4299)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- add isStale filter in IndexedContext\\n [\\\\#4298](https://github.com/scalameta/metals/pull/4298)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Find correct definition of apply when using case classes\\n [\\\\#4296](https://github.com/scalameta/metals/pull/4296)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: better mill-bsp semanticdb support\\n [\\\\#4295](https://github.com/scalameta/metals/pull/4295)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Automatically add extension methods in string interpolation\\n [\\\\#4292](https://github.com/scalameta/metals/pull/4292)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: improve scalatest style inferring\\n [\\\\#4293](https://github.com/scalameta/metals/pull/4293)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feat: implement basic Text Explorer support for scalatest\\n [\\\\#4281](https://github.com/scalameta/metals/pull/4281)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Allow to run/debug in ScalaCli when started from Metals\\n [\\\\#4289](https://github.com/scalameta/metals/pull/4289)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Adjust ScalaCLI version detection to new changes\\n [\\\\#4288](https://github.com/scalameta/metals/pull/4288)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: fix implement-all members for anonymous class\\n [\\\\#4284](https://github.com/scalameta/metals/pull/4284)\\n ([tanishiking](https://github.com/tanishiking))\\n- Bump LSP4j to 0.15.0 that adds notebook support\\n [\\\\#4282](https://github.com/scalameta/metals/pull/4282)\\n ([tanishiking](https://github.com/tanishiking))\\n- ci: fix check_scala3_nightly workflow\\n [\\\\#4280](https://github.com/scalameta/metals/pull/4280)\\n ([dos65](https://github.com/dos65))\\n- Don\'t run InteractiveDriver.run if the content didn\'t \\"change\\"\\n [\\\\#4225](https://github.com/scalameta/metals/pull/4225)\\n ([tanishiking](https://github.com/tanishiking))\\n- add Scala 3.2.0-RC4 [\\\\#4277](https://github.com/scalameta/metals/pull/4277)\\n ([dos65](https://github.com/dos65))\\n- Fix mtags release [\\\\#4279](https://github.com/scalameta/metals/pull/4279)\\n ([dos65](https://github.com/dos65))\\n- Better title for `extract value` code action\\n [\\\\#4274](https://github.com/scalameta/metals/pull/4274)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- upgrade bloop to 1.5.3-28-373a64c9\\n [\\\\#4275](https://github.com/scalameta/metals/pull/4275)\\n ([dos65](https://github.com/dos65))\\n- Add autofill named arguments completion for scala3\\n [\\\\#4248](https://github.com/scalameta/metals/pull/4248)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: [Scala 3] Auto import symbols in string interpolation\\n [\\\\#4273](https://github.com/scalameta/metals/pull/4273)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly restart worksheet presentation compiler\\n [\\\\#4270](https://github.com/scalameta/metals/pull/4270)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: release 8 for mtag-interfaces\\n [\\\\#4269](https://github.com/scalameta/metals/pull/4269)\\n ([dos65](https://github.com/dos65))\\n- fix: specify `--release 8` flags\\n [\\\\#4267](https://github.com/scalameta/metals/pull/4267)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update mdoc-interfaces from 2.3.2 to 2.3.3\\n [\\\\#4264](https://github.com/scalameta/metals/pull/4264)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update cli_3, scala-cli-bsp from 0.1.9 to 0.1.11\\n [\\\\#4266](https://github.com/scalameta/metals/pull/4266)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update org.eclipse.lsp4j, ... from 0.14.0 to 0.15.0\\n [\\\\#4262](https://github.com/scalameta/metals/pull/4262)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.0.4 to 9.1.3\\n [\\\\#4263](https://github.com/scalameta/metals/pull/4263)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update undertow-core from 2.2.18.Final to 2.2.19.Final\\n [\\\\#4261](https://github.com/scalameta/metals/pull/4261)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update metaconfig-core from 0.10.0 to 0.11.0\\n [\\\\#4259](https://github.com/scalameta/metals/pull/4259)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.1 to 3.10.2\\n [\\\\#4260](https://github.com/scalameta/metals/pull/4260)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- bugfix: Don\'t show preparing PC message\\n [\\\\#4257](https://github.com/scalameta/metals/pull/4257)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: include the companion object name in code action title\\n [\\\\#4258](https://github.com/scalameta/metals/pull/4258)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Check if the target can be compiled\\n [\\\\#4256](https://github.com/scalameta/metals/pull/4256)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert \\"[Scala 3] Revert type completions feature (#4236)\\"\\n [\\\\#4237](https://github.com/scalameta/metals/pull/4237)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add better Scala CLI support\\n [\\\\#3790](https://github.com/scalameta/metals/pull/3790)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- bugfix: Fix signature help when named params are present\\n [\\\\#4251](https://github.com/scalameta/metals/pull/4251)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix ArgCompletions for nested apply\\n [\\\\#4247](https://github.com/scalameta/metals/pull/4247)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- adding AmmoniteFileCompletions for scala 3\\n [\\\\#4220](https://github.com/scalameta/metals/pull/4220)\\n ([vzmerr](https://github.com/vzmerr))\\n- bugfix: Don\'t throw exception if template ends at EOF\\n [\\\\#4245](https://github.com/scalameta/metals/pull/4245)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Adjust type if mismatch\\n [\\\\#4218](https://github.com/scalameta/metals/pull/4218)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove worksheet diagnostics on close\\n [\\\\#4233](https://github.com/scalameta/metals/pull/4233)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): migrate to actions/java to use built-in sbt caching\\n [\\\\#4221](https://github.com/scalameta/metals/pull/4221)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: include anon classes (val x = new Trait {}) in \'find all\\n implementations\' [\\\\#4231](https://github.com/scalameta/metals/pull/4231)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: fix release note metadata\\n [\\\\#4241](https://github.com/scalameta/metals/pull/4241)\\n ([tanishiking](https://github.com/tanishiking))\\n- release: Add release notes for Metals 0.11.8\\n [\\\\#4214](https://github.com/scalameta/metals/pull/4214)\\n ([tanishiking](https://github.com/tanishiking))"},{"id":"/2022/08/10/aluminium","metadata":{"permalink":"/metals/blog/2022/08/10/aluminium","source":"@site/blog/2022-08-10-aluminium.md","title":"Metals v0.11.8 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.8, bringing a number of improvements for both Scala 2 and Scala 3.","date":"2022-08-10T00:00:00.000Z","formattedDate":"August 10, 2022","tags":[],"readingTime":6.695,"hasTruncateMarker":false,"authors":[{"name":"Rikito Taniguchi","url":"https://twitter.com/tanishiking","imageURL":"https://github.com/tanishiking.png"}],"frontMatter":{"author":"Rikito Taniguchi","title":"Metals v0.11.8 - Aluminium","authorURL":"https://twitter.com/tanishiking","authorImageURL":"https://github.com/tanishiking.png"},"prevItem":{"title":"Metals v0.11.9 - Aluminium","permalink":"/metals/blog/2022/10/06/aluminium"},"nextItem":{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.8, bringing a number of improvements for both Scala 2 and Scala 3.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release84
Merged PRs80
Contributors15
Closed issues22
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/52?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Auto import and completion for extension methods\\n- [Scala 3] Convert to Named Parameters code action\\n- [Scala 3] Scaladoc Completion for Scala3\\n- [Scala 3] Completions in string interpolation\\n- [Scala 2] Automatic import of types in string interpolations\\n- Code Action documentation\\n- Support of Scala 3.2.0-RC3, Scala 3.2.0-RC2\\n\\nand a lot of bugfixes!\\n\\n## [Scala 3] Auto import and completion for extension methods\\n\\nYou might know that Scala 3 has introduced `extension methods` that allow defining new methods to your existing types.\\n\\nPreviously, Metals couldn\'t auto-complete extension methods; so developers had to find an appropriate extension method from their workspace and manually import it. But, this was time-consuming and not always beginner friendly.\\n\\nNow, Metals provides auto-completion for extension methods and automatically imports them!\\n\\n![extension-methods](https://i.imgur.com/EAbVHeH.gif)\\n\\n## [Scala 3] Convert to Named Parameters code action\\n\\n[Metals 0.11.7 added `ConvertToNamedParameters` code action to Scala2](https://scalameta.org/metals/blog/2022/07/04/aluminium#scala-2-add-converttonamedarguments-code-action).\\n\\nThanks to the contribution by [@jkciesluk](https://github.com/jkciesluk), this feature is now available for Scala 3!\\n\\n![convert-to-named](https://i.imgur.com/9i7MWoQ.gif)\\n\\n## [Scala 3] Scaladoc completion\\n\\nMetals now supports offering Scaladoc completions in Scala 3. When typing `/**` you get an option to auto-complete a scaladoc template for methods, classes, etc.!\\n\\n![scala-doc-completion](https://i.imgur.com/MEJUXr3.gif)\\n\\n## [Scala 3] Completions in string interpolation\\n\\nIn the previous versions, whenever users wanted to include a value in a string using string interpolation, they would need to do it all manually. Now, it is possible to get an automatic conversion to string interpolation when typing `$value`, as well as automatic wrapping in `{}` when accessing members of such value.\\n\\n![scala3-interpolation](https://i.imgur.com/EyFKpiv.gif)\\n\\n## [Scala 2] Automatically import types in string interpolations\\n\\nPreviously, the only suggestions for string interpolations were coming from the currently available symbols in scope. This meant that if you wanted to import something from another package, you would need to do it manually.\\n\\nThis problem is now resolved. Users can easily get such symbols automatically imported, which creates a seamless workflow.\\n\\n![scala2-inteprolation](https://i.imgur.com/cCWTQnj.gif)\\n\\nThe feature is also being worked on for Scala 3.\\n\\n## Code Action documentation\\n\\nHave you ever wondered what kind of refactorings are available in Metals?\\nCheck out this new page in the documentation! You can see a list of all the code actions in Metals with examples.\\nhttps://scalameta.org/metals/docs/codeactions/codeactions\\n\\nBig thanks to [zmerr](https://github.com/vzmerr) for writing this documentation.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.7..v0.11.8\\n33\\tTomasz Godzik\\n 11\\tRikito Taniguchi\\n 9\\tScala Steward\\n 6\\tjkciesluk\\n 6\\tKamil Podsiad\u0142o\\n 5\\tvzmerr\\n 3\\tVadim Chelyshov\\n 2\\tAdrien Piquerez\\n 2\\tscalameta-bot\\n 2\\tzmerr\\n 1\\tArthur S\\n 1\\tAnton Sviridov\\n 1\\ttgodzik\\n 1\\tScalameta Bot\\n 1\\tChris Kipp\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.8](https://github.com/scalameta/metals/tree/v0.11.8) (2022-08-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.7...v0.11.8)\\n\\n**Merged pull requests:**\\n\\n- [Scala 3] Revert type completions feature\\n [\\\\#4236](https://github.com/scalameta/metals/pull/4236)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Show package completions\\n [\\\\#4223](https://github.com/scalameta/metals/pull/4223)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): small changes to account for migration from LSIF -> SCIP\\n [\\\\#4222](https://github.com/scalameta/metals/pull/4222)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore: Switch to JDK 17 for most tests\\n [\\\\#4219](https://github.com/scalameta/metals/pull/4219)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Print correct method signature for Selectable\\n [\\\\#4202](https://github.com/scalameta/metals/pull/4202)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala 3 type completion\\n [\\\\#4174](https://github.com/scalameta/metals/pull/4174)\\n ([vzmerr](https://github.com/vzmerr))\\n- bugfix: Don\'t use interrupt for the Scala 3 compiler\\n [\\\\#4200](https://github.com/scalameta/metals/pull/4200)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.9 to 4.5.11\\n [\\\\#4210](https://github.com/scalameta/metals/pull/4210)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feat: Auto complete (missing) extension methods\\n [\\\\#4183](https://github.com/scalameta/metals/pull/4183)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update mdoc, mdoc-interfaces, sbt-mdoc from 2.3.2 to 2.3.3\\n [\\\\#4209](https://github.com/scalameta/metals/pull/4209)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 9.0.1 to 9.0.4\\n [\\\\#4208](https://github.com/scalameta/metals/pull/4208)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Bump Bloop to latest to test out recent changes\\n [\\\\#4204](https://github.com/scalameta/metals/pull/4204)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update debug adapter to 2.2.0 stable (dependency update)\\n [\\\\#4203](https://github.com/scalameta/metals/pull/4203)\\n ([arixmkii](https://github.com/arixmkii))\\n- fix: index inline extension methods in ScalaToplevelMtags\\n [\\\\#4199](https://github.com/scalameta/metals/pull/4199)\\n ([tanishiking](https://github.com/tanishiking))\\n- feature: Update Ammonite runner for Scala 3 and latest Scala 2 versions\\n [\\\\#4197](https://github.com/scalameta/metals/pull/4197)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Support Scala 3.2.0-RC3\\n [\\\\#4198](https://github.com/scalameta/metals/pull/4198)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Fold the end line of template / block if it\'s braceless\\n [\\\\#4191](https://github.com/scalameta/metals/pull/4191)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Print local type aliases properly\\n [\\\\#4188](https://github.com/scalameta/metals/pull/4188)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add match keyword completion\\n [\\\\#4185](https://github.com/scalameta/metals/pull/4185)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- fix: request configuration before connecting to build server\\n [\\\\#4180](https://github.com/scalameta/metals/pull/4180)\\n ([dos65](https://github.com/dos65))\\n- Code Actions doc page\\n [\\\\#4157](https://github.com/scalameta/metals/pull/4157)\\n ([vzmerr](https://github.com/vzmerr))\\n- fix: Remember choice `Don\'t show this again` for sbt as build server\\n [\\\\#4175](https://github.com/scalameta/metals/pull/4175)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: [Scala 3] Show correct param names in java methods\\n [\\\\#4179](https://github.com/scalameta/metals/pull/4179)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: return all inversed dependencies in `inverseDependenciesAll`\\n [\\\\#4176](https://github.com/scalameta/metals/pull/4176)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- refactor: Use MetalsNames in ExtractValue code action\\n [\\\\#4173](https://github.com/scalameta/metals/pull/4173)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: Import missing extension method\\n [\\\\#4141](https://github.com/scalameta/metals/pull/4141)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Use the correct RC version of 3.2.0\\n [\\\\#4171](https://github.com/scalameta/metals/pull/4171)\\n ([tgodzik](https://github.com/tgodzik))\\n- Multiline string enhance\\n [\\\\#4168](https://github.com/scalameta/metals/pull/4168)\\n ([vzmerr](https://github.com/vzmerr))\\n- refactor: Print better debug infor when InferredType command failed\\n [\\\\#4162](https://github.com/scalameta/metals/pull/4162)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: use sonatypeOssRepos instead of sonatypeRepo\\n [\\\\#4169](https://github.com/scalameta/metals/pull/4169)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: Add architecture.md\\n [\\\\#4008](https://github.com/scalameta/metals/pull/4008)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Include method signature in the label\\n [\\\\#4161](https://github.com/scalameta/metals/pull/4161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add convertToNamedParameters support for Scala 3\\n [\\\\#4131](https://github.com/scalameta/metals/pull/4131)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bughack: Force specific Scala 3 compiler for worksheets\\n [\\\\#4153](https://github.com/scalameta/metals/pull/4153)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Show better titles for ConvertToNamedArguments code action\\n [\\\\#4158](https://github.com/scalameta/metals/pull/4158)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix triple quoted new line on type formatting\\n [\\\\#4151](https://github.com/scalameta/metals/pull/4151)\\n ([vzmerr](https://github.com/vzmerr))\\n- build(deps): Update flyway-core from 9.0.0 to 9.0.1\\n [\\\\#4159](https://github.com/scalameta/metals/pull/4159)\\n ([scala-steward](https://github.com/scala-steward))\\n- bugfix: Allow completions in multiline expressions when debugging\\n [\\\\#4111](https://github.com/scalameta/metals/pull/4111)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: [Scala 2] Automatically import types in string interpolations\\n [\\\\#4140](https://github.com/scalameta/metals/pull/4140)\\n ([tgodzik](https://github.com/tgodzik))\\n- Extend extract value with new cases\\n [\\\\#4139](https://github.com/scalameta/metals/pull/4139)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Bump sbt-dependency-submission\\n [\\\\#4155](https://github.com/scalameta/metals/pull/4155)\\n ([adpi2](https://github.com/adpi2))\\n- feat: Adding stub implementations for abstract given instances\\n [\\\\#4055](https://github.com/scalameta/metals/pull/4055)\\n ([tanishiking](https://github.com/tanishiking))\\n- refactor: Show more debug messages\\n [\\\\#4150](https://github.com/scalameta/metals/pull/4150)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Reenable RenameLspSuite\\n [\\\\#4152](https://github.com/scalameta/metals/pull/4152)\\n ([tgodzik](https://github.com/tgodzik))\\n- support for partial function\\n [\\\\#4125](https://github.com/scalameta/metals/pull/4125)\\n ([zmerr](https://github.com/zmerr))\\n- build(deps): Update flyway-core from 8.5.13 to 9.0.0\\n [\\\\#4147](https://github.com/scalameta/metals/pull/4147)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update sbt, scripted-plugin from 1.7.0 to 1.7.1\\n [\\\\#4148](https://github.com/scalameta/metals/pull/4148)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: avoid duplicate migration appllication\\n [\\\\#4144](https://github.com/scalameta/metals/pull/4144)\\n ([dos65](https://github.com/dos65))\\n- removing brace of for comprehension\\n [\\\\#4137](https://github.com/scalameta/metals/pull/4137)\\n ([vzmerr](https://github.com/vzmerr))\\n- chore: update git-ignore-revs\\n [\\\\#4145](https://github.com/scalameta/metals/pull/4145)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: change formatting of trailing commas\\n [\\\\#4050](https://github.com/scalameta/metals/pull/4050)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- build(deps): Update interface from 1.0.6 to 1.0.8\\n [\\\\#4135](https://github.com/scalameta/metals/pull/4135)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update sbt from 1.6.2 to 1.7.0\\n [\\\\#4136](https://github.com/scalameta/metals/pull/4136)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: Dialect should be scala21xSource3 for `-Xsource:3.x.x`\\n [\\\\#4134](https://github.com/scalameta/metals/pull/4134)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: refactor update test cases\\n [\\\\#4129](https://github.com/scalameta/metals/pull/4129)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- bugfix: Occurence highlight did not work for local vars\\n [\\\\#4109](https://github.com/scalameta/metals/pull/4109)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- bugfix: Save fingerprints between restarts\\n [\\\\#4127](https://github.com/scalameta/metals/pull/4127)\\n ([tgodzik](https://github.com/tgodzik))\\n- [docs] Update Maven integration launcher to 2.13\\n [\\\\#4130](https://github.com/scalameta/metals/pull/4130)\\n ([keynmol](https://github.com/keynmol))\\n- feature: Add a way to turn on debug logging and fix scalafix warmup\\n [\\\\#4124](https://github.com/scalameta/metals/pull/4124)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.10.0 to 3.10.1\\n [\\\\#4128](https://github.com/scalameta/metals/pull/4128)\\n ([scala-steward](https://github.com/scala-steward))\\n- java version through shell\\n [\\\\#4067](https://github.com/scalameta/metals/pull/4067)\\n ([zmerr](https://github.com/zmerr))\\n- fix: do not start debug session for test explorer if projects contains errors\\n [\\\\#4116](https://github.com/scalameta/metals/pull/4116)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- build(deps): Update mill-contrib-testng from 0.10.4 to 0.10.5\\n [\\\\#4119](https://github.com/scalameta/metals/pull/4119)\\n ([scala-steward](https://github.com/scala-steward))\\n- add scala 3.2.0-RC2\\n [\\\\#4118](https://github.com/scalameta/metals/pull/4118)\\n ([dos65](https://github.com/dos65))\\n- build(deps): Update jsoup from 1.15.1 to 1.15.2\\n [\\\\#4120](https://github.com/scalameta/metals/pull/4120)\\n ([scala-steward](https://github.com/scala-steward))\\n- build(deps): Update ipcsocket from 1.4.1 to 1.5.0\\n [\\\\#4122](https://github.com/scalameta/metals/pull/4122)\\n ([scala-steward](https://github.com/scala-steward))\\n- bugfix: [Scala 3] Improve constant and refined types printing\\n [\\\\#4117](https://github.com/scalameta/metals/pull/4117)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add documentation for running scalafix in Metals\\n [\\\\#4108](https://github.com/scalameta/metals/pull/4108)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Build.sc was seen as Ammonite script\\n [\\\\#4106](https://github.com/scalameta/metals/pull/4106)\\n ([jkciesluk](https://github.com/jkciesluk))\\n- Update sbt-dependency-graph\\n [\\\\#4110](https://github.com/scalameta/metals/pull/4110)\\n ([adpi2](https://github.com/adpi2))\\n- bugfix: Refresh decorations even if empty to clear them out\\n [\\\\#4104](https://github.com/scalameta/metals/pull/4104)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Include entire expression in filterText for member itnerpolat\u2026\\n [\\\\#4105](https://github.com/scalameta/metals/pull/4105)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: ScaladocCompletion for Scala3\\n [\\\\#4076](https://github.com/scalameta/metals/pull/4076)\\n ([tanishiking](https://github.com/tanishiking))\\n- feat: update test suite location\\n [\\\\#4073](https://github.com/scalameta/metals/pull/4073)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feature: [Scala 3] Add interpolation completions\\n [\\\\#4061](https://github.com/scalameta/metals/pull/4061)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Fix wording about the expression evaluation\\n [\\\\#4101](https://github.com/scalameta/metals/pull/4101)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Add missing release notes section\\n [\\\\#4097](https://github.com/scalameta/metals/pull/4097)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Fix links in the new release docs\\n [\\\\#4096](https://github.com/scalameta/metals/pull/4096)\\n ([tgodzik](https://github.com/tgodzik))\\n- release: Add release notes for Metals 0.11.7\\n [\\\\#4083](https://github.com/scalameta/metals/pull/4083)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/07/04/aluminium","metadata":{"permalink":"/metals/blog/2022/07/04/aluminium","source":"@site/blog/2022-07-04-aluminium.md","title":"Metals v0.11.7 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.7, which brings a large","date":"2022-07-04T00:00:00.000Z","formattedDate":"July 4, 2022","tags":[],"readingTime":10.8,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.7 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.8 - Aluminium","permalink":"/metals/blog/2022/08/10/aluminium"},"nextItem":{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.7, which brings a large\\nnumber of Scala 3 improvements as well as a few interesting code actions.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release164
Merged PRs77
Contributors14
Closed issues14
New features9
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/51?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nand [VirtusLab](https://virtuslab.com) with the help from\\n[Lunatech](https://lunatech.com) along with contributors from the community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Release notes now shown in VS Code\\n- Improvements to Bloop Java home automation.\\n- Allow to run all scalafix rules on a file\\n- [Scala 3] Implement-all abstract members code action.\\n- [Scala 3] Add snippet completions.\\n- [Scala 3] Add file name completions.\\n- [Scala 3] Expression evaluation for debugger.\\n- [Scala 2] Add ConvertToNamedArguments code action.\\n- New flatMap to for comprehension code action.\\n\\n## Release notes now shown in VS Code\\n\\nIf you are using Visual Studio Code you should see this message right after the\\nupdate of the Metals extension has finished. \ud83d\ude80\\n\\nStarting with the current release we will be showing release notes inside VS\\nCode when the version update completes. This way users will know whenever the\\nextension was updated and it will not just silently update in the background.\\n\\nRelease notes will be shown only once after the update, but can be viewed again\\nby executing `Metals: Show release notes`\\n\\nThis was contributed by [kpodsiad](https://github.com/kpodsiad), thanks for the\\ncontinuous contributions!\\n\\n## Improvements to Bloop Java home automation\\n\\nFrom the\\n[last version of Metals](https://scalameta.org/metals/blog/2022/06/03/aluminium#automatically-setup-java-home-for-the-bloop-build-server)\\nwe introduced an automated setup of Java home for your Bloop build server, which\\nis used to compile your code under the hood and is the default build server to\\nbe used.\\n\\nYour Java Home would be added when starting Metals, before starting the build\\nserver, and would also suggest an update when changing the versions in the\\nMetals settings. This could result in two possible notifications:\\n\\n- Metals changing Java version:\\n\\n![metals-java-home](https://i.imgur.com/BH8AS5c.png)\\n\\n- Metals detecting an existing Bloop Java configuration:\\n\\n![metals-java-home-existing](https://i.imgur.com/PCyyNVT.png)\\n\\nHowever, this caused a couple of issues:\\n\\n1. In some cases Metals would suggest to change your Java home even if it hasn\'t\\n changed and it wasn\'t possible to dismiss the notification forever.\\n2. In case your Java home changed and you missed the notification (or the\\n notification was not shown), Bloop would not start if the old java home was\\n removed. That especially caused issues with usage of Java with Nix.\\n3. Metals would suggest to update your ~/.bloop/bloop.json file even if it was\\n readonly.\\n\\nTo help with that we implemented a number of fixes:\\n\\n1. You can dismiss the notification forever if Metals mistakenly suggests\\n updating your Bloop configuration and the overall false positives have been\\n reduced. To do that you just need to click on the\\n `Use the Global File\'s JVM...` button.\\n2. Metals will check before starting if your Java home is correct, and if it\'s\\n not it will replace it with the current one used by Metals.\\n3. Metals will not show any notifications if it cannot change the file itself.\\n\\nIf you encounter any further issues, you can take a look at Metals output and it\\nshould show logs like these:\\n\\n```\\n2022.07.01 16:14:41 INFO Bloop uses /usr/lib/jvm/openjdk17 defined at /home/tgodzik/.bloop/bloop.json\\n2022.07.01 16:14:41 INFO Bloop currently uses settings: -Xmx3G\\n```\\n\\nYou can use them to debug what is happening and report an issue.\\n\\n## Allow to run all scalafix rules on a file\\n\\nUp until the current release Metals would only run scalafix for\\n`organize imports` and wouldn\'t allow to use any other rules. Starting with this\\nrelease you should be able to apply all currently defined\\n`rules in .scalafix.conf` you require by running `metals.scalafix-run` command.\\n\\nBy default it\'s bound to `alt` + `ctrl` + `shift` + `o` shortcut in Visual\\nStudio Code.\\n\\n![scalafix-run](https://i.imgur.com/DLe5sYT.gif)\\n\\nOne major drawback of the current approach is that we are unable to run some of\\nthe custom rules. Only the default rules and the contributed Hygiene rules are\\ncurrently available by default. You can see the full list of them\\n[here](https://scalacenter.github.io/scalafix/docs/rules/community-rules.html#hygiene-rules).\\nFor all the rest users will have to use a previously added setting\\n`metals.scalafixRulesDependencies`, where you can add dependencies following the\\n[coursier](https://get-coursier.io/) convention such as\\n`com.github.liancheng::organize-imports:0.6.0`.\\n\\nLet us know if there is another rule we should add to the default ones!\\n\\nThe current situation could be improved by making sure that the dependencies for\\nscalafix are listed in the configuration itself. This would allow both Metals\\nand scalafix CLI to easily run rules on your workspace. You can find the\\ndiscussion on\\n[scalafix github page](https://github.com/scalacenter/scalafix/issues/1625)\\n\\n## [Scala 3] Implement-all abstract members code action.\\n\\nImplement-all abstract members code action is finally available in Scala 3 \ud83c\udf89\\n\\nPreviously, in Scala3, when you were implementing an abstract member in a\\nconcrete class, you could only see the completion to override particular\\nmembers. However, you needed to add those members one by one. Now you\'ll see a\\ncode action to implement all the members at once.\\n\\n![implement-all](https://i.imgur.com/foU3oHL.gif)\\n\\nGreat work by [tanishiking](https://github.com/tanishiking).\\n\\n## [Scala 3] Add snippet completions.\\n\\nPreviously, whenever users accepted method completions the only inserted text\\nwould be the name of the method. With snippets we can now add additional `()`\\nwith cursor ending in or after the parenthesis depending on whether the method\\naccepts parameters.\\n\\n![snippets](https://i.imgur.com/QEbPSTd.gif)\\n\\nFor editors that do not support snippets the previous behaviour is preserved.\\n\\n## [Scala 3] Add file name completions\\n\\nA file name completion feature has been available only in the Scala 2 project,\\nbut thanks to the effort by [riiswa](https://github.com/riiswa), Metals 0.11.7\\nwill complete class name based on the enclosing file, in Scala3!\\n\\n![filename-completion](https://i.imgur.com/f10pnJ6.gif)\\n\\n## [Scala 3] Expression evaluation for debugger.\\n\\nExpression evaluation was already available for use in your Scala 2 code,\\nhowever it was still missing for Scala 3. Thanks to the main work by\\n[tdudzik](https://github.com/tdudzik) and later finishing touches and multiple\\nbug fixes by [adpi2](https://github.com/adpi2) it is now possible to to evaluate\\nyour code on breakpoints in the Scala 3 code.\\n\\n![debug](https://i.imgur.com/jYs7QdM.gif)\\n\\nIt was added in the previous 0.11.6 version of Metals, however it was still not\\nworking correctly enough to promote it. Currently, it should be working\\ncorrectly in most cases, so please do test it out and report any issues you find\\nto [scala-debug-adapter](https://github.com/scalacenter/scala-debug-adapter).\\n\\n## [Scala 2] Add ConvertToNamedArguments code action\\n\\nMetals 0.11.7 allows users to use a new code action that can convert all\\narguments to named arguments, which is only available on Scala 2 for the time\\nbeing.\\n\\nThe new code action will work on method calls with multiple arguments, where \\nit\'s sometimes hard to tell which arguments match which parameters at a glance.\\nIn this situation you may want to make them named arguments. Now you will be\\nable to automatically convert all those arguments into named arguments.\\n\\n![convert-to-named-vscode](https://i.imgur.com/SiUYUSY.gif)\\n\\nWe\'d like to thank [@camgraff](https://github.com/camgraff) for\\n[implementing this feature](https://github.com/scalameta/metals/pull/3971) \ud83e\udd73\\n\\n## New flatMap to for comprehension code action.\\n\\nWhen working with long chains of map/flatMap/filter it might sometimes be useful\\nto replace them with for comprehensions, which can give you a flatter view of\\nyour code.\\n\\nThis is purely a syntactic sugar which gives us an ability to offer a code\\naction to automatically convert any chain of the mentioned methods with a for\\ncomprehensions.\\n\\n![for-comp](https://i.imgur.com/MOZLYi0.gif)\\n\\nThere is currently one known issue with two separate chains being inside one\\nanother, which might cause unexpected issues. Please report any other issues you\\nfind!\\n\\nAmazing effort from [zmerr](https://github.com/zmerr)\\n\\n## Miscellaneous\\n\\n- Updated Bloop version to 1.5.2, which should allow for a better\\n `clean compile workspace` behaviour.\\n- Always print out CFR output if there is any available even if the command\\n printed to the error output.\\n- Add correct parenthesis when using extension methods completions.\\n [riiswa](https://github.com/riiswa)\\n- Properly show links to implicit parameters in decoration hovers inside for\\n comprehensions.\\n- Run doctor when `more information` button was clicked\\n- Fix issues with Metals support for Scala 3.1.x hanging due to infinite loop in\\n the compiler.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.6..v0.11.7\\n27\\tTomasz Godzik\\n 22\\tCam Graff\\n 18\\tRikito Taniguchi\\n 15\\tScalameta Bot\\n 10\\tckipp01\\n 5\\tWaris Radji\\n 5\\tscalameta-bot\\n 4\\tVadim Chelyshov\\n 3\\tAdrien Piquerez\\n 2\\tKamil Podsiadlo\\n 2\\ttgodzik\\n 1\\tChris Kipp\\n 1\\tKamil Podsiad\u0142o\\n 1\\tzmerr\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.7](https://github.com/scalameta/metals/tree/v0.11.7) (2022-07-04)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.6...v0.11.7)\\n\\n**Merged pull requests:**\\n\\n- Fix sbt-dependengy-graph workflow again\\n [\\\\#4095](https://github.com/scalameta/metals/pull/4095)\\n ([adpi2](https://github.com/adpi2))\\n- Fix sbt-dependency-graph workflow\\n [\\\\#4092](https://github.com/scalameta/metals/pull/4092)\\n ([adpi2](https://github.com/adpi2))\\n- fix: ConvertToNamedArgument code action: register the server command / hide in\\n Scala3 projects [\\\\#4090](https://github.com/scalameta/metals/pull/4090)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: (scala3) insert correct position for implement-all code action on class\\n with type parameters [\\\\#4081](https://github.com/scalameta/metals/pull/4081)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: Bump Bloop to newest version\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4078)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Change Java home on startup if broken\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4079)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add known scalafix rules\' dependencies\\n [\\\\#4077](https://github.com/scalameta/metals/pull/4077)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: [Scala 3] Adjust changes for the most recent compiler version\\n [\\\\#4071](https://github.com/scalameta/metals/pull/4071)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Don\'t cache Java for nix and additionally use JAVA_HOME\\n [\\\\#4075](https://github.com/scalameta/metals/pull/4075)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Make sure that the Scala 3 compiler always retries properly\\n [\\\\#4074](https://github.com/scalameta/metals/pull/4074)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Uncomment HKSignatureHelpSuite\\n [\\\\#4072](https://github.com/scalameta/metals/pull/4072)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: handle memory footprint errors on JDK17\\n [\\\\#4064](https://github.com/scalameta/metals/pull/4064)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: lsif-java -> scip-java\\n [\\\\#3972](https://github.com/scalameta/metals/pull/3972)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Don\'t update readonly bloop.json and allow to dismiss notifications\\n [\\\\#4049](https://github.com/scalameta/metals/pull/4049)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: OverrideCompletion can handle symbolPrefix\\n [\\\\#4037](https://github.com/scalameta/metals/pull/4037)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: Add Rikito Taniguchi to maintainers\\n [\\\\#4058](https://github.com/scalameta/metals/pull/4058)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Fix wrong type shown when type alias is used\\n [\\\\#4046](https://github.com/scalameta/metals/pull/4046)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: Update release documentation\\n [\\\\#4051](https://github.com/scalameta/metals/pull/4051)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: support tab indent in implement-all code action\\n [\\\\#4042](https://github.com/scalameta/metals/pull/4042)\\n ([tanishiking](https://github.com/tanishiking))\\n- flatMap to For Comprehension\\n [\\\\#3885](https://github.com/scalameta/metals/pull/3885)\\n ([zmerr](https://github.com/zmerr))\\n- bugfix: Fix wrong flag for default methods\\n [\\\\#4045](https://github.com/scalameta/metals/pull/4045)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: remove improper javaOptions initialization\\n [\\\\#4047](https://github.com/scalameta/metals/pull/4047)\\n ([dos65](https://github.com/dos65))\\n- fix: do not fail when stripping ansi codes\\n [\\\\#4048](https://github.com/scalameta/metals/pull/4048)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add ConvertToNamedArguments code action\\n [\\\\#3971](https://github.com/scalameta/metals/pull/3971)\\n ([camgraff](https://github.com/camgraff))\\n- add scala 3.1.3 and 3.2.0-RC1\\n [\\\\#4041](https://github.com/scalameta/metals/pull/4041)\\n ([dos65](https://github.com/dos65))\\n- Adjust to signature help changes in scala3 compiler\\n [\\\\#4026](https://github.com/scalameta/metals/pull/4026)\\n ([dos65](https://github.com/dos65))\\n- feat(mill): also check default version in mill file\\n [\\\\#4039](https://github.com/scalameta/metals/pull/4039)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix(worksheets): filter out NonUnitStatements wartremover in worksheets\\n [\\\\#4038](https://github.com/scalameta/metals/pull/4038)\\n ([ckipp01](https://github.com/ckipp01))\\n- build(deps): Update munit from 1.0.0-M3 to 1.0.0-M5\\n [\\\\#4033](https://github.com/scalameta/metals/pull/4033)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.8.3 to 3.9.0\\n [\\\\#4031](https://github.com/scalameta/metals/pull/4031)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- [Scala 3] Add file name completions\\n [\\\\#4018](https://github.com/scalameta/metals/pull/4018)\\n ([riiswa](https://github.com/riiswa))\\n- build(deps): Update undertow-core from 2.2.17.Final to 2.2.18.Final\\n [\\\\#4032](https://github.com/scalameta/metals/pull/4032)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update requests from 0.7.0 to 0.7.1\\n [\\\\#4030](https://github.com/scalameta/metals/pull/4030)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update h2 from 2.1.212 to 2.1.214\\n [\\\\#4029](https://github.com/scalameta/metals/pull/4029)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update sbt-scalafix, scalafix-interfaces from 0.10.0 to 0.10.1\\n [\\\\#4028](https://github.com/scalameta/metals/pull/4028)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- feat: Implement-all abstract members code action for Scala3\\n [\\\\#3960](https://github.com/scalameta/metals/pull/3960)\\n ([tanishiking](https://github.com/tanishiking))\\n- bugfix: Properly send back experimental capabilities\\n [\\\\#4007](https://github.com/scalameta/metals/pull/4007)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(maven): update the maven wrapper\\n [\\\\#4024](https://github.com/scalameta/metals/pull/4024)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: run doctor when `more information` button was clicked\\n [\\\\#4019](https://github.com/scalameta/metals/pull/4019)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: Fix errors for kind projector\\n [\\\\#4015](https://github.com/scalameta/metals/pull/4015)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Reset diagnostics before connecting to new server\\n [\\\\#4017](https://github.com/scalameta/metals/pull/4017)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Properly show links to implicit parameters in decoration hovers\\n [\\\\#4014](https://github.com/scalameta/metals/pull/4014)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Allow to run all scalafix rules on a file\\n [\\\\#3996](https://github.com/scalameta/metals/pull/3996)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix extension methods completion\\n [\\\\#4013](https://github.com/scalameta/metals/pull/4013)\\n ([riiswa](https://github.com/riiswa))\\n- chore: Add support for Scala 2.12.16\\n [\\\\#4010](https://github.com/scalameta/metals/pull/4010)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Always print out CFR output if there is any available\\n [\\\\#4012](https://github.com/scalameta/metals/pull/4012)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.1.3-RC5\\n [\\\\#4011](https://github.com/scalameta/metals/pull/4011)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix auto implement abstract members for self-types\\n [\\\\#4009](https://github.com/scalameta/metals/pull/4009)\\n ([riiswa](https://github.com/riiswa))\\n- fix: only compare Bloop JavaHome with Metals JavaHome if set\\n [\\\\#4002](https://github.com/scalameta/metals/pull/4002)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: add checkout to steward job\\n [\\\\#3999](https://github.com/scalameta/metals/pull/3999)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(deps): add in other scalameta repos to steward job\\n [\\\\#3995](https://github.com/scalameta/metals/pull/3995)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: switch mtags release on a branch with backports\\n [\\\\#3998](https://github.com/scalameta/metals/pull/3998)\\n ([dos65](https://github.com/dos65))\\n- bugfix: Fix failing tests after refactor\\n [\\\\#3993](https://github.com/scalameta/metals/pull/3993)\\n ([tgodzik](https://github.com/tgodzik))\\n- build(deps): Update ammonite-util from 2.5.3 to 2.5.4\\n [\\\\#3983](https://github.com/scalameta/metals/pull/3983)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scalameta, semanticdb-scalac, ... from 4.5.6 to 4.5.9\\n [\\\\#3991](https://github.com/scalameta/metals/pull/3991)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update lsp4j to 0.14.0\\n [\\\\#3958](https://github.com/scalameta/metals/pull/3958)\\n ([tanishiking](https://github.com/tanishiking))\\n- build(deps): Update munit from 1.0.0-M3 to 1.0.0-M4\\n [\\\\#3990](https://github.com/scalameta/metals/pull/3990)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update jsoup from 1.14.3 to 1.15.1\\n [\\\\#3989](https://github.com/scalameta/metals/pull/3989)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update flyway-core from 8.5.10 to 8.5.12\\n [\\\\#3988](https://github.com/scalameta/metals/pull/3988)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update interface from 1.0.6 to 1.0.7\\n [\\\\#3986](https://github.com/scalameta/metals/pull/3986)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update coursier from 2.1.0-M5 to 2.1.0-M6\\n [\\\\#3985](https://github.com/scalameta/metals/pull/3985)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update scribe, scribe-file, scribe-slf4j from 3.8.2 to 3.8.3\\n [\\\\#3984](https://github.com/scalameta/metals/pull/3984)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- build(deps): Update bloop-config, bloop-launcher from 1.5.0-18-003e6c7b to\\n 1.5.0-22-91111c15 [\\\\#3982](https://github.com/scalameta/metals/pull/3982)\\n ([scalameta-bot](https://github.com/scalameta-bot))\\n- chore: Update tests to work with newest nightlies\\n [\\\\#3981](https://github.com/scalameta/metals/pull/3981)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Fix testing library breakpoints and simplify metals adapter logic\\n [\\\\#3966](https://github.com/scalameta/metals/pull/3966)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: correct steward cron\\n [\\\\#3980](https://github.com/scalameta/metals/pull/3980)\\n ([ckipp01](https://github.com/ckipp01))\\n- chore(ci): add Scala Steward into CI\\n [\\\\#3977](https://github.com/scalameta/metals/pull/3977)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: [Scala 3] Add snippet completions\\n [\\\\#3959](https://github.com/scalameta/metals/pull/3959)\\n ([tgodzik](https://github.com/tgodzik))\\n- doc: fix release note v0.11.6 (duplicated merged commits section)\\n [\\\\#3979](https://github.com/scalameta/metals/pull/3979)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore: update version for v0.11.6\\n [\\\\#3978](https://github.com/scalameta/metals/pull/3978)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: release note for Metals 0.11.6\\n [\\\\#3957](https://github.com/scalameta/metals/pull/3957)\\n ([tanishiking](https://github.com/tanishiking))"},{"id":"/2022/06/03/aluminium","metadata":{"permalink":"/metals/blog/2022/06/03/aluminium","source":"@site/blog/2022-06-03-aluminium.md","title":"Metals v0.11.6 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.6 which continues to improve the Scala 3 support along with many other fixes.","date":"2022-06-03T00:00:00.000Z","formattedDate":"June 3, 2022","tags":[],"readingTime":7.35,"hasTruncateMarker":false,"authors":[{"name":"Rikito Taniguchi","url":"https://twitter.com/tanishiking25","imageURL":"https://github.com/tanishiking.png"}],"frontMatter":{"author":"Rikito Taniguchi","title":"Metals v0.11.6 - Aluminium","authorURL":"https://twitter.com/tanishiking25","authorImageURL":"https://github.com/tanishiking.png"},"prevItem":{"title":"Metals v0.11.7 - Aluminium","permalink":"/metals/blog/2022/07/04/aluminium"},"nextItem":{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.6 which continues to improve the Scala 3 support along with many other fixes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release165
Merged PRs56
Contributors12
\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\n- reduce memory usage in large projects\\n- override completions for Scala3\\n- improved scaladoc support in both Scala2 and Scala3\\n- better UX in the test explorer\\n- automatically setup java home for the Bloop build server\\n- support for Scala 3.1.3-RC3 and RC4\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n## Reduce file watcher memory usage\\nPreviously, Metals consumed a huge amount of memory for file watchers in large projects, especially on macOS.\\nNow, Metals uses a memory-efficient way to watch files to detect changes and consume less memory.\\n\\nFor more technical details, see the original PR: [\\\\#3758](https://github.com/scalameta/metals/pull/3758).\\n\\n## [Scala3] Override Completions\\n\\nOverride completions for Scala3 are now available with Metals 0.11.6!\\nNow, Metals shows the scaladoc on hover for Scala3 projects. (Before this release, Metals was unable to show the scaladoc for the symbols from third-party modules).\\n\\n\\n![override-completion](https://i.imgur.com/Go3sMxy.gif)\\n\\n## [Scala3] Show scaladoc on hover for Scala 3 project\\n\\nPreviously, scaladocs were missing for a lot of classes and methods in Scala 3, especially for the symbols from third-party modules. From this release, Metals will always show the scaladoc on hover for Scala3 projects.\\n\\n![hover-scala3](https://i.imgur.com/Svzq5DD.png)\\n\\n### [Scala3] Support `completionItem/resolve`\\n\\n`completionItem/resolve` is a feature that provides on-demand, more detailed information when moving through the list of suggested completions. It will show documentation, proper parameter names for Java methods, and default values for Scala 3 methods. Now, this is also available for use in Scala 3.\\n\\n![completion-item-resolve](https://i.imgur.com/Tz6AOsx.gif)\\n\\n\\n## Show parent scaladoc if implementation is returning empty\\n\\nScaladocs can be inspected whenever you hover, use a completion or signature help. Up until recently we only showed you the documentation if the exact method you are using had the scaladocs written, which meant that if you overrode a method and didn\'t add the scaladoc comments again we would not show you any documentation. One example of such method is `headOption` on `List`.\\n\\n From this release we will also search the parent method in case the current method\'s scaladoc are empty. \\n\\n## [Scala 3] Show scaladocs for signature help\\n\\nAs mentioned in the previous paragraph, Metals can show you documentation in three different places. That, however, was true only for Scala 2 previously. In this release, we will now show you proper documentation whenever invoking signature help.\\n\\nAs a reminder, signature help is used to indicate what parameters can be used in a method. It should pop up automatically after writing `(`, but you can also invoke it manually. In VS Code that takes the form of `editor.action.triggerParameterHints` command, which can also be bound to a shortcut and by default is.\\n\\n## [MUnit] Test Explorer can find helper methods from parent classes\\n\\nMUnit allows to use [helper functions](https://scalameta.org/munit/docs/tests.html#declare-tests-inside-a-helper-function) when declaring tests. Very often those helper methods are extracted to some parent classes which are extended by many test suites.\\nNow, Metals can find usages of those helper methods and display them in Test Explorer.\\n\\nThis feature is available for Bloop and SBT 1.7.0-M2 or later.\\n\\n![MUnit-helper-methods](https://imgur.com/GGRDpXA.gif)\\n\\n## Support Cats Effect stacktraces in stacktrace analyzer\\n\\nCats Effect offers [asynchronous stack tracing](https://typelevel.org/cats-effect/docs/tracing#asynchronous-stack-tracing) which augments exceptions with additional information. \\nNow, Stacktrace Analyzer is able to recognize CE\'s stacktraces and provide link to location in code. Say no to tedious debugging when you have only stacktrace from the logs!\\n\\n![cats-effect-stacktraces](https://imgur.com/5fMvcYd.gif)\\n\\n\\n## Improve implement all completion and code action\\nPreviously, when we invoked the \\"implement all members\\" completion and code action, Metals used `x$0` for Java parameter names. Now, Metals fills these with the correct parameter names.\\n \\n## Improve rewrite to braces/parenthesis code action\\nSometimes, it wasn\'t clear which code would be affected by [rewrite to braces/parenthesis](https://scalameta.org/metals/blog/2021/09/06/tungsten#replace--with--in-functions-and-vice-versa) code action.\\nNow, code action\'s description contains name of the function/method which will be affected by executing action.\\n![rewrite-braces-parens](https://imgur.com/SkHolsJ.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n\\n## Automatically setup java home for the Bloop build server\\nIn previous versions of Metals, if users wanted to change the java version of the Bloop build server, they would need to manually update `.bloop/bloop.json` file in their user home directory. With this version, we ensure that the Bloop Java version will correspond to Metals one to avoid weird compilation issues that could arise from different versions being used.\\n\\nNow, each time you update `javaHome` or `bloopJvmProperties` settings, Metals will ask you whether to forward those changes to the Bloop configuration file. If you modified that file previously or want to use a custom one, you can dismiss the Metals notification. Otherwise, everything will automatically be set up for you once you decide to apply the changes. If you never created the file, we will create it before starting Bloop, so you should not notice anything out of order.\\n\\n## Support for Scala 3.1.3-RC4, 3.1.3-RC3\\nMetals 0.11.6 supports Scala 3.1.3-RC3 and RC4.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.5..v0.11.6\\n 34\\tRikito Taniguchi\\n 18\\tTomasz Godzik\\n 14\\tScala Steward\\n 11\\tVadim Chelyshov\\n 10\\tzmerr\\n 7\\tKamil Podsiadlo\\n 5\\tPavol Vidli\u010dka\\n 5\\tckipp01\\n 4\\tArman Bilge\\n 2\\tIan Tabolt\\n 1\\tArthur McGibbon\\n 1\\ttgodzik\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.6](https://github.com/scalameta/metals/tree/v0.11.6) (2022-06-03)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.5...v0.11.6)\\n\\n**Merged pull requests:**\\n\\n- bugfix: Escape java home path on windows\\n [\\\\#3969](https://github.com/scalameta/metals/pull/3969)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Remove Wconf from scalac options in worksheets\\n [\\\\#3976](https://github.com/scalameta/metals/pull/3976)\\n ([tgodzik](https://github.com/tgodzik))\\n- bugfix: Show all synthetics inside for comprehensions\\n [\\\\#3974](https://github.com/scalameta/metals/pull/3974)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: revert temporal changes in completions tests for 3.2.*-NIGHTLY\\n [\\\\#3970](https://github.com/scalameta/metals/pull/3970)\\n ([dos65](https://github.com/dos65))\\n- docs: remove status-bar as option for slowTaskProvider\\n [\\\\#3967](https://github.com/scalameta/metals/pull/3967)\\n ([ckipp01](https://github.com/ckipp01))\\n- bugfix: Fallback to sourcepath if jar cannot be found\\n [\\\\#3962](https://github.com/scalameta/metals/pull/3962)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: prevent npe in filewatcher\\n [\\\\#3964](https://github.com/scalameta/metals/pull/3964)\\n ([dos65](https://github.com/dos65))\\n- feat: add function name to rewrite parens/braces code action\\n [\\\\#3965](https://github.com/scalameta/metals/pull/3965)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- (scala3) Override completions\\n [\\\\#3897](https://github.com/scalameta/metals/pull/3897)\\n ([tanishiking](https://github.com/tanishiking))\\n- actions: return release job lock\\n [\\\\#3944](https://github.com/scalameta/metals/pull/3944)\\n ([dos65](https://github.com/dos65))\\n- Fix SBT version check in Doctor\\n [\\\\#3946](https://github.com/scalameta/metals/pull/3946)\\n ([iantabolt](https://github.com/iantabolt))\\n- Fix issues with synthetics in for comprehension\'s yield\\n [\\\\#3948](https://github.com/scalameta/metals/pull/3948)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: Add support for Scala 3.1.3-RC4\\n [\\\\#3947](https://github.com/scalameta/metals/pull/3947)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop Java Home to that of Metals\\n [\\\\#3871](https://github.com/scalameta/metals/pull/3871)\\n ([zmerr](https://github.com/zmerr))\\n- chore: speedup lsp tests\\n [\\\\#3925](https://github.com/scalameta/metals/pull/3925)\\n ([dos65](https://github.com/dos65))\\n- feature: [Scala 3] Show correct inferred type in signature help\\n [\\\\#3941](https://github.com/scalameta/metals/pull/3941)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs(test-explorer): add note about test-user-interface\\n [\\\\#3943](https://github.com/scalameta/metals/pull/3943)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: avoid out of bounds for editors that treat \\\\n as a line end\\n [\\\\#3942](https://github.com/scalameta/metals/pull/3942)\\n ([ckipp01](https://github.com/ckipp01))\\n- feature: Show scaladocs for signature help\\n [\\\\#3934](https://github.com/scalameta/metals/pull/3934)\\n ([tgodzik](https://github.com/tgodzik))\\n- update `metals_ref` for mtags-release\\n [\\\\#3940](https://github.com/scalameta/metals/pull/3940)\\n ([dos65](https://github.com/dos65))\\n- Fix nightlies tests and uncomment SignaturePat suite tests\\n [\\\\#3932](https://github.com/scalameta/metals/pull/3932)\\n ([tgodzik](https://github.com/tgodzik))\\n- Include proper names when using implement all completion and code action\\n [\\\\#3930](https://github.com/scalameta/metals/pull/3930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix expression type for inlined methods and show all flags for methods\\n [\\\\#3931](https://github.com/scalameta/metals/pull/3931)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: [Scala 3] Add completion item resolution\\n [\\\\#3914](https://github.com/scalameta/metals/pull/3914)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(docs): ensure metals_2.12 is replaced with metals_2.13\\n [\\\\#3924](https://github.com/scalameta/metals/pull/3924)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: symbolSearch - support encoded names from classpath\\n [\\\\#3917](https://github.com/scalameta/metals/pull/3917)\\n ([dos65](https://github.com/dos65))\\n- Update scalafmt-dynamic to 3.5.3\\n [\\\\#3921](https://github.com/scalameta/metals/pull/3921)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.4\\n [\\\\#3920](https://github.com/scalameta/metals/pull/3920)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.6\\n [\\\\#3922](https://github.com/scalameta/metals/pull/3922)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.5.3\\n [\\\\#3916](https://github.com/scalameta/metals/pull/3916)\\n ([scala-steward](https://github.com/scala-steward))\\n- chore: update scala3 version in welcome msg\\n [\\\\#3919](https://github.com/scalameta/metals/pull/3919)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore, docs: simplify cats-effect stacktrace regex, add docstring\\n [\\\\#3918](https://github.com/scalameta/metals/pull/3918)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- refactor: fix warning from Scala3 in ScaladocParser.scala\\n [\\\\#3912](https://github.com/scalameta/metals/pull/3912)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for Scala 3.1.3-RC3\\n [\\\\#3911](https://github.com/scalameta/metals/pull/3911)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop and Scala Debug adapter\\n [\\\\#3910](https://github.com/scalameta/metals/pull/3910)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: scala3 - do not provide completions for invalid quals\\n [\\\\#3909](https://github.com/scalameta/metals/pull/3909)\\n ([dos65](https://github.com/dos65))\\n- feat, test explorer: search for test methods in parent classes\\n [\\\\#3898](https://github.com/scalameta/metals/pull/3898)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add semanticdb-javac to `TestInternal`\\n [\\\\#3907](https://github.com/scalameta/metals/pull/3907)\\n ([armanbilge](https://github.com/armanbilge))\\n- Update munit to newest milestone\\n [\\\\#3906](https://github.com/scalameta/metals/pull/3906)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: fix broken documents (Integrating a new editor)\\n [\\\\#3905](https://github.com/scalameta/metals/pull/3905)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: broken link display in vim docs\\n [\\\\#3904](https://github.com/scalameta/metals/pull/3904)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: handle cats-effect async stacktrace in stacktrace analyzer\\n [\\\\#3900](https://github.com/scalameta/metals/pull/3900)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Don\'t create the Presentation Compiler for Java files\\n [\\\\#3887](https://github.com/scalameta/metals/pull/3887)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle modules in stacktrace analyzer\\n [\\\\#3896](https://github.com/scalameta/metals/pull/3896)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Update scalafmt-dynamic to 3.5.2\\n [\\\\#3893](https://github.com/scalameta/metals/pull/3893)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 2.0.0\\n [\\\\#3890](https://github.com/scalameta/metals/pull/3890)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.7.Final\\n [\\\\#3892](https://github.com/scalameta/metals/pull/3892)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.10\\n [\\\\#3891](https://github.com/scalameta/metals/pull/3891)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.5.3\\n [\\\\#3889](https://github.com/scalameta/metals/pull/3889)\\n ([scala-steward](https://github.com/scala-steward))\\n- Reduce file watcher memory usage\\n [\\\\#3758](https://github.com/scalameta/metals/pull/3758)\\n ([pvid](https://github.com/pvid))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.5\\n [\\\\#3894](https://github.com/scalameta/metals/pull/3894)\\n ([scala-steward](https://github.com/scala-steward))\\n- docs: fix latest versions\\n [\\\\#3886](https://github.com/scalameta/metals/pull/3886)\\n ([dos65](https://github.com/dos65))\\n- Show parent scaladoc if implementation is returning empty\\n [\\\\#3881](https://github.com/scalameta/metals/pull/3881)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add scaladocs on hover for Scala 3\\n [\\\\#3865](https://github.com/scalameta/metals/pull/3865)\\n ([tanishiking](https://github.com/tanishiking))\\n- 0.11.5 - update versions\\n [\\\\#3883](https://github.com/scalameta/metals/pull/3883)\\n ([dos65](https://github.com/dos65))\\n- 0.11.5 release notes\\n [\\\\#3882](https://github.com/scalameta/metals/pull/3882)\\n ([dos65](https://github.com/dos65))"},{"id":"/2022/04/28/aluminium","metadata":{"permalink":"/metals/blog/2022/04/28/aluminium","source":"@site/blog/2022-04-28-aluminium.md","title":"Metals v0.11.5 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.5, which brings a few of hotfixes and improves hover info for Scala 3","date":"2022-04-28T00:00:00.000Z","formattedDate":"April 28, 2022","tags":[],"readingTime":1.305,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.11.5 - Aluminium","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.6 - Aluminium","permalink":"/metals/blog/2022/06/03/aluminium"},"nextItem":{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.5, which brings a few of hotfixes and improves hover info for Scala 3\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release28
Merged PRs7
Contributors5
Closed issues2
New features
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/50?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Fix javasemanticdb support for sbt-BSP with JDK17\\n- Don\'t show MUnit warning for the Test Explorer when not necessary\\n- [Scala3] Show correct tooltip on hover methods in for comprehension\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.4..v0.11.5\\n16\\tRikito Taniguchi\\n4\\tVadim Chelyshov\\n1\\tKamil Podsiadlo\\n1\\tTomasz Godzik\\n1\\tckipp01\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.5](https://github.com/scalameta/metals/tree/v0.11.5) (2022-04-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.4...v0.11.5)\\n\\n**Merged pull requests:**\\n\\n- fix: don\'t show MUnit warning for the Test Explorer when not necessary\\n [\\\\#3879](https://github.com/scalameta/metals/pull/3879)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: sbt-metals + java semanticdb issue on jdk17\\n [\\\\#3876](https://github.com/scalameta/metals/pull/3876)\\n ([dos65](https://github.com/dos65))\\n- [Scala3] Show correct tooltip on hover methods in for comprehension\\n [\\\\#3854](https://github.com/scalameta/metals/pull/3854)\\n ([tanishiking](https://github.com/tanishiking))\\n- docs: update vim docs to no longer point people to coc-metals\\n [\\\\#3819](https://github.com/scalameta/metals/pull/3819)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove Eclipse from the documentation\\n [\\\\#3868](https://github.com/scalameta/metals/pull/3868)\\n ([tgodzik](https://github.com/tgodzik))\\n- update versions for 0.11.4\\n [\\\\#3874](https://github.com/scalameta/metals/pull/3874)\\n ([dos65](https://github.com/dos65))\\n- 0.11.4 release notes\\n [\\\\#3873](https://github.com/scalameta/metals/pull/3873)\\n ([dos65](https://github.com/dos65))"},{"id":"/2022/04/27/aluminium","metadata":{"permalink":"/metals/blog/2022/04/27/aluminium","source":"@site/blog/2022-04-27-aluminium.md","title":"Metals v0.11.4 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.4, which includes the hotfix of the issue with cs install metals.","date":"2022-04-27T00:00:00.000Z","formattedDate":"April 27, 2022","tags":[],"readingTime":0.88,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.11.4 - Aluminium","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.5 - Aluminium","permalink":"/metals/blog/2022/04/28/aluminium"},"nextItem":{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.4, which includes the hotfix of [the issue with `cs install metals`](https://github.com/coursier/coursier/issues/2406).\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release3
Merged PRs3
Contributors2
Closed issues1
New features0
\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Fix the issue with installing Metals using coursier\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.3..v0.11.4\\n2\\tKamil Podsiad\u0142o\\n1\\tVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.4](https://github.com/scalameta/metals/tree/v0.11.4) (2022-04-27)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.3...v0.11.4)\\n\\n**Merged pull requests:**\\n\\n- upgrade bsp4j version to a stable one\\n [\\\\#3872](https://github.com/scalameta/metals/pull/3872)\\n ([dos65](https://github.com/dos65))\\n- chore: update server version after release\\n [\\\\#3869](https://github.com/scalameta/metals/pull/3869)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: release notes\\n [\\\\#3860](https://github.com/scalameta/metals/pull/3860)\\n ([kpodsiad](https://github.com/kpodsiad))"},{"id":"/2022/04/26/aluminium","metadata":{"permalink":"/metals/blog/2022/04/26/aluminium","source":"@site/blog/2022-04-26-aluminium.md","title":"Metals v0.11.3 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.3.","date":"2022-04-26T00:00:00.000Z","formattedDate":"April 26, 2022","tags":[],"readingTime":10.155,"hasTruncateMarker":false,"authors":[{"name":"Kamil Podsiadlo","url":"https://twitter.com/podsiadel","imageURL":"https://github.com/kpodsiad.png"}],"frontMatter":{"author":"Kamil Podsiadlo","title":"Metals v0.11.3 - Aluminium","authorURL":"https://twitter.com/podsiadel","authorImageURL":"https://github.com/kpodsiad.png"},"prevItem":{"title":"Metals v0.11.4 - Aluminium","permalink":"/metals/blog/2022/04/27/aluminium"},"nextItem":{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"}},"content":"We\'re happy to announce the release of Metals v0.11.3.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release231
Merged PRs110
Contributors17
Closed issues21
New features7
\\n\\nThis release uses a new version of [Bloop](https://github.com/scalacenter/bloop/blob/main/notes/v1.5.0.md).\\nThis should fix a few bugs regarding e.g. stale diagnostics in Scala 3. Moreover, the new release brings also\\na few UX improvements regarding Doctor view and running/debugging your code.\\n\\nFor full details: https://github.com/scalameta/metals/milestone/48?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add more information to the Doctor view\\n- Create companion object code action\\n- Add status bar when starting a debug session\\n- Ensure the \\"no run or test\\" message is shown to user.\\n- Show better unnaply signatures\\n- Provide an easier way to configure bloop settings\\n- Better MUnit support in Test Explorer\\n- Better sbt BSP integration\\n- Improved Scala3 support\\n\\n## Add more information to the Doctor view\\n\\nThanks to the joined effort of [\\\\#3772](https://github.com/scalameta/metals/pull/3772), [\\\\#3763](https://github.com/scalameta/metals/pull/3763) and [\\\\#3710](https://github.com/scalameta/metals/pull/3710) the Doctor view currently:\\n\\n- shows the Metals server version and information about Java used to run the Metals server\\n- displays the compilation status of project\\n- allows to navigate to the build target info for each target\\n\\n![new-doctor-view](https://imgur.com/ByzzlM8.png)\\n\\n## Create companion object code action\\n\\nThanks to the efforts of [zmerr](https://github.com/zmerr), Metals offers a new code action - `Create companion object`.\\nAs its name suggests, it can be used to automatically create a companion object for the given class, trait or enum.\\n\\n![create-companion-object-code-action](https://imgur.com/HW5rr5f.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Add status bar when starting a debug session\\n\\nStarting a debug session is a complex task, which requires a few steps:\\n\\n- Metals has to compile your project and create a debug session\\n- debugger has to be initialized (configuration, breakpoints, etc.)\\n\\nVery often each of these steps takes up to a few seconds in order to complete.\\nUntil now, the user had no idea what is happening because Metals didn\'t show any progress indicator.\\n[ckipp01](https://github.com/ckipp01) addressed this problem and added a status bar for each of the steps.\\n\\n![start-debug-session-status-bar](https://imgur.com/qh7Jzdy.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Ensure the \\"no run or test\\" message is shown to user.\\n\\nThere is a command `Run main class or tests in current file` which is a convenient way, as name suggests, of running main class:\\n![run-main](https://imgur.com/rShZ8L3.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nor running tests in the current file:\\n![run-tests](https://imgur.com/BtbOubC.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nIt is also possible to just press `F5` in file and Metals will execute main class or run tests in the current file if no run configuration is defined.\\n\\nHowever, this command was silently failing when there was no class or test to run in the file.\\nThis is no longer the case, now Metals will display proper error message in this scenario.\\n![no-class-to-run](https://imgur.com/xda3ApF.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Show better unnaply signatures\\n\\nPreviously, when pattern matching Metals was showing real `unnaply` method signature, which wasn\'t very useful.\\nNow, Metals properly uses unapply result type to show what types can be matched on.\\n![unnaply-signatures](https://imgur.com/Gzg11YT.png)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Provide an easier way to configure bloop settings\\n\\nBloop [JVM options](https://scalacenter.github.io/bloop/docs/server-reference#custom-java-options) can be\\nconfigured through a global config file. Thanks to the [zmerr](https://github.com/zmerr), Metals is capable of changing those settings.\\nEach modification of `Bloop Jvm Properties` settings will try to update that global file if possible.\\nIn case of manually configured settings, Metals will inform user about it and ask for their action.\\n\\n![update-bloop-settings](https://imgur.com/Xz2gO0h.gif)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\n## Better MUnit support in Test Explorer\\n\\nDisclaimer: **this works only when Bloop is a build server**\\n\\nTest Explorer in Metals is now able to detect some single test cases for [MUnit](https://scalameta.org/munit/) test framework.\\n![munit-single-tests](https://imgur.com/QQMLy6M.png)\\nTheme: [One Dark Pro](https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme)\\n\\nMore information about current MUnit support status can be found at this [issue](https://github.com/scalameta/metals/issues/3771).\\n\\n## Better sbt BSP integration\\n\\nFrom this release Metals will no longer run the compilation when sbt generates files under the `src-managed` directory.\\nThe previous behaviour was related to some of the source generating sbt plugins. When used with sbt BSP users would experience continuous compilation.\\nFor more details, see [\\\\#2183](https://github.com/scalameta/metals/issues/2183).\\n\\n## Improved Scala3 support\\n\\nMetals 0.11.3 now includes some better Scala3 supports in go-to-definition, rename symbols, and displaying hover.\\n\\nFor more information, check out the following pull requests:\\n\\n- [Don\'t show a tooltip on hover if cursor is not on a symbol by tanishiking \xb7 Pull Request #3792 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3792)\\n- [fix: (Scala3) Don\'t navigate to enclosing symbols on go-to-definition if cursor is not on symbol by tanishiking \xb7 Pull Request #3807 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3807)\\n- [fix: Rename extension parameter in Scala3 by tanishiking \xb7 Pull Request #3800 \xb7 scalameta/metals](https://github.com/scalameta/metals/pull/3800)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.2..v0.11.3\\n 32\\tRikito Taniguchi\\n 30\\tScala Steward\\n 19\\tTomasz Godzik\\n 17\\tVadim Chelyshov\\n 15\\tKamil Podsiad\u0142o\\n 15\\tzmerr\\n 12\\tckipp01\\n 11\\tAlexandre Archambault\\n 5\\tKamil Podsiadlo\\n 4\\tMartin Duhem\\n 3\\tArthur McGibbon\\n 3\\ttgodzik\\n 2\\tGeorg Pfuetzenreuter\\n 1\\tGabriele Petronella\\n 1\\tChris Kipp\\n 1\\tdependabot[bot]\\n 1\\tJens Petersen\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.3](https://github.com/scalameta/metals/tree/v0.11.3) (2022-04-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.2...v0.11.3)\\n\\n**Merged pull requests:**\\n\\n- fix: create comption object after end marker\\n [\\\\#3866](https://github.com/scalameta/metals/pull/3866)\\n ([dos65](https://github.com/dos65))\\n- feature: sbt-BSP - enable java-semanticdb plugin\\n [\\\\#3861](https://github.com/scalameta/metals/pull/3861)\\n ([dos65](https://github.com/dos65))\\n- Use bloop.json instead of .jvmopts for Bloop memory properties\\n [\\\\#3864](https://github.com/scalameta/metals/pull/3864)\\n ([tgodzik](https://github.com/tgodzik))\\n- handles the removal of jvm properties case\\n [\\\\#3863](https://github.com/scalameta/metals/pull/3863)\\n ([zmerr](https://github.com/zmerr))\\n- Properly infer types for unapply signature help\\n [\\\\#3862](https://github.com/scalameta/metals/pull/3862)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add semantic db info display on jar files\\n [\\\\#3843](https://github.com/scalameta/metals/pull/3843)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- correct handling of end marker relocation on extract member\\n [\\\\#3847](https://github.com/scalameta/metals/pull/3847)\\n ([zmerr](https://github.com/zmerr))\\n- Fix breakpoints in virtual docs\\n [\\\\#3846](https://github.com/scalameta/metals/pull/3846)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafmt-core to 3.5.2\\n [\\\\#3858](https://github.com/scalameta/metals/pull/3858)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark CancelCompileLspSuite as flaky\\n [\\\\#3857](https://github.com/scalameta/metals/pull/3857)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: infer jdk without jdk in name\\n [\\\\#3856](https://github.com/scalameta/metals/pull/3856)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add classpath to CFR decompile\\n [\\\\#3844](https://github.com/scalameta/metals/pull/3844)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- fix: Make signature help work properly with a non-tuple result\\n [\\\\#3849](https://github.com/scalameta/metals/pull/3849)\\n ([tgodzik](https://github.com/tgodzik))\\n- bloop jvm settings\\n [\\\\#3746](https://github.com/scalameta/metals/pull/3746)\\n ([zmerr](https://github.com/zmerr))\\n- Remove some redundant collection conversions\\n [\\\\#3848](https://github.com/scalameta/metals/pull/3848)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update scala-xml to 2.1.0\\n [\\\\#3839](https://github.com/scalameta/metals/pull/3839)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: show test explorer misconfigurations\\n [\\\\#3828](https://github.com/scalameta/metals/pull/3828)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: Register extension parameter symbols by mtags\\n [\\\\#3814](https://github.com/scalameta/metals/pull/3814)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafix-interfaces to 0.10.0\\n [\\\\#3842](https://github.com/scalameta/metals/pull/3842)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.3\\n [\\\\#3841](https://github.com/scalameta/metals/pull/3841)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.8\\n [\\\\#3838](https://github.com/scalameta/metals/pull/3838)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.17.Final\\n [\\\\#3837](https://github.com/scalameta/metals/pull/3837)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.10.0\\n [\\\\#3832](https://github.com/scalameta/metals/pull/3832)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.13-75-f9d1bef5\\n [\\\\#3831](https://github.com/scalameta/metals/pull/3831)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: (Scala3) Don\'t navigate to enclosing symbols on go-to-definition if cursor is not on symbol\\n [\\\\#3807](https://github.com/scalameta/metals/pull/3807)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafmt-dynamic to 3.4.3\\n [\\\\#3840](https://github.com/scalameta/metals/pull/3840)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.6.0\\n [\\\\#3835](https://github.com/scalameta/metals/pull/3835)\\n ([scala-steward](https://github.com/scala-steward))\\n- test: Add test for completions of matchtype / higher-kinded type\\n [\\\\#3821](https://github.com/scalameta/metals/pull/3821)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update mill-contrib-testng to 0.10.3\\n [\\\\#3834](https://github.com/scalameta/metals/pull/3834)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update h2 to 2.1.212\\n [\\\\#3833](https://github.com/scalameta/metals/pull/3833)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix formatting after last merge\\n [\\\\#3827](https://github.com/scalameta/metals/pull/3827)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Rename extension parameter in Scala3\\n [\\\\#3800](https://github.com/scalameta/metals/pull/3800)\\n ([tanishiking](https://github.com/tanishiking))\\n- Bump Bloop with a fix for #3766\\n [\\\\#3826](https://github.com/scalameta/metals/pull/3826)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: unblock release workflow\\n [\\\\#3825](https://github.com/scalameta/metals/pull/3825)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.1.2 and 3.1.3-RC2\\n [\\\\#3822](https://github.com/scalameta/metals/pull/3822)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix release script\\n [\\\\#3823](https://github.com/scalameta/metals/pull/3823)\\n ([dos65](https://github.com/dos65))\\n- fix: handle backticked names in inffered-type\\n [\\\\#3791](https://github.com/scalameta/metals/pull/3791)\\n ([dos65](https://github.com/dos65))\\n- bloop - bump version\\n [\\\\#3818](https://github.com/scalameta/metals/pull/3818)\\n ([dos65](https://github.com/dos65))\\n- docs: add common workflow to contributing guide\\n [\\\\#3816](https://github.com/scalameta/metals/pull/3816)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Remove -release option from the Scala 3 PC\\n [\\\\#3812](https://github.com/scalameta/metals/pull/3812)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: uri encoding\\n [\\\\#3795](https://github.com/scalameta/metals/pull/3795)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs overview: mention editor pages for installation (#3796)\\n [\\\\#3811](https://github.com/scalameta/metals/pull/3811)\\n ([juhp](https://github.com/juhp))\\n- Log BSP server stderr\\n [\\\\#3789](https://github.com/scalameta/metals/pull/3789)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Support MatchType in SemanticdbTreePrinter\\n [\\\\#3787](https://github.com/scalameta/metals/pull/3787)\\n ([tanishiking](https://github.com/tanishiking))\\n- [Scala3] Fix hover on interpolator-apply\\n [\\\\#3806](https://github.com/scalameta/metals/pull/3806)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove broken nightly version\\n [\\\\#3805](https://github.com/scalameta/metals/pull/3805)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-core to 3.4.3\\n [\\\\#3802](https://github.com/scalameta/metals/pull/3802)\\n ([scala-steward](https://github.com/scala-steward))\\n- refactor: add a header object to json doctor output\\n [\\\\#3803](https://github.com/scalameta/metals/pull/3803)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: Neovim and Plug clarification\\n [\\\\#3799](https://github.com/scalameta/metals/pull/3799)\\n ([tacerus](https://github.com/tacerus))\\n- docs: add in docs about doctorVisibilityDidChange\\n [\\\\#3798](https://github.com/scalameta/metals/pull/3798)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: disable not supported Wconf for scala3\\n [\\\\#3793](https://github.com/scalameta/metals/pull/3793)\\n ([dos65](https://github.com/dos65))\\n- [Scala3] Don\'t show a tooltip on hover if cursor is not on a symbol\\n [\\\\#3792](https://github.com/scalameta/metals/pull/3792)\\n ([tanishiking](https://github.com/tanishiking))\\n- chore(deps): bump actions/checkout from 2 to 3\\n [\\\\#3782](https://github.com/scalameta/metals/pull/3782)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc-interfaces to 2.3.2\\n [\\\\#3781](https://github.com/scalameta/metals/pull/3781)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.5.1\\n [\\\\#3780](https://github.com/scalameta/metals/pull/3780)\\n ([scala-steward](https://github.com/scala-steward))\\n- Try to fix flaky test by adding a delay in compilation\\n [\\\\#3765](https://github.com/scalameta/metals/pull/3765)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update mill-contrib-testng to 0.10.2\\n [\\\\#3775](https://github.com/scalameta/metals/pull/3775)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.2\\n [\\\\#3779](https://github.com/scalameta/metals/pull/3779)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.9\\n [\\\\#3777](https://github.com/scalameta/metals/pull/3777)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.13-55-1fc97fae\\n [\\\\#3774](https://github.com/scalameta/metals/pull/3774)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.3\\n [\\\\#3776](https://github.com/scalameta/metals/pull/3776)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.5\\n [\\\\#3778](https://github.com/scalameta/metals/pull/3778)\\n ([scala-steward](https://github.com/scala-steward))\\n- feat: add java version and Metals version to doctor\\n [\\\\#3772](https://github.com/scalameta/metals/pull/3772)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: nightly script\\n [\\\\#3773](https://github.com/scalameta/metals/pull/3773)\\n ([dos65](https://github.com/dos65))\\n- fix: munit test discovery when there is no package\\n [\\\\#3770](https://github.com/scalameta/metals/pull/3770)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: do not call `doctor.check()` on each build target compilation end\\n [\\\\#3768](https://github.com/scalameta/metals/pull/3768)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- chore: reduce size of build.sbt\\n [\\\\#3759](https://github.com/scalameta/metals/pull/3759)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- scala3 - exclude 3.2.0-NIGHTLY and align tests cases\\n [\\\\#3767](https://github.com/scalameta/metals/pull/3767)\\n ([dos65](https://github.com/dos65))\\n- chore: enable `-Wunused`\\n [\\\\#3760](https://github.com/scalameta/metals/pull/3760)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix issues with non alpha numeric build target names\\n [\\\\#3756](https://github.com/scalameta/metals/pull/3756)\\n ([tgodzik](https://github.com/tgodzik))\\n- Introduce uses of buildTarget/inverseSources\\n [\\\\#3752](https://github.com/scalameta/metals/pull/3752)\\n ([Duhemm](https://github.com/Duhemm))\\n- add navigation from doctor to build target\\n [\\\\#3763](https://github.com/scalameta/metals/pull/3763)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- feat: add better munit support to the Test Explorer\\n [\\\\#3742](https://github.com/scalameta/metals/pull/3742)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- dep: bump release candidate version to 3.1.2-RC3\\n [\\\\#3753](https://github.com/scalameta/metals/pull/3753)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: specify groups for new test suites\\n [\\\\#3749](https://github.com/scalameta/metals/pull/3749)\\n ([dos65](https://github.com/dos65))\\n- fix: create `new scala file` with a single NL\\n [\\\\#3745](https://github.com/scalameta/metals/pull/3745)\\n ([dos65](https://github.com/dos65))\\n- Show better unapply signature help\\n [\\\\#3738](https://github.com/scalameta/metals/pull/3738)\\n ([tgodzik](https://github.com/tgodzik))\\n- support for creating companion objects\\n [\\\\#3709](https://github.com/scalameta/metals/pull/3709)\\n ([zmerr](https://github.com/zmerr))\\n- fix: return an error when trying to decode tasty in Scala 2\\n [\\\\#3739](https://github.com/scalameta/metals/pull/3739)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor Ammonite support\u2026\\n [\\\\#3550](https://github.com/scalameta/metals/pull/3550)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- fix: don\'t discover already discovered tests\\n [\\\\#3737](https://github.com/scalameta/metals/pull/3737)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: typo in workflow script\\n [\\\\#3735](https://github.com/scalameta/metals/pull/3735)\\n ([dos65](https://github.com/dos65))\\n- fix: do not fail nightly check job if there are no new releases\\n [\\\\#3734](https://github.com/scalameta/metals/pull/3734)\\n ([dos65](https://github.com/dos65))\\n- feat: add more feedback to user when starting a debug session\\n [\\\\#3731](https://github.com/scalameta/metals/pull/3731)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove jackson since it\'s no used in the code\\n [\\\\#3733](https://github.com/scalameta/metals/pull/3733)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prefer Scala 2.13 version over older versions\\n [\\\\#3728](https://github.com/scalameta/metals/pull/3728)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: small update to contributing docs\\n [\\\\#3732](https://github.com/scalameta/metals/pull/3732)\\n ([ckipp01](https://github.com/ckipp01))\\n- bump: bloop\\n [\\\\#3729](https://github.com/scalameta/metals/pull/3729)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- feat: implement test selection request for sbt\\n [\\\\#3678](https://github.com/scalameta/metals/pull/3678)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Warn users properly when wrong release flag was used\\n [\\\\#3703](https://github.com/scalameta/metals/pull/3703)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix(doctor): ensure compilationStatus is in the json payload\\n [\\\\#3725](https://github.com/scalameta/metals/pull/3725)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add `generated` info to `Source Directories `section of `Display build target info`\\n [\\\\#3720](https://github.com/scalameta/metals/pull/3720)\\n ([tanishiking](https://github.com/tanishiking))\\n- fix: ensure user gets warned of workspace error when running with lens\\n [\\\\#3723](https://github.com/scalameta/metals/pull/3723)\\n ([ckipp01](https://github.com/ckipp01))\\n- feat: add compilation status to the doctor\\n [\\\\#3710](https://github.com/scalameta/metals/pull/3710)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump Bloop to the newest version with updated Zinc\\n [\\\\#3706](https://github.com/scalameta/metals/pull/3706)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: Ensure the \\"no run or test\\" message is shown to user.\\n [\\\\#3721](https://github.com/scalameta/metals/pull/3721)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mill-contrib-testng to 0.10.1\\n [\\\\#3714](https://github.com/scalameta/metals/pull/3714)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.2\\n [\\\\#3715](https://github.com/scalameta/metals/pull/3715)\\n ([scala-steward](https://github.com/scala-steward))\\n- Exclude generated source items from FileWatcher (sbt BSP)\\n [\\\\#3694](https://github.com/scalameta/metals/pull/3694)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update flyway-core to 8.5.3\\n [\\\\#3717](https://github.com/scalameta/metals/pull/3717)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.8.2\\n [\\\\#3716](https://github.com/scalameta/metals/pull/3716)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fallback to current file contents always\\n [\\\\#3711](https://github.com/scalameta/metals/pull/3711)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move gabro to \\"past maintainers\\" in README\\n [\\\\#3708](https://github.com/scalameta/metals/pull/3708)\\n ([gabro](https://github.com/gabro))\\n- refactor: use \\"using\\" instead of \\"implicit\\" in Scala 3 signature help.\\n [\\\\#3707](https://github.com/scalameta/metals/pull/3707)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: scala3 completion - fix isses with code indented using tabs\\n [\\\\#3702](https://github.com/scalameta/metals/pull/3702)\\n ([dos65](https://github.com/dos65))\\n- fix: add test case for #3625\\n [\\\\#3704](https://github.com/scalameta/metals/pull/3704)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix completions on dot in expression evaluator\\n [\\\\#3705](https://github.com/scalameta/metals/pull/3705)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with Bloop snapshot versions\\n [\\\\#3699](https://github.com/scalameta/metals/pull/3699)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not decode every URI when invoking `toAbsolutePath`\\n [\\\\#3701](https://github.com/scalameta/metals/pull/3701)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: make release instruction more structured\\n [\\\\#3700](https://github.com/scalameta/metals/pull/3700)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix DefinitionCrossLspSuite\\n [\\\\#3692](https://github.com/scalameta/metals/pull/3692)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(docs): get snapshot version for docs from 2.13 now\\n [\\\\#3693](https://github.com/scalameta/metals/pull/3693)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump release candidate version to 3.1.2-RC2\\n [\\\\#3697](https://github.com/scalameta/metals/pull/3697)\\n ([tgodzik](https://github.com/tgodzik))\\n- ci: update Metals version in mtags release workflow\\n [\\\\#3695](https://github.com/scalameta/metals/pull/3695)\\n ([dos65](https://github.com/dos65))\\n- fix: adjust tests for 3.2.0-NIGHTLY\\n [\\\\#3687](https://github.com/scalameta/metals/pull/3687)\\n ([dos65](https://github.com/dos65))\\n- Fix named arg completion when parameter contains $\\n [\\\\#3686](https://github.com/scalameta/metals/pull/3686)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix flaky WorkspaceSymbolLspSuite test\\n [\\\\#3691](https://github.com/scalameta/metals/pull/3691)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: migrate Metals to 2.13\\n [\\\\#3631](https://github.com/scalameta/metals/pull/3631)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: add release notes\\n [\\\\#3682](https://github.com/scalameta/metals/pull/3682)\\n ([kpodsiad](https://github.com/kpodsiad))"},{"id":"/2022/03/08/aluminium","metadata":{"permalink":"/metals/blog/2022/03/08/aluminium","source":"@site/blog/2022-03-08-aluminium.md","title":"Metals v0.11.2 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.2, which focuses on improving overall user experience.","date":"2022-03-08T00:00:00.000Z","formattedDate":"March 8, 2022","tags":[],"readingTime":8.285,"hasTruncateMarker":false,"authors":[{"name":"Kamil Podsiadlo","url":"https://twitter.com/podsiadel","imageURL":"https://github.com/kpodsiad.png"}],"frontMatter":{"author":"Kamil Podsiadlo","title":"Metals v0.11.2 - Aluminium","authorURL":"https://twitter.com/podsiadel","authorImageURL":"https://github.com/kpodsiad.png"},"prevItem":{"title":"Metals v0.11.3 - Aluminium","permalink":"/metals/blog/2022/04/26/aluminium"},"nextItem":{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"}},"content":"We\'re happy to announce the release of Metals v0.11.2, which focuses on improving overall user experience.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
Commits since last release197
Merged PRs94
Contributors11
Closed issues19
New features7
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs and\\nSublime Text. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Reduce indexing time in monorepos on MacOS\\n- Display build target info\\n- View source jar files as virtual docs\\n- Improve completions for Scala 3\\n- [Test Explorer] Detect and run single tests for JUnit4\\n\\n## Reduce indexing time in monorepos on MacOS\\n\\nThanks to changes made by [Duhemm](https://github.com/Duhemm), Metals on MacOS can now index monorepo workspaces much faster than before. After changes, we observed at times **over 10 times faster** indexing times in the workspaces where only a few submodules needed to be imported.\\n\\nHere are a few examples of indexing improvement. They are not actual benchmarks of any kind, but more of rough estimations of improvements in a couple of example repos.\\n\\n| Before | After |\\n| ----------- | ---------- |\\n| \\\\>10minutes | ~30seconds |\\n| ~40seconds | ~4s |\\n\\nHowever, take into mind that indexing speedup heavily depends on your repository structure. The more imported modules which don\'t need to be imported, the greater the speed improvement is.\\n\\nIf you are interested in details you can check out the related [pull request](https://github.com/scalameta/metals/pull/3665).\\n\\n## Display build target info\\n\\nThanks to the [Arthurm1](https://github.com/Arthurm1) Metals is now able to display all important information about modules.\\nThis brand new feature gathers in one view information such as:\\n\\n- javac and scalac options\\n- dependent modules\\n- projects classpath\\n- and many more\\n\\n![display-build-target-info](https://i.imgur.com/XGyJEsl.gif)\\n\\n## [vscode] View source jar files as virtual docs\\n\\nPreviously, when the client wanted to browse files in source jars source, these files were extracted and saved in the `metals/readonly/dependencies` directory. With the help of [virtual documents](https://code.visualstudio.com/api/extension-guides/virtual-documents) Metals can show you dependencies in readonly files without unnecessary copying.\\nThanks [Arthurm1](https://github.com/Arthurm1) for this feature!\\n\\nTogether with Metals tab, this feature could be used to browse through your dependencies\' sources. Just run the `Metals: Reveal Active File in Side Bar` command and browse through both dependencies and source code seamlessly.\\n\\n![virtual-docs-navigation](https://imgur.com/HsuW8Hn.gif)\\n\\nCurrently, `Metals: Reveal Active File in Side Bar` works only for Scala 2.\\n\\n## Improve completions for Scala 3\\n\\nCompletion suggestions for different Scala keywords now work with most of the Scala 3 keywords. This includes for example `given` and `enum`, it should also work even if defining things in toplevel without a wrapping class or object.\\n![keyword-completions](https://i.imgur.com/4BUxCDK.gif)\\n\\nAnother improvement for Scala 3 completions is better support for showing scope completions, when writing in an empty line. Previously, we would not show correct completions when no identifier was specified.\\n\\n```scala\\nobject Foo:\\n def bar: Int = 42\\n def baz: Int =\\n val x = 1\\n val y = 2\\n @@\\n```\\n\\nIn the above situation with cursor position indicated by `@@` we will now properly show `bar` and `baz` completions.\\n\\n## [Test Explorer] Detect and run single tests for JUnit4\\n\\nWe\'re actively working on improving the Test Explorer and making it better with each release.\\nFrom this release, Metals is able to run or debug single test in JUnit4.\\n\\nCurrently, this feature **only works when using Bloop as your build server**, but in a future release there will be support added for sbt as well.\\n\\n![test-explorer-single-tests](https://imgur.com/FbgSTGr.gif)\\n\\n## [vscode] Add mirror setting to help coursier set up\\n\\nIn order to bootstrap Metals, vscode\'s extension uses the coursier script which needs access to `repo1.maven.org`. Previously, this URL couldn\'t be configured which was causing problems on the machines that didn\'t have access to repo1.maven.org.\\n\\nThanks to [tgodzik](https://github.com/tgodzik)\'s work from now on it\'s possible to define `metals.coursierMirror` property.\\n\\n![coursier-mirror](https://imgur.com/iLB079M.png)\\n\\nMore information about mirrors can be found at [coursier documentation](https://get-coursier.io/blog/#mirrors).\\n\\n## Miscellaneous\\n\\n- Show implicit decorations in worksheets\\n [\\\\#3582](https://github.com/scalameta/metals/pull/3582)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add current env variables to bloopInstall\\n [\\\\#3662](https://github.com/scalameta/metals/pull/3662)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with Ammonite multistage scripts\\n [\\\\#3627](https://github.com/scalameta/metals/pull/3627)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print information about candidates searched when missing JDK sources\\n [\\\\#3606](https://github.com/scalameta/metals/pull/3606)\\n ([tgodzik](https://github.com/tgodzik))\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.1..v0.11.2\\n 37\\tTomasz Godzik\\n 24\\tVadim Chelyshov\\n 22\\tScala Steward\\n 15\\tArthur McGibbon\\n 8\\tKamil Podsiadlo\\n 7\\tckipp01\\n 6\\tKamil Podsiad\u0142o\\n 1\\tMartin Duhem\\n 1\\tAdrien Piquerez\\n 1\\tJerome Wuerf\\n 1\\tHugo van Rijswijk\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.2](https://github.com/scalameta/metals/tree/v0.11.2) (2022-03-08)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.1...v0.11.2)\\n\\n**Merged pull requests:**\\n\\n- Go to definition of synthetic symbols.\\n [\\\\#3683](https://github.com/scalameta/metals/pull/3683)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t watch entire workspace on MacOS\\n [\\\\#3665](https://github.com/scalameta/metals/pull/3665)\\n ([Duhemm](https://github.com/Duhemm))\\n- fix: Add test case for topelevel tuple hover\\n [\\\\#3676](https://github.com/scalameta/metals/pull/3676)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala3 PC refactorings\\n [\\\\#3651](https://github.com/scalameta/metals/pull/3651)\\n ([dos65](https://github.com/dos65))\\n- fix: Add tests for Scala 3 toplevel enums\\n [\\\\#3674](https://github.com/scalameta/metals/pull/3674)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore: fix flaky test provider suite\\n [\\\\#3673](https://github.com/scalameta/metals/pull/3673)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scribe, scribe-file, scribe-slf4j to 3.8.0\\n [\\\\#3669](https://github.com/scalameta/metals/pull/3669)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.3.1\\n [\\\\#3672](https://github.com/scalameta/metals/pull/3672)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.1\\n [\\\\#3671](https://github.com/scalameta/metals/pull/3671)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-buildinfo to 0.11.0\\n [\\\\#3667](https://github.com/scalameta/metals/pull/3667)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 31.1-jre\\n [\\\\#3668](https://github.com/scalameta/metals/pull/3668)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.5.1\\n [\\\\#3670](https://github.com/scalameta/metals/pull/3670)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix: Add test case when using Left class and Scala 3\\n [\\\\#3666](https://github.com/scalameta/metals/pull/3666)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change hashing to lastModified\\n [\\\\#3611](https://github.com/scalameta/metals/pull/3611)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to 1.4.13\\n [\\\\#3664](https://github.com/scalameta/metals/pull/3664)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with nightlies tests\\n [\\\\#3663](https://github.com/scalameta/metals/pull/3663)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: do not show test explorer related error for client which don\'t implement it\\n [\\\\#3661](https://github.com/scalameta/metals/pull/3661)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add current env variables to bloopInstall\\n [\\\\#3662](https://github.com/scalameta/metals/pull/3662)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: add a post about release-related changes\\n [\\\\#3653](https://github.com/scalameta/metals/pull/3653)\\n ([dos65](https://github.com/dos65))\\n- fix: support Scala 2.11 PC on jdk higher than 8\\n [\\\\#3658](https://github.com/scalameta/metals/pull/3658)\\n ([dos65](https://github.com/dos65))\\n- feat: allow running single test\\n [\\\\#3619](https://github.com/scalameta/metals/pull/3619)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump scalameta to 4.5.0\\n [\\\\#3652](https://github.com/scalameta/metals/pull/3652)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change displayBuildTarget to listBuildTargets\\n [\\\\#3649](https://github.com/scalameta/metals/pull/3649)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Fix issues in tests for Scala 3 Nightlies\\n [\\\\#3650](https://github.com/scalameta/metals/pull/3650)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: release workflow - prevent parallel publishing to sonatype\\n [\\\\#3644](https://github.com/scalameta/metals/pull/3644)\\n ([dos65](https://github.com/dos65))\\n- Cancel PRs automatically if new commits are pushed\\n [\\\\#3646](https://github.com/scalameta/metals/pull/3646)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: check scala3 nigtly - exclude existing latest\\n [\\\\#3645](https://github.com/scalameta/metals/pull/3645)\\n ([dos65](https://github.com/dos65))\\n- Scala3 emptyline completions\\n [\\\\#3629](https://github.com/scalameta/metals/pull/3629)\\n ([dos65](https://github.com/dos65))\\n- Update millw to 0.4.2\\n [\\\\#3641](https://github.com/scalameta/metals/pull/3641)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: actions, discover new scala3 nigtly properly\\n [\\\\#3640](https://github.com/scalameta/metals/pull/3640)\\n ([dos65](https://github.com/dos65))\\n- Fix FileDecoderProviderLspSuite to work locally\\n [\\\\#3639](https://github.com/scalameta/metals/pull/3639)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scribe, scribe-file, scribe-slf4j to 3.7.1\\n [\\\\#3634](https://github.com/scalameta/metals/pull/3634)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix showing virtual docs in jars with paths that need escaping\\n [\\\\#3632](https://github.com/scalameta/metals/pull/3632)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update undertow-core to 2.2.16.Final\\n [\\\\#3635](https://github.com/scalameta/metals/pull/3635)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.4\\n [\\\\#3636](https://github.com/scalameta/metals/pull/3636)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.5.2\\n [\\\\#3633](https://github.com/scalameta/metals/pull/3633)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.6.2\\n [\\\\#3638](https://github.com/scalameta/metals/pull/3638)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.6.Final\\n [\\\\#3637](https://github.com/scalameta/metals/pull/3637)\\n ([scala-steward](https://github.com/scala-steward))\\n- Index non-scala target dependency sources\\n [\\\\#3628](https://github.com/scalameta/metals/pull/3628)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Fix issues with Ammonite multistage scripts\\n [\\\\#3627](https://github.com/scalameta/metals/pull/3627)\\n ([tgodzik](https://github.com/tgodzik))\\n- View source jar files as virtual docs\\n [\\\\#3143](https://github.com/scalameta/metals/pull/3143)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Bump debug-adapter to 2.0.13\\n [\\\\#3626](https://github.com/scalameta/metals/pull/3626)\\n ([adpi2](https://github.com/adpi2))\\n- docs: provide latest versions\\n [\\\\#3618](https://github.com/scalameta/metals/pull/3618)\\n ([dos65](https://github.com/dos65))\\n- docs: describe how to add new Scala version support to the existing release\\n [\\\\#3617](https://github.com/scalameta/metals/pull/3617)\\n ([dos65](https://github.com/dos65))\\n- feat, refactor: use notification to send test updates\\n [\\\\#3554](https://github.com/scalameta/metals/pull/3554)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Display build target info\\n [\\\\#3380](https://github.com/scalameta/metals/pull/3380)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- scalafmt - newlines.inInterpolation = avoid\\n [\\\\#3614](https://github.com/scalameta/metals/pull/3614)\\n ([dos65](https://github.com/dos65))\\n- refactor: [Scala 3] Extract hover to a separate file\\n [\\\\#3613](https://github.com/scalameta/metals/pull/3613)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(fmt): bump scalafmt to 3.4.0\\n [\\\\#3610](https://github.com/scalameta/metals/pull/3610)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: compare long numbers in TVP\\n [\\\\#3607](https://github.com/scalameta/metals/pull/3607)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scribe to 3.6.10\\n [\\\\#3598](https://github.com/scalameta/metals/pull/3598)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ignore UncheckedIOException coming from broken source jars\\n [\\\\#3609](https://github.com/scalameta/metals/pull/3609)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print information about candidates searched when missing JDK sources\\n [\\\\#3606](https://github.com/scalameta/metals/pull/3606)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat: add range to symbol definition\\n [\\\\#3605](https://github.com/scalameta/metals/pull/3605)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Revert to Mdoc 2.2.24 for Scala 2.11\\n [\\\\#3601](https://github.com/scalameta/metals/pull/3601)\\n ([tgodzik](https://github.com/tgodzik))\\n- chore(ci): update setup-action\\n [\\\\#3603](https://github.com/scalameta/metals/pull/3603)\\n ([ckipp01](https://github.com/ckipp01))\\n- Migrate to the newest H2 version\\n [\\\\#3595](https://github.com/scalameta/metals/pull/3595)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: `SemanticdbFeatureProvider` trait\\n [\\\\#3602](https://github.com/scalameta/metals/pull/3602)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Do not insert inferred type on variable bound to another\\n [\\\\#3600](https://github.com/scalameta/metals/pull/3600)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show implicit decorations in worksheets\\n [\\\\#3582](https://github.com/scalameta/metals/pull/3582)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.33\\n [\\\\#3592](https://github.com/scalameta/metals/pull/3592)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.3.0\\n [\\\\#3591](https://github.com/scalameta/metals/pull/3591)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.3\\n [\\\\#3590](https://github.com/scalameta/metals/pull/3590)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.5.0\\n [\\\\#3588](https://github.com/scalameta/metals/pull/3588)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.7.1\\n [\\\\#3587](https://github.com/scalameta/metals/pull/3587)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.10.0\\n [\\\\#3585](https://github.com/scalameta/metals/pull/3585)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix goto definition for local synthetics\\n [\\\\#3580](https://github.com/scalameta/metals/pull/3580)\\n ([tgodzik](https://github.com/tgodzik))\\n- minor: remove non-relevant things\\n [\\\\#3564](https://github.com/scalameta/metals/pull/3564)\\n ([dos65](https://github.com/dos65))\\n- Make sure we only analyze stacktrace lines that do look the part\\n [\\\\#3578](https://github.com/scalameta/metals/pull/3578)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs(ammonite): add note about ammonite support\\n [\\\\#3579](https://github.com/scalameta/metals/pull/3579)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t focus diagnotics if compialtion returned with error\\n [\\\\#3577](https://github.com/scalameta/metals/pull/3577)\\n ([tgodzik](https://github.com/tgodzik))\\n- Pass -Xsource:3 to scalafix organize-imports action if present\\n [\\\\#3574](https://github.com/scalameta/metals/pull/3574)\\n ([hugo-vrijswijk](https://github.com/hugo-vrijswijk))\\n- Insert missing comma\\n [\\\\#3573](https://github.com/scalameta/metals/pull/3573)\\n ([ossScharom](https://github.com/ossScharom))\\n- cleanup: remove unused stuff from CompilerInterfaces\\n [\\\\#3572](https://github.com/scalameta/metals/pull/3572)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: add possibility to define callback for `BatchedFunction`\\n [\\\\#3571](https://github.com/scalameta/metals/pull/3571)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- fix: Open other window when using Analyze Stacktrace\\n [\\\\#3540](https://github.com/scalameta/metals/pull/3540)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: Add support for Scala 3.1.2-RC1\\n [\\\\#3569](https://github.com/scalameta/metals/pull/3569)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: [Scala 3] Show exact literal type\\n [\\\\#3567](https://github.com/scalameta/metals/pull/3567)\\n ([tgodzik](https://github.com/tgodzik))\\n- feature: [Scala 3] Add keyword completions\\n [\\\\#3560](https://github.com/scalameta/metals/pull/3560)\\n ([tgodzik](https://github.com/tgodzik))\\n- release: fix last 5 nigtly version selection\\n [\\\\#3558](https://github.com/scalameta/metals/pull/3558)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.1.1\\n [\\\\#3555](https://github.com/scalameta/metals/pull/3555)\\n ([tgodzik](https://github.com/tgodzik))\\n- actions: mtags release adjustments\\n [\\\\#3557](https://github.com/scalameta/metals/pull/3557)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Mtags publishing - move all logic to ci-script\\n [\\\\#3553](https://github.com/scalameta/metals/pull/3553)\\n ([dos65](https://github.com/dos65))\\n- docs: mention about pre-release version of Metals extension\\n [\\\\#3552](https://github.com/scalameta/metals/pull/3552)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Actions] Mtags release\\n [\\\\#3551](https://github.com/scalameta/metals/pull/3551)\\n ([dos65](https://github.com/dos65))\\n- docs: Add docs for discover-test-suites\\n [\\\\#3546](https://github.com/scalameta/metals/pull/3546)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: add a small note about decode not working on extra file types.\\n [\\\\#3549](https://github.com/scalameta/metals/pull/3549)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Actions] Scala3 Nightly check - yet another fix\\n [\\\\#3548](https://github.com/scalameta/metals/pull/3548)\\n ([dos65](https://github.com/dos65))\\n- [Actions] One more fix to check_scala3_nightly job\\n [\\\\#3547](https://github.com/scalameta/metals/pull/3547)\\n ([dos65](https://github.com/dos65))\\n- Compare only uppercase MD5\\n [\\\\#3545](https://github.com/scalameta/metals/pull/3545)\\n ([tgodzik](https://github.com/tgodzik))\\n- [JavaInteractiveSemanticdb] Add test-case to cover --patch-module flag usage\\n [\\\\#3538](https://github.com/scalameta/metals/pull/3538)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Install coursier for nightly checks\\n [\\\\#3543](https://github.com/scalameta/metals/pull/3543)\\n ([dos65](https://github.com/dos65))\\n- refactor: check lowercase test-user-interface\\n [\\\\#3544](https://github.com/scalameta/metals/pull/3544)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Actions] Trigger Scala3-nightly mtags publishing automatically\\n [\\\\#3541](https://github.com/scalameta/metals/pull/3541)\\n ([dos65](https://github.com/dos65))\\n- Add release notes for 0.11.1\\n [\\\\#3524](https://github.com/scalameta/metals/pull/3524)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/02/23/towards-better-releases","metadata":{"permalink":"/metals/blog/2022/02/23/towards-better-releases","source":"@site/blog/2022-02-23-towards-better-releases.md","title":"Towards better releases","description":"As many of you might have noticed, the previous 0.11.0 release didn\'t go smoothly due to a number of issues that came to light only after the release was published.","date":"2022-02-23T00:00:00.000Z","formattedDate":"February 23, 2022","tags":[],"readingTime":2.915,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Towards better releases","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.11.2 - Aluminium","permalink":"/metals/blog/2022/03/08/aluminium"},"nextItem":{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"}},"content":"As many of you might have noticed, the previous `0.11.0` release didn\'t go smoothly due to a number of issues that came to light only after the release was published.\\nSome of them were quite critical and the only option to continue to work was to downgrade Metals until `0.11.1` arrived.\\n\\nWe apologize for that!\\n\\nHowever, this post is not only about saying sorry.\\nIn order to avoid such situations in the future we have taken it upon ourselves to take steps that will allow us to detect issues earlier.\\n\\nThere were two main improvements that were implemented since the last release:\\n- Decouple Metals releases from Scala releases\\n- Pre-release version for VSCode extension\\n\\n## Decouple Metals releases from Scala releases\\n\\nWe haven\'t mentioned this in the release notes for `0.11.0`, but since that version we have changed the way Metals detects whether a specific version is supported and thanks to that we are now able to backpublish new Scala versions support.\\nThe support of Scala `3.1.1` Scala was added to Metals `0.11.1` using this new mechanism.\\nIt allows us to provide new Scala version support much faster than before and also support Scala3-NIGTHTLY versions.\\n\\nThe additional benefit from this approach is that it eliminates time pressure for future Metals releases.\\nIf you look at the release notes for previous versions, almost every one brings at least one new compiler version support.\\nHaving this limitation and the need to provide the new release as soon as possible always increases the chances of something affecting the release. So, now with this new feature we are able to take our time for final fixes and do releases with more confidence.\\n\\nThe current state for Scala versions support is:\\n- Every Metals release comes with support to all known supported Scala versions + last 5 latest Scala3-NIGHTLY versions.\\n This is applied to SNAPSHOT releases too.\\n- In case a new Scala version appear, the latest Metals release will receive its support automatically.\\n For example, the next Scala `3.1.2` will be supported only by the latest Metals `0.11.1` but not by `0.11.0`.\\n That works for Scala3-NIGHTLY versions too. Metals has a scheduled daily job that publishes artifacts for newly discovered NIGHTLY versions.\\n\\n\\n## Pre-release version for VSCode extension\\n\\nAnother great feature that was added was the possibility to use the `pre-release` versions of the Metals extension.\\nIf you open the Metals extension page, you will find a `Switch to Pre-release version` button.\\nThis version is like a snapshot, it\'s published for every change in the [scalameta/metals-vscode](https://github.com/scalameta/metals-vscode) repository.\\n\\nIt allows to test not yet released features, as well as to check if everything works fine for your workspace using the latest main branch. \\nSome issues might be observed only under the particular version of the client as was the case with the ill fated 0.11.0 release.\\n\\nAlso, there is a new setting `Metals: Suggest Latest Upgrade` that is enabled by default for `pre-release`.\\nIf you have it enabled, you will receive notifications with an option to upgrade Metals server version to the latest snapshot once a day.\\n\\nWe hope that some brave users will start using this `pre-release` version and report issues if you encounter any.\\nThis will help us spot problems earlier.\\n\\n_Notice_:\\nUsing pre-release versions may result in a less stable experience.\\nIn case of issues, if you are switching back from `pre-release` to `release` you also need to downgrade `Metals: Server Version` manually. The actual version might be found at [docs page](https://scalameta.org/metals/docs/#latest-metals-server-versions) or [latest.json](https://scalameta.org/metals/latests.json)"},{"id":"/2022/01/17/aluminium","metadata":{"permalink":"/metals/blog/2022/01/17/aluminium","source":"@site/blog/2022-01-17-aluminium.md","title":"Metals v0.11.1 - Aluminium","description":"Metals v0.11.1 is a bugfix release needed to fix a couple of performance","date":"2022-01-17T00:00:00.000Z","formattedDate":"January 17, 2022","tags":[],"readingTime":1.955,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.1 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Towards better releases","permalink":"/metals/blog/2022/02/23/towards-better-releases"},"nextItem":{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"}},"content":"Metals v0.11.1 is a bugfix release needed to fix a couple of performance\\nregressions caused by some of the recent changes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release43
Merged PRs21
Contributors6
Closed issues3
New features0
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/46?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Reenabled test explorer as the default in Visual Studio Code (thanks\\n [kpodsiad](https://github.com/kpodsiad) for the quick fix!)\\n\\n## Miscellaneous\\n\\n- Fix test explorer performance issues. [kpodsiad](https://github.com/kpodsiad)\\n- Fix performance in large files. [tgodzik](https://github.com/tgodzik)\\n- fix user config for java formatting. [Arthurm1](https://github.com/Arthurm1)\\n- Call javap with `-private` flag. [durban](https://github.com/durban)\\n- Fix issues when using Metals analyze with inner classes. [durban](https://github.com/durban)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.11.0..v0.11.1\\nScala Steward\\nTomasz Godzik\\nKamil Podsiadlo\\nVadim Chelyshov\\nArthur McGibbon\\nDaniel Urban\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.1](https://github.com/scalameta/metals/tree/v0.11.1) (2022-01-17)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.11.0...v0.11.1)\\n\\n**Merged pull requests:**\\n\\n- Revert scribe update [\\\\#3529](https://github.com/scalameta/metals/pull/3529)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: Print path for which snapshot couldn\'t be loaded\\n [\\\\#3525](https://github.com/scalameta/metals/pull/3525)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- docs: Test Explorer [\\\\#3528](https://github.com/scalameta/metals/pull/3528)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix ClassFinder bug with inner classes\\n [\\\\#3522](https://github.com/scalameta/metals/pull/3522)\\n ([durban](https://github.com/durban))\\n- Call javap with -private flag\\n [\\\\#3523](https://github.com/scalameta/metals/pull/3523)\\n ([durban](https://github.com/durban))\\n- Update ammonite-util to 2.5.1\\n [\\\\#3516](https://github.com/scalameta/metals/pull/3516)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix test explorer performance issues\\n [\\\\#3510](https://github.com/scalameta/metals/pull/3510)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafix-interfaces to 0.9.34\\n [\\\\#3521](https://github.com/scalameta/metals/pull/3521)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.4.1\\n [\\\\#3520](https://github.com/scalameta/metals/pull/3520)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.9\\n [\\\\#3519](https://github.com/scalameta/metals/pull/3519)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.4 [\\\\#3518](https://github.com/scalameta/metals/pull/3518)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.0\\n [\\\\#3517](https://github.com/scalameta/metals/pull/3517)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.16\\n [\\\\#3514](https://github.com/scalameta/metals/pull/3514)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.34\\n [\\\\#3513](https://github.com/scalameta/metals/pull/3513)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use ArraySeq instead of List for Diffutils\\n [\\\\#3512](https://github.com/scalameta/metals/pull/3512)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix user config for java formatting\\n [\\\\#3504](https://github.com/scalameta/metals/pull/3504)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- [JavaInteractiveSemanticdb] Fix Jdk version parsing\\n [\\\\#3505](https://github.com/scalameta/metals/pull/3505)\\n ([dos65](https://github.com/dos65))\\n- JavaInteractiveSemanticDb - plugin version fix\\n [\\\\#3499](https://github.com/scalameta/metals/pull/3499)\\n ([dos65](https://github.com/dos65))\\n- [Github] switch to the latest release in bug reports and workflows\\n [\\\\#3502](https://github.com/scalameta/metals/pull/3502)\\n ([dos65](https://github.com/dos65))\\n- Add release notes for Metals 0.11.0\\n [\\\\#3493](https://github.com/scalameta/metals/pull/3493)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove workaround for the wrong Java semanticdb md5 hash\\n [\\\\#3498](https://github.com/scalameta/metals/pull/3498)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2022/01/12/aluminium","metadata":{"permalink":"/metals/blog/2022/01/12/aluminium","source":"@site/blog/2022-01-12-aluminium.md","title":"Metals v0.11.0 - Aluminium","description":"We\'re happy to announce the release of Metals v0.11.0! Due to the number of","date":"2022-01-12T00:00:00.000Z","formattedDate":"January 12, 2022","tags":[],"readingTime":15.19,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.11.0 - Aluminium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.1 - Aluminium","permalink":"/metals/blog/2022/01/17/aluminium"},"nextItem":{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.11.0! Due to the number of\\nchanges in this release we decided to introduce one more minor version before\\nMetals 1.0.0, which is planned to come this year.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release337
Merged PRs136
Contributors11
Closed issues42
New features11
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/45?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add CFR class file viewer.\\n- [Scala 3] Type annotations on code selection.\\n- Simplify usage of sbt server.\\n- Better support for mill BSP.\\n- Extract value code action.\\n- Add command to run current file.\\n- Support test explorer API.\\n- Add go to definition via links for synthetic decorations.\\n- Basic Java support.\\n- Add support for Scala 2.13.8.\\n- Reworked Metals Doctor.\\n\\n## Add CFR class file viewer\\n\\nIn addition to the recently added semanticdb, tasty and javap functionalities,\\nthanks to the efforts of [Arthurm1](https://github.com/Arthurm1), it\'s now\\npossible to decompile class files using Lee Benfield\'s\\n[CFR (Class File Reader)](https://www.benf.org/other/cfr/faq.html).\\n\\nCFR decompiles class files to java, which is much more readable than using\\n`javap`.\\n\\n![cfr](https://i.imgur.com/exDFGyT.gif)\\n\\nIn the future this might help in go to definition for jars that do not have a\\ncorresponding source jar, which is what Metals uses today.\\n\\nEditor support: VS Code, nvim-metals, Sublime Text\\n\\n**Extension authors:**\\n\\nThis can be added as a new command for the users to invoke.\\n\\n## [Scala 3] Type annotations on code selection\\n\\nIn one of the last releases\\n[v0.10.8](https://scalameta.org/metals/blog/2021/10/26/tungsten#type-annotations-on-code-selection)\\nwe added the ability to inspect the type of an expression that is currently\\nselected. We are happy to announce that this functionality is now also available\\nfor Scala 3, which is thanks to the continued effort of the team to bring the\\nusers the best Scala 3 experience possible.\\n\\nEditor support: VS Code, nvim-metals, Sublime Text\\n\\n## Simplify usage of sbt server\\n\\nPreviously if you wanted to use sbt as your build server instead of the default\\nBloop you\'d need to ensure a .bsp/sbt.json file existed before you tried to\\nswitch your build server. We originally created the metals.generate-bsp command\\nfor this, but realized this potentially forced extra steps on the user. To make\\nthis simpler, now even if no BSP entry exists for sbt and you attempt to switch\\nyour build server to sbt via the metals.bsp-switch command, we\'ll either use the\\nexisting .bsp/sbt.json file if one exists or automatically generate it (needs at\\nleast sbt 1.4.1) for you and then switch to it.\\n\\nEditor support: All.\\n\\n## Better support for mill BSP\\n\\nRecently [Mill](https://github.com/com-lihaoyi/mill) has complete revamped their\\nBSP implementation allowing for a much better experience for Metals users. Just\\nlike sbt, you can now use the `metals.bsp-switch` command to use Mill as your\\nBSP server (needs at least Mill 0.10.0-M4). Keep in mind that the BSP support in\\nMill is still a work-in-progress. If you are interested in Mill BSP and you\'re a\\nMetals user, feel free to include your input\\n[here](https://github.com/com-lihaoyi/mill/issues/1546) as they are requesting\\nfeedback on improving the experience.\\n\\nEditor support: All.\\n\\n## Extract value code action\\n\\nIn this release we introduce a new code action that allows users to\\nautomatically extract method parameter to a separate value.\\n\\nFor example in a invocation such as:\\n\\n```scala\\n@main\\ndef main(name: String) =\\n println(\\"Hello \\" + name + \\"!\\")\\n```\\n\\nwhen user invokes the new code action they will see:\\n\\n```scala\\n@main\\ndef main(name: String) =\\n val newValue = \\"Hello \\" + name + \\"!\\"\\n println(newValue)\\n```\\n\\nThis should work correctly for both Scala 2 and Scala 3, in which case it will\\ntry to maintain your coding style even if a block is needed.\\n\\nOne important limitation is that this new code action doesn\'t allow extracting\\nlambdas or partial functions, as this has the potential of breaking your code.\\n\\nCurrently, this works only in method parameters and Metals will try to choose\\nthe exact parameter to extract even if there is a number of nested ones. This\\nwill most likely be improved in the future to also be used in other places such\\nas if conditions or to allow users to choose the exact parameter they want to\\nextract.\\n\\nEditor support: All\\n\\n## Add command to run current file\\n\\nBased on the work of [ckipp01](https://github.com/ckipp01) in one of the\\n[previous releases](https://scalameta.org/metals/blog/2021/04/06/tungsten/#smoother-main-and-test-discovery)\\nit\'s now possible to invoke a command to run anything in the current file. This\\nmeans that if we use this new command anything that is located within the\\ncurrently focused file, whether it\'s tests or a main class, will be properly\\ndiscovered and run.\\n\\nIn Visual Studio Code this replaces the previously default config generation and\\nnow if no `launch.json` is specified in the workspace, any file can be run using\\nthe default run command (`F5`).\\n\\nEditor support: Any editor that supports DAP\\n\\n## Support test explorer API.\\n\\nMetals 0.11.0 implements Visual Studio Code\'s Testing API. According to the\\n[documentation](https://code.visualstudio.com/api/extension-guides/testing):\\n\\n_The Testing API allows Visual Studio Code extensions to discover tests in the\\nworkspace and publish results. Users can execute tests in the Test Explorer view\\nand from decorations. With these new APIs, Visual Studio Code supports richer\\ndisplays of outputs and diffs than was previously possible._\\n\\nTest Explorer UI is a new default way to run/debug test suites and replaces Code\\nLenses. The new UI adds a testing view, which shows all test suites declared in\\nproject\'s modules. From this panel it\'s also possible to run/debug test or to\\nnavigate to test\'s definition.\\n\\n![test-explorer](https://i.imgur.com/Z3VtS0O.gif)\\n\\nCode Lenses are still the default in other editors and can be brought back by\\nsetting `\\"metals.testUserInterface\\": \\"Code Lenses\\"`\\n\\nEditor support: Visual Studio Code\\n\\n## Go to definition via links for synthetic decorations.\\n\\nSince\\n[Metals v0.9.6](https://scalameta.org/metals/blog/2020/11/20/lithium/#show-implicit-conversions-and-classes)\\nit\'s possible to show additional information about sythetic code that is being\\ngenerated by the compiler. This includes implicit parameters, classes and\\nconversions. It wasn\'t however possible to find their definitions. This\\nlimitation was mostly due to the lack of proper UI options in different editors.\\n\\nRecently, we\'ve managed to work around it by using command links that can be\\nrendered in the hover and will bring the user to the right definition.\\n\\n![synthetic-def](https://i.imgur.com/YyHVmLX.gif)\\n\\nEditor support: Visual Studio Code, Sublime Text\\n\\n## Basic Java support\\n\\nThanks to the the effort led by [Arthurm1](https://github.com/Arthurm1) Metals\\nnow supports a subset of features for Java files and even Java only build\\ntargets. Currently the biggest missing piece is interactive compiler that would\\nallow us to properly support features such as completions, hover or signature\\nhelp.\\n\\n![java](https://i.imgur.com/SJvLTRL.gif)\\n\\nThis was possible thanks to using the Java semanticdb plugin included in\\n[lsif Java project](https://github.com/sourcegraph/lsif-java) from\\n[sourcegraph](https://about.sourcegraph.com/) and especially the work by\\n[olafurpg](https://github.com/olafurpg).\\n\\nThe support includes:\\n\\n- formatting\\n- code folding\\n- go to definition\\n- references\\n- go to implementation\\n- rename\\n- run/debug code lense for Java main classes\\n\\nThese functionalities will also now work thanks to\\n[dos65](https://github.com/dos65)\'s work in dependency sources.\\n\\nWe are still missing some of the interactive features such as:\\n\\n- hover\\n- completions\\n- signature help\\n- selection range\\n\\nAn important note to make is that, while we still want to support some more\\nfeatures, Metals is not a Java language server, so we will never offer the same\\namount of functionality as the tools and IDEs focused on the Java language.\\nCurrent discussion about the scope of Java support can be found in\\n[this issue](https://github.com/scalameta/metals/issues/3398). Especially, we\\nwill most likely not support any more advanced refactorings or presentation\\ncompiler functions.\\n\\n**Visual Studio Code:** In case you want to use Metals in a Java only workspace\\nit\'s now also possible to start Metals using a new `Start Metals` button in the\\nthe Metals tab. We don\'t want to start Metals as a default in such cases as some\\nother language server might be more suitable.\\n\\nEditor support: All\\n\\n## Reworked Metals Doctor\\n\\nDue to the other changes in this release the Metals Doctor needed to be reworked\\nto better show the different targets that are available in the workspace as well\\nas try to explain a bit better what is supported and why it might not work.\\n\\n![doctor](https://user-images.githubusercontent.com/3807253/147948980-401e3f5a-5130-4f19-b59c-d737d9092208.png)\\n\\nThe `type` column can now have 3 different values `Scala `,\\n`sbt ` or `Java`. We also replaced some of the columnsm which are now:\\n\\n- diagnostics - tells whether and what kind of diagnostics are published by the\\n target.\\n- interactive - tells whether interactive features such as hover or completions\\n are working, this should work for all supported Scala and sbt versions.\\n- semanticdb - explains whther the semanticdb indexes are generated for the\\n target\\n- debugging - tells whether you can run or debug within that target\\n- Java support - in mixed targets this will tell users if the semanticdb indexes\\n are also generated for Java files.\\n\\nYou can always look for explanation of these statuses underneath the table or on\\nthe right in the Recommendation column.\\n\\nEditor support: All\\n\\n**Extension authors:**\\n\\nIf you are using the json output method for the doctor, you will need to modify\\nthe way it\'s displayed according to\\n[this](https://scalameta.org/metals/docs/integrations/new-editor#run-doctor-1).\\n\\n## Miscellaneous\\n\\n- Allow to create trace files for debugging in `.metals` directory.\\n [kpodsiad](https://github.com/kpodsiad)\\n- Fix issues with stale code lens being shown. [dos65](https://github.com/dos65)\\n- Print Bloop logs when connection errored out.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix issues with given imports in organize imports.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix issues with type on selection in Ammonite scipts.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Improve type shown for generics in hover.\\n [dos65](https://github.com/dos65)\\n- [Scala 3] Fix go to defition for givens. [dos65](https://github.com/dos65)\\n- Use Mill `--import` to import bloop when supported.\\n [lolgab](https://github.com/lolgab)\\n- Enable to create file with just package.\\n [kpodsiad](https://github.com/kpodsiad)\\n- Fix Gradle detection when file other than `build.gradle` is at top level.\\n [GavinRay97](https://github.com/GavinRay97)\\n- Use proper dialect and ignore sbt targets when automatically setting up\\n `scalafmt.conf`. [dos65](https://github.com/dos65)\\n- Detect missing src.zip in doctor.\\n [ayoub-benali](https://github.com/ayoub-benali)\\n- Ensure autoimports don\'t break scala-cli directives.\\n [ckipp01](https://github.com/ckipp01)\\n- [Scala 3] Don\'t show error type if it cannot be inferred by the compiler.\\n [tgodzik](https://github.com/tgodzik)\\n- Fix analyze stacktrace when using toplevel methods.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Fix insert type in case of type aliases.\\n [tgodzik](https://github.com/tgodzik)\\n- [Scala 3] Use maybeOwner instead of owner when looking for shortened name.\\n [ckipp01](https://github.com/ckipp01)\\n- [Scala 3] Fix autoimport with prefixes. [dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.9..v0.11.0\\nTomasz Godzik\\nAyoub Benali\\nVadim Chelyshov\\nChris Kipp\\nArthur McGibbon\\nKamil Podsiadlo\\nGavin Ray\\nAdrien Bestel\\nAlexandre Archambault\\nLorenzo Gabriele\\nThomas Lopatic\\n```\\n\\n## Merged PRs\\n\\n## [v0.11.0](https://github.com/scalameta/metals/tree/v0.11.0) (2022-01-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.9...v0.11.0)\\n\\n**Merged pull requests:**\\n\\n- Update Bloop to 1.4.12\\n [\\\\#3497](https://github.com/scalameta/metals/pull/3497)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with renames in Java files\\n [\\\\#3495](https://github.com/scalameta/metals/pull/3495)\\n ([tgodzik](https://github.com/tgodzik))\\n- feat(doctor): add in explanations to the json doctor output\\n [\\\\#3494](https://github.com/scalameta/metals/pull/3494)\\n ([ckipp01](https://github.com/ckipp01))\\n- Upgrade bloop to 1.4.11-51-ac1d788a\\n [\\\\#3492](https://github.com/scalameta/metals/pull/3492)\\n ([dos65](https://github.com/dos65))\\n- Fixed compilation issue\\n [\\\\#3496](https://github.com/scalameta/metals/pull/3496)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Java] Support go-to-definition for `*.java` dependency sources\\n [\\\\#3470](https://github.com/scalameta/metals/pull/3470)\\n ([dos65](https://github.com/dos65))\\n- Add edit distance for Java files\\n [\\\\#3480](https://github.com/scalameta/metals/pull/3480)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show more information in the doctor\\n [\\\\#3426](https://github.com/scalameta/metals/pull/3426)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.13.8\\n [\\\\#3491](https://github.com/scalameta/metals/pull/3491)\\n ([tgodzik](https://github.com/tgodzik))\\n- docs: update user config docs\\n [\\\\#3490](https://github.com/scalameta/metals/pull/3490)\\n ([ckipp01](https://github.com/ckipp01))\\n- fix: override pprint in docs\\n [\\\\#3489](https://github.com/scalameta/metals/pull/3489)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t show warnings for .metals/.tmp files\\n [\\\\#3488](https://github.com/scalameta/metals/pull/3488)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix: Docusaurus Edit URL is broken\\n [\\\\#3487](https://github.com/scalameta/metals/pull/3487)\\n ([abestel](https://github.com/abestel))\\n- parallelize source file indexing\\n [\\\\#3485](https://github.com/scalameta/metals/pull/3485)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Cache build targets [\\\\#3481](https://github.com/scalameta/metals/pull/3481)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- [Scala3] Fix autoimport with prefixes\\n [\\\\#3484](https://github.com/scalameta/metals/pull/3484)\\n ([dos65](https://github.com/dos65))\\n- [Issue Template] Relax requirements\\n [\\\\#3474](https://github.com/scalameta/metals/pull/3474)\\n ([dos65](https://github.com/dos65))\\n- [Build] add CommandSuite to TestGroups\\n [\\\\#3472](https://github.com/scalameta/metals/pull/3472)\\n ([dos65](https://github.com/dos65))\\n- Add folding range for Java using Scanner\\n [\\\\#3468](https://github.com/scalameta/metals/pull/3468)\\n ([tgodzik](https://github.com/tgodzik))\\n- cleanup: remove ./sbt from root of project\\n [\\\\#3471](https://github.com/scalameta/metals/pull/3471)\\n ([ckipp01](https://github.com/ckipp01))\\n- docs: migrate gitter references to Discord\\n [\\\\#3469](https://github.com/scalameta/metals/pull/3469)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: refactor bug_report.md to be a yaml template\\n [\\\\#3467](https://github.com/scalameta/metals/pull/3467)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add tests for java go to implementation\\n [\\\\#3466](https://github.com/scalameta/metals/pull/3466)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: use maybeOwner instead of owner when looking for shortened name\\n [\\\\#3465](https://github.com/scalameta/metals/pull/3465)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Fix insert type in case of type aliases\\n [\\\\#3460](https://github.com/scalameta/metals/pull/3460)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: reuse main annotation logic from code lens in debug provider\\n [\\\\#3463](https://github.com/scalameta/metals/pull/3463)\\n ([ckipp01](https://github.com/ckipp01))\\n- update: update millw and add script for it in the future\\n [\\\\#3457](https://github.com/scalameta/metals/pull/3457)\\n ([ckipp01](https://github.com/ckipp01))\\n- Scala Steward - ignore org.eclipse updates\\n [\\\\#3453](https://github.com/scalameta/metals/pull/3453)\\n ([dos65](https://github.com/dos65))\\n- Update flyway-core to 8.2.3\\n [\\\\#3452](https://github.com/scalameta/metals/pull/3452)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.6\\n [\\\\#3433](https://github.com/scalameta/metals/pull/3433)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.7\\n [\\\\#3432](https://github.com/scalameta/metals/pull/3432)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.10.0-M5\\n [\\\\#3431](https://github.com/scalameta/metals/pull/3431)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-welcome to 0.2.2\\n [\\\\#3429](https://github.com/scalameta/metals/pull/3429)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.13.1\\n [\\\\#3428](https://github.com/scalameta/metals/pull/3428)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.11-30-75fb3441\\n [\\\\#3427](https://github.com/scalameta/metals/pull/3427)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix analyze stacktrace when using toplevel methods\\n [\\\\#3425](https://github.com/scalameta/metals/pull/3425)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Fix issues when type cannot be inferred by the compiler\\n [\\\\#3423](https://github.com/scalameta/metals/pull/3423)\\n ([tgodzik](https://github.com/tgodzik))\\n- refactor: take care of some deprecation warnings\\n [\\\\#3420](https://github.com/scalameta/metals/pull/3420)\\n ([ckipp01](https://github.com/ckipp01))\\n- refactor: small build cleanups\\n [\\\\#3418](https://github.com/scalameta/metals/pull/3418)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issue with imports [\\\\#3417](https://github.com/scalameta/metals/pull/3417)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scalafmt] set proper dialect for sbt-metals\\n [\\\\#3416](https://github.com/scalameta/metals/pull/3416)\\n ([dos65](https://github.com/dos65))\\n- docs: add file ids to the docs for new file commands\\n [\\\\#3415](https://github.com/scalameta/metals/pull/3415)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add run/debug code lense for Java main classes\\n [\\\\#3400](https://github.com/scalameta/metals/pull/3400)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix: ensure autoimports don\'t break scala-cli directives\\n [\\\\#3412](https://github.com/scalameta/metals/pull/3412)\\n ([ckipp01](https://github.com/ckipp01))\\n- dep: update sbt to 1.6.1\\n [\\\\#3413](https://github.com/scalameta/metals/pull/3413)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Mtags releases] Fails command if tag name doesn\'t match any pattern\\n [\\\\#3410](https://github.com/scalameta/metals/pull/3410)\\n ([dos65](https://github.com/dos65))\\n- Detect missing src.zip in doctor\\n [\\\\#3401](https://github.com/scalameta/metals/pull/3401)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Hardcode eclipse java formatter dependencies\\n [\\\\#3406](https://github.com/scalameta/metals/pull/3406)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Upgrade file-tree-views to 2.1.8. See #3379.\\n [\\\\#3405](https://github.com/scalameta/metals/pull/3405)\\n ([uncle-betty](https://github.com/uncle-betty))\\n- [Scalafmt] Fixes for automatic dialect rewrite\\n [\\\\#3394](https://github.com/scalameta/metals/pull/3394)\\n ([dos65](https://github.com/dos65))\\n- Handle Java-only build targets\\n [\\\\#2520](https://github.com/scalameta/metals/pull/2520)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Use quick pick instead of message requests for debug discovery\\n [\\\\#3392](https://github.com/scalameta/metals/pull/3392)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for 3.1.1-RC2\\n [\\\\#3391](https://github.com/scalameta/metals/pull/3391)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support sublime command links\\n [\\\\#3378](https://github.com/scalameta/metals/pull/3378)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- [UNTESTED] Fix Gradle detection, multimodule proj\\n [\\\\#3385](https://github.com/scalameta/metals/pull/3385)\\n ([GavinRay97](https://github.com/GavinRay97))\\n- Add Arthur to the team!\\n [\\\\#3389](https://github.com/scalameta/metals/pull/3389)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Actions] mtags-auto-release: specify github token\\n [\\\\#3390](https://github.com/scalameta/metals/pull/3390)\\n ([dos65](https://github.com/dos65))\\n- Print more info about missing presentation compiler\\n [\\\\#3388](https://github.com/scalameta/metals/pull/3388)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump to sbt 1.6.0-RC2 [\\\\#3384](https://github.com/scalameta/metals/pull/3384)\\n ([ckipp01](https://github.com/ckipp01))\\n- Move to Scala 3 published artifacts where possible\\n [\\\\#3382](https://github.com/scalameta/metals/pull/3382)\\n ([ckipp01](https://github.com/ckipp01))\\n- Enable to create file with just package\\n [\\\\#3375](https://github.com/scalameta/metals/pull/3375)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use full range when using go-to definition for synthetics\\n [\\\\#3374](https://github.com/scalameta/metals/pull/3374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix quickpick [\\\\#3353](https://github.com/scalameta/metals/pull/3353)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update requests to 0.7.0\\n [\\\\#3367](https://github.com/scalameta/metals/pull/3367)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.31\\n [\\\\#3372](https://github.com/scalameta/metals/pull/3372)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.2.2\\n [\\\\#3370](https://github.com/scalameta/metals/pull/3370)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.14.Final\\n [\\\\#3369](https://github.com/scalameta/metals/pull/3369)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.3 [\\\\#3368](https://github.com/scalameta/metals/pull/3368)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.7.1 [\\\\#3366](https://github.com/scalameta/metals/pull/3366)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.7.0 [\\\\#3365](https://github.com/scalameta/metals/pull/3365)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.11-19-93ebe2c6\\n [\\\\#3363](https://github.com/scalameta/metals/pull/3363)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Fix ImportMissingSymbol code action\\n [\\\\#3362](https://github.com/scalameta/metals/pull/3362)\\n ([dos65](https://github.com/dos65))\\n- Send Code lens refresh when supported by client\\n [\\\\#3355](https://github.com/scalameta/metals/pull/3355)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add go to definition via links to synthetic decorations\\n [\\\\#3360](https://github.com/scalameta/metals/pull/3360)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Build] Fix quick-publish-local\\n [\\\\#3361](https://github.com/scalameta/metals/pull/3361)\\n ([dos65](https://github.com/dos65))\\n- Add information about source of exceptions\\n [\\\\#3340](https://github.com/scalameta/metals/pull/3340)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove stray pprint [\\\\#3357](https://github.com/scalameta/metals/pull/3357)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use Mill `--import` to import bloop when supported\\n [\\\\#3356](https://github.com/scalameta/metals/pull/3356)\\n ([lolgab](https://github.com/lolgab))\\n- Add test discovery endpoint\\n [\\\\#3277](https://github.com/scalameta/metals/pull/3277)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Build] Add `quick-publish-local` command\\n [\\\\#3351](https://github.com/scalameta/metals/pull/3351)\\n ([dos65](https://github.com/dos65))\\n- Actions - set jdk11 for mtags auto release\\n [\\\\#3348](https://github.com/scalameta/metals/pull/3348)\\n ([dos65](https://github.com/dos65))\\n- Wrap quickpick and input box results into options\\n [\\\\#3344](https://github.com/scalameta/metals/pull/3344)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Cross tests - fix ignorance for `test-mtags-dyn`\\n [\\\\#3339](https://github.com/scalameta/metals/pull/3339)\\n ([dos65](https://github.com/dos65))\\n- [Actions] Fixes for mtags-auto-release workflow\\n [\\\\#3337](https://github.com/scalameta/metals/pull/3337)\\n ([dos65](https://github.com/dos65))\\n- Remove sublime version from the doc\\n [\\\\#3334](https://github.com/scalameta/metals/pull/3334)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Fix issues with non-latest Scala versions\\n [\\\\#3332](https://github.com/scalameta/metals/pull/3332)\\n ([tgodzik](https://github.com/tgodzik))\\n- Release process: publish `mtags` for the latest Metals release\\n [\\\\#3281](https://github.com/scalameta/metals/pull/3281)\\n ([dos65](https://github.com/dos65))\\n- Improve the \\"(currently using)\\" message during bsp-switch.\\n [\\\\#3330](https://github.com/scalameta/metals/pull/3330)\\n ([ckipp01](https://github.com/ckipp01))\\n- Adjust json trace docs [\\\\#3279](https://github.com/scalameta/metals/pull/3279)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Fix go to defition for givens\\n [\\\\#3309](https://github.com/scalameta/metals/pull/3309)\\n ([dos65](https://github.com/dos65))\\n- Update xnio-nio to 3.8.5.Final\\n [\\\\#3327](https://github.com/scalameta/metals/pull/3327)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump coursier/setup-action from 1.1.1 to 1.1.2\\n [\\\\#3329](https://github.com/scalameta/metals/pull/3329)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update scalafix-interfaces to 0.9.33\\n [\\\\#3328](https://github.com/scalameta/metals/pull/3328)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.5\\n [\\\\#3326](https://github.com/scalameta/metals/pull/3326)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.13.Final\\n [\\\\#3325](https://github.com/scalameta/metals/pull/3325)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.11 [\\\\#3324](https://github.com/scalameta/metals/pull/3324)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.33\\n [\\\\#3322](https://github.com/scalameta/metals/pull/3322)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Hover - improve tpe selection for signature and expression\\n [\\\\#3320](https://github.com/scalameta/metals/pull/3320)\\n ([dos65](https://github.com/dos65))\\n- Move inactive maintainers to a separate list\\n [\\\\#3319](https://github.com/scalameta/metals/pull/3319)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove unused stuff [\\\\#3321](https://github.com/scalameta/metals/pull/3321)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Add option to run everything in the current file\\n [\\\\#3311](https://github.com/scalameta/metals/pull/3311)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add extract value code action\\n [\\\\#3297](https://github.com/scalameta/metals/pull/3297)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Kamil to the team!\\n [\\\\#3317](https://github.com/scalameta/metals/pull/3317)\\n ([tgodzik](https://github.com/tgodzik))\\n- Document support of find text in dependency command in sublime\\n [\\\\#3318](https://github.com/scalameta/metals/pull/3318)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Better support for mill BSP\\n [\\\\#3308](https://github.com/scalameta/metals/pull/3308)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix json rendering in documentation\\n [\\\\#3316](https://github.com/scalameta/metals/pull/3316)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add missing commands to client commands documentation\\n [\\\\#3315](https://github.com/scalameta/metals/pull/3315)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add isCommandInHtmlSupported to InitializationOptions doc\\n [\\\\#3314](https://github.com/scalameta/metals/pull/3314)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update sublime doc regarding Hover for selection\\n [\\\\#3313](https://github.com/scalameta/metals/pull/3313)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Simplify usage of sbt server when no .bsp/sbt.json exists\\n [\\\\#3304](https://github.com/scalameta/metals/pull/3304)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support Scala3-NIGHTLY releases\\n [\\\\#3280](https://github.com/scalameta/metals/pull/3280)\\n ([dos65](https://github.com/dos65))\\n- Document source file analyzer support in sublime\\n [\\\\#3310](https://github.com/scalameta/metals/pull/3310)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- ScalaVersion - discover new mtags version by coursier\\n [\\\\#3278](https://github.com/scalameta/metals/pull/3278)\\n ([dos65](https://github.com/dos65))\\n- Update ammonite to 2.4.1\\n [\\\\#3292](https://github.com/scalameta/metals/pull/3292)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix expression for selection range in Ammonite\\n [\\\\#3303](https://github.com/scalameta/metals/pull/3303)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Add selection range\\n [\\\\#3276](https://github.com/scalameta/metals/pull/3276)\\n ([tgodzik](https://github.com/tgodzik))\\n- Set rangeHoverProvider under experimental capabilities\\n [\\\\#3293](https://github.com/scalameta/metals/pull/3293)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update to latest millw 0.3.9\\n [\\\\#3295](https://github.com/scalameta/metals/pull/3295)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalafix-interfaces to 0.9.32\\n [\\\\#3291](https://github.com/scalameta/metals/pull/3291)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.32\\n [\\\\#3287](https://github.com/scalameta/metals/pull/3287)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.10\\n [\\\\#3288](https://github.com/scalameta/metals/pull/3288)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0.1 [\\\\#3289](https://github.com/scalameta/metals/pull/3289)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.4\\n [\\\\#3290](https://github.com/scalameta/metals/pull/3290)\\n ([scala-steward](https://github.com/scala-steward))\\n- docs: update commands that now use `TextDocumentPositionParams`\\n [\\\\#3284](https://github.com/scalameta/metals/pull/3284)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update organize-imports rule with a fix for givens\\n [\\\\#3273](https://github.com/scalameta/metals/pull/3273)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add example about attaching debugger\\n [\\\\#3275](https://github.com/scalameta/metals/pull/3275)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add CFR class file viewer\\n [\\\\#3247](https://github.com/scalameta/metals/pull/3247)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Print Bloop logs when connection errored out\\n [\\\\#3274](https://github.com/scalameta/metals/pull/3274)\\n ([tgodzik](https://github.com/tgodzik))\\n- Formatter: always specify global `runner.dialect`.\\n [\\\\#3259](https://github.com/scalameta/metals/pull/3259)\\n ([dos65](https://github.com/dos65))\\n- Finer grained rules on build errors for debug discovery.\\n [\\\\#3271](https://github.com/scalameta/metals/pull/3271)\\n ([ckipp01](https://github.com/ckipp01))\\n- RunDebugLens - fix stale lens\\n [\\\\#3270](https://github.com/scalameta/metals/pull/3270)\\n ([dos65](https://github.com/dos65))\\n- [Docs] Align the info about endpoints and their parameters with latest release\\n [\\\\#3232](https://github.com/scalameta/metals/pull/3232)\\n ([dos65](https://github.com/dos65))\\n- SuperMethodCodeLens - do not show stale lenses\\n [\\\\#3267](https://github.com/scalameta/metals/pull/3267)\\n ([dos65](https://github.com/dos65))\\n- Take into account trace files in .metals directory\\n [\\\\#3103](https://github.com/scalameta/metals/pull/3103)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Fix issue with empty string in completions\\n [\\\\#3269](https://github.com/scalameta/metals/pull/3269)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update versions [\\\\#3268](https://github.com/scalameta/metals/pull/3268)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals v0.10.9\\n [\\\\#3264](https://github.com/scalameta/metals/pull/3264)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/11/03/tungsten","metadata":{"permalink":"/metals/blog/2021/11/03/tungsten","source":"@site/blog/2021-11-03-tungsten.md","title":"Metals v0.10.9 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.9, which mostly important","date":"2021-11-03T00:00:00.000Z","formattedDate":"November 3, 2021","tags":[],"readingTime":1.765,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.9 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.11.0 - Aluminium","permalink":"/metals/blog/2022/01/12/aluminium"},"nextItem":{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.9, which mostly important\\nfeature is the Scala 2.13.7 support.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release36
Merged PRs19
Contributors4
Closed issues3
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/44?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.13.7\\n\\n## Miscellaneous\\n\\n- Fix issues with breakpoints on Windows.\\n- Add enum as a new file type option in Scala 3.\\n- Fix issues with expression evaluation when long classpath is used.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.8..v0.10.9\\nTomasz Godzik\\nVadim Chelyshov\\nChris Kipp\\nKamil Podsiadlo\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.9](https://github.com/scalameta/metals/tree/v0.10.9) (2021-11-03)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.8...v0.10.9)\\n\\n**Merged pull requests:**\\n\\n- Add try in order not to break debugging session\\n [\\\\#3265](https://github.com/scalameta/metals/pull/3265)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.13.7\\n [\\\\#3258](https://github.com/scalameta/metals/pull/3258)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues when source path is using Windows format\\n [\\\\#3263](https://github.com/scalameta/metals/pull/3263)\\n ([tgodzik](https://github.com/tgodzik))\\n- RangeHover - fix NPE [\\\\#3256](https://github.com/scalameta/metals/pull/3256)\\n ([dos65](https://github.com/dos65))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.29\\n [\\\\#3253](https://github.com/scalameta/metals/pull/3253)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.3\\n [\\\\#3249](https://github.com/scalameta/metals/pull/3249)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.10-14-f51f591b\\n [\\\\#3248](https://github.com/scalameta/metals/pull/3248)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.2\\n [\\\\#3250](https://github.com/scalameta/metals/pull/3250)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scala-java8-compat to 1.0.2\\n [\\\\#3251](https://github.com/scalameta/metals/pull/3251)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.24\\n [\\\\#3252](https://github.com/scalameta/metals/pull/3252)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add case when creating enums\\n [\\\\#3242](https://github.com/scalameta/metals/pull/3242)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add enum as a new file type option in Scala 3\\n [\\\\#3240](https://github.com/scalameta/metals/pull/3240)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure breaktpoints work even if path is sent\\n [\\\\#3238](https://github.com/scalameta/metals/pull/3238)\\n ([tgodzik](https://github.com/tgodzik))\\n- Copyable debug flag [\\\\#3239](https://github.com/scalameta/metals/pull/3239)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump to the latest millw and millw.bat -- 0.3.8\\n [\\\\#3237](https://github.com/scalameta/metals/pull/3237)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor the usage of client commands\\n [\\\\#3155](https://github.com/scalameta/metals/pull/3155)\\n ([tgodzik](https://github.com/tgodzik))\\n- 0.10.8 release - version changes\\n [\\\\#3229](https://github.com/scalameta/metals/pull/3229)\\n ([dos65](https://github.com/dos65))\\n- 0.10.8 release notes [\\\\#3225](https://github.com/scalameta/metals/pull/3225)\\n ([dos65](https://github.com/dos65))\\n- docs - typo fix [\\\\#3230](https://github.com/scalameta/metals/pull/3230)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/10/26/tungsten","metadata":{"permalink":"/metals/blog/2021/10/26/tungsten","source":"@site/blog/2021-10-26-tungsten.md","title":"Metals v0.10.8 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.8, which brings a lot of new features in addition to Scala 3.1.0 support!","date":"2021-10-26T00:00:00.000Z","formattedDate":"October 26, 2021","tags":[],"readingTime":7.19,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.8 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.9 - Tungsten","permalink":"/metals/blog/2021/11/03/tungsten"},"nextItem":{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.8, which brings a lot of new features in addition to Scala 3.1.0 support!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release162
Merged PRs70
Contributors16
Closed issues11
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/43?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Expression evaluator for Scala 2\\n- [Scala 2] Type annotations on code selection \\n- Source file analyzer\\n- Find text in dependency JAR files\\n- VSCode - workspace symbol search fix\\n- Scala 3.1.0 and completion improvements\\n\\n## Expression Evaluator\\n\\nThe long awaited [issue #3051](https://github.com/scalameta/metals/issues/3051) was close to celebrating its 2 years birthday but\\ndue to the impressive work by [@tdudzik](https://github.com/tdudzik) and help from [@adapi](https://github.com/adpi2) and \\n[@tgodzik](https://github.com/tgodzik) Metals \\nfinally has support for expression evaluation during debugging!\\nThe implementation is based on the initial idea from [@smarter](https://github.com/smarter)\'s for expression evaluation in the Dotty Language Server.\\n\\nCurrently, it\'s implemented only for Scala 2, however the work on Scala3 support is in progress.\\n\\nSince expression evaluation is a complex feature there might still be some bugs that we didn\'t account for, so do not hesitate to report anything that doesn\'t look right.\\n\\n![evaluator](https://i.imgur.com/1b17Vtm.gif)\\n\\n_Editors support_: every client that implements DAP\\n\\n## Type annotations on code selection\\n\\nThanks to [@KacperFKorban](https://github.com/KacperFKorban), yet another long awaited [issue #3059](https://github.com/scalameta/metals/issues/3059) was closed.\\nPreviously, hover in Metals was limited by the LSP protocol and only worked for a single position, however it turns out that it was possible to work around this limitation.\\n\\n![selection](https://user-images.githubusercontent.com/39772805/130333128-dc357170-116e-4a10-b58d-b55c536a2e15.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## Source file analyzer\\n\\nThe `Show Tasty command` from the previous release was extended.\\nNow, Metals also can show javap and semanticdb outputs from the source.\\nThanks [@Arthurm1](https://github.com/Arthurm1) for javap/semanticdb implementation and \\n[@kpodsiad](https://github.com/kpodsiad) for aligning all views into a single feature.\\n\\nThe full list of commands:\\n- `metals.show-tasty`\\n- `metals.show-javap`\\n- `metals.show-javap-verbose`\\n- `metals.show-semanticdb-compact`\\n- `metals.show-semanticdb-detailed`\\n- `metals.show-semanticdb-proto`\\n\\nIn VS Code you can notice that there is a new `Metals Analyze Source` submenu in file pop-up menu that provides a list of all these commands.\\n\\n![analyze](https://i.imgur.com/6tGSvuI.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## Find text in dependency JAR files\\n\\nThis release also introduces another helpful feature, it\'s possible now to do text search through files in classpath jars and source-jars.\\nThanks to [@ Z1kkurat](https://github.com/Z1kkurat) for his contribution!\\n\\n![find-in-jars](https://i.imgur.com/o1Drd12.gif)\\n\\n_Editors support_: VS Code, nvim-metals\\n\\n## VSCode extension - workspace symbol search fix\\n\\nInitially, workspace symbol search in Metals allowed you to extend the search in a couple of ways:\\n- It was possible to look through all the dependencies by adding the semicolon `;` at the end or to search. This was done by default if no results were found in the current workspace.\\n\\n- Users could use the full path for symbols such as `j.n.f.Path` for `java.nio.file.Path` .\\n\\nUnfortunately, this stopped being possible in some later Visual Studio Code versions. To work around that issue a new command was added: `metals.symbol-search`, which allows for the additional search features. This already works for all other editors.\\nIn addition, Metals extension now overrides default keybing for symbol search: `Ctrl+T`/`Cmd+T` executes this Metals command.\\n\\nAn important notice: we can\'t fix the default workspace symbol search. It still uses default VS Code implementation.\\n\\n![symbol-search](https://user-images.githubusercontent.com/5816952/133675550-c199e79a-55cc-4df6-871d-c8a3b1f0b3a3.gif)\\n\\n\\n## Scala 3.1.0 and completion improvements\\n\\nAnd lastly this new Metals release comes with a new compiler version support - 3.1.0. As well as support for the next release candidate `3.1.1-RC1`, which will be later updated in the SNAPSHOT Metals versions in case of further release candidates.\\nWe also further improved the support for Scala 3:\\n- Completion items ordering were reworked and now it should match the behaviour of Scala 2\\n- Type descriptions in completion now shows the precise type for generic methods\\n\\n## Miscellaneous\\n\\n- Fix type decorations for sbt/standalone files [@tgodzik](https://github.com/tgodzik)\\n- Use Scala 3 syntax by default. [@smarter](https://github.com/smarter)\\n- Support more scenarios in rewrite parent/braces code action. [@kpodsiad](https://github.com/kpodsiad)\\n- Fix go to parent code lenses for local symbols. [tgodzik](https://github.com/tgodzik)\\n- Strip out [info] for stacktraces. [ckipp01](https://github.com/ckipp01)\\n- [sbt server] Fix meta-build-target configuration. [adpi2](https://github.com/adpi2)\\n- Add build server version to the doctor view. [kpodsiad](https://github.com/kpodsiad)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.7..v0.10.8\\n25\\tTomasz Godzik\\n20\\tVadim Chelyshov\\n13\\tZ1kkurat\\n10\\tAdrien Piquerez\\n8\\tKamil Podsiadlo\\n4\\tckipp01\\n3\\tGabriele Petronella\\n2\\ttdudzik\\n2\\t\xd3lafur P\xe1ll Geirsson\\n1\\tAlexandre Archambault\\n1\\tArthur McGibbon\\n1\\tGuillaume Martres\\n1\\tKacper Korban\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.8](https://github.com/scalameta/metals/tree/v0.10.8) (2021-10-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.7...v0.10.8)\\n\\n**Merged pull requests:**\\n\\n- Compilers: try to fix NPE\\n [\\\\#3227](https://github.com/scalameta/metals/pull/3227)\\n ([dos65](https://github.com/dos65))\\n- Print exact type for expressions containing generics\\n [\\\\#3223](https://github.com/scalameta/metals/pull/3223)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update debug adapter to 2.0.8\\n [\\\\#3226](https://github.com/scalameta/metals/pull/3226)\\n ([tdudzik](https://github.com/tdudzik))\\n- Always show hover on a non empty range selection\\n [\\\\#3222](https://github.com/scalameta/metals/pull/3222)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reset diagnostics on build import\\n [\\\\#3220](https://github.com/scalameta/metals/pull/3220)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Add Scala 3.1.0 support\\n [\\\\#3212](https://github.com/scalameta/metals/pull/3212)\\n ([dos65](https://github.com/dos65))\\n- Update Bloop to 1.4.10\\n [\\\\#3218](https://github.com/scalameta/metals/pull/3218)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump debug adapter\\n [\\\\#3216](https://github.com/scalameta/metals/pull/3216)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala3] Completions - show applied type for `Select`\\n [\\\\#3188](https://github.com/scalameta/metals/pull/3188)\\n ([dos65](https://github.com/dos65))\\n- Allow to generate run lenses for bsp servers which have debug capability\\n [\\\\#3210](https://github.com/scalameta/metals/pull/3210)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use sbt-debug-adapter explicity in metals.sbt\\n [\\\\#3211](https://github.com/scalameta/metals/pull/3211)\\n ([adpi2](https://github.com/adpi2))\\n- Use SemanticdbPlugin in sbt-metals\\n [\\\\#3200](https://github.com/scalameta/metals/pull/3200)\\n ([adpi2](https://github.com/adpi2))\\n- Workflows: ignore sourcegraph upload error\\n [\\\\#3208](https://github.com/scalameta/metals/pull/3208)\\n ([dos65](https://github.com/dos65))\\n- EndpointLogger: close trace writer\\n [\\\\#3207](https://github.com/scalameta/metals/pull/3207)\\n ([dos65](https://github.com/dos65))\\n- Bump Bloop and scala-debug-adapter\\n [\\\\#3209](https://github.com/scalameta/metals/pull/3209)\\n ([adpi2](https://github.com/adpi2))\\n- Update scribe, scribe-file, scribe-slf4j to 3.6.0\\n [\\\\#3205](https://github.com/scalameta/metals/pull/3205)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 8.0.1\\n [\\\\#3206](https://github.com/scalameta/metals/pull/3206)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.2\\n [\\\\#3204](https://github.com/scalameta/metals/pull/3204)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-debug-adapter to 2.0.5\\n [\\\\#3203](https://github.com/scalameta/metals/pull/3203)\\n ([scala-steward](https://github.com/scala-steward))\\n- Find in jar minor fixes\\n [\\\\#3198](https://github.com/scalameta/metals/pull/3198)\\n ([dos65](https://github.com/dos65))\\n- Fix flaky cancel compile suite\\n [\\\\#3202](https://github.com/scalameta/metals/pull/3202)\\n ([dos65](https://github.com/dos65))\\n- Add new suites to TestGroups\\n [\\\\#3199](https://github.com/scalameta/metals/pull/3199)\\n ([dos65](https://github.com/dos65))\\n- [sbt server] Fix meta-build-target configuration\\n [\\\\#3194](https://github.com/scalameta/metals/pull/3194)\\n ([adpi2](https://github.com/adpi2))\\n- Decode file refactor\\n [\\\\#3160](https://github.com/scalameta/metals/pull/3160)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Don\'t use `window/showMessage` to report generic Scalafix error\\n [\\\\#3192](https://github.com/scalameta/metals/pull/3192)\\n ([olafurpg](https://github.com/olafurpg))\\n- Wait with loading compiler and compilation\\n [\\\\#3190](https://github.com/scalameta/metals/pull/3190)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implement \'find in JAR files\' LSP extension\\n [\\\\#3093](https://github.com/scalameta/metals/pull/3093)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Don\'t throw an exception is compiling semanticdb times out\\n [\\\\#3187](https://github.com/scalameta/metals/pull/3187)\\n ([tgodzik](https://github.com/tgodzik))\\n- Wait for build tool information when generating semanticdb \\n [\\\\#3184](https://github.com/scalameta/metals/pull/3184)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump bloop to fix some debug issues\\n [\\\\#3185](https://github.com/scalameta/metals/pull/3185)\\n ([adpi2](https://github.com/adpi2))\\n- Remove unused `bspEnabled := false`\\n [\\\\#3186](https://github.com/scalameta/metals/pull/3186)\\n ([adpi2](https://github.com/adpi2))\\n- Updage scalafmt + use optional braces syntax for scala3\\n [\\\\#3165](https://github.com/scalameta/metals/pull/3165)\\n ([dos65](https://github.com/dos65))\\n- Don\'t create file system when debugging\\n [\\\\#3183](https://github.com/scalameta/metals/pull/3183)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove extra boolean from the `goto-position` server command in `StacktraceAnalyzer`\\n [\\\\#3179](https://github.com/scalameta/metals/pull/3179)\\n ([ckipp01](https://github.com/ckipp01))\\n- Upgrade scala3 rc version\\n [\\\\#3182](https://github.com/scalameta/metals/pull/3182)\\n ([dos65](https://github.com/dos65))\\n- Strip out [info] for stacktraces.\\n [\\\\#3180](https://github.com/scalameta/metals/pull/3180)\\n ([ckipp01](https://github.com/ckipp01))\\n- Avoid IllegalArgumentException when trying to get type of range.\\n [\\\\#3178](https://github.com/scalameta/metals/pull/3178)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure generate-sources phase is always run for Maven\\n [\\\\#3164](https://github.com/scalameta/metals/pull/3164)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scala-java8-compat to 1.0.1\\n [\\\\#3175](https://github.com/scalameta/metals/pull/3175)\\n ([scala-steward](https://github.com/scala-steward))\\n- Try to fix flaky tests\\n [\\\\#3163](https://github.com/scalameta/metals/pull/3163)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 3.0.5\\n [\\\\#3177](https://github.com/scalameta/metals/pull/3177)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.3\\n [\\\\#3174](https://github.com/scalameta/metals/pull/3174)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.15.0\\n [\\\\#3173](https://github.com/scalameta/metals/pull/3173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.12.Final\\n [\\\\#3172](https://github.com/scalameta/metals/pull/3172)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 31.0.1-jre\\n [\\\\#3171](https://github.com/scalameta/metals/pull/3171)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.15\\n [\\\\#3170](https://github.com/scalameta/metals/pull/3170)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.13.0\\n [\\\\#3169](https://github.com/scalameta/metals/pull/3169)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add completion support to expression evaluator\\n [\\\\#3159](https://github.com/scalameta/metals/pull/3159)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reconnect to BSP server upon buildTarget/didChange\\n [\\\\#3145](https://github.com/scalameta/metals/pull/3145)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Don\'t search for all symbols in go-to-parent code lenses\\n [\\\\#3161](https://github.com/scalameta/metals/pull/3161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Bloop and sbt-debug-adapter\\n [\\\\#3166](https://github.com/scalameta/metals/pull/3166)\\n ([adpi2](https://github.com/adpi2))\\n- Create dependency files on step if they don\'t exist\\n [\\\\#3167](https://github.com/scalameta/metals/pull/3167)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix go to parent code lenses for local symbols\\n [\\\\#3154](https://github.com/scalameta/metals/pull/3154)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t close source jars\\n [\\\\#3162](https://github.com/scalameta/metals/pull/3162)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add position to show tasty command\\n [\\\\#3148](https://github.com/scalameta/metals/pull/3148)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Use scala-debug-adapter 2.x to enable code evaluation\\n [\\\\#2959](https://github.com/scalameta/metals/pull/2959)\\n ([adpi2](https://github.com/adpi2))\\n- Type annotation on code selection\\n [\\\\#3060](https://github.com/scalameta/metals/pull/3060)\\n ([KacperFKorban](https://github.com/KacperFKorban))\\n- Make commands parametrized and easier to use\\n [\\\\#3149](https://github.com/scalameta/metals/pull/3149)\\n ([tgodzik](https://github.com/tgodzik))\\n- Generate symbol information for standalone files, worksheets and sbt files\\n [\\\\#3019](https://github.com/scalameta/metals/pull/3019)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sourcegraph workflow to use `lsif-java index` command.\\n [\\\\#3152](https://github.com/scalameta/metals/pull/3152)\\n ([olafurpg](https://github.com/olafurpg))\\n- Only set sbt dialect when file has indeed .sbt extension\\n [\\\\#3144](https://github.com/scalameta/metals/pull/3144)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support more scenarios with \'replace () with {}\' code action\\n [\\\\#3130](https://github.com/scalameta/metals/pull/3130)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- add javap/semanticdb file viewer\\n [\\\\#3107](https://github.com/scalameta/metals/pull/3107)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Add build server version to the doctor view\\n [\\\\#3141](https://github.com/scalameta/metals/pull/3141)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update scalafix to 0.9.31\\n [\\\\#3138](https://github.com/scalameta/metals/pull/3138)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add docs for Metals custom search command\\n [\\\\#3139](https://github.com/scalameta/metals/pull/3139)\\n ([gabro](https://github.com/gabro))\\n- [Scala3] Improve completions ordering\\n [\\\\#3115](https://github.com/scalameta/metals/pull/3115)\\n ([dos65](https://github.com/dos65))\\n- Set the default fallbackScalaVersion to scala 3 instead of 2.12\\n [\\\\#3134](https://github.com/scalameta/metals/pull/3134)\\n ([smarter](https://github.com/smarter))\\n- Bump Scalafmt version\\n [\\\\#3137](https://github.com/scalameta/metals/pull/3137)\\n ([gabro](https://github.com/gabro))\\n- Add release notes for Metals v0.10.7\\n [\\\\#3132](https://github.com/scalameta/metals/pull/3132)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/09/16/tungsten","metadata":{"permalink":"/metals/blog/2021/09/16/tungsten","source":"@site/blog/2021-09-16-tungsten.md","title":"Metals v0.10.7 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.7, which mostly focuses on","date":"2021-09-16T00:00:00.000Z","formattedDate":"September 16, 2021","tags":[],"readingTime":3.345,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.7 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.8 - Tungsten","permalink":"/metals/blog/2021/10/26/tungsten"},"nextItem":{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.7, which mostly focuses on\\nsupport for Scala 2.12.15 and refines the indent on paste functionality.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release42
Merged PRs14
Contributors6
Closed issues4
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/42?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.12.15 and 3.1.0-RC2 support.\\n- Indent on paste improvements.\\n- Show TASTy command.\\n\\n## Indent on paste improvements\\n\\nIn Metals 0.10.6 we introduced a new feature that would adjust the indentation\\nof any pasted snippet. You can read about it in\\n[previous release notes](/blog/2021/09/06/tungsten#automatically-adjust-indentation-on-paste).\\n\\nThe feature was not fully mature and despite our best intentions it could cause\\na lot of issues for the users. To help with that we introduced two changes.\\n\\nFirstly, we will now use the current indentation of the cursor and adjust any\\npasted snippet to use that level of indentation.\\n\\nFor example in case of a simple snippet like:\\n\\n```scala\\ndef hello() =\\n println(\\"Hello!\\")\\n```\\n\\nif we paste it into:\\n\\n```scala\\ndef main() =\\n println(\\"Main\\")\\n |\\n```\\n\\nafter pasting we will have:\\n\\n```scala\\ndef main =\\n println(\\"Main\\")\\n def hello() =\\n println(\\"Hello!\\")\\n```\\n\\nHowever, if we move the cursor back:\\n\\n```scala\\ndef main() =\\n println(\\"Main\\")\\n|\\n```\\n\\nthe result will be different:\\n\\n```scala\\ndef main =\\n println(\\"Main\\")\\ndef hello() =\\n println(\\"Hello!\\")\\n```\\n\\nYou can use it to paste anything at the indentation level you need.\\n\\nMoreover, we also added a new setting `metals.enableIndentOnPaste`, which you\\ncan use to turn the feature on and off. Currently, it\'s **off** by default. We\\nhighly recommend turning it on, testing out some more and reporting any new\\nissues.\\n\\nWe also included a number of fixes for indentation in the Visual Studio Code\\nextension, which should fix some problems in the Scala 3 optional braces code.\\n\\n## Show TASTy command\\n\\nWhat is TASTy? According to the\\n[official Scala documentation](https://docs.scala-lang.org/scala3/guides/tasty-overview.html):\\n\\n_TASTy is an acronym that comes from the term Typed Abstract Syntax Trees. It\'s\\na high-level interchange format for Scala 3, and in this document we\'ll refer to\\nit as Tasty. Tasty files are generated by the scalac compiler, and contain all\\nof the information about your source code, including the syntactic structure of\\nyour program, and complete information about types, positions, and even\\ndocumentation._\\n\\nThanks to [kpodsiad](https://github.com/kpodsiad), Metals can now show TASTy of\\na currently opened file using the new `metals.show-tasty` command. However, keep\\nin mind that currently, this feature works only for Scala 3 sources. You can use\\nthis new command already in nvim-metals and Visual Studio Code.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.6..v0.10.7\\nKamil Podsiadlo\\nTomasz Godzik\\nVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.7](https://github.com/scalameta/metals/tree/v0.10.7) (2021-09-16)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.6...v0.10.7)\\n\\n**Merged pull requests:**\\n\\n- Add setting to enable indentation on paste\\n [\\\\#3129](https://github.com/scalameta/metals/pull/3129)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Scala 3 RC version to 3.1.0-RC2\\n [\\\\#3131](https://github.com/scalameta/metals/pull/3131)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use the current indentation as reference when pasting\\n [\\\\#3127](https://github.com/scalameta/metals/pull/3127)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show TASTy for open file command\\n [\\\\#3063](https://github.com/scalameta/metals/pull/3063)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add support for Scala 2.12.15\\n [\\\\#3126](https://github.com/scalameta/metals/pull/3126)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix overindenting when the indentation is more than expected\\n [\\\\#3109](https://github.com/scalameta/metals/pull/3109)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to 1.4.9 [\\\\#3124](https://github.com/scalameta/metals/pull/3124)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix renaming class hierarchy inside a method\\n [\\\\#3116](https://github.com/scalameta/metals/pull/3116)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Update flyway-core to 7.14.1\\n [\\\\#3122](https://github.com/scalameta/metals/pull/3122)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.1 [\\\\#3121](https://github.com/scalameta/metals/pull/3121)\\n ([scala-steward](https://github.com/scala-steward))\\n- bug report template - downgrade version\\n [\\\\#3117](https://github.com/scalameta/metals/pull/3117)\\n ([dos65](https://github.com/dos65))\\n- Fix process exiting [\\\\#3112](https://github.com/scalameta/metals/pull/3112)\\n ([dos65](https://github.com/dos65))\\n- Fix message about unsupported version for RC Scala 3 versions\\n [\\\\#3114](https://github.com/scalameta/metals/pull/3114)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that classpath does not contain invalid files\\n [\\\\#3111](https://github.com/scalameta/metals/pull/3111)\\n ([tgodzik](https://github.com/tgodzik))\\n- bump snapshot version to 0.10.7\\n [\\\\#3106](https://github.com/scalameta/metals/pull/3106)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Add release notes for Metals v0.10.6\\n [\\\\#3104](https://github.com/scalameta/metals/pull/3104)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/09/06/tungsten","metadata":{"permalink":"/metals/blog/2021/09/06/tungsten","source":"@site/blog/2021-09-06-tungsten.md","title":"Metals v0.10.6 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.6, which brings about new","date":"2021-09-06T00:00:00.000Z","formattedDate":"September 6, 2021","tags":[],"readingTime":6.89,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.6 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.7 - Tungsten","permalink":"/metals/blog/2021/09/16/tungsten"},"nextItem":{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.6, which brings about new\\nScala 3 versions and JDK 17 support in addition to some new interesting\\nfeatures.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release173
Merged PRs74
Contributors16
Closed issues25
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/41?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Automatically adjust indentation on paste.\\n- New code actions.\\n- Allow organize imports on unsaved code.\\n- [Scala 3] support for Scala 3.0.2 and 3.1.0-RC1.\\n- JDK 17 support.\\n\\n## Automatically adjust indentation on paste\\n\\nStarting with Scala 3 developers can use optional braces, which we mentioned in\\nsome of the previous release notes. One of the main problems with it is making\\nsure that users are able to properly paste code into existing blocks. Previously\\nwe could just paste into braced blocks and adjusted the indentation later, but\\nnow it really matters that indentation is changed properly in order to make to\\ncode compile correctly.\\n\\nTo help with that [@Giggiux](https://github.com/Giggiux) adjusted the existing\\nrange formatting to account for indentation in the pasted blocks. Starting from\\nthis release Metals will adjust the indentation to match that of the enclosing\\nblock irrelevant of whether it has braces or not. A number of improvements has\\nalso been done to make sure the cursor ends up on the correct indentation level\\nupon writing a newline.\\n\\n![indentation](https://i.imgur.com/TVewmY7.gif)\\n\\nIf you encounter any issues, please don\'t hesitate to report them since the\\nfunctionality is new and there might be some edge cases where it doesn\'t work.\\nThis was tested internally over the past month, but that doesn\'t account for all\\nthe different styles of how people write their code. You can turn off on paste\\nformatting in Visual Studio Code in the settings using the\\n`editor.formatOnPaste` property. This feature will only work with the editors\\nthat support range formatting.\\n\\n## New code actions\\n\\nThis release benefits from adding two new code actions. Actions are based on\\nparticular scenarios, where we might automate some mundane coding and their\\nbehaviour is usually clearly specified. Please let us know if there are any\\nother particular situations, which might be automated, via the the Metals\'s\\n[feature requests repository](http://github.com/metals-feature-requests).\\n\\n### Refactor pattern match with placeholder\\n\\nThanks to [kpodsiad](https://github.com/kpodsiad) it\'s now possible to\\nautomatically rewrite lambdas with `_ match` expressions to partial functions:\\n\\n![partial-func](https://i.imgur.com/Ffm4RXZ.gif)\\n\\n### Replace () with {} in functions and vice versa\\n\\nIt\'s quite often that in Scala we might want to change to a simple lambda to a\\nmultiline one or vice versa. This has previously been a manual chore, but now\\nwhenever possible you can do it via a code action:\\n\\n![replace](https://i.imgur.com/DTylGT9.gif)\\n\\n## Allow organize imports on unsaved code\\n\\nIn previous version it was only possible to organize imports in files that were\\nsaved and compiled. We\'re happy to report that this requirement has been lifted\\nand users can organize imports whenever needed.\\n\\n## Miscellaneous\\n\\n- Fix completions for definitions from other files in Ammonite scripts.\\n- Support for Apple M1 and JDK 17. [@dos65](https://github.com/dos65)\\n- [Scala 3] Show extension methods in hover.\\n- Support brackets in multiline strings.\\n [@kpodsiad](https://github.com/kpodsiad)\\n- Automatically convert $ to $$ when changing to string interpolation.\\n- Filter out wrong reference results from unrelated build targets.\\n [@dos65](https://github.com/dos65)\\n- Greatly improved parent code lenses performance and turned it on by default in\\n VS Code. [@tanishiking](https://github.com/tanishiking)\\n- Properly show folding ranges in Scala 3 indented blocks.\\n [@tpasternak](https://github.com/tpasternak)\\n- Fix comments erasing all later variables in .env file.\\n- Fix file watcher in large projects on macOS. [@pvid](https://github.com/pvid)\\n- Fix memory leak issue in Scala 3 projects. [@dos65](https://github.com/dos65)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.5..v0.10.6\\nTomasz Godzik\\nLuigi Frunzio\\nVadim Chelyshov\\nAdrien Piquerez\\nChris Kipp\\nPavol Vidlicka\\nGabriele Petronella\\nKamil Podsiadlo\\nOliver Schrenk\\n\xd3lafur P\xe1ll Geirsson\\nRikito Taniguchi\\nTomasz Pasternak\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.6](https://github.com/scalameta/metals/tree/v0.10.6) (2021-09-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.5...v0.10.6)\\n\\n**Merged pull requests:**\\n\\n- Fix issue with tmp directory popping up in random places\\n [\\\\#3105](https://github.com/scalameta/metals/pull/3105)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ident on paste - bunch of fixes\\n [\\\\#3080](https://github.com/scalameta/metals/pull/3080)\\n ([dos65](https://github.com/dos65))\\n- s/horizontal/vertical [\\\\#3102](https://github.com/scalameta/metals/pull/3102)\\n ([oschrenk](https://github.com/oschrenk))\\n- s/defalt/default [\\\\#3101](https://github.com/scalameta/metals/pull/3101)\\n ([oschrenk](https://github.com/oschrenk))\\n- Add support for Scala 3.1.0-RC1\\n [\\\\#3100](https://github.com/scalameta/metals/pull/3100)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.0.2\\n [\\\\#3095](https://github.com/scalameta/metals/pull/3095)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc-interfaces to 2.2.23\\n [\\\\#3094](https://github.com/scalameta/metals/pull/3094)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.29 [\\\\#3088](https://github.com/scalameta/metals/pull/3088)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.30\\n [\\\\#3089](https://github.com/scalameta/metals/pull/3089)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.2 [\\\\#3086](https://github.com/scalameta/metals/pull/3086)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.7\\n [\\\\#3084](https://github.com/scalameta/metals/pull/3084)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump olafurpg/setup-scala from 12 to 13\\n [\\\\#3090](https://github.com/scalameta/metals/pull/3090)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc, mdoc-interfaces, sbt-mdoc to 2.2.23\\n [\\\\#3087](https://github.com/scalameta/metals/pull/3087)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.14.0\\n [\\\\#3085](https://github.com/scalameta/metals/pull/3085)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.5\\n [\\\\#3083](https://github.com/scalameta/metals/pull/3083)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.30\\n [\\\\#3082](https://github.com/scalameta/metals/pull/3082)\\n ([scala-steward](https://github.com/scala-steward))\\n- Run tests on JDK 17 [\\\\#3028](https://github.com/scalameta/metals/pull/3028)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix file watcher in large projects on macOS\\n [\\\\#3021](https://github.com/scalameta/metals/pull/3021)\\n ([pvid](https://github.com/pvid))\\n- Allow organize imports on unsaved code\\n [\\\\#3055](https://github.com/scalameta/metals/pull/3055)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to the newest nightly\\n [\\\\#3003](https://github.com/scalameta/metals/pull/3003)\\n ([tgodzik](https://github.com/tgodzik))\\n- Jar indexing - fix issue with empty jar source\\n [\\\\#3069](https://github.com/scalameta/metals/pull/3069)\\n ([dos65](https://github.com/dos65))\\n- Fix comments erasing all later variables in .env file\\n [\\\\#3070](https://github.com/scalameta/metals/pull/3070)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update next Scala 3 RC version to 3.0.2-RC2\\n [\\\\#3065](https://github.com/scalameta/metals/pull/3065)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add action to replace () with {} in functions and vice versa\\n [\\\\#3061](https://github.com/scalameta/metals/pull/3061)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle Scala 3 style blocks of code without braces\\n [\\\\#3058](https://github.com/scalameta/metals/pull/3058)\\n ([tpasternak](https://github.com/tpasternak))\\n- Add tests explicitly to tests shard\\n [\\\\#3049](https://github.com/scalameta/metals/pull/3049)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove complicated asSeenFrom logic\\n [\\\\#3047](https://github.com/scalameta/metals/pull/3047)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add documentation about GitHub Codespaces and GitHub.dev support\\n [\\\\#3046](https://github.com/scalameta/metals/pull/3046)\\n ([gabro](https://github.com/gabro))\\n- Simplify super method lens using overriddenSymbols\\n [\\\\#3045](https://github.com/scalameta/metals/pull/3045)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update scalafmt to 3.0.0-RC7\\n [\\\\#3042](https://github.com/scalameta/metals/pull/3042)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Fix memory usage spike on empty completions\\n [\\\\#3043](https://github.com/scalameta/metals/pull/3043)\\n ([dos65](https://github.com/dos65))\\n- Update sbt-sourcegraph to 0.3.3\\n [\\\\#3035](https://github.com/scalameta/metals/pull/3035)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.27\\n [\\\\#3041](https://github.com/scalameta/metals/pull/3041)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC7\\n [\\\\#3039](https://github.com/scalameta/metals/pull/3039)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.28 [\\\\#3038](https://github.com/scalameta/metals/pull/3038)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.13.0\\n [\\\\#3037](https://github.com/scalameta/metals/pull/3037)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.10.Final\\n [\\\\#3036](https://github.com/scalameta/metals/pull/3036)\\n ([scala-steward](https://github.com/scala-steward))\\n- Alternative version of #2999: Add more tests on using sbt as the build server\\n [\\\\#3006](https://github.com/scalameta/metals/pull/3006)\\n ([adpi2](https://github.com/adpi2))\\n- Update scalameta to 4.4.26\\n [\\\\#3027](https://github.com/scalameta/metals/pull/3027)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix indentation when pasting part of the line\\n [\\\\#3025](https://github.com/scalameta/metals/pull/3025)\\n ([tgodzik](https://github.com/tgodzik))\\n- References - filter out wrong results from unrelated build targets\\n [\\\\#2980](https://github.com/scalameta/metals/pull/2980)\\n ([dos65](https://github.com/dos65))\\n- Upgrade to the latest sbt-sourcegraph\\n [\\\\#3022](https://github.com/scalameta/metals/pull/3022)\\n ([olafurpg](https://github.com/olafurpg))\\n- Merge sourcegraph branch into main.\\n [\\\\#3017](https://github.com/scalameta/metals/pull/3017)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make the SemanticDB compiler options used by mtags configurable.\\n [\\\\#3018](https://github.com/scalameta/metals/pull/3018)\\n ([olafurpg](https://github.com/olafurpg))\\n- Minimize file rewrites in `.metals/readonly/dependencies`\\n [\\\\#3004](https://github.com/scalameta/metals/pull/3004)\\n ([dos65](https://github.com/dos65))\\n- Automatic refactor - pattern match with placeholder\\n [\\\\#3002](https://github.com/scalameta/metals/pull/3002)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Bump coursier/cache-action from 6.2 to 6.3\\n [\\\\#3015](https://github.com/scalameta/metals/pull/3015)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update mdoc, sbt-mdoc to 2.2.22\\n [\\\\#3013](https://github.com/scalameta/metals/pull/3013)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.11.4\\n [\\\\#3012](https://github.com/scalameta/metals/pull/3012)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.9.Final\\n [\\\\#3011](https://github.com/scalameta/metals/pull/3011)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.9\\n [\\\\#3010](https://github.com/scalameta/metals/pull/3010)\\n ([scala-steward](https://github.com/scala-steward))\\n- Automatically convert $ to $$ when changing to string interpolation\\n [\\\\#2996](https://github.com/scalameta/metals/pull/2996)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support brackets in multiline strings\\n [\\\\#2995](https://github.com/scalameta/metals/pull/2995)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Additional completion pos fix for `Select` tree\\n [\\\\#2998](https://github.com/scalameta/metals/pull/2998)\\n ([dos65](https://github.com/dos65))\\n- Mention new run/test commands in the VS Code editor page\\n [\\\\#2993](https://github.com/scalameta/metals/pull/2993)\\n ([tgodzik](https://github.com/tgodzik))\\n- Point to coc.nvim for defaults rather than have them in here.\\n [\\\\#2988](https://github.com/scalameta/metals/pull/2988)\\n ([ckipp01](https://github.com/ckipp01))\\n- Include parens on lambda in Scala 3 when inserting type in params with brace.\\n [\\\\#2989](https://github.com/scalameta/metals/pull/2989)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correctly paste extension groups\\n [\\\\#2987](https://github.com/scalameta/metals/pull/2987)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Support extension methods in hover\\n [\\\\#2978](https://github.com/scalameta/metals/pull/2978)\\n ([tgodzik](https://github.com/tgodzik))\\n- Intend on paste [\\\\#2815](https://github.com/scalameta/metals/pull/2815)\\n ([Giggiux](https://github.com/Giggiux))\\n- Update default version for bug report\\n [\\\\#2984](https://github.com/scalameta/metals/pull/2984)\\n ([dos65](https://github.com/dos65))\\n- Update mdoc to 2.2.22 [\\\\#2981](https://github.com/scalameta/metals/pull/2981)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Filter out -print-lines and -print-tasty options\\n [\\\\#2979](https://github.com/scalameta/metals/pull/2979)\\n ([tgodzik](https://github.com/tgodzik))\\n- Replace the usage of nuprocess\\n [\\\\#2933](https://github.com/scalameta/metals/pull/2933)\\n ([dos65](https://github.com/dos65))\\n- Mtags3 - exclude scala2 depedencies.\\n [\\\\#2971](https://github.com/scalameta/metals/pull/2971)\\n ([dos65](https://github.com/dos65))\\n- Fix ammonite type completions\\n [\\\\#2974](https://github.com/scalameta/metals/pull/2974)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update munit to 0.7.27 [\\\\#2967](https://github.com/scalameta/metals/pull/2967)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.14.1 [\\\\#2965](https://github.com/scalameta/metals/pull/2965)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.11.2\\n [\\\\#2964](https://github.com/scalameta/metals/pull/2964)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump cache-action to latest.\\n [\\\\#2970](https://github.com/scalameta/metals/pull/2970)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update jackson-databind to 2.12.4\\n [\\\\#2963](https://github.com/scalameta/metals/pull/2963)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC6\\n [\\\\#2968](https://github.com/scalameta/metals/pull/2968)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade snapshot version\\n [\\\\#2957](https://github.com/scalameta/metals/pull/2957)\\n ([dos65](https://github.com/dos65))\\n- fix release notes date [\\\\#2958](https://github.com/scalameta/metals/pull/2958)\\n ([dos65](https://github.com/dos65))\\n- 0.10.5 - release notes [\\\\#2953](https://github.com/scalameta/metals/pull/2953)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/07/14/tungsten","metadata":{"permalink":"/metals/blog/2021/07/14/tungsten","source":"@site/blog/2021-07-14-tungsten.md","title":"Metals v0.10.5 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.5, which contains a lot of fixes, adds Scala 3.0.1 support,","date":"2021-07-14T00:00:00.000Z","formattedDate":"July 14, 2021","tags":[],"readingTime":5.7,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.5 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.6 - Tungsten","permalink":"/metals/blog/2021/09/06/tungsten"},"nextItem":{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.5, which contains a lot of fixes, adds Scala 3.0.1 support,\\nand brings another nice feature!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release155
Merged PRs73
Contributors9
Closed issues18
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/40?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add support for `textDocument/selectionRange`\\n- [Scala 3] `Inferred Type` code action and other improvements\\n- Better support of scalafmt for Scala 3 projects\\n- Search symbol references from dependency source in the workspace\\n\\n## Add support for `textDocument/selectionRange`\\n\\nDue to the great work by [@ckipp01](https://github.com/ckipp01) Metals now implements the `textDocument/selectionRange` [LSP-method](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_selectionRange).\\nIt allows you to easily select an expression and expand/shrink it using shortcut combinations:\\n\\n![gif1](https://user-images.githubusercontent.com/13974112/125335989-7a5f8780-e34d-11eb-911f-42f851478737.gif)\\n\\nDefault keybindings in VSCode:\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
Win/LinuxmacOS
ExpandShift+Alt+Right\u2303\u21e7\u2318\u2192
ShrinkShift+Alt+Left\u2303\u21e7\u2318\u2190
\\n\\n## [Scala3] `Inferred Type` code action and other improvements\\n\\nWe\'re hard at work ensuring that the same feature-set for Scala 2 is available for Scala 3.\\nThis release adds support for the `Insert Inferred Type` code action.\\n\\n![gif2](https://i.imgur.com/GJGFOOy.gif)\\n\\nIn addition to other small fixes, it\'s worth mentioning that the `Go to Definition` functionality was improved so that in situations where there are compilation issues, you\'re now able to better navigate to the definition site.\\n\\n## Better support of scalafmt for Scala 3 projects\\n\\nIn order to support different Scala dialects scalafmt added a [`runner.dialect` setting](https://scalameta.org/scalafmt/docs/configuration.html#scala-3) to support Scala 3.\\nMetals will now correctly generate and even automatically upgrade your `.scalafmt.conf`.\\nMoreover, in projects that contain different Scala major versions Metals will set a separate dialect for each separate source directory.\\n\\n## Search symbol references from dependency source in the workspace\\n\\nThanks to [@Z1kkurat](https://github.com/Z1kkurat) \\"Find References\\" now also works from within your dependency sources to include references from all workspace sources.\\nPreviously, it included only local occurrences in the dependency source file.\\n\\n![gif3](https://i.imgur.com/myHPDjP.gif)\\n\\n## Miscellaneous\\n\\n- Fixed issues with Metals client still running after closing window\\n- Fixed indexing of Scala 3 libraries that include macros\\n- Fixed issues with breakpoints not stopped when using optional braces\\n- Print type decorations for synthetic apply\\n- Wrap autofilled arguments with backticks\\n- Don\'t offer to organize imports when there is an error in the file\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.4..v0.10.5\\n22\\tChris Kipp\\n18\\tVadim Chelyshov\\n17\\tTomasz Godzik\\n 2\\tAdrien Piquerez\\n 2\\tLuigi Frunzio\\n 2\\tKamil Podsiad\u0142o\\n 1\\tZ1kkurat\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.5](https://github.com/scalameta/metals/tree/v0.10.5) (2021-07-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.4...v0.10.5)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 3.0.2-RC1 and drop references to 3.0.0-RC\\n [\\\\#2955](https://github.com/scalameta/metals/pull/2955)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Scala 3.0.1 support\\n [\\\\#2947](https://github.com/scalameta/metals/pull/2947)\\n ([dos65](https://github.com/dos65))\\n- Update vim docs now that Neovim 0.5.0 is out.\\n [\\\\#2951](https://github.com/scalameta/metals/pull/2951)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t set detail in completion if it\'s empty.\\n [\\\\#2950](https://github.com/scalameta/metals/pull/2950)\\n ([ckipp01](https://github.com/ckipp01))\\n- Organize imports quickfix action\\n [\\\\#2935](https://github.com/scalameta/metals/pull/2935)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- [Scala3] Fix completion pos inference for Select with nme.ERROR\\n [\\\\#2940](https://github.com/scalameta/metals/pull/2940)\\n ([dos65](https://github.com/dos65))\\n- [Scala 3] Properly show enum on hover\\n [\\\\#2938](https://github.com/scalameta/metals/pull/2938)\\n ([tgodzik](https://github.com/tgodzik))\\n- Correct footer label\\n [\\\\#2939](https://github.com/scalameta/metals/pull/2939)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala2] PcDefinition fix\\n [\\\\#2917](https://github.com/scalameta/metals/pull/2917)\\n ([dos65](https://github.com/dos65))\\n- Fix dead links and add in serve command\\n [\\\\#2937](https://github.com/scalameta/metals/pull/2937)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala3] Fix completions after newline + dot\\n [\\\\#2930](https://github.com/scalameta/metals/pull/2930)\\n ([dos65](https://github.com/dos65))\\n- Update deploy command for docusaurus.\\n [\\\\#2936](https://github.com/scalameta/metals/pull/2936)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update to Docusaurus 2.0\\n [\\\\#2927](https://github.com/scalameta/metals/pull/2927)\\n ([ckipp01](https://github.com/ckipp01))\\n- Revert \\"Merge pull request #2908 from tgodzik/reset-object\\"\\n [\\\\#2931](https://github.com/scalameta/metals/pull/2931)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t offer to organize imports when there is an error in the file\\n [\\\\#2921](https://github.com/scalameta/metals/pull/2921)\\n ([ckipp01](https://github.com/ckipp01))\\n- Do not use $TMPDIR to store sbt-launcher.jar\\n [\\\\#2924](https://github.com/scalameta/metals/pull/2924)\\n ([kpodsiad](https://github.com/kpodsiad))\\n- Wrap autofilled arguments with backticks\\n [\\\\#2929](https://github.com/scalameta/metals/pull/2929)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print type decorations for synthetic apply\\n [\\\\#2906](https://github.com/scalameta/metals/pull/2906)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Use symbol search for PC `definitions`.\\n [\\\\#2900](https://github.com/scalameta/metals/pull/2900)\\n ([dos65](https://github.com/dos65))\\n- Wrap worksheets in object instead of a class\\n [\\\\#2908](https://github.com/scalameta/metals/pull/2908)\\n ([tgodzik](https://github.com/tgodzik))\\n- Search for symbol references in workspace\\n [\\\\#2920](https://github.com/scalameta/metals/pull/2920)\\n ([Z1kkurat](https://github.com/Z1kkurat))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.23\\n [\\\\#2915](https://github.com/scalameta/metals/pull/2915)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix unclear heading in sbt docs.\\n [\\\\#2916](https://github.com/scalameta/metals/pull/2916)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update ipcsocket to 1.4.0\\n [\\\\#2913](https://github.com/scalameta/metals/pull/2913)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update lz4-java to 1.8.0\\n [\\\\#2912](https://github.com/scalameta/metals/pull/2912)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.10.0\\n [\\\\#2911](https://github.com/scalameta/metals/pull/2911)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scala3] Rework `NamesInScope`\\n [\\\\#2867](https://github.com/scalameta/metals/pull/2867)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.1-RC2\\n [\\\\#2898](https://github.com/scalameta/metals/pull/2898)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix off by one error while setting DAP breakpoints\\n [\\\\#2894](https://github.com/scalameta/metals/pull/2894)\\n ([tgodzik](https://github.com/tgodzik))\\n- Exclude Jmh and Scalafix from the list of build targets in sbt\\n [\\\\#2895](https://github.com/scalameta/metals/pull/2895)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala3] Provide correct dialect to `Mtags.allToplevels` calls.\\n [\\\\#2892](https://github.com/scalameta/metals/pull/2892)\\n ([dos65](https://github.com/dos65))\\n- Fix CompilerJobQueue concurrent access/shutdown\\n [\\\\#2890](https://github.com/scalameta/metals/pull/2890)\\n ([dos65](https://github.com/dos65))\\n- Get rid of warning about setting -Xsemanticdb twice.\\n [\\\\#2889](https://github.com/scalameta/metals/pull/2889)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scalafmt] Rewrite `.scalafmt.conf` if sources require non-default dialect\\n [\\\\#2814](https://github.com/scalameta/metals/pull/2814)\\n ([dos65](https://github.com/dos65))\\n- Add support for `textDocument/selectionRange`.\\n [\\\\#2862](https://github.com/scalameta/metals/pull/2862)\\n ([ckipp01](https://github.com/ckipp01))\\n- Ensure a valid URI is returned for non-html analyze stacktrace.\\n [\\\\#2876](https://github.com/scalameta/metals/pull/2876)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.21\\n [\\\\#2886](https://github.com/scalameta/metals/pull/2886)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.3.1\\n [\\\\#2884](https://github.com/scalameta/metals/pull/2884)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core to 3.0.0-RC5\\n [\\\\#2885](https://github.com/scalameta/metals/pull/2885)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.4\\n [\\\\#2883](https://github.com/scalameta/metals/pull/2883)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.2\\n [\\\\#2882](https://github.com/scalameta/metals/pull/2882)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-jmh to 0.4.3\\n [\\\\#2887](https://github.com/scalameta/metals/pull/2887)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.4.0\\n [\\\\#2881](https://github.com/scalameta/metals/pull/2881)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump sbt-debug-adapter to 1.1.2\\n [\\\\#2872](https://github.com/scalameta/metals/pull/2872)\\n ([adpi2](https://github.com/adpi2))\\n- Lazily get explicit choice.\\n [\\\\#2868](https://github.com/scalameta/metals/pull/2868)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Enable inferred type code action\\n [\\\\#2825](https://github.com/scalameta/metals/pull/2825)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t offer completions inside scaladoc and comments\\n [\\\\#2822](https://github.com/scalameta/metals/pull/2822)\\n ([Giggiux](https://github.com/Giggiux))\\n- WorkspaceSearchVisitior - make search more predictable.\\n [\\\\#2863](https://github.com/scalameta/metals/pull/2863)\\n ([dos65](https://github.com/dos65))\\n- Enable organize-imports for mtags3\\n [\\\\#2860](https://github.com/scalameta/metals/pull/2860)\\n ([dos65](https://github.com/dos65))\\n- Run organize imports on Scala 3 sources\\n [\\\\#2858](https://github.com/scalameta/metals/pull/2858)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable organize imports for Scala 3\\n [\\\\#2857](https://github.com/scalameta/metals/pull/2857)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Add test that checks that diagnostic for inline def usage works correctly\\n [\\\\#2854](https://github.com/scalameta/metals/pull/2854)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.1-RC1\\n [\\\\#2852](https://github.com/scalameta/metals/pull/2852)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump olafurpg/setup-scala from 10 to 12\\n [\\\\#2848](https://github.com/scalameta/metals/pull/2848)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- ScalaVersions: fix scala3 version extraction from jar name. \\n [\\\\#2833](https://github.com/scalameta/metals/pull/2833)\\n ([dos65](https://github.com/dos65))\\n- Update amonite to 2.3.8-124-2da846d2 and add support for 2.13.6\\n [\\\\#2851](https://github.com/scalameta/metals/pull/2851)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert Bloop version upgrade\\n [\\\\#2850](https://github.com/scalameta/metals/pull/2850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix scalafmt config\\n [\\\\#2849](https://github.com/scalameta/metals/pull/2849)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-core to 3.0.0-RC4\\n [\\\\#2845](https://github.com/scalameta/metals/pull/2845)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.16\\n [\\\\#2844](https://github.com/scalameta/metals/pull/2844)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.1\\n [\\\\#2843](https://github.com/scalameta/metals/pull/2843)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.8.Final\\n [\\\\#2842](https://github.com/scalameta/metals/pull/2842)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update nuprocess to 2.0.2\\n [\\\\#2841](https://github.com/scalameta/metals/pull/2841)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.5\\n [\\\\#2840](https://github.com/scalameta/metals/pull/2840)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.15\\n [\\\\#2839](https://github.com/scalameta/metals/pull/2839)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.8\\n [\\\\#2838](https://github.com/scalameta/metals/pull/2838)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump coursier/cache-action from 5 to 6.1\\n [\\\\#2846](https://github.com/scalameta/metals/pull/2846)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Update metaconfig-core to 0.9.14\\n [\\\\#2836](https://github.com/scalameta/metals/pull/2836)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.29\\n [\\\\#2835](https://github.com/scalameta/metals/pull/2835)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.8-43-c2d941d9\\n [\\\\#2834](https://github.com/scalameta/metals/pull/2834)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add FAQ entry about sbt Apple M1 issue\\n [\\\\#2832](https://github.com/scalameta/metals/pull/2832)\\n ([tgodzik](https://github.com/tgodzik))\\n- Minor fix in last release notes\\n [\\\\#2831](https://github.com/scalameta/metals/pull/2831)\\n ([dos65](https://github.com/dos65))\\n- Add release notes - 0.10.4 release\\n [\\\\#2830](https://github.com/scalameta/metals/pull/2830)\\n ([dos65](https://github.com/dos65))"},{"id":"/2021/05/31/tungsten","metadata":{"permalink":"/metals/blog/2021/05/31/tungsten","source":"@site/blog/2021-05-31-tungsten.md","title":"Metals v0.10.4 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.4, which adds support for Scala 2.12.14.","date":"2021-05-31T00:00:00.000Z","formattedDate":"May 31, 2021","tags":[],"readingTime":1.315,"hasTruncateMarker":false,"authors":[{"name":"Vadim Chelyshov","url":"https://twitter.com/_dos65","imageURL":"https://github.com/dos65.png"}],"frontMatter":{"author":"Vadim Chelyshov","title":"Metals v0.10.4 - Tungsten","authorURL":"https://twitter.com/_dos65","authorImageURL":"https://github.com/dos65.png"},"prevItem":{"title":"Metals v0.10.5 - Tungsten","permalink":"/metals/blog/2021/07/14/tungsten"},"nextItem":{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.4, which adds support for Scala 2.12.14. \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release24
Merged PRs11
Contributors4
Closed issues3
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/39?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add support for Scala 2.12.14\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.3..v0.10.4\\nTomasz Godzik\\nVadim Chelyshov\\nLuigi Frunzio\\nChris Kipp\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.4](https://github.com/scalameta/metals/tree/v0.10.4) (2021-05-31)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.3...v0.10.4)\\n\\n**Merged pull requests:**\\n\\n- Add support for 2.12.14\\n [\\\\#2826](https://github.com/scalameta/metals/pull/2826)\\n ([dos65](https://github.com/dos65))\\n- Fix pprint dependency for Scala3 RC versions\\n [\\\\#2824](https://github.com/scalameta/metals/pull/2824)\\n ([dos65](https://github.com/dos65))\\n- Print better types on hover\\n [\\\\#2821](https://github.com/scalameta/metals/pull/2821)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t warn about sourceroot for Scala 3\\n [\\\\#2819](https://github.com/scalameta/metals/pull/2819)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update pprint to newest version\\n [\\\\#2818](https://github.com/scalameta/metals/pull/2818)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues when importing in an empty package\\n [\\\\#2817](https://github.com/scalameta/metals/pull/2817)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix error for remote debugging when missing build target\\n [\\\\#2812](https://github.com/scalameta/metals/pull/2812)\\n ([Giggiux](https://github.com/Giggiux))\\n- Publish scalameta parser diagnostics for Scala 3\\n [\\\\#2807](https://github.com/scalameta/metals/pull/2807)\\n ([tgodzik](https://github.com/tgodzik))\\n- Group Scala versions in docs to make it easier to see which are supported\\n [\\\\#2806](https://github.com/scalameta/metals/pull/2806)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix duplicate toplevels object definition when using enums\\n [\\\\#2809](https://github.com/scalameta/metals/pull/2809)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.10.3 release\\n [\\\\#2781](https://github.com/scalameta/metals/pull/2781)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/05/17/tungsten","metadata":{"permalink":"/metals/blog/2021/05/17/tungsten","source":"@site/blog/2021-05-17-tungsten.md","title":"Metals v0.10.3 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.3, which brings support for","date":"2021-05-17T00:00:00.000Z","formattedDate":"May 17, 2021","tags":[],"readingTime":4.73,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.3 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.4 - Tungsten","permalink":"/metals/blog/2021/05/31/tungsten"},"nextItem":{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.3, which brings support for\\nthe long awaited Scala 3.0.0 version together with some important improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release104
Merged PRs49
Contributors6
Closed issues12
New features6
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/38?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Scala 3.0.0 support!\\n- Scala 2.13.6 along with `-Xsource:3` support.\\n- Extract class code action.\\n- Rename file as class.\\n- [Scala 3] Auto imports in completions and code actions.\\n- Support same names in different build targets.\\n\\n## Extract class code action\\n\\nDue to the great work by [@Giggiux](https://github.com/Giggiux) Metals now\\nprovides a new `Extract to file` code action, which is available when there are\\nmultiple definitions in the source file. This works for classes, traits, enums,\\nand objects. The code action will not show if the definition we are extracting\\nis or extends a `sealed` definition.\\n\\n![gif1](https://i.imgur.com/dKKkLcL.gif)\\n\\nThe extraction happens via a code action on the definition\'s name, it will also\\nextract any relevant package definition, imports, and, if available, the\\ncompanion.\\n\\n## Rename file as class\\n\\nIt is also now possible when there is only a single definition in a file that\\ndoesn\'t have the same name as the definition, to quickly rename the file\\naccording to its content.\\n\\n![gif2](https://i.imgur.com/pUADnMn.gif)\\n\\n## [Scala 3] Auto imports in completions and code actions\\n\\nPreviously, the experience of writing Scala 3 code might be spoiled because\\nthese usual features weren\'t implemented for Scala 3 in Metals. We are happy to\\nsay that there is no more need to write imports by hand and remember the exact\\npath to the symbol. Now, completions in Scala 3 sources provide symbols from the\\nworkspace and libraries and their application automatically adds the necessary\\nimport. Code action `AutoImport` also started working.\\n\\nEnjoy writing Scala 3!\\n\\nThis required some huge amounts of effort and is working thanks to\\n([dos65](https://github.com/dos65)).\\n\\n### Support same names in different build targets\\n\\nThis change fixes navigation issues that previously happened in case of having\\nclashing names across libraries and projects. An additional thing you might\\nnotice with this change is the presence of library names in `.metals/readonly`\\ndirectory. Previously, for example, if jump into `String` the file was extracted\\ninto `./metals/readonly/scala/Predef.scala`.\\n\\nNow it will be\\n`./metals/readonly/dependencies/scala-library-$scalaVersion-sources.jar/scala/Predef.scala`\\n\\n## Miscellaneous\\n\\n- Support names with dots for \\"Implement all members\\" code action.\\n- Fix invalid auto imports with wrong prefix.\\n- Fix flaky \\"Organize imports\\" behaviour.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.2..v0.10.3\\nTomasz Godzik\\nLuigi Frunzio\\nVadim Chelyshov\\nChris Kipp\\nAmaal Ali\\nEvgeny Kurnevsky\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.3](https://github.com/scalameta/metals/tree/v0.10.3) (2021-05-17)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.2...v0.10.3)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.6\\n [\\\\#2805](https://github.com/scalameta/metals/pull/2805)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Completions - fix `Renamed` and `specifyOwner` Autoimports\\n application [\\\\#2804](https://github.com/scalameta/metals/pull/2804)\\n ([dos65](https://github.com/dos65))\\n- Fix field ordering in completions\\n [\\\\#2803](https://github.com/scalameta/metals/pull/2803)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Completions - do not backtick NamedArg completion values\\n [\\\\#2802](https://github.com/scalameta/metals/pull/2802)\\n ([dos65](https://github.com/dos65))\\n- Forward dialect to ScalaMtags to avoid parsing fallback\\n [\\\\#2799](https://github.com/scalameta/metals/pull/2799)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ignore NoSuchFileException since it only comes from badly configured jar\\n [\\\\#2797](https://github.com/scalameta/metals/pull/2797)\\n ([tgodzik](https://github.com/tgodzik))\\n- SemanticdbDefinition - use correct dialect\\n [\\\\#2780](https://github.com/scalameta/metals/pull/2780)\\n ([dos65](https://github.com/dos65))\\n- Update sbt-jmh to 0.4.2\\n [\\\\#2794](https://github.com/scalameta/metals/pull/2794)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove most soft keywords from being backticked.\\n [\\\\#2796](https://github.com/scalameta/metals/pull/2796)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update requests to 0.6.9\\n [\\\\#2786](https://github.com/scalameta/metals/pull/2786)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.10 [\\\\#2784](https://github.com/scalameta/metals/pull/2784)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.13 [\\\\#2787](https://github.com/scalameta/metals/pull/2787)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.7\\n [\\\\#2785](https://github.com/scalameta/metals/pull/2785)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.4\\n [\\\\#2788](https://github.com/scalameta/metals/pull/2788)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.9.0\\n [\\\\#2789](https://github.com/scalameta/metals/pull/2789)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.2\\n [\\\\#2791](https://github.com/scalameta/metals/pull/2791)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.17\\n [\\\\#2793](https://github.com/scalameta/metals/pull/2793)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scala-java8-compat to 1.0.0\\n [\\\\#2790](https://github.com/scalameta/metals/pull/2790)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.21\\n [\\\\#2792](https://github.com/scalameta/metals/pull/2792)\\n ([scala-steward](https://github.com/scala-steward))\\n- Delete unused `Scala3ToplevelMtags`\\n [\\\\#2782](https://github.com/scalameta/metals/pull/2782)\\n ([dos65](https://github.com/dos65))\\n- Add support for Scala 3.0.0\\n [\\\\#2779](https://github.com/scalameta/metals/pull/2779)\\n ([tgodzik](https://github.com/tgodzik))\\n- Scala3 - AutoImports and completions from workspace\\n [\\\\#2728](https://github.com/scalameta/metals/pull/2728)\\n ([dos65](https://github.com/dos65))\\n- Code action to move classes to their own files if requirements are met\\n [\\\\#2723](https://github.com/scalameta/metals/pull/2723)\\n ([Giggiux](https://github.com/Giggiux))\\n- Properly adjust folding range end on windows\\n [\\\\#2774](https://github.com/scalameta/metals/pull/2774)\\n ([tgodzik](https://github.com/tgodzik))\\n- Surface error to user when they pass in an invalid envFile.\\n [\\\\#2770](https://github.com/scalameta/metals/pull/2770)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix failing tests: SbtBloopSuite + FoldingRangeSuite (Windows)\\n [\\\\#2767](https://github.com/scalameta/metals/pull/2767)\\n ([dos65](https://github.com/dos65))\\n- Update link to Mill\'s new website\\n [\\\\#2772](https://github.com/scalameta/metals/pull/2772)\\n ([amaalali](https://github.com/amaalali))\\n- Update Scalameta to 4.4.15\\n [\\\\#2765](https://github.com/scalameta/metals/pull/2765)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.7.5\\n [\\\\#2761](https://github.com/scalameta/metals/pull/2761)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.20\\n [\\\\#2759](https://github.com/scalameta/metals/pull/2759)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.5.1\\n [\\\\#2758](https://github.com/scalameta/metals/pull/2758)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.8.2\\n [\\\\#2757](https://github.com/scalameta/metals/pull/2757)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.4\\n [\\\\#2756](https://github.com/scalameta/metals/pull/2756)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.12 [\\\\#2755](https://github.com/scalameta/metals/pull/2755)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.8\\n [\\\\#2754](https://github.com/scalameta/metals/pull/2754)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.5 [\\\\#2753](https://github.com/scalameta/metals/pull/2753)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.9 [\\\\#2752](https://github.com/scalameta/metals/pull/2752)\\n ([scala-steward](https://github.com/scala-steward))\\n- [Scalafix] Report problems with invalid path and fix flaky behaviour\\n [\\\\#2749](https://github.com/scalameta/metals/pull/2749)\\n ([tgodzik](https://github.com/tgodzik))\\n- Toplevel Mtags: use single indexer implementation\\n [\\\\#2745](https://github.com/scalameta/metals/pull/2745)\\n ([dos65](https://github.com/dos65))\\n- Fix wrong import when working with akka\\n [\\\\#2739](https://github.com/scalameta/metals/pull/2739)\\n ([tgodzik](https://github.com/tgodzik))\\n- SymbolIndex: multiply symbol locations\\n [\\\\#2668](https://github.com/scalameta/metals/pull/2668)\\n ([dos65](https://github.com/dos65))\\n- Update emacs documentation.\\n [\\\\#2733](https://github.com/scalameta/metals/pull/2733)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Add extra check before auto-connecting to server.\\n [\\\\#2737](https://github.com/scalameta/metals/pull/2737)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support 3.16.0 lsp specification with compatibility for non `array`/`\u2026\\n [\\\\#2735](https://github.com/scalameta/metals/pull/2735)\\n ([Giggiux](https://github.com/Giggiux))\\n- Add in the parentUri when offering the newSymbol code action.\\n [\\\\#2734](https://github.com/scalameta/metals/pull/2734)\\n ([ckipp01](https://github.com/ckipp01))\\n- `ImplementAsbtractMembers` - support names with dots\\n [\\\\#2732](https://github.com/scalameta/metals/pull/2732)\\n ([dos65](https://github.com/dos65))\\n- Remove munit sbt plugin to fix CI\\n [\\\\#2731](https://github.com/scalameta/metals/pull/2731)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove test reports [\\\\#2730](https://github.com/scalameta/metals/pull/2730)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.10.2\\n [\\\\#2729](https://github.com/scalameta/metals/pull/2729)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/04/20/tungsten","metadata":{"permalink":"/metals/blog/2021/04/20/tungsten","source":"@site/blog/2021-04-20-tungsten.md","title":"Metals v0.10.2 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.2, which mainly adds support","date":"2021-04-20T00:00:00.000Z","formattedDate":"April 20, 2021","tags":[],"readingTime":3.755,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.2 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.3 - Tungsten","permalink":"/metals/blog/2021/05/17/tungsten"},"nextItem":{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.2, which mainly adds support\\nfor Scala 3.0.0-RC3 as well a couple of smaller improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release62
Merged PRs30
Contributors8
Closed issues8
New features4
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/37?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- [Scala 3] Support for Scala 3.0.0-RC3\\n- Add code action to add/remove string interpolation.\\n- Offer to organize imports when on an unused import.\\n- [Scala 3] Better names for types in completions and hovers.\\n\\n## Add/remove string interpolation\\n\\nThanks to some great work by our newest contributor\\n[Giggiux](https://github.com/Giggiux) it\'s now possible to:\\n\\n- easily add string interpolation to an existing string\\n\\n```scala\\nval message = \\"Hello this is a message\\"\\n```\\n\\nWhen the cursor is positioned inside of the string we can invoke the code action\\nand get:\\n\\n```scala\\nval message = s\\"Hello this is a message\\"\\n```\\n\\nWhile this is a simpler code action, it can be paired with other things like\\ncompletions that allow for a workflow with less manual steps.\\n\\n- remove string interpolation if no splices are found\\n\\nWhen the cursor is positioned inside a string interpolation, that does not contain\\nany splices ( `$identifier`), we will now offer an action to quickly get rid of\\nthe additional `s`.\\n\\n```scala\\nval message = s\\"Hello this is a message without splices\\"\\n```\\n\\nwill change to:\\n\\n```scala\\nval message = \\"Hello this is a message without splices\\"\\n```\\n\\n## Offer to organize imports when on an unused import\\n\\nIn addition to the usual \\"organize imports\\", to try to improve the user\\nexperience, Metals now offers a code action to organize imports whenever the\\ncursor is situated on an unused import reported by the diagnostics. Thanks\\n[ckipp01](https://github.com/ckipp01) for this new feature!\\n\\n## [Scala 3] Better names for types in completions and hovers.\\n\\nThanks to another great PR by [tanishiking](https://github.com/tanishiking)\\nMetals will offer completions and hovers that include shorter names instead of\\nfully qualified ones whenever they are currently in scope. They will also be\\nmore similar to the ones that you might be accustomed to in Scala 2. You can\\nfind some more examples of improvements in the\\n[pull request](https://github.com/scalameta/metals/pull/2637) itself.\\n\\n## Miscellaneous\\n\\n- Make insert type work with renamed imports.\\n- Treat `.srcjar` as jars to support Bazel in the future (thanks\\n [darl](https://github.com/darl)!).\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.1..v0.10.2\\nTomasz Godzik\\nAyoub Benali\\nChris Kipp\\nAdrien Piquerez\\nLuigi Frunzio\\nRikito Taniguchi\\nToshiyuki Takahashi\\nVladislav Dolbilov\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.2](https://github.com/scalameta/metals/tree/v0.10.2) (2021-04-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.1...v0.10.2)\\n\\n**Merged pull requests:**\\n\\n- Better names for types in completions\\n [\\\\#2637](https://github.com/scalameta/metals/pull/2637)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for Scala 3.0.0-RC3\\n [\\\\#2727](https://github.com/scalameta/metals/pull/2727)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make insert type work with renamed imports\\n [\\\\#2699](https://github.com/scalameta/metals/pull/2699)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt to 3.0.0-RC1\\n [\\\\#2726](https://github.com/scalameta/metals/pull/2726)\\n ([tgodzik](https://github.com/tgodzik))\\n- Treat .srcjar as jars [\\\\#2710](https://github.com/scalameta/metals/pull/2710)\\n ([darl](https://github.com/darl))\\n- Update ujson to 1.3.11 [\\\\#2718](https://github.com/scalameta/metals/pull/2718)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.13\\n [\\\\#2721](https://github.com/scalameta/metals/pull/2721)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 26\\n [\\\\#2719](https://github.com/scalameta/metals/pull/2719)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.7.3\\n [\\\\#2720](https://github.com/scalameta/metals/pull/2720)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.7\\n [\\\\#2717](https://github.com/scalameta/metals/pull/2717)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.4 [\\\\#2716](https://github.com/scalameta/metals/pull/2716)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update geny to 0.6.8 [\\\\#2715](https://github.com/scalameta/metals/pull/2715)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.11\\n [\\\\#2713](https://github.com/scalameta/metals/pull/2713)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.3\\n [\\\\#2712](https://github.com/scalameta/metals/pull/2712)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issues with DAP tests\\n [\\\\#2709](https://github.com/scalameta/metals/pull/2709)\\n ([tgodzik](https://github.com/tgodzik))\\n- Document Sublime support for metals/didFocusTextDocument\\n [\\\\#2711](https://github.com/scalameta/metals/pull/2711)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add hint to welcome messages to use \'-F\' flag\\n [\\\\#2708](https://github.com/scalameta/metals/pull/2708)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump sbt-debug-adapter [\\\\#2695](https://github.com/scalameta/metals/pull/2695)\\n ([adpi2](https://github.com/adpi2))\\n- Add testframeworks back in to ensure tests run.\\n [\\\\#2705](https://github.com/scalameta/metals/pull/2705)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump sbt to 1.5.0 [\\\\#2703](https://github.com/scalameta/metals/pull/2703)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t override testSettings in unit tests\\n [\\\\#2702](https://github.com/scalameta/metals/pull/2702)\\n ([tgodzik](https://github.com/tgodzik))\\n- Print exception stack trace in DAP tests\\n [\\\\#2696](https://github.com/scalameta/metals/pull/2696)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Bloop to the newest SNAPSHOT\\n [\\\\#2698](https://github.com/scalameta/metals/pull/2698)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sublime Text documentation regarding Decoration protocol support\\n [\\\\#2701](https://github.com/scalameta/metals/pull/2701)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Make sure that a correct targetroot is reported\\n [\\\\#2693](https://github.com/scalameta/metals/pull/2693)\\n ([tgodzik](https://github.com/tgodzik))\\n- Offer organize imports when on an unused import.\\n [\\\\#2688](https://github.com/scalameta/metals/pull/2688)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add code action to add/remove string interpolation\\n [\\\\#2682](https://github.com/scalameta/metals/pull/2682)\\n ([Giggiux](https://github.com/Giggiux))\\n- Update the documentation to recommend using company-capf\\n [\\\\#2672](https://github.com/scalameta/metals/pull/2672)\\n ([tototoshi](https://github.com/tototoshi))\\n- Typo in release notes [\\\\#2684](https://github.com/scalameta/metals/pull/2684)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for Metals v0.10.1\\n [\\\\#2673](https://github.com/scalameta/metals/pull/2673)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/04/06/tungsten","metadata":{"permalink":"/metals/blog/2021/04/06/tungsten","source":"@site/blog/2021-04-06-tungsten.md","title":"Metals v0.10.1 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.1, which mainly concentrated","date":"2021-04-06T00:00:00.000Z","formattedDate":"April 6, 2021","tags":[],"readingTime":6.78,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.1 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.2 - Tungsten","permalink":"/metals/blog/2021/04/20/tungsten"},"nextItem":{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"}},"content":"We\'re happy to announce the release of Metals v0.10.1, which mainly concentrated\\non bugfixes together with a couple of smaller improvements. We also added\\nsupport for the almost ready Scala 3 version 3.0.0-RC2. Its final release is\\ncoming soon and Metals will try to make it an amazing experience!\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release173
Merged PRs86
Contributors9
Closed issues29
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/35?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 3.0.0-RC2\\n- Smoother main and test discovery\\n\\n## Smoother main and test discovery\\n\\nThanks to some great ideas (and obviously execution) by\\n[@ckipp01](https://github.com/ckipp01) it is now possible to specify alternative\\ndebug parameters that enable users to:\\n\\n- Run the main class in the current file, or in case that there are multiple\\n main classes quick pick window will appear for the users to choose the exact\\n main class to run.\\n- Run all tests in the current file.\\n- Run all tests in the current target.\\n\\nTo make that work some additional fields must be sent while starting the debug\\nsession:\\n\\n- `path` - uri to the file that is currently open.\\n- `runType` - enum value that can either be `run`, `testFile` or `testTarget`\\n\\nThe \\"args\\", \\"jvmOptions\\", \\"env\\", and \\"envFile\\" are all valid keys that can be\\nsent as well with the same format as usual.\\n\\nIn VS Code this is achieved via 3 new commands, that can easily bound to\\nshortcuts:\\n\\n- `metals.run-current-file` - run main classes in the current file\\n- `metals.test-current-file` - run test classes in the current file\\n- `metals.test-current-target` - run test classes in the current target\\n\\nMore information can be found in the\\n[Debug Adapter Protocol](https://scalameta.org/metals/docs/integrations/debug-adapter-protocol#how-to-add-support-for-debugging-in-my-editor)\\nsection of the documentation.\\n\\n## Miscellaneous\\n\\n- Support for Ammonite scripts using Scala 2.12.13 and 2.13.5.\\n- Fix outline for documents with Scala 3 syntax.\\n- Remove println that would sometimes print files while indexing them :(\\n- Show an error when user adds bad dependency into a worksheet.\\n- Fix issues on Windows with renames not being applied on current file.\\n- Change project directory to lower case when using New Scala Project.\\n- Renaming renamed imports now works correctly within a file.\\n- Fix renaming named parameters in constructors.\\n- Find alternative symbol references (such as companion object for a case class)\\n when not searching from the definition file.\\n- Automatically backtick symbols when renaming.\\n- Fix highlighting overloaded methods.\\n- Fix classloader issues when using worksheets.\\n- Fix issue where override was inserted twice for symbols that were already\\n overriden.\\n- Infer type for higher kinded functions correctly.\\n- Show better type decorations for higher kinded types.\\n- Improve indexing of Scala 3 sources <- a lot of hard work by\\n [@dos65](https://github.com/dos65)!\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.10.0..v0.10.1\\nTomasz Godzik\\nChris Kipp\\nVadim Chelyshov\\nAJ Zawawi\\nAlexandre Archambault\\nArthur McGibbon\\nEric Peters\\nGreg Atkinson\\nMicha\u0142 Bednarz\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.1](https://github.com/scalameta/metals/tree/v0.10.1) (2021-04-06)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.10.0...v0.10.1)\\n\\n**Merged pull requests:**\\n\\n- Get behind unified slash syntax.\\n [\\\\#2677](https://github.com/scalameta/metals/pull/2677)\\n ([ckipp01](https://github.com/ckipp01))\\n- Mtags: fix Scala3 parsing for Windows.\\n [\\\\#2678](https://github.com/scalameta/metals/pull/2678)\\n ([dos65](https://github.com/dos65))\\n- Update org.eclipse.lsp4j to 0.12.0\\n [\\\\#2669](https://github.com/scalameta/metals/pull/2669)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with old typesafe config in the worksheets\\n [\\\\#2674](https://github.com/scalameta/metals/pull/2674)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt-ci-release to 1.5.7\\n [\\\\#2671](https://github.com/scalameta/metals/pull/2671)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] Support new Scala3 syntax in symbol index\\n [\\\\#2600](https://github.com/scalameta/metals/pull/2600)\\n ([dos65](https://github.com/dos65))\\n- Update scalameta to 4.4.11\\n [\\\\#2667](https://github.com/scalameta/metals/pull/2667)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update requests to 0.6.6\\n [\\\\#2649](https://github.com/scalameta/metals/pull/2649)\\n ([scala-steward](https://github.com/scala-steward))\\n- A few changes to docs including a User Configuration section.\\n [\\\\#2642](https://github.com/scalameta/metals/pull/2642)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.19\\n [\\\\#2660](https://github.com/scalameta/metals/pull/2660)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.27\\n [\\\\#2664](https://github.com/scalameta/metals/pull/2664)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.3 [\\\\#2648](https://github.com/scalameta/metals/pull/2648)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.1\\n [\\\\#2651](https://github.com/scalameta/metals/pull/2651)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.1.1-jre\\n [\\\\#2647](https://github.com/scalameta/metals/pull/2647)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 24\\n [\\\\#2652](https://github.com/scalameta/metals/pull/2652)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.16\\n [\\\\#2653](https://github.com/scalameta/metals/pull/2653)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.3.2\\n [\\\\#2654](https://github.com/scalameta/metals/pull/2654)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.7.Final\\n [\\\\#2655](https://github.com/scalameta/metals/pull/2655)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.8.0\\n [\\\\#2656](https://github.com/scalameta/metals/pull/2656)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.7.1\\n [\\\\#2658](https://github.com/scalameta/metals/pull/2658)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.15\\n [\\\\#2659](https://github.com/scalameta/metals/pull/2659)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.23\\n [\\\\#2661](https://github.com/scalameta/metals/pull/2661)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.3.9 [\\\\#2650](https://github.com/scalameta/metals/pull/2650)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.27\\n [\\\\#2645](https://github.com/scalameta/metals/pull/2645)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-debug-adapter to 1.1.0\\n [\\\\#2644](https://github.com/scalameta/metals/pull/2644)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.5.4\\n [\\\\#2643](https://github.com/scalameta/metals/pull/2643)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add test to check for occurrences of anonymous using params\\n [\\\\#2640](https://github.com/scalameta/metals/pull/2640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that universal types deco are printed properly\\n [\\\\#2638](https://github.com/scalameta/metals/pull/2638)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 3.0.0-RC2\\n [\\\\#2639](https://github.com/scalameta/metals/pull/2639)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure higher kinded functions in signatures are inferred properly\\n [\\\\#2636](https://github.com/scalameta/metals/pull/2636)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not insert override twice\\n [\\\\#2635](https://github.com/scalameta/metals/pull/2635)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update geny to 0.6.7 [\\\\#2633](https://github.com/scalameta/metals/pull/2633)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use correct parent classloader for worksheets.\\n [\\\\#2631](https://github.com/scalameta/metals/pull/2631)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add documentation for online IDEs\\n [\\\\#2370](https://github.com/scalameta/metals/pull/2370)\\n ([MichalBednarz](https://github.com/MichalBednarz))\\n- Bump amm version and amm scala 2.13 version\\n [\\\\#2632](https://github.com/scalameta/metals/pull/2632)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update organize imports rule to 0.5.0\\n [\\\\#2630](https://github.com/scalameta/metals/pull/2630)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Adrien to the team!\\n [\\\\#2623](https://github.com/scalameta/metals/pull/2623)\\n ([tgodzik](https://github.com/tgodzik))\\n- Welcome Vadim to the team!\\n [\\\\#2624](https://github.com/scalameta/metals/pull/2624)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix highlighting overloaded methods\\n [\\\\#2622](https://github.com/scalameta/metals/pull/2622)\\n ([tgodzik](https://github.com/tgodzik))\\n- Run Scala 3 migrate on mtags sources\\n [\\\\#2617](https://github.com/scalameta/metals/pull/2617)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update dead links [\\\\#2620](https://github.com/scalameta/metals/pull/2620)\\n ([ajzawawi](https://github.com/ajzawawi))\\n- Add init option to strip color from DAP communication.\\n [\\\\#2615](https://github.com/scalameta/metals/pull/2615)\\n ([ckipp01](https://github.com/ckipp01))\\n- Show better message if no semanticdb is found for testFile.\\n [\\\\#2602](https://github.com/scalameta/metals/pull/2602)\\n ([ckipp01](https://github.com/ckipp01))\\n- Automatically backtick symbols when renaming\\n [\\\\#2605](https://github.com/scalameta/metals/pull/2605)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 7.7.0\\n [\\\\#2612](https://github.com/scalameta/metals/pull/2612)\\n ([scala-steward](https://github.com/scala-steward))\\n- Revert cache-action update\\n [\\\\#2614](https://github.com/scalameta/metals/pull/2614)\\n ([ckipp01](https://github.com/ckipp01))\\n- Find alternative symbol references when not searching from the definition file\\n [\\\\#2601](https://github.com/scalameta/metals/pull/2601)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt, scripted-plugin to 1.4.9\\n [\\\\#2613](https://github.com/scalameta/metals/pull/2613)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.5.Final\\n [\\\\#2611](https://github.com/scalameta/metals/pull/2611)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.5.0\\n [\\\\#2610](https://github.com/scalameta/metals/pull/2610)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.6\\n [\\\\#2607](https://github.com/scalameta/metals/pull/2607)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.2 [\\\\#2608](https://github.com/scalameta/metals/pull/2608)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.2\\n [\\\\#2606](https://github.com/scalameta/metals/pull/2606)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix renaming renamed imports when cursor is at the rename\\n [\\\\#2604](https://github.com/scalameta/metals/pull/2604)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update ujson to 1.3.0 [\\\\#2609](https://github.com/scalameta/metals/pull/2609)\\n ([scala-steward](https://github.com/scala-steward))\\n- Link to the actual metals client commands\\n [\\\\#2603](https://github.com/scalameta/metals/pull/2603)\\n ([ckipp01](https://github.com/ckipp01))\\n- Handle changed but locked files on Windows\\n [\\\\#2599](https://github.com/scalameta/metals/pull/2599)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Upgrade Coursier from 2.0.12 to 2.0.13 for bootstrap launcher enhancement to\\n download artifacts using global credentials.\\n [\\\\#2597](https://github.com/scalameta/metals/pull/2597)\\n ([greg-a-atkinson](https://github.com/greg-a-atkinson))\\n- Add tests for Scala 3 semanticdb and additional ones for hovers\\n [\\\\#2589](https://github.com/scalameta/metals/pull/2589)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix renaming named parameters in constructors\\n [\\\\#2596](https://github.com/scalameta/metals/pull/2596)\\n ([tgodzik](https://github.com/tgodzik))\\n- Run recent snapshot of scalafmt on Scala 3 sources\\n [\\\\#2587](https://github.com/scalameta/metals/pull/2587)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update cache-action to v6\\n [\\\\#2588](https://github.com/scalameta/metals/pull/2588)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Fix renaming renamed imports\\n [\\\\#2586](https://github.com/scalameta/metals/pull/2586)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change project directory to lower case when using New Scala Project\\n [\\\\#2585](https://github.com/scalameta/metals/pull/2585)\\n ([tgodzik](https://github.com/tgodzik))\\n- Set compilationUnit when using Dotty parser\\n [\\\\#2584](https://github.com/scalameta/metals/pull/2584)\\n ([tgodzik](https://github.com/tgodzik))\\n- Try to capture a better message on BSP exceptions.\\n [\\\\#2581](https://github.com/scalameta/metals/pull/2581)\\n ([ckipp01](https://github.com/ckipp01))\\n- Smoother main and test discovery\\n [\\\\#2532](https://github.com/scalameta/metals/pull/2532)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update millw scripts to the latest released ones\\n [\\\\#2579](https://github.com/scalameta/metals/pull/2579)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update metals doctor hint to match exact \'Import build\' instead of \'Build\\n import\' [\\\\#2578](https://github.com/scalameta/metals/pull/2578)\\n ([er1c](https://github.com/er1c))\\n- Update scalafix [\\\\#2577](https://github.com/scalameta/metals/pull/2577)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala 3] Don\'t suggest inferred type code action\\n [\\\\#2576](https://github.com/scalameta/metals/pull/2576)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with renames on Windows\\n [\\\\#2574](https://github.com/scalameta/metals/pull/2574)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure token edit distance is always calculated with correct dialect.\\n [\\\\#2552](https://github.com/scalameta/metals/pull/2552)\\n ([ckipp01](https://github.com/ckipp01))\\n- [Scala3] FoldingRange - tests for new syntax\\n [\\\\#2543](https://github.com/scalameta/metals/pull/2543)\\n ([dos65](https://github.com/dos65))\\n- Update munit-docs, sbt-munit to 0.7.22\\n [\\\\#2572](https://github.com/scalameta/metals/pull/2572)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.3\\n [\\\\#2567](https://github.com/scalameta/metals/pull/2567)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.18\\n [\\\\#2571](https://github.com/scalameta/metals/pull/2571)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.4\\n [\\\\#2568](https://github.com/scalameta/metals/pull/2568)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.12\\n [\\\\#2566](https://github.com/scalameta/metals/pull/2566)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.4.0\\n [\\\\#2565](https://github.com/scalameta/metals/pull/2565)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.26\\n [\\\\#2564](https://github.com/scalameta/metals/pull/2564)\\n ([scala-steward](https://github.com/scala-steward))\\n- Show an error to the user if they are using a bad dep in a worksheet.\\n [\\\\#2560](https://github.com/scalameta/metals/pull/2560)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove println in SemanticdbTextDocumentProvider\\n [\\\\#2557](https://github.com/scalameta/metals/pull/2557)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala3] DocumentSymbols - use proper dialect for tree rendering\\n [\\\\#2553](https://github.com/scalameta/metals/pull/2553)\\n ([dos65](https://github.com/dos65))\\n- Add support for Ammonite scripts with Scala 2.12.13\\n [\\\\#2548](https://github.com/scalameta/metals/pull/2548)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals v0.10.0\\n [\\\\#2529](https://github.com/scalameta/metals/pull/2529)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/02/24/tungsten","metadata":{"permalink":"/metals/blog/2021/02/24/tungsten","source":"@site/blog/2021-02-24-tungsten.md","title":"Metals v0.10.0 - Tungsten","description":"We\'re happy to announce the release of Metals v0.10.0, which is the first","date":"2021-02-24T00:00:00.000Z","formattedDate":"February 24, 2021","tags":[],"readingTime":11.12,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.10.0 - Tungsten","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.10.1 - Tungsten","permalink":"/metals/blog/2021/04/06/tungsten"},"nextItem":{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"}},"content":"We\'re happy to announce the release of Metals v0.10.0, which is the first\\nrelease in the \\"Tungsten\\" line. In `0.10.x` we will focus on polishing existing\\nfeatures, fixing bugs and improving the Scala 3 support at least to the level of\\nScala 2. This will pave the way towards the `1.0.0` release later this year.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release163
Merged PRs79
Contributors14
Closed issues30
New features12
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/34?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.13.5.\\n- Type decorations for definitions.\\n- Insert inferred type refactoring.\\n- Configuration option for the default Scala version.\\n- Code lens to easily discover the copy worksheet command.\\n- Improved short names when importing.\\n- Debug run/test when using sbt via BSP.\\n- [Scala 3] Support for Scala 3.0.0-RC1\\n- [Scala 3] Filtering and sorting for completions.\\n- [Scala 3] Basic shorter signature support for hover.\\n- [Scala 3] Document outline\\n- [Scala 3] Code folding\\n- [Scala 3] Formatting `|` in multiline string\\n- [Scala 3] Code action to convert to multiline string.\\n- [Scala 3] Dependency sources navigation\\n\\n## Type decorations for definitions.\\n\\nOne of the most\\n[requested features](https://github.com/scalameta/metals/issues/707) for Metals\\nwas the ability to show the inferred type for anything that does not have it\\ndefined explicitly. This includes the type at:\\n\\n- value and variable definitions\\n\\n```scala\\nval a = 1\\nvar b = 2\\n```\\n\\n- method definitions\\n\\n```scala\\ndef method() = \\"\\"\\n```\\n\\n- variables in pattern matches\\n\\n```scala\\nlist match {\\n case aa :: tail =>\\n}\\n```\\n\\n- lambda parameters\\n\\n```scala\\nlist.map(param => param.toInt)\\n```\\n\\n- for comprehensions\\n\\n```scala\\nfor(i <- 0 to 10)`\\n```\\n\\nThe decoration is based on the information produced during the compilation, so\\nanything new will first need to be compiled to have the type shown.\\n\\n![type-decorations](https://i.imgur.com/NHzB0M6.png)\\n\\nThis feature can easily be controlled by the previously available\\n`metals.showInferredType` setting and will currently work for clients that allow\\nvirtual decoration to be inserted into existing text. Those clients currently\\ninclude Visual Studio Code, Emacs and Sublime Text (after merging this\\n[PR](https://github.com/scalameta/metals-sublime/pull/36)).\\n\\n## Insert inferred type refactoring.\\n\\nAnother highly requested feature and closely related to the type decorations is\\nthe ability to automatically insert type annotation. This is achieved using a\\nnew `Insert type annotations` and\\n`Insert type annotation into pattern definition` refactor code actions. Those\\nactions work in the same places as mentioned in the previous point - method,\\nvariables, lambdas etc. - but use the presentation compiler instead of indexes.\\nWhat it means is that this new feature will work even in some more problematic\\ncases when the file is not yet compiled or in files where type decorations are\\nnot yet supported, like in worksheets.\\n\\n![inferred-type](https://i.imgur.com/ZT36mH7.gif)\\n\\nThere might be still some work to do when it comes to some more complicated\\ntypes, but it should work perfectly well for most daily use cases. Please do\\nreport any issues you might encounter, as it will help us greatly to polish this\\nnew feature.\\n\\n## Configuration option for default Scala version.\\n\\nPreviously, for any standalone files Metals would use the default Scala version\\n2.12.13. This changed in `v0.10.0` and can either be defined with a setting:\\n\\n```json\\n\\"metals.fallbackScalaVersion\\" : \\"3.0.0-RC1\\"\\n```\\n\\nor when the setting is empty or set to `automatic` Metals will infer the Scala\\nversion automatically from the project, which will be the highest Scala version\\nused in the project.\\n\\n## Code lens for copy worksheet command.\\n\\nIn the previous version `0.9.8` a new command was added to Metals that allows\\nclients to export the worksheet output for the users to easily share their\\nresults. This however was not easy to discover for a large chunk of the users,\\nwhich is why the command is also now available by using the code lens at the top\\nof a worksheet file. This will work for any clients that support the\\n`copy-worksheet-output` command.\\n\\n## Debug run/test when using sbt via BSP.\\n\\nThanks to the great work of [@adpi2](https://github.com/adpi2) and\\n[@er1c](https://github.com/er1c) on the\\n[scala-debug-adapter](https://github.com/scalacenter/scala-debug-adapter) Metals\\nnow supports debugging when using sbt BSP. The experience should be almost the\\nsame as when using Bloop, since the new library reuses the already existing\\nBloop implementation and will be a standard to use for BSP servers.\\n\\nTo use sbt as a BSP server users still need to use `metals.bsp-switch` command,\\nwhich will take care of setting up everything and adding the appropriate\\nplugins.\\n\\nMore information about sbt and BSP can be found in the previously published\\n[blogpost](/metals/blog/2020/11/06/sbt-BSP-support).\\n\\n## [Scala 3] Support for Scala 3.0.0-RC1\\n\\nScala `3.0.0-RC1` has just been released and it\'s the first release that starts\\nus on the way towards the full Scala 3 release. Syntax is now stable and the\\ncompiler team will now focus on fixing existing issues and polishing the\\ninternals.\\n\\nThis is a perfect opportunity to try out Scala 3 alongside Metals and see all\\nthe new and interesting features that the language has to offer as well as\\nreport any issues.\\n\\n## [Scala 3] Filtering and sorting for completions.\\n\\nIn previous versions of Metals, the completions offered by the language server\\nwould just be a list of what is available in the current scope. This however did\\nnot provide the best possible experience to the users. Thanks to work by\\n[@sellophane](https://github.com/sellophane) those initial results are now\\nfiltered and sorted so that the most useful methods and values will be available\\nfirst.\\n\\n## [Scala 3] Basic shorter signature support for hover.\\n\\nTogether with better completions we also included a better way to display types\\non hover. Previously, we would always display the full class name with the\\npackage prefix, which would mean that some methods could look quite complicated\\nfor example:\\n\\n`def method(first: alpha.beta.gamma.DType, second: alpha.beta.gamma.DType)`\\n\\nThanks to [@tanishiking](https://github.com/tanishiking) we no longer display\\nthe long type for anything that is already imported into scope. So the above\\nmethod would look like:\\n\\n`def method(first: DType, second: DType)`\\n\\nThis needs to be further improved by shortening some of the symbols that are not\\nimported into scope and we still need to apply the same optimization in other\\nplaces where the type is displayed.\\n\\n## [Scala 3] Parser-based features for Scala 3\\n\\nUnder the hood Metals uses a separate parser implementation that can be found in\\n[scalameta](https://github.com/scalameta/scalameta) and it supports numerous\\ndifferent Scala versions. Thanks to the recent work on supporting Scala 3, we\\nnow have a dialect that should parse the Scala 3 syntax correctly on par with\\n3.0.0-RC1 version.\\n\\nThis parser is used by Metals to provide a number of different features, that\\nshould now work correctly for Scala 3:\\n\\n- document outline which shows the map for the current source file and can also\\n be searched, which is useful to locate a particular method or value in the\\n current document.\\n- folding ranges which enables users to hide parts of their code.\\n- automatic management of pipes in multiline string.\\n- code action to convert simple string into multiline string.\\n- go to definition in Scala 3 dependency sources.\\n\\nLast mentioned feature together with recently added on-demand semanticdb index\\ngeneration enables users to properly navigate Scala 3 dependency sources.\\n\\nA lot of the great work here was done by [dos65](https://github.com/dos65).\\n\\n## Miscellaneous\\n\\n- Fix default version of Scala given to Ammonite.\\n- Fix issues when method with implicit symbols would be wrongly renamed.\\n- Fix issues with stack trace in debugging not showing the correct path,\\n- Fix issue when breakpoints in multiple files would not work together.\\n- Ensure Bloop isn\'t offered as a server in an unsupported workspace.\\n- Wait for compilation to finish before starting debug session.\\n- Fix references to work properly in standalone files and dependency sources.\\n- Fix memory leak in presentation compiler.\\n- Fix issues where created files should use back quotes.\\n- Rename and references now work for worksheets and sbt files - thanks\\n [dos65](https://github.com/dos65)!\\n- Always try to have the shortest path when automatically importing symbols.\\n- Fix issues with shadowed symbols being imported incorrectly.\\n- Fixed go to definition for Scala 3 sources.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.10..v0.10.0\\n\\nTomasz Godzik\\nChris Kipp\\nVadim Chelyshov\\nAdrien Piquerez\\nag91\\nRikito Taniguchi\\nArthur McGibbon\\nAyoub Benali\\nB\u0142a\u017cej Kardy\u015b\\nEric K Richardson\\nLorenzo Gabriele\\nMeriam Lachkar\\nPavol Vidlicka\\nstrobe\\n```\\n\\n## Merged PRs\\n\\n## [v0.10.0](https://github.com/scalameta/metals/tree/v0.10.0) (2021-02-24)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.10...v0.10.0)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.5\\n [\\\\#2544](https://github.com/scalameta/metals/pull/2544)\\n ([tgodzik](https://github.com/tgodzik))\\n- DocumentSymbolProvider: set name as \\" \\" in case if it\'s empty.\\n [\\\\#2545](https://github.com/scalameta/metals/pull/2545)\\n ([dos65](https://github.com/dos65))\\n- Fix rename/references for worksheets\\n [\\\\#2539](https://github.com/scalameta/metals/pull/2539)\\n ([tgodzik](https://github.com/tgodzik))\\n- [Scala 3] Add an ability to generate on-demand semanticdb\\n [\\\\#2538](https://github.com/scalameta/metals/pull/2538)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix standalone Scala 3 worksheets\\n [\\\\#2531](https://github.com/scalameta/metals/pull/2531)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to newest snapshot\\n [\\\\#2528](https://github.com/scalameta/metals/pull/2528)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback to Scala3 dialects when parsing library sources\\n [\\\\#2527](https://github.com/scalameta/metals/pull/2527)\\n ([tgodzik](https://github.com/tgodzik))\\n- add explanation on how to annotate stack traces for Emacs\\n [\\\\#2516](https://github.com/scalameta/metals/pull/2516)\\n ([ag91](https://github.com/ag91))\\n- Add support for Scala 3.0.0-RC1\\n [\\\\#2524](https://github.com/scalameta/metals/pull/2524)\\n ([tgodzik](https://github.com/tgodzik))\\n- Basic shorter signature support for hover in Scala3\\n [\\\\#2504](https://github.com/scalameta/metals/pull/2504)\\n ([tanishiking](https://github.com/tanishiking))\\n- Integration of sbt-debug-adapter\\n [\\\\#2523](https://github.com/scalameta/metals/pull/2523)\\n ([adpi2](https://github.com/adpi2))\\n- [Scala 3] Add filtering and sorting for completions\\n [\\\\#2487](https://github.com/scalameta/metals/pull/2487)\\n ([sellophane](https://github.com/sellophane))\\n- Improve short names when importing\\n [\\\\#2497](https://github.com/scalameta/metals/pull/2497)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to Bloop 1.4.7 + remove -J prefix\\n [\\\\#2522](https://github.com/scalameta/metals/pull/2522)\\n ([adpi2](https://github.com/adpi2))\\n- Revert to recently focused document if the current one was immediately closed\\n [\\\\#2519](https://github.com/scalameta/metals/pull/2519)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Windows log locations to docs\\n [\\\\#2521](https://github.com/scalameta/metals/pull/2521)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Revert\\n https://github.com/scalameta/metals/commit/519c6414797edcc35d5d714b220c7d7d140c4b4\\n [\\\\#2518](https://github.com/scalameta/metals/pull/2518)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t populate completion detail if it\'s an empty string.\\n [\\\\#2514](https://github.com/scalameta/metals/pull/2514)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues where created files should use backticks\\n [\\\\#2503](https://github.com/scalameta/metals/pull/2503)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta and fix tests that include Scala 3 givens\\n [\\\\#2515](https://github.com/scalameta/metals/pull/2515)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc_2.12, sbt-mdoc to 2.2.17\\n [\\\\#2512](https://github.com/scalameta/metals/pull/2512)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.17\\n [\\\\#2511](https://github.com/scalameta/metals/pull/2511)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.3\\n [\\\\#2510](https://github.com/scalameta/metals/pull/2510)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.7.0\\n [\\\\#2509](https://github.com/scalameta/metals/pull/2509)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.4.Final\\n [\\\\#2508](https://github.com/scalameta/metals/pull/2508)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.11\\n [\\\\#2507](https://github.com/scalameta/metals/pull/2507)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-file, scribe-slf4j to 3.3.3\\n [\\\\#2506](https://github.com/scalameta/metals/pull/2506)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-40-6418e91f\\n [\\\\#2505](https://github.com/scalameta/metals/pull/2505)\\n ([scala-steward](https://github.com/scala-steward))\\n- Only set focusedDocument on `didOpen` without didFocusProvider\\n [\\\\#2501](https://github.com/scalameta/metals/pull/2501)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add few emacs config performance tuning tips to docs/editors/emacs.md\\n [\\\\#2492](https://github.com/scalameta/metals/pull/2492)\\n ([strobe](https://github.com/strobe))\\n- Add insert inferred type code action\\n [\\\\#2490](https://github.com/scalameta/metals/pull/2490)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for new Scala 3 syntax in document outline.\\n [\\\\#2448](https://github.com/scalameta/metals/pull/2448)\\n ([dos65](https://github.com/dos65))\\n- Remove unused val that may cause null pointer exceptions\\n [\\\\#2486](https://github.com/scalameta/metals/pull/2486)\\n ([tgodzik](https://github.com/tgodzik))\\n- A bit of refactoring around BSP connection and Build Import.\\n [\\\\#2481](https://github.com/scalameta/metals/pull/2481)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add code lens to easily discover copy worksheet command\\n [\\\\#2470](https://github.com/scalameta/metals/pull/2470)\\n ([tgodzik](https://github.com/tgodzik))\\n- Try to fix memory leak in presentation compiler\\n [\\\\#2476](https://github.com/scalameta/metals/pull/2476)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix TreeViewLspSuite [\\\\#2477](https://github.com/scalameta/metals/pull/2477)\\n ([tgodzik](https://github.com/tgodzik))\\n- Include the element in the version\\n [\\\\#2472](https://github.com/scalameta/metals/pull/2472)\\n ([ekrich](https://github.com/ekrich))\\n- Add in part one of a metals retrospective blog post\\n [\\\\#2469](https://github.com/scalameta/metals/pull/2469)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update the doctor docs in client commands\\n [\\\\#2468](https://github.com/scalameta/metals/pull/2468)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues with references in standalone files\\n [\\\\#2467](https://github.com/scalameta/metals/pull/2467)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix printed inferred type for complex types\\n [\\\\#2449](https://github.com/scalameta/metals/pull/2449)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback Scala version - filter out `automatic` value\\n [\\\\#2466](https://github.com/scalameta/metals/pull/2466)\\n ([dos65](https://github.com/dos65))\\n- Wait for compilation to finish before starting debug session #2233\\n [\\\\#2450](https://github.com/scalameta/metals/pull/2450)\\n ([pvid](https://github.com/pvid))\\n- Pass URI to `semanticdbTextDocument` method and fix possible issues\\n [\\\\#2465](https://github.com/scalameta/metals/pull/2465)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove dependency on io.methvin:directory-watcher.\\n [\\\\#2464](https://github.com/scalameta/metals/pull/2464)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scribe, scribe-slf4j to 3.3.1\\n [\\\\#2457](https://github.com/scalameta/metals/pull/2457)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.5.2\\n [\\\\#2452](https://github.com/scalameta/metals/pull/2452)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.4.7\\n [\\\\#2461](https://github.com/scalameta/metals/pull/2461)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, mdoc_2.12, sbt-mdoc to 2.2.16\\n [\\\\#2462](https://github.com/scalameta/metals/pull/2462)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.3 [\\\\#2456](https://github.com/scalameta/metals/pull/2456)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.1 [\\\\#2455](https://github.com/scalameta/metals/pull/2455)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-33-1c6f6712\\n [\\\\#2453](https://github.com/scalameta/metals/pull/2453)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.5.2\\n [\\\\#2460](https://github.com/scalameta/metals/pull/2460)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, munit-docs, sbt-munit to 0.7.21\\n [\\\\#2463](https://github.com/scalameta/metals/pull/2463)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.9\\n [\\\\#2458](https://github.com/scalameta/metals/pull/2458)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add configuration option for default Scala version\\n [\\\\#2417](https://github.com/scalameta/metals/pull/2417)\\n ([dos65](https://github.com/dos65))\\n- Minor adjustements to type decorations\\n [\\\\#2447](https://github.com/scalameta/metals/pull/2447)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for type decorations in for comprehensions and patterns\\n [\\\\#2446](https://github.com/scalameta/metals/pull/2446)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add type decorations for definitions\\n [\\\\#2435](https://github.com/scalameta/metals/pull/2435)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update docs on system-properties and inline decorations.\\n [\\\\#2444](https://github.com/scalameta/metals/pull/2444)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correct dialect for standalone scripts.\\n [\\\\#2445](https://github.com/scalameta/metals/pull/2445)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make `munitBucketName` a global setting\\n [\\\\#2443](https://github.com/scalameta/metals/pull/2443)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix vscode.md (find-java-home has replaced by locate-java-home in\\n metals-vscode v1.1.0) [\\\\#2441](https://github.com/scalameta/metals/pull/2441)\\n ([tanishiking](https://github.com/tanishiking))\\n- Change bucket name to the non default one\\n [\\\\#2440](https://github.com/scalameta/metals/pull/2440)\\n ([tgodzik](https://github.com/tgodzik))\\n- Minor fix: remove unused parameter\\n [\\\\#2438](https://github.com/scalameta/metals/pull/2438)\\n ([dos65](https://github.com/dos65))\\n- Add rename and references for sbt files\\n [\\\\#2412](https://github.com/scalameta/metals/pull/2412)\\n ([dos65](https://github.com/dos65))\\n- Ensure Bloop isn\'t offered as a server in an unsupported workspace.\\n [\\\\#2428](https://github.com/scalameta/metals/pull/2428)\\n ([ckipp01](https://github.com/ckipp01))\\n- Provide a more specific error message when scalafix fails organizing imports\\n [\\\\#2421](https://github.com/scalameta/metals/pull/2421)\\n ([mlachkar](https://github.com/mlachkar))\\n- Fix issue with breakpoints in multiple files\\n [\\\\#2434](https://github.com/scalameta/metals/pull/2434)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update editor overview doc (sublime)\\n [\\\\#2433](https://github.com/scalameta/metals/pull/2433)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Search also transitive sources when falling back from symbol search\\n [\\\\#2427](https://github.com/scalameta/metals/pull/2427)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prepend `_empty_/` when searching for symbol without a package\\n [\\\\#2426](https://github.com/scalameta/metals/pull/2426)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implicit symbol rename fix\\n [\\\\#2422](https://github.com/scalameta/metals/pull/2422)\\n ([dos65](https://github.com/dos65))\\n- Use scalameta parser dialect Scala3 for Scala 3 sources\\n [\\\\#2374](https://github.com/scalameta/metals/pull/2374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Display link correctly in docs\\n [\\\\#2416](https://github.com/scalameta/metals/pull/2416)\\n ([lolgab](https://github.com/lolgab))\\n- Update sbt-launch.jar. [\\\\#2399](https://github.com/scalameta/metals/pull/2399)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix default version of Scala given to Ammonite.\\n [\\\\#2411](https://github.com/scalameta/metals/pull/2411)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for v0.9.10\\n [\\\\#2410](https://github.com/scalameta/metals/pull/2410)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2021/02/02/metals-retro-part1","metadata":{"permalink":"/metals/blog/2021/02/02/metals-retro-part1","source":"@site/blog/2021-02-02-metals-retro-part1.md","title":"A Metals Retrospective (Part 1)","description":"metals-banner","date":"2021-02-02T00:00:00.000Z","formattedDate":"February 2, 2021","tags":[],"readingTime":8.28,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"}],"frontMatter":{"author":"Chris Kipp","title":"A Metals Retrospective (Part 1)","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"},"prevItem":{"title":"Metals v0.10.0 - Tungsten","permalink":"/metals/blog/2021/02/24/tungsten"},"nextItem":{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"}},"content":"![metals-banner](https://i.imgur.com/FYZXteD.png)\\n\\nAt the end of 2020 the Metals team sent out a survey to gather input from our\\nusers in hopes to get a better picture of who you are, what you want out of\\nMetals, and any other useful feedback you may have wanted to provide. With just\\nunder 400 responses we got a ton of great data, some interesting insights, and\\na nice picture of what is currently hindering users, and what common\\nfunctionality continually comes up as feature requests. In order to best use this\\ndata, and also to share some results, we thought it\'d be a good idea to go over\\nsome of the sections, address some of the points that came up, and also clear up\\nany misconceptions that may have appeared in the survey results. The idea is for\\nthis to be a 2 part series. You can expect the following:\\n\\n- Part 1 - Where we discuss some of the initial results and address some common\\n misconceptions and questions.\\n- Part 2 - Where we go deeper into the desired features, the biggest pain\\n points, and our plans for this next year.\\n\\n## Editor Support\\n\\n![editor-results](https://i.imgur.com/w67gMGW.png)\\n\\nSurprising no one, VS Code came out on top for editors with the most desire for\\nMetals support. Our [VS Code\\nextension](https://github.com/scalameta/metals-vscode) has over 100k downloads\\nand it is safe to say that it offers the best support for overall Metals usage.\\nThe next most popular of our extensions is probably `coc-metals` which had just\\nover 20k downloads in 2020. There are certain features that do only work in VS\\nCode mainly due to the robustness of the LSP support and other extra features.\\nHere are a few examples of features that we added this past year that work\\nextremely well with VS Code with no hardly no extra effort on the users part:\\n\\n- Debugging support - Early on in 2020 Metals v0.8.0 added debugging support.\\n Now with the click of a button you can run, test, and debug your code right\\n from inside VS Code.\\n- Preview renames - in Metals v0.8.1 functionality was added so that you can now\\n preview the changes after triggering a rename for up to 300 files.\\n- Analyze stacktrace functionality - As of Metals v0.9.4 Metals gained the ability\\n to take a stack trace and give you a nice view of the entire stack with\\n clickable links to go to that part of your code. This is all found in the\\n very useful web view of VS Code.\\n- Show implicits and type decorations - As of Metals v0.9.5 Metals gained the\\n ability to show implicits and type decorations as decorations directly\\n inline of your code.\\n- Show implicits conversion and classes - As of Metals v0.9.6 Metals gained the\\n ability to show implicits conversion and classes as decorations directly\\n inline of your code.\\n- Navigativing stacktrace while debugging - Also in Metals v0.9.6 the ability to\\n navigate stacktraces during a deubugging sesions was added, which re-used\\n the functionality introduced in v0.9.4 to analyze stacktraces.\\n\\nNow at this point you may be starting to assume that we heavily favor VS Code\\nand that Metals is geared towards it. We got a few comments related to this\\nthroughout the survey. However, I want to make a specific point that since the\\ninception of Metals, the early maintainers did a fantastic job of ensuring that\\neverything would work in clients that offered the necessary LSP support, and\\nalso extra features to clients that offered support for the Metals specific LSP\\nextensions that we use. This has remained core for us a we continue to provide\\nnew features. Pretty much any new feature that is added is added in a way that\\ncan also be utilized for editors that may not have the same level of support as\\nVS Code. Here are a few examples:\\n\\n- Debugging support - Metals actually offers deubugging support for any client\\n that can serve as a DAP client. So for example using `coc-metals` you can\\n also run, test, and debug your code while utilizing\\n [`vimspector`](https://github.com/puremourning/vimspector). The same is true\\n for emacs clients that are utilizing\\n [`lsp-mode`](https://github.com/emacs-lsp/lsp-mode).\\n- Analyze stacktrace functionality - For clients that don\'t have a web view,\\n this feature is still supported by producing a file with code lens\' in it to\\n allow you to navigate to the relevant parts of the stacktrace.\\n- Implicits, type decorations, implicits conversions and classes - VS Code isn\'t\\n the only extension that actually implements this. There is also\\n [`metals-sublime`](https://github.com/scalameta/metals-sublime) that has\\n inline decorations. For other editors that may not support inline\\n decorations, this feature is still re-usable and the information is actually\\n displayed in hover as another section.\\n\\nSo again, while VS Code is an incredible editor, that offers incredible support\\nfor the various Metals features, we work hard to ensure that these features are\\nalso usable in our other extensions, even if they look a bit different. While\\nthere are varying levels of support in the various editor extensions, much of\\nthis is due to the those editors being the editors the current maintainers use.\\nWe are always open for more help in any of the current editor extensions and\\nthis is actually a great way to get involved. We are also open to help you\\ncreate a new extension to maybe support an editor that is yet to have a\\nMetals-specific extension! Here are links to the various Metals clients:\\n\\n- [scalameta/metals-vscode](https://github.com/scalameta/metals-vscode)\\n- [scalameta/coc-metals](https://github.com/scalameta/coc-metals)\\n- [scalameta/nvim-metals](https://github.com/scalameta/nvim-metals)\\n- [scalameta/metals-sublime](https://github.com/scalameta/metals-sublime)\\n- [scalameta/metals-eclipse](https://github.com/scalameta/metals-eclipse)\\n- [emacs-lsp/lsp-metals](https://github.com/emacs-lsp/lsp-metals)\\n\\n### Will you support IntelliJ?\\n\\nWhen asked about what editor people wished had Metals support, here were the\\nresults:\\n\\nEditor | Votes\\n------------------------------------------------------|----------\\n[IntelliJ](https://www.jetbrains.com/idea/) | 19\\n[Notepad++](http://notepad-plus-plus.org/) | 2\\n[Gnome Builder](https://wiki.gnome.org/Apps/Builder) | 2\\n[Nova](https://www.nova.app/) | 2\\n[Kakoune](http://kakoune.org/) | 2\\n[Netbeans](https://netbeans.org/) | 2\\n[Eclipse Theia](https://theia-ide.org/) | 1\\n[jEdit](http://www.jedit.org/) | 1\\n\\nSome of these editors will already actually work with Metals, especially if they\\nsupport VS Code extensions like Eclipse Theia does. However, one question we\\noften get is: \\"Will you support IntelliJ?\\" The simple answer to this question is\\n_No_, but not for the reason people may think. IntelliJ is a fantastic project\\nthat is the most widely used editor in Scala. Metals aims to be a language\\nserver for clients that implement LSP. Since IntelliJ has no _official_ support\\nfor LSP, we have no intention on adding support for IntelliJ. Many times the\\ntarget audience is different as well.\\n\\n## Why do people start using Metals \\n\\nReason | Very Important | Somewhat important | Not important\\n----------------------------------------------|----------------|--------------------|---------------\\nI wanted a lighter alternative to other IDEs. | 245 | 74 | 27\\nI could use my favorite editor. | 223 | 62 | 56\\nI wanted more accurate compiler errors. | 220 | 86 | 36\\nI wanted a fully open source solution. | 133 | 138 | 69\\nMetals had features other IDEs didn\'t | 56 | 112 | 160\\n\\n## Information and Help with Metals\\n\\nOver this past year we\'ve done our best to make sure everyone is aware of all\\nthe great stuff that is happening in Metals. We have multiple channels of\\ncommunication open with pretty impressive response times if you ever get stuck.\\nHere are the results about where people go for question about Metals and also\\nwhere they get their news about Metals.\\n\\n![metals info](https://i.imgur.com/6Ijm9Bv.png)\\n![metals help](https://i.imgur.com/2Qysoqe.png)\\n\\nApart from the places that we had listed in the survey, the place mentioned the\\nmost for where people hear about Metals related news was [Scala\\nTimes](https://scalatimes.com/)! \\n\\nAs a reminder, don\'t ever hesitate to reach out, and if anything is missing in\\nthe docs, please lend a helping hand or point it out to us.\\n\\n## I wish Metals had... but it does!\\n\\nBelow are some things that appeared in the survey as wishes, but that Metals\\nalready supports, or has added support for since the survey! Hopefully these\\nwill help highlight some lesser known features of Metals or serve as a reminder\\nof some of the features we have.\\n\\nRequested | Status\\n-----------------------------------------------------|---------------------------\\nRenaming symbols | Available since v0.8.0 and all supported editors support this.\\nBetter info about Ammonite scripts failing. | Actually because of this comment, there was some work done to improve the error messages about why Ammonite may not be starting. You can see this here [in this pr](https://github.com/scalameta/metals/pull/2333).\\nA check telling me if everything is setup correctly. | We recently did some work or the Metals Doctor to help you see what issues are going on. You can trigger Doctor by the `run-doctor` command. It may differ a bit per client. You can see the recent changes made [here in this pr](https://github.com/scalameta/metals/pull/2339).\\nSeamless install in Vim | There are two Metals-specific Vim and Neovim extensions, both which offer an automated install feature. [coc-metals](https://github.com/scalameta/coc-metals) and [nvim-metals](https://github.com/scalameta/nvim-metals).\\nNavigating stacktrace feature in emacs. | This actually should work, since it just needs code lenses to work for clients that don\'t have a web view. Part of this is just documentation, so if you\'re an emacs user, please help us with docs!\\nUse a specific version of Ammonite | You can currently do this by setting the version in a comment on the top of a file like illustrated [here](https://scalameta.org/metals/docs/troubleshooting/faq#how-do-i-use-scala-2xx-for-my-script). Also the next release of Metals will have better support for a fallback version of the compiler that is used for standalone scripts. This will give you more control over what version is used in situations like Ammonite scripts.\\n\\n## What\'s next?\\n\\nWe want to thank you again for taking the time and filling out our year-end\\nsurvey. Keep on the lookout for Part 2 of this, and we\'ll be discussing the\\nbiggest pain points and some of the most desired features that we plan to tackle\\nthis next year. We\'ll also do a further look into build server and build tool\\nsupport finishing off with an update on our current Scala 3 support and the\\nefforts that are going into it.\\n\\nCheers,\\n\\nThe Metals team"},{"id":"/2021/01/19/lithium","metadata":{"permalink":"/metals/blog/2021/01/19/lithium","source":"@site/blog/2021-01-19-lithium.md","title":"Metals v0.9.10 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.10, which contains a number","date":"2021-01-19T00:00:00.000Z","formattedDate":"January 19, 2021","tags":[],"readingTime":2.645,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.10 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"A Metals Retrospective (Part 1)","permalink":"/metals/blog/2021/02/02/metals-retro-part1"},"nextItem":{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.10, which contains a number\\nof fixes and more importantly support for Scala 2.12.13. We\'re skipping over\\nthe v0.9.9 release due to a significant bug that showed up after the release.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release90
Merged PRs35
Contributors6
Closed issues13
New features
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/33?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Support for Scala 2.12.13.\\n- Added named argument completion for Scala 3 (thanks\\n [tanishiking](https://github.com/tanishiking)!).\\n- Fix worksheet decorations to show up on focus.\\n- Allow find references and rename for standalone files.\\n- Fix compatibility with sbt < 1.3.0 builds.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.8..v0.9.10\\nChris Kipp\\nTomasz Godzik\\nDavid Strawn\\nCheng Lian\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.9](https://github.com/scalameta/metals/tree/v0.9.10) (2021-01-19)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.8...v0.9.10)\\n\\n**Merged pull requests:**\\n\\n- Bump mdoc to 2.2.15\\n [\\\\#2409](https://github.com/scalameta/metals/pull/2409)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Metals Scala 2.12 version to 2.12.13\\n [\\\\#2404](https://github.com/scalameta/metals/pull/2404)\\n ([tgodzik](https://github.com/tgodzik))\\n- Look for clientInfo in intializeParams instead of serverConfig.\\n [\\\\#2402](https://github.com/scalameta/metals/pull/2402)\\n ([ckipp01](https://github.com/ckipp01))\\n- Ensure semanticdbVersion can be overwritten.\\n [\\\\#2401](https://github.com/scalameta/metals/pull/2401)\\n ([ckipp01](https://github.com/ckipp01))\\n- Revert \\"Add release notes for Metals 0.9.9\\"\\n [\\\\#2397](https://github.com/scalameta/metals/pull/2397)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.9.9\\n [\\\\#2396](https://github.com/scalameta/metals/pull/2396)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Scala 2.12.13\\n [\\\\#2383](https://github.com/scalameta/metals/pull/2383)\\n ([tgodzik](https://github.com/tgodzik))\\n- Clean up --version output.\\n [\\\\#2393](https://github.com/scalameta/metals/pull/2393)\\n ([ckipp01](https://github.com/ckipp01))\\n- Avoid NPE when there is no `rootUri`.\\n [\\\\#2391](https://github.com/scalameta/metals/pull/2391)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bare minimum arg completion for scala3\\n [\\\\#2369](https://github.com/scalameta/metals/pull/2369)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update flyway-core to 7.5.0\\n [\\\\#2389](https://github.com/scalameta/metals/pull/2389)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.9\\n [\\\\#2387](https://github.com/scalameta/metals/pull/2387)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.1\\n [\\\\#2386](https://github.com/scalameta/metals/pull/2386)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.6-21-464e4ec4\\n [\\\\#2385](https://github.com/scalameta/metals/pull/2385)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix wrong name being displayed for a selected server\\n [\\\\#2377](https://github.com/scalameta/metals/pull/2377)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that worksheet decorations are shown again when the focused\\n [\\\\#2372](https://github.com/scalameta/metals/pull/2372)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Vim mappings and add reference to nvim-metals.\\n [\\\\#2367](https://github.com/scalameta/metals/pull/2367)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in CopyWorksheetOutput to all so it\'s in the docs.\\n [\\\\#2368](https://github.com/scalameta/metals/pull/2368)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor doctor and make sure issues with sbt are properly reported\\n [\\\\#2339](https://github.com/scalameta/metals/pull/2339)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove Atom from the docs.\\n [\\\\#2364](https://github.com/scalameta/metals/pull/2364)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.4.4\\n [\\\\#2361](https://github.com/scalameta/metals/pull/2361)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.20\\n [\\\\#2360](https://github.com/scalameta/metals/pull/2360)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.14\\n [\\\\#2359](https://github.com/scalameta/metals/pull/2359)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.4.6\\n [\\\\#2358](https://github.com/scalameta/metals/pull/2358)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.3.2\\n [\\\\#2357](https://github.com/scalameta/metals/pull/2357)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.8\\n [\\\\#2355](https://github.com/scalameta/metals/pull/2355)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directories to 23\\n [\\\\#2354](https://github.com/scalameta/metals/pull/2354)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.8\\n [\\\\#2353](https://github.com/scalameta/metals/pull/2353)\\n ([scala-steward](https://github.com/scala-steward))\\n- Calculate semanticdb for standalone files\\n [\\\\#2345](https://github.com/scalameta/metals/pull/2345)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix incompatibility between currently used Bloop and sbt versions < 1.3.0\\n [\\\\#2350](https://github.com/scalameta/metals/pull/2350)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Ammonite to the 2.13.4 published version.\\n [\\\\#2331](https://github.com/scalameta/metals/pull/2331)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix an OrganizeImports configuration typo\\n [\\\\#2342](https://github.com/scalameta/metals/pull/2342)\\n ([liancheng](https://github.com/liancheng))\\n- Update Deprecated Usage Of `setDeprecated` from `lsp4j`\\n [\\\\#2334](https://github.com/scalameta/metals/pull/2334)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove `-XX:+CMSClassUnloadingEnabled` From `.jvmopts`\\n [\\\\#2335](https://github.com/scalameta/metals/pull/2335)\\n ([isomarcte](https://github.com/isomarcte))\\n- Add release notes for 0.9.8\\n [\\\\#2332](https://github.com/scalameta/metals/pull/2332)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/12/19/lithium","metadata":{"permalink":"/metals/blog/2020/12/19/lithium","source":"@site/blog/2020-12-19-lithium.md","title":"Metals v0.9.8 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.8, which brings along a","date":"2020-12-19T00:00:00.000Z","formattedDate":"December 19, 2020","tags":[],"readingTime":3.105,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.8 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.10 - Lithium","permalink":"/metals/blog/2021/01/19/lithium"},"nextItem":{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.8, which brings along a\\nnumber of smaller improvements, new Scala 3 milestone support and a hot new\\nfeature.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release100
Merged PRs41
Contributors4
Closed issues5
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/31?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Add in ability to export worksheet evaluations.\\n- Scala 3.0.0-M3 support.\\n\\n## Worksheet evaluations\\n\\nThanks to the great work by [ckipp01](https://github.com/ckipp01) users will now\\nbe able to export their evaluated worksheets using a new command,\\n`copy-worksheet-output`, or `Metals: Copy worksheet output` in Visual Studio\\nCode.\\n\\n![worksheet-export](https://i.imgur.com/PQmT2i3.gif)\\n\\nWhen using this command existing statements will be copied to your clipboard\\nalong with their evaluations included as comments below them. This will allow\\nusers to freely share their results with others.\\n\\n## Miscellaneous\\n\\n- Add in Scala Sources to standalone worksheets.\\n- Fix auto-connect BSP server without explicit choice.\\n- Make sure to not duplicate semanticdbOptions when using sbt BSP.\\n- Ensure semanticdb is enabled with sbt BSP and Scala 3\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.7..v0.9.8\\nChris Kipp\\nTomasz Godzik\\nGabriele Petronella\\nVictor Mikhaylov\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.8](https://github.com/scalameta/metals/tree/v0.9.8) (2020-12-18)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.7...v0.9.8)\\n\\n**Merged pull requests:**\\n\\n- Add in better message for user if trying to fetch invalid Ammonite.\\n [\\\\#2333](https://github.com/scalameta/metals/pull/2333)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala 3.0.0-M3\\n [\\\\#2330](https://github.com/scalameta/metals/pull/2330)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to 4.4.2 and fix folding range suite\\n [\\\\#2327](https://github.com/scalameta/metals/pull/2327)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure semanticdb is enabled with sbt BSP and Scala 3.\\n [\\\\#2326](https://github.com/scalameta/metals/pull/2326)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update xnio-nio to 3.8.4.Final\\n [\\\\#2322](https://github.com/scalameta/metals/pull/2322)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix broken links in docs.\\n [\\\\#2312](https://github.com/scalameta/metals/pull/2312)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update flyway-core to 7.3.1\\n [\\\\#2321](https://github.com/scalameta/metals/pull/2321)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.3.Final\\n [\\\\#2320](https://github.com/scalameta/metals/pull/2320)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.7\\n [\\\\#2319](https://github.com/scalameta/metals/pull/2319)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.3.8\\n [\\\\#2318](https://github.com/scalameta/metals/pull/2318)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.1-jre\\n [\\\\#2317](https://github.com/scalameta/metals/pull/2317)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-welcome to 0.2.1\\n [\\\\#2316](https://github.com/scalameta/metals/pull/2316)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.5\\n [\\\\#2315](https://github.com/scalameta/metals/pull/2315)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-28-e52cd3ad\\n [\\\\#2314](https://github.com/scalameta/metals/pull/2314)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add in ability to export worksheet evaluations.\\n [\\\\#2290](https://github.com/scalameta/metals/pull/2290)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure to not duplicate semanticdbOptions when using sbt BSP.\\n [\\\\#2310](https://github.com/scalameta/metals/pull/2310)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump version of organizeImportRule to latest\\n [\\\\#2307](https://github.com/scalameta/metals/pull/2307)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add docs about -Dmetals.bloop-port\\n [\\\\#2301](https://github.com/scalameta/metals/pull/2301)\\n ([tgodzik](https://github.com/tgodzik))\\n- Customization bloop server port with java properties\\n [\\\\#2267](https://github.com/scalameta/metals/pull/2267)\\n ([VictorMikhaylov](https://github.com/VictorMikhaylov))\\n- Fix auto-connect BSP server without explicit choice.\\n [\\\\#2297](https://github.com/scalameta/metals/pull/2297)\\n ([ckipp01](https://github.com/ckipp01))\\n- Scala 3 template was moved from lampepfl org\\n [\\\\#2295](https://github.com/scalameta/metals/pull/2295)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change lampepfl/dotty.g8 to lampepfl/scala3.g8\\n [\\\\#2294](https://github.com/scalameta/metals/pull/2294)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add welcome view for new contributors\\n [\\\\#2288](https://github.com/scalameta/metals/pull/2288)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in Scala Sources to standalone worksheets.\\n [\\\\#2268](https://github.com/scalameta/metals/pull/2268)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update coursier to 2.0.7\\n [\\\\#2276](https://github.com/scalameta/metals/pull/2276)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 3.1.5\\n [\\\\#2275](https://github.com/scalameta/metals/pull/2275)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafix-interfaces to 0.9.24\\n [\\\\#2286](https://github.com/scalameta/metals/pull/2286)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.13\\n [\\\\#2281](https://github.com/scalameta/metals/pull/2281)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 1.0.2\\n [\\\\#2277](https://github.com/scalameta/metals/pull/2277)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.2.1\\n [\\\\#2278](https://github.com/scalameta/metals/pull/2278)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mill-contrib-testng to 0.9.3\\n [\\\\#2274](https://github.com/scalameta/metals/pull/2274)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit-docs, sbt-munit to 0.7.19\\n [\\\\#2282](https://github.com/scalameta/metals/pull/2282)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.3.0\\n [\\\\#2280](https://github.com/scalameta/metals/pull/2280)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.2.0-26-61ee0965\\n [\\\\#2273](https://github.com/scalameta/metals/pull/2273)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.12.0\\n [\\\\#2272](https://github.com/scalameta/metals/pull/2272)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.24\\n [\\\\#2271](https://github.com/scalameta/metals/pull/2271)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-8-6cc6911d\\n [\\\\#2270](https://github.com/scalameta/metals/pull/2270)\\n ([scala-steward](https://github.com/scala-steward))\\n- Compare release candidates and milestones in addition to major.minor.patch\\n [\\\\#2264](https://github.com/scalameta/metals/pull/2264)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump snapshot version [\\\\#2263](https://github.com/scalameta/metals/pull/2263)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update release instructions\\n [\\\\#2262](https://github.com/scalameta/metals/pull/2262)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for 0.9.7\\n [\\\\#2261](https://github.com/scalameta/metals/pull/2261)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/26/lithium","metadata":{"permalink":"/metals/blog/2020/11/26/lithium","source":"@site/blog/2020-11-26-lithium.md","title":"Metals v0.9.7 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.7, which introduces the","date":"2020-11-26T00:00:00.000Z","formattedDate":"November 26, 2020","tags":[],"readingTime":1.225,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.7 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.8 - Lithium","permalink":"/metals/blog/2020/12/19/lithium"},"nextItem":{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.7, which introduces the\\nsupport for the newest Scala 3 milestone, `3.0.0-M2`.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release17
Merged PRs7
Contributors5
Closed issues3
New features0
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/30?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 3.0.0-M2 support\\n\\n## Miscellaneous\\n\\n- Don\'t add semanticDB plugin for Scala 2.10 when using sbt BSP.\\n- Autocomplete empty scaladoc if nothing is defined afterwards.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.6..v0.9.7\\nTomasz Godzik\\nChris Kipp\\nBjorn Regnell\\nEthan Atkins\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.7](https://github.com/scalameta/metals/tree/v0.9.7) (2020-11-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.6...v0.9.7)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 3 3.0.0-M2\\n [\\\\#2260](https://github.com/scalameta/metals/pull/2260)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t add semanticDB plugin for Scala 2.10 when using sbt BSP\\n [\\\\#2258](https://github.com/scalameta/metals/pull/2258)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump swoval to latest version\\n [\\\\#2259](https://github.com/scalameta/metals/pull/2259)\\n ([eatkins](https://github.com/eatkins))\\n- Fix documentation about buildTarget\\n [\\\\#2257](https://github.com/scalameta/metals/pull/2257)\\n ([tgodzik](https://github.com/tgodzik))\\n- Autocomplete empty scaladoc if nothing is defined afterwards\\n [\\\\#2252](https://github.com/scalameta/metals/pull/2252)\\n ([tanishiking](https://github.com/tanishiking))\\n- New directories namespace `io.github.soc` -> `dev.dirs`\\n [\\\\#2251](https://github.com/scalameta/metals/pull/2251)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for 0.9.6\\n [\\\\#2249](https://github.com/scalameta/metals/pull/2249)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/20/lithium","metadata":{"permalink":"/metals/blog/2020/11/20/lithium","source":"@site/blog/2020-11-20-lithium.md","title":"Metals v0.9.6 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.6, which mostly concentrates","date":"2020-11-20T00:00:00.000Z","formattedDate":"November 20, 2020","tags":[],"readingTime":3.625,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.6 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.7 - Lithium","permalink":"/metals/blog/2020/11/26/lithium"},"nextItem":{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.6, which mostly concentrates\\non adding support for the newly released Scala 2.13.4, but also adds some\\nimprovements for already existing features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release59
Merged PRs31
Contributors4
Closed issues2
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/29?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.13.4 support.\\n- Show implicit conversions and classes.\\n- Navigating stacktrace in debug console.\\n- New troubleshooting page.\\n\\n## Show implicit conversions and classes\\n\\nLast\\n[release](/metals/blog/2020/11/10/lithium#show-implicits-and-type-decorations)\\nintroduced the option to display additional data inferred from the code to a\\nuser. Starting with this release it\'s also possible to show implicit conversions\\nand classes, which can be enabled by the additional\\n`showImplicitConversionsAndClasses` setting. Moreover, Visual Studio Code\\nextension has 3 new commands to toggle all these new options, which enables\\nusers to quickly peek at the additional information about their code and then\\nturn it back off. All these commands can be bound to a shortcut to further\\nimprove the user experience.\\n\\n![implicits](https://i.imgur.com/k6GRgue.gif)\\n\\nAny editor that allows for quickly changing these settings will also benefit\\nfrom this change, as the file\'s decorations are refreshed instantly upon\\nchanging any of those settings.\\n\\n## Navigating stacktrace\\n\\nPreviously, it was possible to navigate a stacktrace using the\\n`Analyze stacktrace` command which was added in the\\n[v0.9.4](/metals/blog/2020/09/21/lithium#analyze-stacktrace-command)\\nrelease. It turns out, we can reuse the same mechanism to show file links in the\\n`Debug Console` in Visual Studio code:\\n\\n![navigate-stacktrace](https://i.imgur.com/qeitymN.gif)\\n\\nThis was achieved by adding additional information to the output already sent to\\nthe editor, so this additional file links should also be reused by any other DAP\\nclients.\\n\\n## Troubleshooting\\n\\nAs an addition to these new features, we\'ve also recently added a new\\n[troubleshooting page](/metals/docs/troubleshooting/faq) that should answer\\nthe most basic questions you can have. As the page is fairly new we would appreciate\\nany help in improving it so let us know if you feel anything is missing.\\n\\n## Miscellaneous\\n\\n- Fix continuous compilation when opening tree view in sbt BSP\\n- Add 0.27.0-RC1 back to supported versions\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.5..v0.9.6\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nGabriele Petronella\\nKrzysiek Bochenek\\ndependabot[bot]\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.6](https://github.com/scalameta/metals/tree/v0.9.6) (2020-11-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.5...v0.9.6)\\n\\n**Merged pull requests:**\\n\\n- Refresh synthetics when user settings change\\n [\\\\#2246](https://github.com/scalameta/metals/pull/2246)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalameta to 4.4.0 and add support for Scala 2.13.4\\n [\\\\#2247](https://github.com/scalameta/metals/pull/2247)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add source and line to debug output in case of stack traces\\n [\\\\#2243](https://github.com/scalameta/metals/pull/2243)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix continuous compilation when opening tree view in sbt BSP\\n [\\\\#2242](https://github.com/scalameta/metals/pull/2242)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add option to show implicit conversions as decorations\\n [\\\\#2232](https://github.com/scalameta/metals/pull/2232)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump olafurpg/setup-gpg from v2 to v3\\n [\\\\#2240](https://github.com/scalameta/metals/pull/2240)\\n ([dependabot[bot]](https://github.com/dependabot[bot]))\\n- Move dependabot config file to right location\\n [\\\\#2239](https://github.com/scalameta/metals/pull/2239)\\n ([gabro](https://github.com/gabro))\\n- Configure dependabot to update github-actions\\n [\\\\#2237](https://github.com/scalameta/metals/pull/2237)\\n ([gabro](https://github.com/gabro))\\n- Reorganize docs and add in FAQ.\\n [\\\\#2234](https://github.com/scalameta/metals/pull/2234)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scribe, scribe-slf4j to 3.0.4\\n [\\\\#2222](https://github.com/scalameta/metals/pull/2222)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update org.eclipse.lsp4j, ... to 0.10.0\\n [\\\\#2230](https://github.com/scalameta/metals/pull/2230)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update munit-docs, sbt-munit to 0.7.17\\n [\\\\#2231](https://github.com/scalameta/metals/pull/2231)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update sbt-ci-release to 1.5.4\\n [\\\\#2221](https://github.com/scalameta/metals/pull/2221)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.5-6-4768184c\\n [\\\\#2220](https://github.com/scalameta/metals/pull/2220)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.6\\n [\\\\#2219](https://github.com/scalameta/metals/pull/2219)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.6\\n [\\\\#2223](https://github.com/scalameta/metals/pull/2223)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.17 [\\\\#2228](https://github.com/scalameta/metals/pull/2228)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.12\\n [\\\\#2227](https://github.com/scalameta/metals/pull/2227)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc, sbt-mdoc to 2.2.12\\n [\\\\#2226](https://github.com/scalameta/metals/pull/2226)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.2.0\\n [\\\\#2225](https://github.com/scalameta/metals/pull/2225)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add 0.27.0-RC1 back to supported versions\\n [\\\\#2213](https://github.com/scalameta/metals/pull/2213)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional newline to fix problems with markdown\\n [\\\\#2215](https://github.com/scalameta/metals/pull/2215)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional troubleshooting section for mirrors\\n [\\\\#2211](https://github.com/scalameta/metals/pull/2211)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add testing for DownloadDependencies\\n [\\\\#2206](https://github.com/scalameta/metals/pull/2206)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update docs to mention `inlineDecorationProvider`\\n [\\\\#2209](https://github.com/scalameta/metals/pull/2209)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix release notes to mention emacs\\n [\\\\#2205](https://github.com/scalameta/metals/pull/2205)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix scala3Dependency for various binary scala3/dotty versions\\n [\\\\#2203](https://github.com/scalameta/metals/pull/2203)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update release docs [\\\\#2199](https://github.com/scalameta/metals/pull/2199)\\n ([tgodzik](https://github.com/tgodzik))\\n- Correct typos in blog and Doctor\\n [\\\\#2202](https://github.com/scalameta/metals/pull/2202)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add release notes for 0.9.5\\n [\\\\#2197](https://github.com/scalameta/metals/pull/2197)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in blog post about sbt BSP\\n [\\\\#2193](https://github.com/scalameta/metals/pull/2193)\\n ([ckipp01](https://github.com/ckipp01))"},{"id":"/2020/11/10/lithium","metadata":{"permalink":"/metals/blog/2020/11/10/lithium","source":"@site/blog/2020-11-10-lithium.md","title":"Metals v0.9.5 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.5, which brings about some of","date":"2020-11-10T00:00:00.000Z","formattedDate":"November 10, 2020","tags":[],"readingTime":10.305,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.5 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.6 - Lithium","permalink":"/metals/blog/2020/11/20/lithium"},"nextItem":{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"}},"content":"We\'re happy to announce the release of Metals v0.9.5, which brings about some of\\nthe long awaited features such as implicit decorations and the organize imports\\ncode action. We also greatly simplified connecting to the sbt BSP server and\\nadded support for Scala 3\'s first milestone `3.0.0-M1`.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release185
Merged PRs70
Contributors9
Closed issues33
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/28?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Organize imports code action.\\n- Show implicit parameters and inferred type decorations.\\n- Improved sbt BSP support.\\n- Support for Scala 3.0.0-M1.\\n- Remote debugging.\\n- Environment variables in run/debug.\\n\\n## Organize imports code action\\n\\nOne of the most requested features in the Metals repository, current list can be\\nfound [here](https://github.com/scalameta/metals/issues/707), was the ability to\\nautomatically organize imports. We are happy to announce, that thanks to\\n[mlachkar\'s](https://github.com/mlachkar) amazing contributions to both\\n[Scalafix](https://github.com/scalacenter/scalafix) and Metals, this new feature\\nis now available via an `Organize imports` code action.\\n\\n![imports](https://i.imgur.com/8YBdjjC.gif)\\n\\nDepending on the editor this code action can be invoked differently, please\\nconsult your specific editor\'s documentation. For example in Visual Studio Code\\n\'organize imports\' can be invoked from command console, shortcut, or from the\\ndropdown menu when right clicking inside a file.\\n\\nThe organize imports code action is enabled using\\n[Scalafix](https://github.com/scalacenter/scalafix) and specifically the awesome\\norganize imports rule created by [liancheng](https://github.com/liancheng).\\n\\nThe rule can be used to automatically sort imports in a file by the Ascii order,\\nwhich is the default setting, or use the user specific configuration defined\\nusing scalafix configuration file. This file can be either `.scalafix.conf` in\\nthe current workspace or an absolute file specified in the\\n`metals.scalafixConfigPath` user setting. It\'s important to note that the new\\ncode action is consistent with how sbt\'s scalafix plugin will behave.\\n\\nAn example scalafix configuration for the organize imports rule can look like\\nthis:\\n\\n```scala\\nOrganizeImports {\\n groups = [\\"re:javax?\\\\\\\\.\\", \\"scala.\\", \\"*\\"]\\n removeUnused = true\\n}\\n```\\n\\nThis will sort imports into 3 groups defined with regexes and remove any unused\\nones. Specifically, it will turn:\\n\\n```scala\\nimport scala.collection.mutable.{Buffer, ArrayBuffer}\\nimport java.time.Clock\\nimport java.lang.{Long => JLong, Double => JDouble}\\n\\nobject RemoveUnused {\\n val buffer: ArrayBuffer[Int] = ArrayBuffer.empty[Int]\\n val long: JLong = JLong.parseLong(\\"0\\")\\n}\\n```\\n\\ninto\\n\\n```scala\\nimport java.lang.{Long => JLong}\\n\\nimport scala.collection.mutable.ArrayBuffer\\n\\nobject RemoveUnused {\\n val buffer: ArrayBuffer[Int] = ArrayBuffer.empty[Int]\\n val long: JLong = JLong.parseLong(\\"0\\")\\n}\\n```\\n\\nPlease do NOT use the Scalafix built-in RemoveUnused.imports together with\\nOrganizeImports to remove unused imports, since it might result in a broken\\ncode.\\n\\nMore information can be found in the\\n[liancheng/scalafix-organize-imports](https://github.com/liancheng/scalafix-organize-imports)\\nrepository.\\n\\n## Show implicits and type decorations\\n\\nAnother highly anticipated feature was the ability to show additional\\ninformation about the code, which is not provided explicitly. In this new\\nrelease, users can use two new options when looking through their code:\\n\\n- `metals.showImplicitArguments` will enable users to see implicit parameters\\n within their code:\\n\\n![params](https://i.imgur.com/vAvM7YV.png)\\n\\n- `metals.showInferredType` will enable users to see inferred type for any\\n generic methods they are using:\\n\\n![types](https://i.imgur.com/K3QrUd2.png)\\n\\nBoth new options are disabled by default, since they add a great number of\\ninformation, which might not be necessary for all users. Full name with package\\nfor each of the additional types or values will be available on hover.\\n\\nThese options can be set in Metals options in VS Code or in Emacs\\n[(lsp-metals)](https://github.com/emacs-lsp/lsp-metals) using\\n`lsp-metals-show-implicit-arguments` and `lsp-metals-show-inferred-type`\\nvariables set to `t`.\\n\\nUnfortunately, due to current limitations, additional decorations are only\\npossible in Visual Studio Code and Emacs. In other editors the additional\\ninformation is available via hover and new `With synthetics added` section,\\nwhich shows how the whole current line would look with the additional\\ndecorations.\\n\\nExample of how this alternative approach looks in Vim:\\n\\n![vim-sample](https://user-images.githubusercontent.com/13974112/94804295-e094a280-03ea-11eb-8282-2a783446e7c8.png)\\n\\n## Improved sbt BSP support\\n\\nIn recent months, [eed3si9n](https://github.com/eed3si9n) and\\n[adpi2](https://github.com/adpi2) worked, under the auspices of Scala Center, on\\nmaking sbt capable of acting as a\\n[Build Server Protocol](https://build-server-protocol.github.io/) server. This\\nenables Metals and other editors such as Intellij IDEA to directly communicate\\nwith sbt in order to compile the user\'s code.\\n\\nSome more work was required in order to make the new features work smoothly with\\nMetals and currently, thanks to [ckipp01](https://github.com/ckipp01), users can\\neasily try out the new sbt BSP support. It\'s important to note that using Bloop\\ninstead of sbt is still the recommended approach as we believe it provides the\\nbest user experience and features like running or debugging are still not yet\\nimplemented for sbt. More details and explanations can be found in the\\n[blogpost](/metals/blog/2020/11/06/sbt-BSP-support).\\n\\n## Remote debugging\\n\\nThanks to the great work of [pvid](https://github.com/pvid), Metals now supports\\nremote debugging, which means that it can attach to a running process with the\\nproper JVM options specified. There is no longer a need to run the application\\nor test from within the editor.\\n\\nIn case of a simple java process those options will take a form of for example:\\n\\n`-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005`\\n\\nSome of the more important options here are:\\n\\n- `suspend=y` will make the process wait for Metals to connect to it if\\n specified to `y`. `n` will cause the process to run normally.\\n- `address=5005` specifies which port to use and it can be any free port.\\n\\nFor a detailed explanation of the different options please refer to the proper\\ndocumentation\\n[here](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html)\\n\\nWhen using sbt, remote debugging can be achieved by specifying additional\\nsettings:\\n\\n```scala\\n javaOptions in run := List(\\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005\\"),\\n fork in run := true\\n```\\n\\nThis will cause running `sbt run` to wait for Metals to connect to it, which\\nmight be especially useful when reading user input, which is currently\\nimpossible to do for example from within VS Code. Similarly, these options can\\nbe specified in any of the supported build tools.\\n\\nTo later connect to the running process, you need to use the additional Attach\\nrequest type with the `buildTarget`, `hostname` and `port` fields specified. In\\ncase of Visual Studio Code this will take a form of:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"request\\": \\"attach\\",\\n \\"name\\": \\"Attach\\",\\n \\"buildTarget\\": \\"root\\",\\n \\"hostName\\": \\"localhost\\",\\n \\"port\\": 5005\\n}\\n```\\n\\n## Environment variables in run/debug\\n\\nMetals now supports specifying additional environment options when running or\\ndebugging applications. This can be done twofold:\\n\\n- By specifying the new `env` field:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"name\\": \\"Debug Main\\",\\n \\"request\\": \\"launch\\",\\n \\"mainClass\\": \\"Main\\",\\n \\"args\\": [\\"hello\\", \\"world\\"],\\n \\"env\\": { \\"VARIABLE1\\": \\" 123\\" }\\n}\\n```\\n\\n- By using the `envFile` field:\\n\\n```json\\n{\\n \\"type\\": \\"scala\\",\\n \\"name\\": \\"Debug Main\\",\\n \\"request\\": \\"launch\\",\\n \\"mainClass\\": \\"Main\\",\\n \\"args\\": [\\"hello\\", \\"world\\"],\\n \\"envFile\\": \\"local.env\\"\\n}\\n```\\n\\nWhere the `local.env` file can take a form of:\\n\\n```\\n# single line values\\nkey1=value 1\\nkey2=\'value 2\' # ignored inline comment\\nkey3=\\"value 3\\"\\n\\n# multi-line values\\nkey4=\'line 1\\nline 2\'\\nkey5=\\"line 1\\nline 2\\"\\n\\n# export statements\\nexport key6=value 6\\n\\n# comma delimiter\\nkey7:value 6\\n\\n# keys cannot contain dots or dashes\\na.b.key8=value 8 # will be ignored\\na-b-key9=value 9 # will be ignored\\n```\\n\\nThe format is adapted from\\n[mefellows/sbt-dotenv](https://github.com/mefellows/sbt-dotenv) and\\n[bkeepers/dotenv](https://github.com/bkeepers/dotenv). Example json\\nconfigurations above are defined for Visual Studio Code, the `type` and `name`\\nfields can be omitted when using in other clients.\\n\\nThis new feature has been contributed by [mwz](https://github.com/mwz). Thanks\\nfor the great work!\\n\\n## Miscellaneous\\n\\n- Removed `javax` from default excluded packages - it can be added back in the\\n configuration.\\n- Fixed top level completions in empty files.\\n- Fixed issues with run/debug when using VPN.\\n- Fixed go to java sources in standalone worksheets.\\n- Fixed issues with worksheets if the workspace was not first compiled.\\n- Fixed sbt completions coming from `project/*.scala` files.\\n- Only use `import {java.util => ju}` when there are conflicting symbols in the\\n file.\\n- Muted InvalidProtocolException in the logs - this exception might happen.\\n normally and does not break anything.\\n- Changed scalafix and scalafmt location in user configuration to absolute path.\\n- Only report parsing errors after Scala version is confirmed for a file.\\n- Added automatic retry in case of build server connection failure.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.4..v0.9.5\\nChris Kipp\\nScala Steward\\nTomasz Godzik\\nMichael Wizner\\nMeriam Lachkar\\nGabriele Petronella\\nKrzysiek Bochenek\\nPavol Vidlicka\\nVadim Chelyshov\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.5](https://github.com/scalameta/metals/tree/v0.9.5) (2020-11-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.4...v0.9.5)\\n\\n**Merged pull requests:**\\n\\n- Rename user configuration options for decoration provider\\n [\\\\#2196](https://github.com/scalameta/metals/pull/2196)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show warning about unsupported Scala version in worksheets\\n [\\\\#2194](https://github.com/scalameta/metals/pull/2194)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala3 3.0.0-M1\\n [\\\\#2190](https://github.com/scalameta/metals/pull/2190)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafix [\\\\#2192](https://github.com/scalameta/metals/pull/2192)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add retry in case of timeout in build/initialize\\n [\\\\#2184](https://github.com/scalameta/metals/pull/2184)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure scalacOptions for Test are correct for sbt BSP.\\n [\\\\#2191](https://github.com/scalameta/metals/pull/2191)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support remote debugging\\n [\\\\#2125](https://github.com/scalameta/metals/pull/2125)\\n ([pvid](https://github.com/pvid))\\n- Add in timer methods to a new timerProvider.\\n [\\\\#2186](https://github.com/scalameta/metals/pull/2186)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove condition for jfr, since it\'s now reliably available on CI\\n [\\\\#2185](https://github.com/scalameta/metals/pull/2185)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure build server is connected or not available before parsing\\n [\\\\#2169](https://github.com/scalameta/metals/pull/2169)\\n ([tgodzik](https://github.com/tgodzik))\\n- Preload scalafix to optimize first organize imports run\\n [\\\\#2168](https://github.com/scalameta/metals/pull/2168)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow for reset in html doctor\\n [\\\\#2172](https://github.com/scalameta/metals/pull/2172)\\n ([ckipp01](https://github.com/ckipp01))\\n- Track and show progress to user about connecting to sbt\\n [\\\\#2182](https://github.com/scalameta/metals/pull/2182)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove old bloop script now that we just use coursier\\n [\\\\#2181](https://github.com/scalameta/metals/pull/2181)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update interface to 1.0.1\\n [\\\\#2178](https://github.com/scalameta/metals/pull/2178)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.2.10\\n [\\\\#2180](https://github.com/scalameta/metals/pull/2180)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.0.4\\n [\\\\#2179](https://github.com/scalameta/metals/pull/2179)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.5\\n [\\\\#2177](https://github.com/scalameta/metals/pull/2177)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.8.6\\n [\\\\#2176](https://github.com/scalameta/metals/pull/2176)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 30.0-jre\\n [\\\\#2175](https://github.com/scalameta/metals/pull/2175)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.4-23-dbacf644\\n [\\\\#2174](https://github.com/scalameta/metals/pull/2174)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.5\\n [\\\\#2173](https://github.com/scalameta/metals/pull/2173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix resolver for sbt-metals snapshot\\n [\\\\#2170](https://github.com/scalameta/metals/pull/2170)\\n ([ckipp01](https://github.com/ckipp01))\\n- Enable smoother sbt bsp integration.\\n [\\\\#2154](https://github.com/scalameta/metals/pull/2154)\\n ([ckipp01](https://github.com/ckipp01))\\n- Change scalafix and scalafmt conf to absolute path\\n [\\\\#2165](https://github.com/scalameta/metals/pull/2165)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix race condition while using textDocument/foldingRange\\n [\\\\#2166](https://github.com/scalameta/metals/pull/2166)\\n ([tgodzik](https://github.com/tgodzik))\\n- Account for possible null value in ScalaTarget\'s baseDirectory\\n [\\\\#2164](https://github.com/scalameta/metals/pull/2164)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mill scripts [\\\\#2162](https://github.com/scalameta/metals/pull/2162)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mute InvalidProtocolException which might happen normally\\n [\\\\#2159](https://github.com/scalameta/metals/pull/2159)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt to 1.4.1 [\\\\#2161](https://github.com/scalameta/metals/pull/2161)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that default version is picked up for Scalafmt provider\\n [\\\\#2158](https://github.com/scalameta/metals/pull/2158)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t import {java.util => ju} when no conflicting symbols are available\\n [\\\\#2155](https://github.com/scalameta/metals/pull/2155)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fixed sbt completions coming from project/\\\\*.scala\\n [\\\\#2129](https://github.com/scalameta/metals/pull/2129)\\n ([dos65](https://github.com/dos65))\\n- Add java sources to standalone worksheets and run compilation before\\n evaluation if necessary.\\n [\\\\#2133](https://github.com/scalameta/metals/pull/2133)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump setup-scala and cache-action actions\\n [\\\\#2149](https://github.com/scalameta/metals/pull/2149)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add JFR for non oracle JDK releases\\n [\\\\#2137](https://github.com/scalameta/metals/pull/2137)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt up to 2.7.4\\n [\\\\#2148](https://github.com/scalameta/metals/pull/2148)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.24\\n [\\\\#2147](https://github.com/scalameta/metals/pull/2147)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, sbt-munit to 0.7.14\\n [\\\\#2146](https://github.com/scalameta/metals/pull/2146)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.14\\n [\\\\#2144](https://github.com/scalameta/metals/pull/2144)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 7.0.3\\n [\\\\#2143](https://github.com/scalameta/metals/pull/2143)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.2.Final\\n [\\\\#2142](https://github.com/scalameta/metals/pull/2142)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.3\\n [\\\\#2141](https://github.com/scalameta/metals/pull/2141)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.8.3\\n [\\\\#2140](https://github.com/scalameta/metals/pull/2140)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.2 [\\\\#2139](https://github.com/scalameta/metals/pull/2139)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.3\\n [\\\\#2138](https://github.com/scalameta/metals/pull/2138)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use 127.0.0.1 address always for DebugProvider\\n [\\\\#2135](https://github.com/scalameta/metals/pull/2135)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for loading env variables from a .env file.\\n [\\\\#2123](https://github.com/scalameta/metals/pull/2123)\\n ([mwz](https://github.com/mwz))\\n- Do not show hover if the type is error\\n [\\\\#2126](https://github.com/scalameta/metals/pull/2126)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure files are compiled when running scalafix\\n [\\\\#2119](https://github.com/scalameta/metals/pull/2119)\\n ([tgodzik](https://github.com/tgodzik))\\n- Show implicit arguments and type annotations for Scala files\\n [\\\\#2103](https://github.com/scalameta/metals/pull/2103)\\n ([tgodzik](https://github.com/tgodzik))\\n- Account for possible null value on PopupChoiceReset message request\\n [\\\\#2121](https://github.com/scalameta/metals/pull/2121)\\n ([ckipp01](https://github.com/ckipp01))\\n- Support environment variables when running or debugging\\n [\\\\#2118](https://github.com/scalameta/metals/pull/2118)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in top level-completions for empty file.\\n [\\\\#2088](https://github.com/scalameta/metals/pull/2088)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalafix-interfaces to 0.9.21\\n [\\\\#2114](https://github.com/scalameta/metals/pull/2114)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.9\\n [\\\\#2113](https://github.com/scalameta/metals/pull/2113)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.7\\n [\\\\#2112](https://github.com/scalameta/metals/pull/2112)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.2.0.Final\\n [\\\\#2111](https://github.com/scalameta/metals/pull/2111)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.10.1\\n [\\\\#2110](https://github.com/scalameta/metals/pull/2110)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scribe, scribe-slf4j to 2.7.13\\n [\\\\#2109](https://github.com/scalameta/metals/pull/2109)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix, scalafix-interfaces to 0.9.21\\n [\\\\#2108](https://github.com/scalameta/metals/pull/2108)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.4-15-56a96a99\\n [\\\\#2107](https://github.com/scalameta/metals/pull/2107)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update organize-import rule to add Scala 2.11 support\\n [\\\\#2101](https://github.com/scalameta/metals/pull/2101)\\n ([gabro](https://github.com/gabro))\\n- Simplify TestHovers and remove warning\\n [\\\\#2098](https://github.com/scalameta/metals/pull/2098)\\n ([gabro](https://github.com/gabro))\\n- Display used BuildServer in Doctor\\n [\\\\#2097](https://github.com/scalameta/metals/pull/2097)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Implement organize import using scalafix\\n [\\\\#1971](https://github.com/scalameta/metals/pull/1971)\\n ([mlachkar](https://github.com/mlachkar))\\n- Remove javax from default excluded packages\\n [\\\\#2091](https://github.com/scalameta/metals/pull/2091)\\n ([gabro](https://github.com/gabro))\\n- Add documentation for new parameter in GotoLocation\\n [\\\\#2095](https://github.com/scalameta/metals/pull/2095)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix Metals version in the blog post\\n [\\\\#2089](https://github.com/scalameta/metals/pull/2089)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.9.4\\n [\\\\#2081](https://github.com/scalameta/metals/pull/2081)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/11/06/sbt-BSP-support","metadata":{"permalink":"/metals/blog/2020/11/06/sbt-BSP-support","source":"@site/blog/2020-11-06-sbt-BSP-support.md","title":"sbt BSP support","description":"If you\'ve been following the [sbt","date":"2020-11-06T00:00:00.000Z","formattedDate":"November 6, 2020","tags":[],"readingTime":5.9,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"}],"frontMatter":{"author":"Chris Kipp","title":"sbt BSP support","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars2.githubusercontent.com/u/13974112?v=4"},"prevItem":{"title":"Metals v0.9.5 - Lithium","permalink":"/metals/blog/2020/11/10/lithium"},"nextItem":{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"}},"content":"If you\'ve been following the [sbt\\nreleases](https://github.com/sbt/sbt/releases), 1.4.x introduced some great new\\nfeatures, one of those being BSP support. This effort was initiated by community\\nmembers and proposed to the [Scala Center Advisory\\nBoard](https://github.com/scalacenter/advisoryboard/blob/master/proposals/023-bsp.md).\\nThen thanks to the work of [Adrien Piquerez](https://twitter.com/adrienpi2) and\\n[Eugene Yokota](https://twitter.com/eed3si9n) BSP support became a reality in\\n1.4.0. You can read more about the reason behind the work and some of the\\ndetails of the implementation in this blog post: [BSP Support in sbt\\n1.4](https://www.scala-lang.org/blog/2020/10/27/bsp-in-sbt.html).\\n\\nThe Metals team is also happy to announce that as of the 0.9.5 release, the\\nprocess to use other BSP servers like sbt is now much smoother. In some ways,\\nBSP is an implementation detail abstracted away from a user, and you may not\\ndirectly interact at all with your build server, even though it\'s pivotal for\\nthe Metals experience. Therefore, we\'d like to answer some common questions\\nabout what this means to you as a user, explain some of the default choices\\nMetals makes for you, and show you how to explore the sbt BSP server.\\n\\n## What is BSP?\\n\\nFirst off, you may be wondering what BSP is. The [Build Server\\nProtocol](https://build-server-protocol.github.io/) (BSP) is a _Protocol for IDEs and\\nbuild tools to communicate about compilation, running, testing, debugging, and\\nmuch more._ If you\'re familiar with the [Language Server\\nProtocol](https://microsoft.github.io/language-server-protocol/) (LSP), BSP is\\ncomplementary to LSP and inspired by it. Where LSP allows your editor to\\nabstract over various programming languages by a shared way to communicate to a\\nlanguage server, BSP allows IDE\'s to abstract over various build servers. A\\ntypical example of this can be illustrated like so:\\n\\n![LSP BSP example](https://i.imgur.com/0RRUDlU.png)\\n\\nYou have your editor (Emacs) communicating with Metals via LSP, and then Metals\\ncommunicating with a BSP server (Bloop) via BSP. This communication over BSP can\\nbe about compiling your code, running your code, defining sources in your\\nworkspace, etc. You can read all about the various communication types [here in\\nthe\\nprotocol](https://build-server-protocol.github.io/docs/specification#actual-protocol).\\n\\n[Bloop](https://scalacenter.github.io/bloop/) was the first server to implement\\nBSP, and it\'s the default build server for all build tools that Metals supports\\nat the moment. When you open a fresh project, you\'re prompted to import your\\nbuild, and this import process is running a form of \\"Bloop Install\\" to write\\nyour build definition to `.bloop/` for Bloop to read and use. Then as you\\ncontinue to edit, diagnostics and other information are flowing back and forth\\nfrom Metals to Bloop. Hopefully this gives you a brief picture of what BSP is,\\nand how it\'s used in Metals.\\n\\n## What does sbt BSP support mean for Metals?\\n\\nAnother question you may have is \\"what does sbt BSP support mean for Metals\\"?\\nThis means a couple different things. Up until this point, if you wanted to use\\nsbt BSP, you needed to clear your `.metals/` and `.bloop` directories, and then\\nstart sbt with a specific flag before connecting to it. None of this is\\nnecessary anymore. In order for [BSP\\ndiscovery](https://build-server-protocol.github.io/docs/server-discovery.html)\\nto happen, you need a `.bsp/*json` file with instructions on how to\\nstart/connect to the build server. A new command has been added to Metals (which\\nwe\'ll go over down below) that can generate this file for you if it doesn\'t\\nexist, and then you will be automatically connected to sbt. If this file already\\nexist, then we provide a simple way for you to \\"switch\\" build servers and for\\nyour choice to be remembered. We also automatically include an sbt plugin to\\nensure the correct semantic information is produced by the compiler. So to\\nsummarize, Metals now has the ability to generate the necessary `.bsp/sbt.json`\\nfile if it doesn\'t exist, and to also switch back and forth from using Bloop or\\nsbt as your build server.\\n\\n## What\'s the difference between Bloop and sbt BSP?\\n\\nAt this point you may be asking, \\"what\'s the difference?\\". For an average user,\\nthere may not be a ton of difference, however I\'d like to outline a couple\\nthings that may be relevant to you.\\n\\n- Bloop supports the [Debug Adapter\\n Protocol](https://microsoft.github.io/debug-adapter-protocol/) (DAP) and sbt\\n doesn\'t. So you\'ll notice when using sbt as a build server, you won\'t have\\n the `run` or `debug` code lenses directly in your editor like you do with\\n Bloop.\\n- Bloop writes all the necessary information about your build it needs to disk\\n whereas sbt loads it into memory. If you\'re a user that works for long\\n periods of time on a single project, then this may not matter to you at all.\\n However, if you jump in and out of projects, without having sbt shell\\n running, then you will pay the cost of loading up your build every time.\\n- Bloop offers sbt file support that enables completions and hover, whereas\\n this is not yet available in the sbt BSP implementation.\\n- sbt gives you access to the full task graph, so for example if you\'re using\\n `BuildInfo`, and you compile with Bloop, your `BuildInfo` won\'t get\\n generated. However, sources will get generated when using sbt server. This\\n can help avoid any potential inconsistencies. \\n\\nWhile there are some more differences, these are probably the main ones you\'ll\\nnotice as a user. These are both great tools, and you\'ll have to explore more to\\nsee what is the best fit for you. For now, Metals defaults to using Bloop mainly\\nbecause we believe it provides a richer feature set and because pretty much all\\nof our testing includes Bloop as a build server.\\n\\n## How do I try it out?\\n\\nNow to the good stuff. There are two main ways that you can start using sbt\\nserver in Metals.\\n\\n### No `.bsp/sbt.json` exists\\n\\nIf no `.bsp/sbt.json` exists yet, you can generate it with the new\\n`metals.generate-bsp-config` command. At any time you can execute this command\\nand Metals will ensure that you\'re on the minimum required sbt version (1.4.1),\\ngenerate the `.bsp/sbt.json` file for you, include the necessary plugin, and\\nthen auto-connect to the sbt build server. For example in VS Code this looks\\nlike this:\\n\\n### `metals.generate-bsp-config`\\n![generate-bsp-config](https://i.imgur.com/kBNbtzI.gif)\\n\\n### `.bsp/sbt.json` already exists\\n\\nIf you\'ve ran sbt on your project already, your `.bsp/sbt.json` file will\\nalready exist. In this case, you can simply use the `metals.bsp-switch` command\\nand choose sbt. For example, using `coc-metals`, it looks like this:\\n\\n### `metals.bsp-switch`\\n![bsp-switch](https://i.imgur.com/6tY2ofL.gif)\\n\\n### Switching back to Bloop\\n\\nAfter you do a `metals.bsp-switch` or `metals-generate-bsp-config`, your choice\\nwill be remembered. So the next time that you open your workspace, you will\\nautomatically connect to the last build server you had chosen. If you\'d like to\\ngo back to your previous build server, you can simply use the\\n`metals.bsp-switch` command again to choose your previous server. For editors\\nthat have an html doctor, you can also reset your build server choice in the\\nDoctor.\\n\\n### Doctor reset\\n![Doctor](https://i.imgur.com/YEGfEGB.png)\\n\\n## Conclusion\\n\\nWe hope you enjoy this easier way to use sbt server with Metals. If you\'re\\ncurious about the implementation details, much of the work was done in [this\\npr](https://github.com/scalameta/metals/pull/2154). As always please don\'t\\nhesitate to ask questions on our various channels, submit issues, or create new\\nfeature requests."},{"id":"/2020/09/21/lithium","metadata":{"permalink":"/metals/blog/2020/09/21/lithium","source":"@site/blog/2020-09-21-lithium.md","title":"Metals v0.9.4 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.4, which focuses on","date":"2020-09-21T00:00:00.000Z","formattedDate":"September 21, 2020","tags":[],"readingTime":5.72,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.4 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"sbt BSP support","permalink":"/metals/blog/2020/11/06/sbt-BSP-support"},"nextItem":{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.4, which focuses on\\nimprovements in Scala 3 worksheets, a couple of new features, and a number of\\nsmaller improvements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release115
Merged PRs50
Contributors6
Closed issues15
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/27?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 0.26.0 and 0.27.0-RC1 support.\\n- Analyze stacktrace command\\n- Customizable package exclusions\\n\\n## Analyze stacktrace command\\n\\nThanks to [kpbochenek](https://github.com/kpbochenek), Metals can now help with\\nnavigating stack traces using the new `metals.analyze-stacktrace` command. The\\nonly thing it needs is the actual stack trace string to be input as a parameter\\nto the command. This new functionality works differently in various editors.\\n\\n### Visual Studio Code\\n\\nThe only thing users need to do is copy the stack trace and run the\\n`Analyze Stacktrace` command from the command palette. This will display a new\\nweb view, where it will be possible for users to navigate the files that are\\nincluded in the exception.\\n\\n![stacktrace-vscode](https://i.imgur.com/WBU4hvT.gif)\\n\\n### coc-metals\\n\\nWith `coc-metals`, you just need to copy the stacktrace, whether from sbt,\\nbloop-cli, or somewhere else into your register. Once you have it copied, you\\ncan just execute the `metals.analyze-stacktrace`command. This will create\\na`.metals/stracktrace.scala` file which can be used to navigate through your\\nstacktrace using code lenses. Keep in mind that you\'ll want to make sure you\\nhave codeLens.enable set to true in your configuration. Also, since this feature\\nrelies on code lenses (virtual text in Nvim), it\'s only supported in Nvim.\\n\\n![stacktrace-nvim](https://camo.githubusercontent.com/54a9cb68547532b2ff16cb6f95fdd8268d806b41/68747470733a2f2f692e696d6775722e636f6d2f74516a694147322e676966)\\n\\n### Other editors\\n\\nTo make it work with any other editors users need to run the command manually\\nwith the stacktrace as input, similar to the example above with `coc-metals`.\\nThe command will generate a new file, `.metals/stacktrace.scala`, which can be\\nused to navigate through the stacktrace using code lenses.\\n\\n## Customizable package exclusions\\n\\nUsually, a number of packages are almost never used by the developers and could\\nclutter the language server output while being of little benefit to the users.\\nMetals would exclude those packages from indexing causing them to not be\\nrecommended for completions, symbol searches, and code actions. Previously that\\nlist was set in stone and consisted of a number of prefixes:\\n\\n```scala\\nval defaultExclusions: List[String] = List(\\n \\"META-INF/\\", \\"images/\\", \\"toolbarButtonGraphics/\\", \\"jdk/\\", \\"sun/\\", \\"javax/\\",\\n \\"oracle/\\", \\"java/awt/desktop/\\", \\"org/jcp/\\", \\"org/omg/\\", \\"org/graalvm/\\",\\n \\"com/oracle/\\", \\"com/sun/\\", \\"com/apple/\\", \\"apple/\\"\\n )\\n```\\n\\nThis list might work in most cases, but users might also want to customize the\\nlist according to their preferences and domain they are working on. Starting\\nwith this release it is now possible to define additional exclusions as well as\\nremove some from the default list. This can be done via an additional Metals\\nuser setting:\\n\\n```json\\n\\"metals.excluded-packages\\" : [\\n \\"akka.actor.typed.javadsl\\", \\"--javax\\"\\n]\\n```\\n\\n`--` should only be used to remove some of the defaults if they aren\'t needed\\nfor your project. Thanks to [ckipp01](https://github.com/ckipp01) for\\ncontributing this feature!\\n\\n## Miscellaneous\\n\\nSome of the smaller improvements to Metals include:\\n\\n- New recommended Maven Scala template.\\n- Fix go to source and auto imports in standalone worksheet files.\\n- Fix missing classes from \\\\_empty package in tree view.\\n- Add a command to quickly create a new worksheet with a default name.\\n\\nBeside all the core work on the server itself, there have also been a lot of\\ngreat work done in various other Scalameta projects, which Metals relies on.\\nThese projects include [mdoc](http://github.com/scalameta/mdoc), which powers\\nworksheets and [Scalameta](http://github.com/scalameta/scalameta), which powers\\nall SemanticDB and parsing powered features. Those contributions helped to\\nunlock and improve Dotty support in Metals. So special thanks to those projects\\nand contributors.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.3..v0.9.4\\nScala Steward\\nChris Kipp\\nTomasz Godzik\\nKrzysztof Bochenek\\nEthan Atkins\\nJoseph Price\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.4](https://github.com/scalameta/metals/tree/v0.9.4) (2020-09-21)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.3...v0.9.4)\\n\\n**Merged pull requests:**\\n\\n- Bump other reference of coursier/cache\\n [\\\\#2087](https://github.com/scalameta/metals/pull/2087)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use built-in fetch depth and bump coursier cache\\n [\\\\#2086](https://github.com/scalameta/metals/pull/2086)\\n ([ckipp01](https://github.com/ckipp01))\\n- Refactor NewFileProvider\\n [\\\\#2085](https://github.com/scalameta/metals/pull/2085)\\n ([ckipp01](https://github.com/ckipp01))\\n- Strip out `[E]` or `[error]` from stacktrace in analyzer.\\n [\\\\#2083](https://github.com/scalameta/metals/pull/2083)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Bloop to 1.4.4-13-408f4d80\\n [\\\\#2080](https://github.com/scalameta/metals/pull/2080)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc version to 2.2.9\\n [\\\\#2079](https://github.com/scalameta/metals/pull/2079)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change new-scala-file to enable quick creation of a file.\\n [\\\\#2075](https://github.com/scalameta/metals/pull/2075)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-jmh to 0.4.0\\n [\\\\#2071](https://github.com/scalameta/metals/pull/2071)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.2.Final\\n [\\\\#2067](https://github.com/scalameta/metals/pull/2067)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.22\\n [\\\\#2070](https://github.com/scalameta/metals/pull/2070)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.8\\n [\\\\#2069](https://github.com/scalameta/metals/pull/2069)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.2.8\\n [\\\\#2068](https://github.com/scalameta/metals/pull/2068)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.4.Final\\n [\\\\#2066](https://github.com/scalameta/metals/pull/2066)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-26\\n [\\\\#2065](https://github.com/scalameta/metals/pull/2065)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.20\\n [\\\\#2064](https://github.com/scalameta/metals/pull/2064)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.3-31-b16d7e50\\n [\\\\#2063](https://github.com/scalameta/metals/pull/2063)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix wrong definition position for worksheets\\n [\\\\#2060](https://github.com/scalameta/metals/pull/2060)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix typo in StringBloomFilter.scala\\n [\\\\#2059](https://github.com/scalameta/metals/pull/2059)\\n ([joprice](https://github.com/joprice))\\n- Add support for dotty 0.27.0-RC1 and update mdoc\\n [\\\\#2058](https://github.com/scalameta/metals/pull/2058)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t search for runTest code lenses in Ammonite scripts and worksheets.\\n [\\\\#2057](https://github.com/scalameta/metals/pull/2057)\\n ([ckipp01](https://github.com/ckipp01))\\n- Look into ammonite flakiness in tests to see if we can remove it\\n [\\\\#2054](https://github.com/scalameta/metals/pull/2054)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in new version of Ammonite\\n [\\\\#2056](https://github.com/scalameta/metals/pull/2056)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix missing classes from _empty_ package in treeView.\\n [\\\\#2053](https://github.com/scalameta/metals/pull/2053)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove TravisCI stuff [\\\\#2055](https://github.com/scalameta/metals/pull/2055)\\n ([ckipp01](https://github.com/ckipp01))\\n- Correct the way userConfig examples are displayed.\\n [\\\\#2045](https://github.com/scalameta/metals/pull/2045)\\n ([ckipp01](https://github.com/ckipp01))\\n- Customizable package exclusions\\n [\\\\#2012](https://github.com/scalameta/metals/pull/2012)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update interface to 0.0.25\\n [\\\\#2038](https://github.com/scalameta/metals/pull/2038)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update emacs docs to include latest lsp-metals changes\\n [\\\\#2033](https://github.com/scalameta/metals/pull/2033)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.21\\n [\\\\#2042](https://github.com/scalameta/metals/pull/2042)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.7.12\\n [\\\\#2041](https://github.com/scalameta/metals/pull/2041)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.13\\n [\\\\#2040](https://github.com/scalameta/metals/pull/2040)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.5\\n [\\\\#2039](https://github.com/scalameta/metals/pull/2039)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-25\\n [\\\\#2037](https://github.com/scalameta/metals/pull/2037)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update file-tree-views to 2.1.5\\n [\\\\#2036](https://github.com/scalameta/metals/pull/2036)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update bloop-config, bloop-launcher to 1.4.3-27-dfdc9971\\n [\\\\#2035](https://github.com/scalameta/metals/pull/2035)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.2\\n [\\\\#2034](https://github.com/scalameta/metals/pull/2034)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix auto imports and go to sources for worksheets outside sources\\n [\\\\#2030](https://github.com/scalameta/metals/pull/2030)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Maven template to the curated list of templates\\n [\\\\#2028](https://github.com/scalameta/metals/pull/2028)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for dotty 0.26.0\\n [\\\\#2027](https://github.com/scalameta/metals/pull/2027)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump memory for test forks to 2GB\\n [\\\\#2025](https://github.com/scalameta/metals/pull/2025)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt docs to better explain how to manually install Metals prior to\\n 0.7.6 version [\\\\#2026](https://github.com/scalameta/metals/pull/2026)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add parallel tests [\\\\#1985](https://github.com/scalameta/metals/pull/1985)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove old gitignore and graal stuff.\\n [\\\\#2022](https://github.com/scalameta/metals/pull/2022)\\n ([ckipp01](https://github.com/ckipp01))\\n- Clear fingerprints when semanticdb hash matches\\n [\\\\#2021](https://github.com/scalameta/metals/pull/2021)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change link in blog post to absolute path\\n [\\\\#2019](https://github.com/scalameta/metals/pull/2019)\\n ([tgodzik](https://github.com/tgodzik))\\n- Switch file watching library to swoval\\n [\\\\#2014](https://github.com/scalameta/metals/pull/2014)\\n ([eatkins](https://github.com/eatkins))\\n- Move releases to github actions\\n [\\\\#2015](https://github.com/scalameta/metals/pull/2015)\\n ([tgodzik](https://github.com/tgodzik))\\n- Analyze stacktrace [\\\\#1966](https://github.com/scalameta/metals/pull/1966)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix typo in vscode docs\\n [\\\\#2010](https://github.com/scalameta/metals/pull/2010)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for 0.9.3\\n [\\\\#2008](https://github.com/scalameta/metals/pull/2008)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/08/19/lithium","metadata":{"permalink":"/metals/blog/2020/08/19/lithium","source":"@site/blog/2020-08-19-lithium.md","title":"Metals v0.9.3 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.3, which adds a couple of","date":"2020-08-19T00:00:00.000Z","formattedDate":"August 19, 2020","tags":[],"readingTime":5.51,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.3 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.4 - Lithium","permalink":"/metals/blog/2020/09/21/lithium"},"nextItem":{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"}},"content":"We\'re happy to announce the release of Metals v0.9.3, which adds a couple of\\nuseful new features as well as support for Scala 0.25.0 and 0.26.0-RC1.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release123
Merged PRs59
Contributors9
Closed issues31
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/26?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- sbt script support with hover, completions and go to definition.\\n- Scala 3 worksheet support\\n- Scala 0.25.0 and 0.26.0-RC1 support.\\n- Main classes from dependencies can now be run\\n\\n## sbt script support\\n\\nThanks to the great work by [dos65](https://github.com/dos65) Metals now\\nsupports sbt script files as well as build\'s Scala files. The full list of\\ncurrently supported features is available\\n[here](/metals/docs#additional-file-types).\\n\\nsbt support is is achieved by generating additional `metals.sbt` file for each\\nlevel of sbt\'s project. For `build.sbt` we now generate\\n`project/project/metals.sbt`, for `project/other.sbt`\\n`project/project/project/metals.sbt` etc. This is needed for the Bloop plugin to\\nproperly generate information in the `.bloop` configuration files. It\'s\\nrecommended to gitignore `metals.sbt` and `.bloop` anywhere in the file tree.\\n\\n## Scala 3 worksheet support\\n\\nFinally, it is now possible to run worksheets for Scala 3 starting with version\\n0.26.0-RC1. To try it out users need to create the worksheet inside of a Scala 3\\nsource directory and then they can be used the same way as with previously\\nsupported worksheets.\\n\\nThis is a great place for anyone to experiment with Scala 3 and see what is\\ncoming around the corner!\\n\\n![worksheet-sample](https://i.imgur.com/DZvz3Le.gif)\\n\\n## Running main classes from dependencies\\n\\nPreviously, users could only run main classes that are defined in the\\nsourcecode, which made it impossible to run and debug in certain frameworks such\\nas the [Play Framework](https://www.playframework.com/). Metals now searches the\\nclasspath additionally to find any classes that are defined by the user and not\\navailable in the main sources.\\n\\nTo run any such class a full name needs to be provided via the configuration.\\n\\nFor example in Visual Studio Code this would look like this:\\n\\n```json\\n{\\n \\"version\\": \\"0.2.0\\",\\n \\"configurations\\": [\\n {\\n \\"type\\": \\"scala\\",\\n \\"request\\": \\"launch\\",\\n \\"name\\": \\"Play main\\",\\n \\"mainClass\\": \\"play.core.server.ProdServerStart\\",\\n \\"buildTarget\\": \\"root\\",\\n \\"args\\": [],\\n \\"jvmOptions\\": []\\n }\\n ]\\n}\\n```\\n\\nIn other editors users need to provide the same parameters for the run\\nconfiguration.\\n\\n## Miscellaneous\\n\\n- Removed breakpoints are no longer hit.\\n- Compilation is invoked only once for any change.\\n- Worksheets now display types next to the code.\\n- Fixed wrong completions in string interpolation.\\n- Bloop now copies old artifacts by default even if the workspace does not\\n compile.\\n- Fixed duplicate code actions in case of range selection.\\n- Fixed `metals.enableStripMargin` option to work without restarting the\\n workspace.\\n- Signature help now also triggers when typing `,`\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.2..v0.9.3\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nCheng Lian\\nVadim Chelyshov\\nAdrien Piquerez\\nAyoub Benali\\nKrzysztof Bochenek\\nOlafur Pall Geirsson\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.3](https://github.com/scalameta/metals/tree/v0.9.3) (2020-08-19)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.2...v0.9.3)\\n\\n**Merged pull requests:**\\n\\n- Document how to run or debug applications\\n [\\\\#2005](https://github.com/scalameta/metals/pull/2005)\\n ([tgodzik](https://github.com/tgodzik))\\n- Properly detect semanticdb target for Scala 3\\n [\\\\#2004](https://github.com/scalameta/metals/pull/2004)\\n ([adpi2](https://github.com/adpi2))\\n- Add try/catch around unsafe code block.\\n [\\\\#2002](https://github.com/scalameta/metals/pull/2002)\\n ([olafurpg](https://github.com/olafurpg))\\n- Allow to remove all breakpoints when debugging\\n [\\\\#1992](https://github.com/scalameta/metals/pull/1992)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update information about Sbt, Ammonite and worksheet support\\n [\\\\#1994](https://github.com/scalameta/metals/pull/1994)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update munit, sbt-munit to 0.7.11\\n [\\\\#2000](https://github.com/scalameta/metals/pull/2000)\\n ([scala-steward](https://github.com/scala-steward))\\n- Make sure we don\'t compile twice for open files\\n [\\\\#1993](https://github.com/scalameta/metals/pull/1993)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt-mdoc to 2.2.5\\n [\\\\#2001](https://github.com/scalameta/metals/pull/2001)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.12\\n [\\\\#1999](https://github.com/scalameta/metals/pull/1999)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.4\\n [\\\\#1998](https://github.com/scalameta/metals/pull/1998)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-util to 2.2.0\\n [\\\\#1997](https://github.com/scalameta/metals/pull/1997)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.2\\n [\\\\#1996](https://github.com/scalameta/metals/pull/1996)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-buildinfo to 0.10.0\\n [\\\\#1995](https://github.com/scalameta/metals/pull/1995)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add types to worksheet values\\n [\\\\#1990](https://github.com/scalameta/metals/pull/1990)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow running main classes from dependencies\\n [\\\\#1989](https://github.com/scalameta/metals/pull/1989)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for Sbt\'s Scala files\\n [\\\\#1988](https://github.com/scalameta/metals/pull/1988)\\n ([tgodzik](https://github.com/tgodzik))\\n- Don\'t run worksheets on Scala 0.25.0 or lower\\n [\\\\#1986](https://github.com/scalameta/metals/pull/1986)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix go to defintion for Sbt\'s Scala sources\\n [\\\\#1984](https://github.com/scalameta/metals/pull/1984)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in a few missing docs on the extensions and commands.\\n [\\\\#1980](https://github.com/scalameta/metals/pull/1980)\\n ([ckipp01](https://github.com/ckipp01))\\n- Change hardcoded \\\\$(info) icon to read from ClientConfig instead.\\n [\\\\#1982](https://github.com/scalameta/metals/pull/1982)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for worksheets in Scala 3\\n [\\\\#1979](https://github.com/scalameta/metals/pull/1979)\\n ([tgodzik](https://github.com/tgodzik))\\n- Simplify logic to add metals.sbt files and make sure it\'s tested\\n [\\\\#1978](https://github.com/scalameta/metals/pull/1978)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add checking exact name to all references() invocations\\n [\\\\#1976](https://github.com/scalameta/metals/pull/1976)\\n ([tgodzik](https://github.com/tgodzik))\\n- Adjust locations returned from the presentation compiler\\n [\\\\#1972](https://github.com/scalameta/metals/pull/1972)\\n ([tgodzik](https://github.com/tgodzik))\\n- Sbt support - multiply bsp connections\\n [\\\\#1865](https://github.com/scalameta/metals/pull/1865)\\n ([dos65](https://github.com/dos65))\\n- Fix `filterText` value for completion item in string interpolation\\n [\\\\#1949](https://github.com/scalameta/metals/pull/1949)\\n ([dos65](https://github.com/dos65))\\n- Add CleanCompile to server commands documentation\\n [\\\\#1970](https://github.com/scalameta/metals/pull/1970)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Change implicits to Dotty syntax.\\n [\\\\#1967](https://github.com/scalameta/metals/pull/1967)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump recommended scalafmt version and local scalafmt version to 2.6.4\\n [\\\\#1968](https://github.com/scalameta/metals/pull/1968)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update ammonite-util to 2.1.4-13-fb16e4e\\n [\\\\#1955](https://github.com/scalameta/metals/pull/1955)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.10.0\\n [\\\\#1961](https://github.com/scalameta/metals/pull/1961)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.3\\n [\\\\#1962](https://github.com/scalameta/metals/pull/1962)\\n ([scala-steward](https://github.com/scala-steward))\\n- Bump default mill version and also add it to BuildInfo\\n [\\\\#1954](https://github.com/scalameta/metals/pull/1954)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit to 0.7.10\\n [\\\\#1964](https://github.com/scalameta/metals/pull/1964)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.11\\n [\\\\#1963](https://github.com/scalameta/metals/pull/1963)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.3.0\\n [\\\\#1960](https://github.com/scalameta/metals/pull/1960)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-24\\n [\\\\#1959](https://github.com/scalameta/metals/pull/1959)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.2.0 [\\\\#1958](https://github.com/scalameta/metals/pull/1958)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.5\\n [\\\\#1957](https://github.com/scalameta/metals/pull/1957)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.6.0 [\\\\#1956](https://github.com/scalameta/metals/pull/1956)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update Bloop version to support broken workspaces\\n [\\\\#1953](https://github.com/scalameta/metals/pull/1953)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Scala 3 version to 0.26.0-RC1\\n [\\\\#1951](https://github.com/scalameta/metals/pull/1951)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable BuildInfo for mtags3\\n [\\\\#1950](https://github.com/scalameta/metals/pull/1950)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix duplicated code actions\\n [\\\\#1947](https://github.com/scalameta/metals/pull/1947)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix enableStripMargin setting\\n [\\\\#1946](https://github.com/scalameta/metals/pull/1946)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mark BillLspSuite.automatic-reconnect as flaky\\n [\\\\#1942](https://github.com/scalameta/metals/pull/1942)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add more documentation about worksheets.\\n [\\\\#1945](https://github.com/scalameta/metals/pull/1945)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in blog post about configuring Metals.\\n [\\\\#1940](https://github.com/scalameta/metals/pull/1940)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in , as a trigger for SignatureHelp.\\n [\\\\#1944](https://github.com/scalameta/metals/pull/1944)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update to Scala 3 to 0.25.0 version\\n [\\\\#1939](https://github.com/scalameta/metals/pull/1939)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add -Ximport-suggestion-timeout 0 to the presentation compiler options\\n [\\\\#1938](https://github.com/scalameta/metals/pull/1938)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add missing docs and move versions to a more prominent location.\\n [\\\\#1934](https://github.com/scalameta/metals/pull/1934)\\n ([tgodzik](https://github.com/tgodzik))\\n- Take into account server property in statusBarState\\n [\\\\#1937](https://github.com/scalameta/metals/pull/1937)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update organize-imports to 0.4.0\\n [\\\\#1933](https://github.com/scalameta/metals/pull/1933)\\n ([liancheng](https://github.com/liancheng))\\n- Add Bloop jvmopts in tests to limit memory used by it\\n [\\\\#1930](https://github.com/scalameta/metals/pull/1930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure a file exists when searching for definition\\n [\\\\#1929](https://github.com/scalameta/metals/pull/1929)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reverting \\"Update interface to 0.0.24 (#1918)\\"\\n [\\\\#1928](https://github.com/scalameta/metals/pull/1928)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional warn-unused flags\\n [\\\\#1911](https://github.com/scalameta/metals/pull/1911)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals 0.9.2\\n [\\\\#1915](https://github.com/scalameta/metals/pull/1915)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/07/23/configuring-a-client","metadata":{"permalink":"/metals/blog/2020/07/23/configuring-a-client","source":"@site/blog/2020-07-23-configuring-a-client.md","title":"A Dive into Configuring Metals","description":"As of this last Metals release, it\'s now 100% possible to fully configure Metals","date":"2020-07-23T00:00:00.000Z","formattedDate":"July 23, 2020","tags":[],"readingTime":6.97,"hasTruncateMarker":false,"authors":[{"name":"Chris Kipp","url":"https://twitter.com/ckipp01","imageURL":"https://avatars1.githubusercontent.com/u/13974112?s=400&u=7b6a2ddab8eec6f99e4e40ae9b81f71cb5ba92e5&v=4"}],"frontMatter":{"author":"Chris Kipp","title":"A Dive into Configuring Metals","authorURL":"https://twitter.com/ckipp01","authorImageURL":"https://avatars1.githubusercontent.com/u/13974112?s=400&u=7b6a2ddab8eec6f99e4e40ae9b81f71cb5ba92e5&v=4"},"prevItem":{"title":"Metals v0.9.3 - Lithium","permalink":"/metals/blog/2020/08/19/lithium"},"nextItem":{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"}},"content":"As of this last Metals release, it\'s now 100% possible to fully configure Metals\\nwithout any need to pass in server properties. Depending on your editor of\\nchoice, the process to configure Metals may be completely abstracted away. You\\nsimply click install, wait a bit, and start coding. In this post I\'d like to\\ntalk a bit about the progression of how Metals was originally configured fully\\nwith server properties and how it can now be fully configured via the client,\\nwhich in [LSP](https://microsoft.github.io/language-server-protocol/) terms is\\nyour editor. This can serve both as a guide for those client extension\\nmaintainers out there and also those curious at how Metals correctly works for\\nall the various editors.\\n\\n## The first configuration\\n\\nLooking back to the Fall of 2018, you see a giant glimpse of Metals becoming\\nwhat it is today when looking at a giant commit by\\n[@olafurpg](https://twitter.com/olafurpg) with the title [Implement pretty\\nbasic language server and build\\nclient.](https://github.com/scalameta/metals/commit/df6b41acaad1978ffd1fa25c41909c38425932ab).\\nIt\'s a pretty fascinating commit to look at if you\'re interested in the\\nbeginnings of Metals, but I want to focus in on a specific file that still exists\\ntoday, which is the\\n[MetalsServerConfig.scala](https://github.com/scalameta/metals/commit/df6b41acaad1978ffd1fa25c41909c38425932ab#diff-dc72b5c684177c884881164ab17182eb).\\nIn this file you see the first configuration options that existed for Metals.\\nYou see things like `isLogShowMessage` to ensure users were correctly getting\\nstatus messages instead of everything just going into the logs. (This was also\\nbefore\\n[`metals/status`](https://scalameta.org/metals/docs/integrations/new-editor#metalsstatus)\\nexisted which is used today for a better status experience in Metals). You also\\nsee other options like `isHttpEnabled` for Metals to start the Doctor for those\\nthat needed an HTTP client interface, or even an `icons` setting to ensure\\nthings looked nice and matched your client. At this point, instead of just\\nhaving the user specify every one of these when they bootstrapped the server, a\\n`metals.client` property was introduced that we could give editors a set of\\ndefaults. Here is an example for the first settings for Vim and Metals using the\\n[vim-lsc](https://github.com/natebosch/vim-lsc) plugin:\\n\\n```scala\\nSystem.getProperty(\\"metals.client\\", \\"unknown\\") match {\\n case \\"vim-lsc\\" =>\\n MetalsServerConfig().copy(\\n isExtensionsEnabled = false,\\n fileWatcher = FileWatcherConfig.auto,\\n isLogStatusBar = true,\\n isNoInitialized = true,\\n isHttpEnabled = true,\\n icons = Icons.unicode\\n )\\n ...\\n```\\nThe property would then be set when the user would bootstrap Metals. This\\nstarted out as a manual process for almost all the editors utilizing\\n[Coursier](https://github.com/coursier/coursier). This still actually remains a\\nvalid way to configure Metals, although not recommended if your client supports\\nsetting `InitializationOptions` in the\\n[`initalize`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nrequest. It\'s also almost the identical process that happens behind the scenes\\nwhen client extensions like\\n[metals-vscode](https://github.com/scalameta/metals-vscode),\\n[coc-metals](https://github.com/scalameta/coc-metals), and\\n[metals-sublime](https://github.com/scalameta/metals-sublime) bootstrap the\\nserver for you. For example, here is how you would manually do this:\\n\\n```sh\\ncoursier bootstrap \\\\\\n --java-opt -Xss4m \\\\\\n --java-opt -Xms100m \\\\\\n --java-opt -Dmetals.client=emacs \\\\\\n org.scalameta:metals_2.12:0.9.2 \\\\\\n -r bintray:scalacenter/releases \\\\\\n -r sonatype:snapshots \\\\\\n -o /usr/local/bin/metals-emacs -f\\n```\\n\\nIn the above example, you would then get the defaults specified in\\n`MetalsServerConfig.scala` for `emacs`. Again, when the process is automated\\nit\'s very similar, and you can see this if you poke around the\\n[`fetchAndLaunchMetals`](https://github.com/scalameta/metals-vscode/blob/master/src/extension.ts#L166)\\nfunction in the VS-Code extension. You can see how the path to Coursier is\\ngrabbed, your `JAVA_HOME` is captured, and how we get some extra\\nvariables/properties to call Metals with.\\n\\n## User configuration\\n\\nApart from server properties, it was also necessary for users to be able to\\neasily change a setting, even while in the editor. For example, we have a\\ncurrent setting `metals.superMethodLensesEnabled` which when enabled will\\ndisplay a code lens that when invoked will either go to the parent class\\ncontaining the definition of the method or symbol or display the full method\\nhierarchy allowing you to choose where to go. \\n\\nHere is an example of what this looks like in Vim:\\n![Super Method Hierarchy](https://i.imgur.com/rEvhzG1.png)\\n\\nThis feature is actually turned off by default since in very large code bases\\nyou may experience a lag. So if a user wanted to turn this on, it wouldn\'t be a\\ngreat user experience to have to re-bootstrap the server to enable this feature.\\nThis is where the User Configuration comes into play by being able to change a\\nconfiguration value and notify the server via\\n[`workspace/didChangeConfiguration`](https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeConfiguration).\\nThis can fully happen for most of the user configuration values without any need\\nto restart the server. You can see the first configuration options added this\\nway in [this\\ncommit](https://github.com/scalameta/metals/commit/f4706ec75afb9bf797e3144f4a0e91bb0b186e07)\\nwhere the ability to define your `JAVA_HOME` was added. With now allowing for\\nuser configurations in Metals, this allowed for an even more customized\\nexperience.\\n\\n## Experimental\\n\\nBeing able to customize the server with properties and allowing users to pass in\\nsome configuration values worked great. However, once Metals started creating\\nLSP extensions for functionality that wasn\'t supported fully just by LSP, then a\\nway was needed for the client to express that it supported these extensions.\\nThis is when Metals started to use the\\n[`ClientCapabilities.experimental`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nfield which the client needed to declare support the extension. You can see the\\nfirst inklings of this when the [Tree View\\nProtocol](https://scalameta.org/metals/docs/editors/tree-view-protocol.html) was\\nintroduced [here in this\\ncommit](https://github.com/scalameta/metals/commit/a55a2413ef10237c8510eb707c0de0cd03b83d85#diff-f8c05eebbf12c9c21a7d568f09b500ea).\\nThis then continued to be further expanded as we introduced more extensions.\\n\\nAs it became easier for various clients to set this, we slowly [started to\\nmigrate](https://github.com/scalameta/metals/pull/1414) other options that could\\nonly be previously set via server properties to\\n`ClientCapabilities.experimental`. So settings like which format you\'d like the\\nDoctor to return could now be set directly by the client without need to\\nbootstrap the server with a specific property. This allowed for much easier\\nconfiguration than was previously had.\\n\\n## InitializationOptions\\n\\nOnce it was clear that configuring Metals via the client was desirable, a closer\\nlook was taken at `InitializationOptions` that can be passed in during the\\n[`initialize`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize)\\nrequest. Since any value is able to be passed in this way, a decision was made\\nto fully migrate all the possible settings that were previously set as server\\nproperties (except a select few that we\'ll touch on later), and also move all\\nthe of settings that could be set under `experimental` to\\n`InitializationOptions` as well. This ultimately allows for clients to fully\\nconfigured Metals via `InitializationOptions` without the need to set any server\\nproperties. In theory this also meant that you could not use the same Metals\\nexecutable for VS Code, Vim, or Emacs since the server is fully being configured\\nby the client itself. The current settings that can be passed in and their\\ndefaults are explained in detail [here on the\\nwebsite](https://scalameta.org/metals/docs/integrations/new-editor#initializationoptions),\\nbut the interface is as follows:\\n\\n```typescript\\ninterface MetalsInitializationOptions {\\n compilerOptions?: CompilerInitializationOptions;\\n debuggingProvider?: boolean;\\n decorationProvider?: boolean;\\n didFocusProvider?: boolean;\\n doctorProvider?: \\"json\\" | \\"html\\";\\n executeClientCommandProvider?: boolean;\\n globSyntax?: \\"vscode\\" | \\"uri\\";\\n icons?: \\"vscode\\" | \\"octicons\\" | \\"atom\\" | \\"unicode\\";\\n inputBoxProvider?: boolean;\\n isExitOnShutdown?: boolean;\\n isHttpEnabled?: boolean;\\n openFilesOnRenameProvider?: boolean;\\n quickPickProvider?: boolean;\\n renameFileThreshold?: number;\\n slowTaskProvider?: boolean;\\n statusBarProvider?: \\"on\\" | \\"off\\" | \\"log-message\\" | \\"show-message\\";\\n treeViewProvider?: boolean;\\n openNewWindowProvider?: boolean;\\n}\\n```\\n```typescript\\ninterface CompilerInitializationOptions {\\n completionCommand?: string;\\n isCompletionItemDetailEnabled?: boolean;\\n isCompletionItemDocumentationEnabled?: boolean;\\n isCompletionItemResolve?: boolean;\\n isHoverDocumentationEnabled?: boolean;\\n isSignatureHelpDocumentationEnabled?: boolean;\\n overrideDefFormat?: \\"ascii\\" | \\"unicode\\";\\n parameterHintsCommand?: string;\\n snippetAutoIndent?: boolean;\\n}\\n```\\n\\nYou\'ll notice that this allows for a much finer grained configuration if the\\nclient chooses to set certain values. Everything from whether or not the Scala\\nPresentation Compiler should populate the `SignatureHelp.documentation` to\\nwhether or not the editor supports opening a new window after using the\\n`metals.new-scala-project` command can now be easily configured. Fully\\nconfiguring Metals through `InitializationOptions` is now the recommended way to\\nconfigure Metals.\\n\\n## Are there still server properties?\\n\\nWhile all of the old server properties still exist for Metals, it\'s no longer\\nrecommended to use them to configure Metals. However, there are still a few\\nserver properties that remain only server properties since they are not meant to\\nbe widely used, and aren\'t exactly recommended to use for the average user. You\\ncan see an up to date list of these [here on the\\nwebsite](https://scalameta.org/metals/docs/integrations/new-editor#metals-server-properties)\\nand what functionality they provide.\\n\\n## Conclusion\\n\\nAs of Metals 0.9.2 it\'s fully possibly for all clients to use a default\\nbootstrapped Metals that can fully be configured via `InitializationOptions`.\\nThere is a freshly updated [Integrating a new\\neditor](https://scalameta.org/metals/docs/editors/new-editor.html) section on\\nthe website to help explain how to exactly configure a client for usage with\\nMetals. As always, don\'t hesitate to reach out on any of the various channels\\nlocated in the footer or submit an issue to either improve documentation or to\\nlog a bug. Also as a reminder, there is a separate repo for\\n[metals-feature-requests](https://github.com/scalameta/metals-feature-requests).\\n\\n\\nHappy coding with Metals!"},{"id":"/2020/07/15/lithium","metadata":{"permalink":"/metals/blog/2020/07/15/lithium","source":"@site/blog/2020-07-15-lithium.md","title":"Metals v0.9.2 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.2, which mostly adds support","date":"2020-07-15T00:00:00.000Z","formattedDate":"July 15, 2020","tags":[],"readingTime":2.47,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.2 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"A Dive into Configuring Metals","permalink":"/metals/blog/2020/07/23/configuring-a-client"},"nextItem":{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.2, which mostly adds support\\nfor Scala 2.12.12.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release50
Merged PRs24
Contributors6
Closed issues14
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/25?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.12.12 support\\n- Reset notifications popup\\n\\n## Reset notifications popup\\n\\nPreviously, when either a build tool was chosen for a workspace or the build\\nimport notification was dismissed the only way to revert that choice was to\\ndelete the `.metals` directory. In this release we added two different ways to\\nreset it:\\n\\n- via a new button available in the doctor (Visual Studio Code):\\n\\n![doctor](https://i.imgur.com/Vz3vMpA.png)\\n\\n- using a new command `metals.reset-choice` (other editors):\\n\\n![command](https://user-images.githubusercontent.com/13974112/87051515-f3d70e00-c1ff-11ea-8758-dcd2283b114a.gif)\\n\\n## Miscellaneous improvements\\n\\n- Named parameters completions fixed to work in cases where the method was\\n defined later in the class.\\n- Add option to not add the Bloop plugin in Gradle builds. This might be useful\\n if you already define Bloop plugin in your workspace, otherwise it\'s not\\n recommended.\\n- Find all templates from the giter8 wiki page for the New Project Provider\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.1..v0.9.2\\nChris Kipp\\nKrzysztof Bochenek\\nTomasz Godzik\\nJorge Vicente Cantero\\nClaudio Bley\\nRobin Raju\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.2](https://github.com/scalameta/metals/tree/v0.9.2) (2020-07-15)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.1...v0.9.2)\\n\\n**Merged pull requests:**\\n\\n- Update interface to 0.0.24\\n [\\\\#1918](https://github.com/scalameta/metals/pull/1918)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.6.0\\n [\\\\#1920](https://github.com/scalameta/metals/pull/1920)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.1\\n [\\\\#1921](https://github.com/scalameta/metals/pull/1921)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.2.7\\n [\\\\#1919](https://github.com/scalameta/metals/pull/1919)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-23\\n [\\\\#1917](https://github.com/scalameta/metals/pull/1917)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update new-editor docs.\\n [\\\\#1914](https://github.com/scalameta/metals/pull/1914)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support for Scala 2.12.12\\n [\\\\#1907](https://github.com/scalameta/metals/pull/1907)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt version up to 2.6.3.\\n [\\\\#1910](https://github.com/scalameta/metals/pull/1910)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix missing completionCommand\\n [\\\\#1913](https://github.com/scalameta/metals/pull/1913)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove remants of fastpass.\\n [\\\\#1912](https://github.com/scalameta/metals/pull/1912)\\n ([ckipp01](https://github.com/ckipp01))\\n- small refactoring DoctorFormat\\n [\\\\#1906](https://github.com/scalameta/metals/pull/1906)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Don\'t filter out named parameters for methods defined later in a class\\n [\\\\#1901](https://github.com/scalameta/metals/pull/1901)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve gradle-bloop integration\\n [\\\\#1902](https://github.com/scalameta/metals/pull/1902)\\n ([jvican](https://github.com/jvican))\\n- Migrate final properties over to `InitializationOptions`.\\n [\\\\#1903](https://github.com/scalameta/metals/pull/1903)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove gson runtime reflection with manual reads for configuration.\\n [\\\\#1898](https://github.com/scalameta/metals/pull/1898)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make sure we take into account all templates from the wiki page\\n [\\\\#1899](https://github.com/scalameta/metals/pull/1899)\\n ([tgodzik](https://github.com/tgodzik))\\n- Reset notifications popup\\n [\\\\#1897](https://github.com/scalameta/metals/pull/1897)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Reset notifications popup\\n [\\\\#1897](https://github.com/scalameta/metals/pull/1897)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Document -version flag and log clientType\\n [\\\\#1893](https://github.com/scalameta/metals/pull/1893)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Update Vim docs and fix various typos\\n [\\\\#1892](https://github.com/scalameta/metals/pull/1892)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix unit test failure on Oracle JDK 8\\n [\\\\#1888](https://github.com/scalameta/metals/pull/1888)\\n ([robinraju](https://github.com/robinraju))\\n- Show imports in worksheet dependency example.\\n [\\\\#1882](https://github.com/scalameta/metals/pull/1882)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add `--version` command line option\\n [\\\\#1883](https://github.com/scalameta/metals/pull/1883)\\n ([avdv](https://github.com/avdv))\\n- Add release notes for 0.9.1 version\\n [\\\\#1858](https://github.com/scalameta/metals/pull/1858)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/07/01/lithium","metadata":{"permalink":"/metals/blog/2020/07/01/lithium","source":"@site/blog/2020-07-01-lithium.md","title":"Metals v0.9.1 - Lithium","description":"We\'re happy to announce the release of Metals v0.9.1, which focused on fixing","date":"2020-07-01T00:00:00.000Z","formattedDate":"July 1, 2020","tags":[],"readingTime":11.625,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.1 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.2 - Lithium","permalink":"/metals/blog/2020/07/15/lithium"},"nextItem":{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"}},"content":"We\'re happy to announce the release of Metals v0.9.1, which focused on fixing\\nissues with the recently released Scala 3 support, Ammonite support and a couple\\nof new features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release287
Merged PRs106
Contributors16
Closed issues49
New features5
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/24?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Ammonite support\\n- New project provider\\n- Worksheet dependency support\\n- Multiline string improvements\\n- Scala versions 2.13.3, 0.24.0, 0.25.0-RC2 support\\n- Dropped support for Scala 0.23.0 and deprecated the 0.24.0-RC1 version.\\n- Multiple build tool selection within a workspace\\n\\n## Ammonite support\\n\\nThanks to great work by [alexarchambault](https://github.com/alexarchambault) we\\nnow support [Ammonite](https://ammonite.io) script files. Ammonite enables you\\nto create scripts that can easily be ran from the command line, without the\\noverhead of setting up a build tool while still allowing you to download and use\\ndependencies.\\n\\nThe support includes most of the LSP features such as diagnostics, completions,\\nreferences, go to definition, but does not include running or debugging the\\nscripts. This new feature works by starting an additional Ammonite BSP server\\nthat compiles the scripts and provides additional information about them such as\\nScala version or information about the added dependencies. You can change the\\ndefault JVM parameters for the server such as `-Xmx`, which will limit the used\\nmemory in Metals settings. These can be added via your metals editor extension\\nusing the newly created `metals.ammoniteJvmProperties` setting. The Ammonite\\nserver can also be started and stopped manually using the new commands\\n`ammonite-start` and `ammonite-stop`.\\n\\nEach of the scripts first need to be imported into the Ammonite BSP server,\\nwhich can be done manually by clicking on the pop up whenever a new script is\\nopened or selecting automatic import at the start, which will import any open\\nscripts automatically.\\n\\nIt\'s important to note that this is an early approach to Ammonite support, which\\nmight still require some improvements both on the Metals and Ammonite side. You\\ncan learn more about the new feature or join the discussion in the\\n[blogpost](https://contributors.scala-lang.org/t/ammonite-support-in-metals/4306)\\non the Scala contributors forum.\\n\\nSome of the notable features of Ammonite scripts are:\\n\\n- Import other scripts: Metals provides completions to select existing files\\n based on the filesystem information\\n\\n```scala\\n//main.sc\\nimport $file.hello-world\\nval greeting = hello-world.greeting\\n\\n//hello-world.sc\\nval greeting = \\"Hello world!\\"\\n```\\n\\n- Import dependencies:\\n\\n```scala\\nimport $ivy.`com.lihaoyi::scalatags:0.7.0`\\nimport scalatags.Text.all._\\n\\nval rendered = div(\\"Moo\\").render\\n```\\n\\n- Set Scala version:\\n\\n```scala\\n// scala $scalaVersion\\n\\nimport scala.util.Properties\\n\\npprint.log(Properties.releaseVersion)\\n```\\n\\nThe Scala version is independent from any build tool used in the workspace and\\nwithout specifying the exact version it will use the default Ammonite Scala\\nversion.\\n\\nTo learn more about Ammonite please visit the documentation website at\\n[https://ammonite.io](https://ammonite.io).\\n\\n## Worksheet dependency support\\n\\nIn addition to Ammonite support, which will be useful to anyone interested in\\nScala scripting, we\'ve also improved the support for Metals Scala worksheets.\\nThanks to the efforts of [olafurpg](https://github.com/olafurpg) in\\n[mdoc](https://scalameta.org/mdoc/), which powers worksheets, users are now able\\nto import dependencies directly inside of their Scala worksheet with completions\\nand diagnostics working right from the start.\\n\\n![worksheet-imports](https://i.imgur.com/qXgdNWM.gif)\\n\\nYou can add them using the following syntax:\\n\\n```\\n$ivy.`organisation::artifact:version`\\n```\\n\\nFor example:\\n\\n```\\n$ivy.`com.lihaoyi::scalatags:0.9.0`\\n```\\n\\n`::` is the same as `%%` in sbt, which will append the current Scala binary\\nversion to the artifact name.\\n\\n## New project provider\\n\\nCreating new Scala projects is usually a bit of work to get started, which is a\\nproblem for both beginners and experts alike. Normally you don\'t want to spend a\\nlot of time figuring out the best setup for starting with a new technology or\\nthe language itself.\\n\\nThere are great tools like [giter8](http://www.foundweekends.org/giter8/), which\\nis used in the `sbt new` command, that enables people to use already existing\\nScala templates found on Github such as\\n[https://github.com/scala/scala-seed.g8](https://github.com/scala/scala-seed.g8).\\nThe problem is when you don\'t use sbt or you don\'t know the exact template you\\nwant to use.\\n\\nTo address this, we\'ve added an additional command called `New Scala Project`\\nthat enables users to reuse the same mechanism from the comfort of your editor.\\nFirstly, you can choose from existing templates, either curated by the Metals\\nteam, ones existing on the giter8\\n[wiki page](https://github.com/foundweekends/giter8/wiki/giter8-templates) or\\nalternatively an entirely custom template. Then you can choose the exact\\nlocation for the new project and the name. Afterwards, Metals will run giter8 to\\ncreate the project and offer to open that new project.\\n\\n![new-project](https://user-images.githubusercontent.com/3807253/81842954-2d1b3680-954d-11ea-934a-96fe53cafeb9.gif)\\n\\nThe command is also available as a button in the welcome view of the Visual\\nStudio Code Metals extension, which means it will be visible in case there are\\nno imported projects in the current workspace.\\n\\nThe first curated templates were chosen by the team, however we are happy to\\ninclude more so that it\'s easier for people to discover new amazing libraries or\\nframeworks.\\n\\n## Multiline string improvements\\n\\nThere are two new quality of life improvements when it comes to multiline\\nstrings. Firstly, thanks to [mlachkar](https://github.com/mlachkar) we now\\nautomatically add `stripMargin` method invocation when using newline in a\\nmultiline string if that string uses `|` and has no existing `stripMargin`:\\n\\n![strip-margin](https://i.imgur.com/Z2Q1glN.gif)\\n\\nThis behaviour can be disabled in Metals settings using\\n`metals.enableStripMarginOnTypeFormatting`.\\n\\nAnother useful improvement coming from [colineto](https://github.com/colineto)\\nis a new code action that can easily convert single string into the traditional\\nmultiline string with `|` and `stripMargin` at the end:\\n\\n![new-action](https://i.imgur.com/5ohRcl9.gif)\\n\\n## Multiple workspace build tools selection\\n\\nPreviously, Metals would only pick up a single build tool in a workspace even if\\nin reality there were multiple available ones. To help with that we added a\\nprompt to choose the desired build tool in workspaces with multiple build files.\\n\\nAn example situation where this is needed is when you have a project with both a\\n`build.sbt` and `build.sc`, but the `build.sc` is what you use for your build\\ndefinition. Previously if both were detected, it was automatically considered an\\nSbt workspace, however now it\'s possible to choose.\\n\\n![multiple-build-tool](https://i.imgur.com/pAgZK7u.gif)\\n\\nIn case of multiple build tools in single workspace you can see which one was\\nused to import project in \'Metals Doctor\' view. If you choose the wrong one, or\\nchange the main build tool later on, you\'ll need to remove the .metals/\\ndirectory to reset the decisions.\\n\\nThis great new feature was contributed by [ckipp01](https://github.com/ckipp01)!\\n\\n## Miscellaneous improvements\\n\\n- Fix run/debug in Maven workspaces.\\n- Always run newest sbt version if none is specified.\\n- Fix find references for Scala 3 on Windows.\\n- Pick jvm targets with higher priority when using run/debug without specifying\\n the exact build target.\\n- Make breakpoints work properly in Scala 3 and in case of nested classes.\\n- Exhaustive pattern matching in the case of sealed upper bound types.\\n- Compile before renaming instead of showing an error.\\n- Fix issue with symlinked source directories.\\n- Fix missing references for synthetic companion objects.\\n- Automatically add -J if it doesn\'t already exist to java properties when\\n running or debugging.\\n- Fix go to definition for JDK 11 library sources.\\n- Keep modifiers when implementing abstract members.\\n- Fix auto imports position when using package objects and multiple package\\n definitions.\\n- Fix issues in files with Scala 2.13 specific syntax like for example\\n underscore numeric literals (`val num = 100_000`).\\n- Always run Mill in interactive mode.\\n- Improvements to hover in Scala 3 files.\\n- Make sure auto imports are correct for Ammonite scripts\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release or reported an issue!\\n\\n```\\n$ git shortlog -sn --no-merges v0.9.0..v0.9.1\\nTomasz Godzik\\nScala Steward\\nAlexandre Archambault\\nChris Kipp\\n\u0141ukasz Trojanowski\\nColine Thomas\\nKrzysztof Bochenek\\nMeriam Lachkar\\nbettyblue\\nDaniel King\\nNaoki Takezoe\\nOlafur Pall Geirsson\\nWin Wang\\nMartin Duhem\\nag91\\nfaizk\\n\u0141ukasz Wawrzyk\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.1](https://github.com/scalameta/metals/tree/v0.9.1) (2020-07-01)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.9.0...v0.9.1)\\n\\n**Merged pull requests:**\\n\\n- Add support for Scala 2.13.3\\n [\\\\#1857](https://github.com/scalameta/metals/pull/1857)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.6.1\\n [\\\\#1879](https://github.com/scalameta/metals/pull/1879)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.3\\n [\\\\#1878](https://github.com/scalameta/metals/pull/1878)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.1.0\\n [\\\\#1877](https://github.com/scalameta/metals/pull/1877)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.13\\n [\\\\#1876](https://github.com/scalameta/metals/pull/1876)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.5.0\\n [\\\\#1875](https://github.com/scalameta/metals/pull/1875)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.1\\n [\\\\#1873](https://github.com/scalameta/metals/pull/1873)\\n ([scala-steward](https://github.com/scala-steward))\\n- Ensure the edit positions are correct for autoImports with Ammonite.\\n [\\\\#1871](https://github.com/scalameta/metals/pull/1871)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in a preparePr alias.\\n [\\\\#1867](https://github.com/scalameta/metals/pull/1867)\\n ([ckipp01](https://github.com/ckipp01))\\n- Bump default mill version\\n [\\\\#1861](https://github.com/scalameta/metals/pull/1861)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update mdoc to 2.2.3 and power completions with worksheet\'s classpath\\n [\\\\#1856](https://github.com/scalameta/metals/pull/1856)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add jvm parameters configuration for Ammonite\\n [\\\\#1853](https://github.com/scalameta/metals/pull/1853)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove fastpass command line tool\\n [\\\\#1833](https://github.com/scalameta/metals/pull/1833)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Bloop to fix issues when using run/debug in Maven workspaces\\n [\\\\#1850](https://github.com/scalameta/metals/pull/1850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Added completions for \\\\$file in ammonite scripts\\n [\\\\#1846](https://github.com/scalameta/metals/pull/1846)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump scalafmt up to 2.6.1\\n [\\\\#1847](https://github.com/scalameta/metals/pull/1847)\\n ([ckipp01](https://github.com/ckipp01))\\n- In case of no defined sbt version run bloopInstall with the newest one\\n [\\\\#1843](https://github.com/scalameta/metals/pull/1843)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump up the scalafmt version for the codebase\\n [\\\\#1840](https://github.com/scalameta/metals/pull/1840)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix adding unmanaged source directories for mtags3\\n [\\\\#1842](https://github.com/scalameta/metals/pull/1842)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove extra nested scala directory under `scala-3`\\n [\\\\#1841](https://github.com/scalameta/metals/pull/1841)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update dotty to 0.25.0-RC-2 and 0.24.0\\n [\\\\#1839](https://github.com/scalameta/metals/pull/1839)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in explicit `TextDocumentSyncOptions`.\\n [\\\\#1837](https://github.com/scalameta/metals/pull/1837)\\n ([ckipp01](https://github.com/ckipp01))\\n- Changes for decorationProvider if `isHttpEnabled` is true.\\n [\\\\#1834](https://github.com/scalameta/metals/pull/1834)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in spacing in vscode icons only.\\n [\\\\#1832](https://github.com/scalameta/metals/pull/1832)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit to 0.7.9\\n [\\\\#1828](https://github.com/scalameta/metals/pull/1828)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use g8 templates to provide \\"New Scala Project\\"\\n [\\\\#1728](https://github.com/scalameta/metals/pull/1728)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update coursier to 2.0.0-RC6-21\\n [\\\\#1822](https://github.com/scalameta/metals/pull/1822)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark ammonite suites flaky\\n [\\\\#1830](https://github.com/scalameta/metals/pull/1830)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.4.4\\n [\\\\#1825](https://github.com/scalameta/metals/pull/1825)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.3.Final\\n [\\\\#1824](https://github.com/scalameta/metals/pull/1824)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.3\\n [\\\\#1821](https://github.com/scalameta/metals/pull/1821)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.15\\n [\\\\#1829](https://github.com/scalameta/metals/pull/1829)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.2.2\\n [\\\\#1827](https://github.com/scalameta/metals/pull/1827)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite-runner to 0.2.5\\n [\\\\#1823](https://github.com/scalameta/metals/pull/1823)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.17\\n [\\\\#1820](https://github.com/scalameta/metals/pull/1820)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ammonite to fix issues with file watching\\n [\\\\#1819](https://github.com/scalameta/metals/pull/1819)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issues with semanticdb on windows\\n [\\\\#1818](https://github.com/scalameta/metals/pull/1818)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update directories to 12\\n [\\\\#1813](https://github.com/scalameta/metals/pull/1813)\\n ([tgodzik](https://github.com/tgodzik))\\n- Pick the most valued build target instead of least for running or debugging\\n [\\\\#1811](https://github.com/scalameta/metals/pull/1811)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add support for breakpoints in toplevel methods in Dotty\\n [\\\\#1808](https://github.com/scalameta/metals/pull/1808)\\n ([tgodzik](https://github.com/tgodzik))\\n- Allow for exhaustive pattern matching in case of sealed upper bound types\\n [\\\\#1787](https://github.com/scalameta/metals/pull/1787)\\n ([ltrojanowski](https://github.com/ltrojanowski))\\n- compile before rename instead of checking if compilation is not ongoing\\n [\\\\#1754](https://github.com/scalameta/metals/pull/1754)\\n ([ltrojanowski](https://github.com/ltrojanowski))\\n- Bug-fix: onTypeFormatting is adding .stripMargin even if it\'s present\\n [\\\\#1806](https://github.com/scalameta/metals/pull/1806)\\n ([mlachkar](https://github.com/mlachkar))\\n- Fix ammonite suite flakiness\\n [\\\\#1803](https://github.com/scalameta/metals/pull/1803)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use parser for detecting enclosing class for a breakpoint\\n [\\\\#1783](https://github.com/scalameta/metals/pull/1783)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update nuprocess to 2.0.1\\n [\\\\#1792](https://github.com/scalameta/metals/pull/1792)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issues with symlinks in source directories\\n [\\\\#1784](https://github.com/scalameta/metals/pull/1784)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update undertow-core to 2.1.1.Final\\n [\\\\#1794](https://github.com/scalameta/metals/pull/1794)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.11.0\\n [\\\\#1790](https://github.com/scalameta/metals/pull/1790)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.8.1.Final\\n [\\\\#1796](https://github.com/scalameta/metals/pull/1796)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.13\\n [\\\\#1800](https://github.com/scalameta/metals/pull/1800)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.12\\n [\\\\#1797](https://github.com/scalameta/metals/pull/1797)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC6-19\\n [\\\\#1793](https://github.com/scalameta/metals/pull/1793)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-dynamic to 2.5.3\\n [\\\\#1799](https://github.com/scalameta/metals/pull/1799)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.4.3\\n [\\\\#1795](https://github.com/scalameta/metals/pull/1795)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.6.2\\n [\\\\#1791](https://github.com/scalameta/metals/pull/1791)\\n ([scala-steward](https://github.com/scala-steward))\\n- fix missing synthetic references\\n [\\\\#1727](https://github.com/scalameta/metals/pull/1727)\\n ([faizk](https://github.com/faizk))\\n- Use onTypeFormatting to create multiline string\\n [\\\\#1753](https://github.com/scalameta/metals/pull/1753)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add in setting to vim docs to help recognize \\\\*.sc as Scala files\\n [\\\\#1785](https://github.com/scalameta/metals/pull/1785)\\n ([ckipp01](https://github.com/ckipp01))\\n- Automatically add -J to jvm properties and make sure run JVM targets fists\\n [\\\\#1781](https://github.com/scalameta/metals/pull/1781)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure to persist users choice of build tool\\n [\\\\#1779](https://github.com/scalameta/metals/pull/1779)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove logging from ClasspathLoader\\n [\\\\#1778](https://github.com/scalameta/metals/pull/1778)\\n ([tgodzik](https://github.com/tgodzik))\\n- Organize imports with Scalafix\\n [\\\\#1775](https://github.com/scalameta/metals/pull/1775)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add file watcher for the standalone ammonite scripts\\n [\\\\#1771](https://github.com/scalameta/metals/pull/1771)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle workspaces with multiple build files.\\n [\\\\#1758](https://github.com/scalameta/metals/pull/1758)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add early support for Ammonite scripts\\n [\\\\#1538](https://github.com/scalameta/metals/pull/1538)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Try to fix breakpoint DAP suites\\n [\\\\#1755](https://github.com/scalameta/metals/pull/1755)\\n ([tgodzik](https://github.com/tgodzik))\\n- Support java files inside java modules for go to definition\\n [\\\\#1763](https://github.com/scalameta/metals/pull/1763)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep modifiers when implementing abstract members\\n [\\\\#1762](https://github.com/scalameta/metals/pull/1762)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Export Pants 3rdparty sources\\n [\\\\#1761](https://github.com/scalameta/metals/pull/1761)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support Pants\' `strict_deps`\\n [\\\\#1716](https://github.com/scalameta/metals/pull/1716)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update coursier to 2.0.0-RC6-16\\n [\\\\#1741](https://github.com/scalameta/metals/pull/1741)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.15\\n [\\\\#1735](https://github.com/scalameta/metals/pull/1735)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.2.0\\n [\\\\#1747](https://github.com/scalameta/metals/pull/1747)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-dotty to 0.4.1\\n [\\\\#1733](https://github.com/scalameta/metals/pull/1733)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jackson-databind to 2.9.10.4\\n [\\\\#1736](https://github.com/scalameta/metals/pull/1736)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.5.3\\n [\\\\#1737](https://github.com/scalameta/metals/pull/1737)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update requests to 0.5.2\\n [\\\\#1738](https://github.com/scalameta/metals/pull/1738)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 1.1.0 [\\\\#1739](https://github.com/scalameta/metals/pull/1739)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.2\\n [\\\\#1740](https://github.com/scalameta/metals/pull/1740)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update interface to 0.0.22\\n [\\\\#1742](https://github.com/scalameta/metals/pull/1742)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.9.10\\n [\\\\#1743](https://github.com/scalameta/metals/pull/1743)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.1.0.Final\\n [\\\\#1744](https://github.com/scalameta/metals/pull/1744)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.4.2\\n [\\\\#1745](https://github.com/scalameta/metals/pull/1745)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.10\\n [\\\\#1746](https://github.com/scalameta/metals/pull/1746)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit to 0.7.7 [\\\\#1748](https://github.com/scalameta/metals/pull/1748)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.7.7\\n [\\\\#1749](https://github.com/scalameta/metals/pull/1749)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix CrossDefinitionLspSuite and additional logs to the DAP suites\\n [\\\\#1731](https://github.com/scalameta/metals/pull/1731)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bugfix - formatting for multilines adds pipe in the wrong place\\n [\\\\#1729](https://github.com/scalameta/metals/pull/1729)\\n ([mlachkar](https://github.com/mlachkar))\\n- Remove the declaration of the experimental features in initialize and add\\n `ServerInfo` [\\\\#1730](https://github.com/scalameta/metals/pull/1730)\\n ([ckipp01](https://github.com/ckipp01))\\n- teach metals to accept configuration of range formatting\\n [\\\\#1717](https://github.com/scalameta/metals/pull/1717)\\n ([danking](https://github.com/danking))\\n- Bump scalafmt to 2.5.2 [\\\\#1726](https://github.com/scalameta/metals/pull/1726)\\n ([takezoe](https://github.com/takezoe))\\n- Expose fastpass metadata in .bsp/bloop.json\\n [\\\\#1724](https://github.com/scalameta/metals/pull/1724)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- handle package object in autoImports\\n [\\\\#1722](https://github.com/scalameta/metals/pull/1722)\\n ([colineto](https://github.com/colineto))\\n- code action to make single string multiline with strip margin\\n [\\\\#1685](https://github.com/scalameta/metals/pull/1685)\\n ([colineto](https://github.com/colineto))\\n- Fix issues in files with Scala 2.13 specific syntax\\n [\\\\#1721](https://github.com/scalameta/metals/pull/1721)\\n ([tgodzik](https://github.com/tgodzik))\\n- Bump Bloop version and update fastpass to new TraceSettings\\n [\\\\#1708](https://github.com/scalameta/metals/pull/1708)\\n ([wiwa](https://github.com/wiwa))\\n- Try to fix Debug Adapter Suites\\n [\\\\#1625](https://github.com/scalameta/metals/pull/1625)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix behavir when the format dialog is closed without choosing action\\n [\\\\#1718](https://github.com/scalameta/metals/pull/1718)\\n ([takezoe](https://github.com/takezoe))\\n- Always run mill in interactive mode and strip the \'--mill-version\'\\n [\\\\#1715](https://github.com/scalameta/metals/pull/1715)\\n ([meshake](https://github.com/meshake))\\n- When no build.properties is available run the recommended sbt version\\n [\\\\#1713](https://github.com/scalameta/metals/pull/1713)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we don\'t download invalid dependencies for Scala 3\\n [\\\\#1711](https://github.com/scalameta/metals/pull/1711)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve Scala 3 hover [\\\\#1701](https://github.com/scalameta/metals/pull/1701)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add in some documentation for vim and `InitializationOptions`\\n [\\\\#1688](https://github.com/scalameta/metals/pull/1688)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Mill version to 0.6.2\\n [\\\\#1702](https://github.com/scalameta/metals/pull/1702)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the 0.9.0 Metals version\\n [\\\\#1689](https://github.com/scalameta/metals/pull/1689)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/05/04/lithium","metadata":{"permalink":"/metals/blog/2020/05/04/lithium","source":"@site/blog/2020-05-04-lithium.md","title":"Metals v0.9.0 - Lithium","description":"We are happy to announce the release of Metals v0.9.0, codename \\"Lithium\\", which","date":"2020-05-04T00:00:00.000Z","formattedDate":"May 4, 2020","tags":[],"readingTime":6.505,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.9.0 - Lithium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.9.1 - Lithium","permalink":"/metals/blog/2020/07/01/lithium"},"nextItem":{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"}},"content":"We are happy to announce the release of Metals v0.9.0, codename \\"Lithium\\", which\\nmain focus is introducing support for Scala 3 starting with versions 0.23.0 and\\n0.24.0-RC1. We also added support for Scala 2.13.2 and a number of other useful\\nimprovements.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release140
Merged PRs45
Contributors14
Closed issues9
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/13?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- Scala 2.13.2 and basic Scala 3 support\\n- Improvements to the Bloop integration\\n- Automatically add \'+\' on newline when inside a string\\n- New Code action: \\"Import all missing symbols\\"\\n\\n## Basic Scala 3 support\\n\\nFor a couple of the last months we have been working on making Metals work with\\nthe Dotty compiler, which will become the new Scala 3. This effort included\\ncontributions to Metals, Bloop as well as to Dotty. Thanks to the great help\\nfrom the Dotty compiler team, we now have an option to generate semanticDB files\\nused for our internal indexes, which allowed some features to work without any\\nchanges to the core code. It is also important to mention that without\\n[jvican](https://github.com/jvican) and his Bloop project, which already\\nsupports Scala 3, all this would have taken a much longer time.\\n\\nThat said, there are some issues that are lacking in the Scala 3 support that\\nare available for 2.x versions. Most notably, we are still missing all of the\\nmore advanced completions, filtering and sorting of completion items or auto\\nimports. There are also some possible issues connected to optional braces and\\ntop level methods features. In the upcoming months we are planning to address\\nmost of these issues and implement the lacking features.\\n\\nYou can find missing features in the\\n[feature requests repository](https://github.com/scalameta/metals-feature-requests/issues?q=is%3Aissue+is%3Aopen+label%3Ascala3)\\nand currently known bugs in the\\n[main Metals repo.](https://github.com/scalameta/metals/issues?q=is%3Aissue+is%3Aopen+label%3A%22Scala+3%22)\\n\\nThe first supported versions will be `0.23.0` and `0.24.0-RC1`, which are the\\nlatest stable and the latest release candidate respectably. We plan to always\\nsupport the latest stable and release candidate until there is a more stable\\nrelease cycle for Scala 3.\\n\\nPlease do report any issues you encounter, especially connected to some new\\nScala 3 features, which will be an immense help to the team.\\n\\n## Improvements related to Bloop/Metals integration\\n\\nThere have been multiple reported issues in the last weeks about hanging\\ncompilation, which can make the Metals workspace hard to use. Our top priority\\nhas been figuring out all the possible issues both in Metals as well as in\\nBloop. Thanks to some fixes done by [jvican](https://github.com/jvican), and\\nsome work on the Metals side on the Bloop integration we\'re hopeful that some of\\nthe issues are becoming less frequent. These fixes are included in this release.\\n\\nWe also reworked the Metals tree view to highlight some commands that a user can\\nuse to fix their workspace as well as added two new commands:\\n\\n- `Clean compile workspace` - clean compile the whole workspace - might be\\n needed in case of broken compiler caches.\\n- `Restart Bloop server` - restart the Bloop build server, which should help\\n with the cases where compilation would hang.\\n\\n ![reworked-tree-view](https://i.imgur.com/PERfNqt.png)\\n\\nEven if those commands help, do not hesitate to report any issues. We are also\\nmonitoring the situation ourselves and investigating all problems encountered.\\n\\n## Automatically add \'+\' on newline inside a string\\n\\nThe Metals team was recently joined by [mlachkar](https://github.com/mlachkar),\\nan engineer from the Scala Center, who already contributed a number of features\\nand bug fixes to the project. Thanks to her, we can now easily enter a newline\\ninside a single line string and that string will be correctly split with an\\nadditional `+`.\\n\\n![split-line](https://i.imgur.com/uhF0MOx.gif)\\n\\n## Code action to import all missing symbols\\n\\nPreviously, it was only available to import one symbol at a time in case of\\nmissing imports. Thanks to [colineto](https://github.com/colineto) we now have\\nthe ability to import everything in bulk for every unambiguous import available.\\nUnambiguous in this case meaning that there is only one possible import to\\nchoose from.\\n\\n![import-all](https://i.imgur.com/mmzgJs7.gif)\\n\\n## Miscellaneous improvements\\n\\n- Added an option to ignore .scalafmt.conf creation message.\\n- Fixed hanging while debugging if workspace had errors.\\n- Fixed issue with folding in non 2.12.11 workspaces.\\n- Turn off \\"Go to parent\\" code lenses by default due to performance problems in\\n large workspaces.\\n- Fixed false parsing errors in 2.13.x workspaces.\\n- Added date string to metals logs.\\n- Fixed issue with additional src directories being created automatically.\\n- Fixed \\"Go to implementation\\" to work with local aliases.\\n- Fixed auto-import issue in package objects.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release! We had a lot of new\\ncontributors doing some really exemplary work.\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.4..v0.9.0\\nAyoub Benali\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nColine Thomas\\nMeriam Lachkar\\nWin Wang\\nElie Poussou\\nKrzysztof Bochenek\\nOlafur Pall Geirsson\\nAleksei Alefirov\\nNaoki Takezoe\\nNathaniel Fischer\\nTomasz Pasternak\\n\\n```\\n\\n## Merged PRs\\n\\n## [v0.9.0](https://github.com/scalameta/metals/tree/v0.9.0) (2020-05-04)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.4...v0.9.0)\\n\\n**Merged pull requests:**\\n\\n- Reworked Bloop connection and Tree View\\n [\\\\#1677](https://github.com/scalameta/metals/pull/1677)\\n ([tgodzik](https://github.com/tgodzik))\\n- fix auto import position when package object inside package\\n [\\\\#1686](https://github.com/scalameta/metals/pull/1686)\\n ([colineto](https://github.com/colineto))\\n- Move additional settings to InitializationOptions\\n [\\\\#1684](https://github.com/scalameta/metals/pull/1684)\\n ([ckipp01](https://github.com/ckipp01))\\n- Improve code lens generation time\\n [\\\\#1679](https://github.com/scalameta/metals/pull/1679)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Don\'t ask .scalafmt.conf creation again\\n [\\\\#1607](https://github.com/scalameta/metals/pull/1607)\\n ([takezoe](https://github.com/takezoe))\\n- Create a `ClientConfig` to contain all configuration\\n [\\\\#1674](https://github.com/scalameta/metals/pull/1674)\\n ([ckipp01](https://github.com/ckipp01))\\n- Handle return to line in strings in OnTypeFormatting\\n [\\\\#1611](https://github.com/scalameta/metals/pull/1611)\\n ([mlachkar](https://github.com/mlachkar))\\n- Bump Bloop version to check if it solves issues with hanging compilation\\n [\\\\#1680](https://github.com/scalameta/metals/pull/1680)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve rendering of Pants command errors.\\n [\\\\#1681](https://github.com/scalameta/metals/pull/1681)\\n ([olafurpg](https://github.com/olafurpg))\\n- Allow amending without editor prompt\\n [\\\\#1676](https://github.com/scalameta/metals/pull/1676)\\n ([tpasternak](https://github.com/tpasternak))\\n- Add Bloop zipkin trace debug and verbose settings\\n [\\\\#1678](https://github.com/scalameta/metals/pull/1678)\\n ([wiwa](https://github.com/wiwa))\\n- Update Scala 3 version to 0.23.0\\n [\\\\#1671](https://github.com/scalameta/metals/pull/1671)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure that the workspace contains no errors when running\\n [\\\\#1658](https://github.com/scalameta/metals/pull/1658)\\n ([tgodzik](https://github.com/tgodzik))\\n- Turn off go to parent code lenses by default\\n [\\\\#1666](https://github.com/scalameta/metals/pull/1666)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use DefinitionProvider instead of index in RenameProvider\\n [\\\\#1637](https://github.com/scalameta/metals/pull/1637)\\n ([tgodzik](https://github.com/tgodzik))\\n- Feature : Code action Import all missing symbols\\n [\\\\#1652](https://github.com/scalameta/metals/pull/1652)\\n ([coline-lunatech](https://github.com/coline-lunatech))\\n- Add support for Scala 2.13.2\\n [\\\\#1659](https://github.com/scalameta/metals/pull/1659)\\n ([tgodzik](https://github.com/tgodzik))\\n- Properly set the arguments field in sever commands documentation\\n [\\\\#1606](https://github.com/scalameta/metals/pull/1606)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Handle initialization options\\n [\\\\#1626](https://github.com/scalameta/metals/pull/1626)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Remove optimisation to reuse semanticdb jar from the classpath\\n [\\\\#1657](https://github.com/scalameta/metals/pull/1657)\\n ([tgodzik](https://github.com/tgodzik))\\n- update dialect of worksheet to scala213\\n [\\\\#1656](https://github.com/scalameta/metals/pull/1656)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add in updated documentation for vim\\n [\\\\#1651](https://github.com/scalameta/metals/pull/1651)\\n ([ckipp01](https://github.com/ckipp01))\\n- Dynamically read fastpass zipkin properties from fastpass/fastpass.properties\\n [\\\\#1655](https://github.com/scalameta/metals/pull/1655)\\n ([wiwa](https://github.com/wiwa))\\n- Detect Scala 3 main outer methods to create code lenses\\n [\\\\#1640](https://github.com/scalameta/metals/pull/1640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Delete all created folders created for the FileWatcher\\n [\\\\#1629](https://github.com/scalameta/metals/pull/1629)\\n ([mlachkar](https://github.com/mlachkar))\\n- goto Implementations with local alias types\\n [\\\\#1598](https://github.com/scalameta/metals/pull/1598)\\n ([eilite](https://github.com/eilite))\\n- Fix NewFileLspSuite on Windows\\n [\\\\#1624](https://github.com/scalameta/metals/pull/1624)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Sublime in the editors overview doc\\n [\\\\#1631](https://github.com/scalameta/metals/pull/1631)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Show date in logs [\\\\#1630](https://github.com/scalameta/metals/pull/1630)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add support for Scala 3\\n [\\\\#1523](https://github.com/scalameta/metals/pull/1523)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bloop-config, bloop-frontend, ... to 1.4.0-RC1-192-72a856b6\\n [\\\\#1615](https://github.com/scalameta/metals/pull/1615)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 29.0-jre\\n [\\\\#1618](https://github.com/scalameta/metals/pull/1618)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.3.3\\n [\\\\#1619](https://github.com/scalameta/metals/pull/1619)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ipcsocket to 1.0.1\\n [\\\\#1621](https://github.com/scalameta/metals/pull/1621)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.8\\n [\\\\#1623](https://github.com/scalameta/metals/pull/1623)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.9\\n [\\\\#1620](https://github.com/scalameta/metals/pull/1620)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.10\\n [\\\\#1617](https://github.com/scalameta/metals/pull/1617)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.14\\n [\\\\#1616](https://github.com/scalameta/metals/pull/1616)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update munit, sbt-munit to 0.7.2\\n [\\\\#1622](https://github.com/scalameta/metals/pull/1622)\\n ([scala-steward](https://github.com/scala-steward))\\n- Don\'t generate timestamp in `.bsp/bloop.json` file.\\n [\\\\#1612](https://github.com/scalameta/metals/pull/1612)\\n ([olafurpg](https://github.com/olafurpg))\\n- Http client delegates `metalsInputBox` to the underlying client\\n [\\\\#1613](https://github.com/scalameta/metals/pull/1613)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Add properties for bloop zipkin tracing to fastpass\\n [\\\\#1582](https://github.com/scalameta/metals/pull/1582)\\n ([wiwa](https://github.com/wiwa))\\n- Update millw.bat [\\\\#1602](https://github.com/scalameta/metals/pull/1602)\\n ([kag0](https://github.com/kag0))\\n- Update installation guide for Sublime\\n [\\\\#1597](https://github.com/scalameta/metals/pull/1597)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Add release notes for 0.8.4 version\\n [\\\\#1596](https://github.com/scalameta/metals/pull/1596)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/04/12/mercury","metadata":{"permalink":"/metals/blog/2020/04/12/mercury","source":"@site/blog/2020-04-12-mercury.md","title":"Metals v0.5.0 (Redirect)","description":"This blog post has been moved to","date":"2020-04-12T00:00:00.000Z","formattedDate":"April 12, 2020","tags":[],"readingTime":0.04,"hasTruncateMarker":false,"authors":[],"frontMatter":{"title":"Metals v0.5.0 (Redirect)","unlisted":true},"prevItem":{"title":"Metals v0.9.0 - Lithium","permalink":"/metals/blog/2020/05/04/lithium"},"nextItem":{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"}},"content":"This blog post has been moved to\\nhttps://scalameta.org/metals/blog/2019/04/12/mercury.html"},{"id":"/2020/04/10/cobalt","metadata":{"permalink":"/metals/blog/2020/04/10/cobalt","source":"@site/blog/2020-04-10-cobalt.md","title":"Metals v0.8.4 - Cobalt","description":"We are happy to announce the release of Metals v0.8.4, which will most likely be","date":"2020-04-10T00:00:00.000Z","formattedDate":"April 10, 2020","tags":[],"readingTime":6.755,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.4 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.5.0 (Redirect)","permalink":"/metals/blog/2020/04/12/mercury"},"nextItem":{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"}},"content":"We are happy to announce the release of Metals v0.8.4, which will most likely be\\nthe last 0.8.x version.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release174
Merged PRs55
Contributors9
Closed issues13
New features3
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/22?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- navigating to parent method\\n- support for `launch.json`\\n- new \\"Create new symbol\\" code action\\n- miscellaneous improvements\\n\\n## Navigating to parent method\\n\\nMetals will now calculate if any definition of a method in the current file\\noverrides another method, in which case it will show a new lens next to the\\nmethod\'s position. Once clicked, the user will be able to go to the super\\nmethod. Lenses also link to methods in external dependencies and are displayed\\nin files from libraries. For this new feature to work make sure that you enable\\ncode lenses in your client.\\n\\n![Screenshot 2020-03-10 at 09 24 41](https://user-images.githubusercontent.com/10478402/76293237-fad12c80-62b0-11ea-9952-d8b536ffd374.png)\\n\\nIf they are found to be disturbing your workflow they can be easily disabled via\\nthe `metals.superMethodLensesEnabled` configuration option - they are enabled by\\ndefault. For example in Visual Studio Code:\\n\\n![Screenshot 2020-03-09 at 16 24 21](https://user-images.githubusercontent.com/10478402/76293133-cbbabb00-62b0-11ea-84be-06c992af768b.png)\\n\\nThese new lenses should be quick to calculate but if you notice significant\\nslowdown you can also disable them, since when disabled they are not only not\\ndisplayed but also not calculated at all.\\n\\nThere is also an exposed server command `goto-super-method` that can be mapped\\nand used through shortcut in Visual Studio Code.\\n\\n![Screenshot 2020-03-10 at 09 38 49](https://user-images.githubusercontent.com/10478402/76294356-fd348600-62b2-11ea-880e-7074df2928a6.png)\\n\\nIt is possible to also navigate the whole inheritance hierachy at once using the\\nnew `super-method-hierarchy` command.\\n\\n![super-hierarchy](https://user-images.githubusercontent.com/10478402/76294832-de82bf00-62b3-11ea-847d-bc1d94136671.gif)\\n\\nThis new command can be invoked on a method definition. It calculates super\\nmethod hierarchy and if more than one position is found it displays a quickPick\\nwindow (same as the new scala file feature) which displays all super methods and\\nallows a user to select one and jump to its definition.\\n\\nAs an example in Visual Studio Code it can be bound to a shortcut this way:\\n\\n![Screenshot 2020-03-10 at 09 48 55](https://user-images.githubusercontent.com/10478402/76295136-5d77f780-62b4-11ea-87bc-1d25c3e6d586.png)\\n\\nThanks to [kpbochenek](https://github.com/kpbochenek) from VirtusLab for this\\nnew feature!\\n\\n## Support for \'launch.json\'\\n\\nPreviously, it was only possible to launch main classes or tests via code lenses\\nthat would appear above a particular class. Now, we add a way for a user to be\\nable specify the name of the the class or test to run. We will then\\nautomatically try to detect the build target, which that class/test belongs to\\nand run it. In this release, we also add a way to specify the main class\\narguments.\\n\\n![launch_debug3](https://user-images.githubusercontent.com/10850363/78788713-73103800-79ac-11ea-94b3-2e2d898992e4.gif)\\n\\nWhile this will be primarily useful for the Visual Studio Code Metals extension,\\nit will also make it easier for other editors that support the Debug Adapter\\nProtocol. To obtain the uri needed for starting a debug session users can now\\nexecute the `debug-adapter-start` command with params:\\n\\n- for main class\\n\\n```json\\n{\\n \\"mainClass\\": \\"com.foo.App\\",\\n \\"buildTarget\\": \\"foo\\",\\n \\"args\\": [\\"bar\\"]\\n}\\n```\\n\\n- for test class\\n\\n```json\\n{\\n \\"testClass\\": \\"com.foo.FooSuite\\",\\n \\"buildTarget\\": \\"foo\\"\\n}\\n```\\n\\n`buildTarget` is an optional parameter, which might be useful if there are\\nidentically named classes in different modules. A uri will be returned that can\\nbe used by the DAP client.\\n\\nMore information about adding support for debugging is available\\n[here](/metals/docs/integrations/debug-adapter-protocol).\\n\\nThis awesome new feature was contributed by\\n[alekseiAlefirov](https://github.com/alekseiAlefirov) from VirtusLab.\\n\\n## New \'Create new symbol...\' code action\\n\\nPreviously we would propose to import a symbol (if available) in response to\\n\\"missing symbol\\" errors. Now, thanks to [gabro](https://github.com/gabro), we\\nalso propose to create a new class, case class, trait or object.\\n\\n![2020-03-23 17 49 31](https://user-images.githubusercontent.com/691940/77632315-1cd3db80-6f4e-11ea-9283-a2b522cedf1d.gif)\\n\\nThis might be useful when sketching out a domain model and should improve user\\nexperience for fast prototyping.\\n\\n## Miscellaneous improvements\\n\\n- `package` is no longer added on imports from package objects\\n- if user right clicks on a file in Visual Studio Code the option for\\n `New Scala file` also shows now the same as for directories\\n- a multiline string can now be formatted exclusively when using\\n `format selection` on that string\\n- added in `...` to signify truncation in worksheets\\n- fixed hover on Scala App trait and several other cases that showed up on Scala\\n Play projects\\n- messages about upgrading Scala versions are now more valid to the user\\n- references in a file are sorted before showing them\\n- better cursor position when creating new files using the `New Scala file`\\n command\\n- added \\"case class\\" option in NewFilesProvider\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.3..v0.8.4\\nOlafur Pall Geirsson\\nChris Kipp\\nAleksei Alefirov\\nGabriele Petronella\\nTomasz Godzik\\nKrzysztof Bochenek\\nAlexandre Archambault\\nScala Steward\\nMartin Duhem\\nTomasz Pasternak\\n\u0141ukasz Wawrzyk\\nMeriam Lachkar\\nduianto\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.4](https://github.com/scalameta/metals/tree/v0.8.4) (2020-04-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.3...v0.8.4)\\n\\n**Merged pull requests:**\\n\\n- Upgrade to latest Bloop.\\n [\\\\#1595](https://github.com/scalameta/metals/pull/1595)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix `package` added artificially on imports from package objects\\n [\\\\#1593](https://github.com/scalameta/metals/pull/1593)\\n ([tgodzik](https://github.com/tgodzik))\\n- Create a new file next to an existing one if user selected a file\\n [\\\\#1592](https://github.com/scalameta/metals/pull/1592)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix bug around resetting presentation compilers.\\n [\\\\#1590](https://github.com/scalameta/metals/pull/1590)\\n ([olafurpg](https://github.com/olafurpg))\\n- fix indentation for multiline string when using format selection\\n [\\\\#1585](https://github.com/scalameta/metals/pull/1585)\\n ([mlachkar](https://github.com/mlachkar))\\n- Add disabled X-detectExternalProjectFiles flag\\n [\\\\#1589](https://github.com/scalameta/metals/pull/1589)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add VersionedDocsModifier\\n [\\\\#1584](https://github.com/scalameta/metals/pull/1584)\\n ([gabro](https://github.com/gabro))\\n- Remove .bloop symbolic link during Pants export\\n [\\\\#1587](https://github.com/scalameta/metals/pull/1587)\\n ([olafurpg](https://github.com/olafurpg))\\n- Small changes to Pants integration\\n [\\\\#1583](https://github.com/scalameta/metals/pull/1583)\\n ([olafurpg](https://github.com/olafurpg))\\n- \'StartDebugAdapter\' command now accepts user\'s parameters (launch.json)\\n [\\\\#1466](https://github.com/scalameta/metals/pull/1466)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Convert recursive Pants globs into directory entries.\\n [\\\\#1581](https://github.com/scalameta/metals/pull/1581)\\n ([olafurpg](https://github.com/olafurpg))\\n- Project root again [\\\\#1580](https://github.com/scalameta/metals/pull/1580)\\n ([tpasternak](https://github.com/tpasternak))\\n- Small tweaks to Pants export\\n [\\\\#1579](https://github.com/scalameta/metals/pull/1579)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support `extra_jvm_options` from Pants\\n [\\\\#1578](https://github.com/scalameta/metals/pull/1578)\\n ([Duhemm](https://github.com/Duhemm))\\n- Add in ... to signifigy truncation in worksheets\\n [\\\\#1576](https://github.com/scalameta/metals/pull/1576)\\n ([ckipp01](https://github.com/ckipp01))\\n- Small clean-ups [\\\\#1531](https://github.com/scalameta/metals/pull/1531)\\n ([alexarchambault](https://github.com/alexarchambault))\\n- Fix typo, double \\"the\\" [\\\\#1573](https://github.com/scalameta/metals/pull/1573)\\n ([duianto](https://github.com/duianto))\\n- Fix: don\'t show super lenses on synthetic methods e.g. toString\\n [\\\\#1572](https://github.com/scalameta/metals/pull/1572)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Forward compiler options in Pants export.\\n [\\\\#1571](https://github.com/scalameta/metals/pull/1571)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make sure we detect scala App trait when using hover.\\n [\\\\#1568](https://github.com/scalameta/metals/pull/1568)\\n ([tgodzik](https://github.com/tgodzik))\\n- More fixes for the Pants integration\\n [\\\\#1570](https://github.com/scalameta/metals/pull/1570)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix recommendations for Scala versions and add better messages.\\n [\\\\#1549](https://github.com/scalameta/metals/pull/1549)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update nuprocess to 2.0.0\\n [\\\\#1564](https://github.com/scalameta/metals/pull/1564)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove deprecations [\\\\#1561](https://github.com/scalameta/metals/pull/1561)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update lsp4j-debug [\\\\#1556](https://github.com/scalameta/metals/pull/1556)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix name of scala-steward file\\n [\\\\#1567](https://github.com/scalameta/metals/pull/1567)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update bloop-config, bloop-frontend, ... to 1.4.0-RC1-162-888454e1\\n [\\\\#1562](https://github.com/scalameta/metals/pull/1562)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.7.0\\n [\\\\#1566](https://github.com/scalameta/metals/pull/1566)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-native-packager to 1.6.2\\n [\\\\#1563](https://github.com/scalameta/metals/pull/1563)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add in the scala steward conf file\\n [\\\\#1558](https://github.com/scalameta/metals/pull/1558)\\n ([ckipp01](https://github.com/ckipp01))\\n- Remove scalacheck [\\\\#1559](https://github.com/scalameta/metals/pull/1559)\\n ([gabro](https://github.com/gabro))\\n- Add in new url for Chris\\n [\\\\#1560](https://github.com/scalameta/metals/pull/1560)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update coursier dependencies\\n [\\\\#1557](https://github.com/scalameta/metals/pull/1557)\\n ([ckipp01](https://github.com/ckipp01))\\n- A few more dependency updates\\n [\\\\#1555](https://github.com/scalameta/metals/pull/1555)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add FlakyWindows tags to the hover suite\\n [\\\\#1551](https://github.com/scalameta/metals/pull/1551)\\n ([ckipp01](https://github.com/ckipp01))\\n- Dependency updates [\\\\#1554](https://github.com/scalameta/metals/pull/1554)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add support to query remote language server as fallback.\\n [\\\\#1547](https://github.com/scalameta/metals/pull/1547)\\n ([olafurpg](https://github.com/olafurpg))\\n- Sort references before returning them\\n [\\\\#1526](https://github.com/scalameta/metals/pull/1526)\\n ([ckipp01](https://github.com/ckipp01))\\n- Several small polishing touches for Pants integration\\n [\\\\#1552](https://github.com/scalameta/metals/pull/1552)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove Pants targets of type \'target\'\\n [\\\\#1550](https://github.com/scalameta/metals/pull/1550)\\n ([olafurpg](https://github.com/olafurpg))\\n- Specify cursor position when creating new files\\n [\\\\#1546](https://github.com/scalameta/metals/pull/1546)\\n ([gabro](https://github.com/gabro))\\n- Change go to parent lenses to true by default\\n [\\\\#1541](https://github.com/scalameta/metals/pull/1541)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update mdoc dependencies\\n [\\\\#1544](https://github.com/scalameta/metals/pull/1544)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update scalameta dependency\\n [\\\\#1545](https://github.com/scalameta/metals/pull/1545)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-munit plugin\\n [\\\\#1543](https://github.com/scalameta/metals/pull/1543)\\n ([ckipp01](https://github.com/ckipp01))\\n- Allow multiple \\"Create new symbol\\" actions on a range\\n [\\\\#1540](https://github.com/scalameta/metals/pull/1540)\\n ([gabro](https://github.com/gabro))\\n- Update to latest munit [\\\\#1534](https://github.com/scalameta/metals/pull/1534)\\n ([ckipp01](https://github.com/ckipp01))\\n- Goto super method in hierarchy of inheritance\\n [\\\\#1487](https://github.com/scalameta/metals/pull/1487)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Add one more version to list of known old Bloop versions\\n [\\\\#1533](https://github.com/scalameta/metals/pull/1533)\\n ([olafurpg](https://github.com/olafurpg))\\n- Export `tags` in `BloopPants`\\n [\\\\#1532](https://github.com/scalameta/metals/pull/1532)\\n ([Duhemm](https://github.com/Duhemm))\\n- Add \\"Create new symbol \'\\\\$name\'...\\" code action\\n [\\\\#1528](https://github.com/scalameta/metals/pull/1528)\\n ([gabro](https://github.com/gabro))\\n- Add \\"case class\\" option in NewFilesProvider\\n [\\\\#1525](https://github.com/scalameta/metals/pull/1525)\\n ([gabro](https://github.com/gabro))\\n- Update lsp4j to enable more 3.15 support\\n [\\\\#1522](https://github.com/scalameta/metals/pull/1522)\\n ([ckipp01](https://github.com/ckipp01))\\n- Minor polish for Pants integration\\n [\\\\#1521](https://github.com/scalameta/metals/pull/1521)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t run bloop install when opening intellij\\n [\\\\#1519](https://github.com/scalameta/metals/pull/1519)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Prepare for a new release\\n [\\\\#1518](https://github.com/scalameta/metals/pull/1518)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2020/03/19/cobalt","metadata":{"permalink":"/metals/blog/2020/03/19/cobalt","source":"@site/blog/2020-03-19-cobalt.md","title":"Metals v0.8.3 - Cobalt","description":"We are happy to announce the release of Metals v0.8.3, which main purpose is","date":"2020-03-19T00:00:00.000Z","formattedDate":"March 19, 2020","tags":[],"readingTime":2.74,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.3 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.4 - Cobalt","permalink":"/metals/blog/2020/04/10/cobalt"},"nextItem":{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"}},"content":"We are happy to announce the release of Metals v0.8.3, which main purpose is\\nadding support for the new Scala version, 2.12.11. Additionally, we included a\\ncouple of recent fixes.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release61
Merged PRs18
Contributors9
Closed issues14
New features1
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/21?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/), and\\ngive Metals a try!\\n\\n- support for Scala 2.12.11\\n- recent minor improvements\\n\\n## Miscellaneous improvements\\n\\n- fix bug where worksheets got stuck evaluating forever\\n- fix issue where Metals would incorrectly prompt about a Bloop version change\\n- fix a bug where rename symbol produced invalid code for class hierarchies\\n using generics\\n- ignore return type when renaming overriden methods and fields\\n- fix bug where docstrings for workspace sources returned stale documentation\\n- goto definition now works for standalone source files, even if the build has\\n not been imported\\n- fix issue with string alignment when multiple multiline strings were present\\n in a file\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.1..v0.8.3\\nTomasz Godzik\\nOlafur Pall Geirsson\\nChris Kipp\\nKrzysztof Bochenek\\nTomasz Pasternak\\nWin Wang\\n\u0141ukasz Wawrzyk\\nLorenzo Gabriele\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.3](https://github.com/scalameta/metals/tree/v0.8.3) (2020-03-20)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.1...v0.8.3)\\n\\n**Merged pull requests:**\\n\\n- Undeprecate 2.12.10 [\\\\#1517](https://github.com/scalameta/metals/pull/1517)\\n ([olafurpg](https://github.com/olafurpg))\\n- Always launch IntelliJ in the project\'s root directory\\n [\\\\#1516](https://github.com/scalameta/metals/pull/1516)\\n ([tpasternak](https://github.com/tpasternak))\\n- Generate bloop.settings.json with project refresh command\\n [\\\\#1506](https://github.com/scalameta/metals/pull/1506)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add release notes for v0.8.2 and bump versions\\n [\\\\#1515](https://github.com/scalameta/metals/pull/1515)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not include scala boot library\\n [\\\\#1507](https://github.com/scalameta/metals/pull/1507)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use a custom IDEA launcher under a new flag.\\n [\\\\#1513](https://github.com/scalameta/metals/pull/1513)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add support for Scala 2.12.11\\n [\\\\#1510](https://github.com/scalameta/metals/pull/1510)\\n ([tgodzik](https://github.com/tgodzik))\\n- Only check relevant text for default indent\\n [\\\\#1505](https://github.com/scalameta/metals/pull/1505)\\n ([ckipp01](https://github.com/ckipp01))\\n- Export packagePrefix to bloop\\n [\\\\#1470](https://github.com/scalameta/metals/pull/1470)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Update scalameta to 4.3.4 and fix existing tests\\n [\\\\#1499](https://github.com/scalameta/metals/pull/1499)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add helper to pre-download Metals dependencies.\\n [\\\\#1501](https://github.com/scalameta/metals/pull/1501)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add in new scalafmt default version\\n [\\\\#1504](https://github.com/scalameta/metals/pull/1504)\\n ([ckipp01](https://github.com/ckipp01))\\n- Do not generate synthetic modules\\n [\\\\#1500](https://github.com/scalameta/metals/pull/1500)\\n ([tpasternak](https://github.com/tpasternak))\\n- Fix Bloop sending a restart message when custom version of Bloop is used\\n [\\\\#1491](https://github.com/scalameta/metals/pull/1491)\\n ([tgodzik](https://github.com/tgodzik))\\n- New `create` option:--no-root-project option\\n [\\\\#1490](https://github.com/scalameta/metals/pull/1490)\\n ([tpasternak](https://github.com/tpasternak))\\n- Handle fatal exceptions when evaluating worksheets.\\n [\\\\#1498](https://github.com/scalameta/metals/pull/1498)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update github actions to checkout@v2\\n [\\\\#1492](https://github.com/scalameta/metals/pull/1492)\\n ([tgodzik](https://github.com/tgodzik))\\n- Skip coursier download in fastpass create with --coursier-binary option\\n [\\\\#1486](https://github.com/scalameta/metals/pull/1486)\\n ([wiwa](https://github.com/wiwa))\\n- Don\'t delete bloop.settings.json when exporting Pants builds\\n [\\\\#1488](https://github.com/scalameta/metals/pull/1488)\\n ([lukaszwawrzyk](https://github.com/lukaszwawrzyk))\\n- Add ability to specify zipkin url for fastpass\\n [\\\\#1481](https://github.com/scalameta/metals/pull/1481)\\n ([wiwa](https://github.com/wiwa))\\n- During rename matching methods ignore return type\\n [\\\\#1485](https://github.com/scalameta/metals/pull/1485)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Fix rename for hierarchy with generics\\n [\\\\#1484](https://github.com/scalameta/metals/pull/1484)\\n ([kpbochenek](https://github.com/kpbochenek))\\n- Bump mill default version\\n [\\\\#1480](https://github.com/scalameta/metals/pull/1480)\\n ([lolgab](https://github.com/lolgab))\\n- Add in math max when looking for lastIndex\\n [\\\\#1479](https://github.com/scalameta/metals/pull/1479)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in new statusline info from latest release\\n [\\\\#1476](https://github.com/scalameta/metals/pull/1476)\\n ([ckipp01](https://github.com/ckipp01))\\n- Expire docstrings\' cache on save\\n [\\\\#1473](https://github.com/scalameta/metals/pull/1473)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove properties that are no longer needed\\n [\\\\#1475](https://github.com/scalameta/metals/pull/1475)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issue when warning about Bloop version change\\n [\\\\#1472](https://github.com/scalameta/metals/pull/1472)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the 0.8.1 release\\n [\\\\#1468](https://github.com/scalameta/metals/pull/1468)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/02/26/cobalt","metadata":{"permalink":"/metals/blog/2020/02/26/cobalt","source":"@site/blog/2020-02-26-cobalt.md","title":"Metals v0.8.1 - Cobalt","description":"We are excited to announce the release of Metals v0.8.1. This release includes a","date":"2020-02-26T00:00:00.000Z","formattedDate":"February 26, 2020","tags":[],"readingTime":8.75,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.1 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.3 - Cobalt","permalink":"/metals/blog/2020/03/19/cobalt"},"nextItem":{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"}},"content":"We are excited to announce the release of Metals v0.8.1. This release includes a\\nlarge number of bug fixes and some new features.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release313
Merged PRs100
Contributors19
Closed issues52
New features2
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/19?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nwith the help from [Lunatech](https://lunatech.com) along with contributors from\\nthe community.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/) and\\ngive Metals a try!\\n\\n- insert missing abstract members\\n- new file provider\\n- enable rename preview for Visual Studio Code\\n- debug and run working in Emacs\\n\\n## Insert missing abstract members\\n\\nThanks to yet again amazing work by\\n[tanishiking](https://github.com/tanishiking), we now support the quick fix code\\naction for implementing abstract class members. This code action is available in\\ncase of errors and works in the same way as the recent\\n[\\"Implement all members\\"](https://scalameta.org/metals/blog/#completion-to-add-all-abstract-members)\\ncompletion. It will add any missing abstract members at the top of the class\\nwith the default implementation of ???.\\n\\n![action](https://user-images.githubusercontent.com/9353584/75405616-81047f00-5951-11ea-9972-a12e25b1746a.gif)\\n\\n## New file provider\\n\\nIn the last release we added support for worksheets, which are an easy way to\\nquickly evaluate some code. To create a new worksheet you need to create a file\\nwith the extension `.worksheet.sc`, which was not that easy to figure out. To\\nfix that situation, thanks to\\n[alekseiAlefirov](https://github.com/alekseiAlefirov), we now have a menu to\\ncreate different types of new files including classes, traits, object, package\\nobjects and of course worksheets. At this time it\'s only available in the Visual\\nStudio Code and `coc-metals` extensions.\\n\\n![new-file-provider](https://user-images.githubusercontent.com/10850363/73563467-adfe6880-445d-11ea-89f6-a9a6398034da.gif)\\n\\nYou can also just use the command `Metals: New Scala File`, which will use the\\ncurrent file\'s directory and create the new file there. And additionally, when\\nusing a relative path like `a/b/C` Metals will create all needed directories and\\nadd a proper package declaration to the new file.\\n\\n## Enable rename preview for Visual Studio Code\\n\\nRename previews were added in the last Visual Studio Code\\n[release](https://code.visualstudio.com/updates/v1_42#_rename-preview), which\\nenable users to see what will be changed when a rename is executed. Due to\\noptimization and UX reasons Metals renamed symbols in closed files in the\\nbackground without informing the editor. However, this also causes the previews\\nto be misleading, since they might not be complete.\\n\\nTo fix that situation we now send all the files to VS Code, which then is able\\nto display the preview. We do it, however, for up to 300 files, which threshold\\nwas experimentally estimated. When the number of files reaches over that number,\\nwe revert to the old behavior of not opening closed files. The reason for this\\nis that in some cases for larger numbers of files the editor could hang and\\nbecome unresponsive.\\n\\n## Debug in Emacs\\n\\nIn the last release run and debug support was only available for Visual Studio\\nCode, but thanks to amazing work by the contributors it is now possible to use\\nit in Emacs via [lsp-mode\'s](https://github.com/emacs-lsp/lsp-mode) metals\\nsettings and dap-mode.\\n\\n## Other changes\\n\\nThis release includes mostly fixes and minor features, which is due to the large\\nscope of the last one. We concentrated this last month on stability and making\\nsure everything is up to scratch. Those minor changes included:\\n\\n- use bloop.export-jar-classifiers property when importing the build from sbt\\n- ignore bad compiler options passed by users in order not to break completions\\n- add an override for the Bloop plugin version and promote it to LSP settings\\n- fix onTypeFormatting when used in top level multi-line strings\\n- fix issues when `go to implementation` resolves local symbols\\n- change the non-fatal jar error to debug rather than log warning\\n- add support for worksheets without a build target by defaulting to Metals\\n Scala version\\n- rename file only if the renamed symbol is directly enclosed by a package\\n- fix exhaustive match completion on Java enums\\n- use workspace level Gradle wrapper if present for bloopInstall\\n- fix onTypeFormatting issue with multiple pipes on a line\\n- fix rename issues with backticks\\n- add documentation on how to use proxies and mirrors\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\nAgain, we have some new contributors and a lot of returning ones!\\n\\n```\\n$ git shortlog -sn --no-merges v0.8.0..v0.8.1\\nOlafur Pall Geirsson\\nTomasz Godzik\\nScala Steward\\nChris Kipp\\nGabriele Petronella\\nRikito Taniguchi\\nAleksei Alefirov\\nJakub Koz\u0142owski\\nArthur McGibbon\\nCarlos Rodriguez Guette\\nDanil Bykov\\nJakob Odersky\\nJoris\\nMartin Duhem\\nRuslans Tarasovs\\nWin Wang\\njoriscode\\nKei Sunagawa\\nZainab Ali\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.1](https://github.com/scalameta/metals/tree/v0.8.1) (2020-02-26)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.8.0...v0.8.1)\\n\\n**Merged pull requests:**\\n\\n- add openFilesOnRenameProvider to experimental\\n [\\\\#1463](https://github.com/scalameta/metals/pull/1463)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add new LSP extension \'metals/pickInput\' to implement the \\"Create Scala file\\"\\n command [\\\\#1447](https://github.com/scalameta/metals/pull/1447)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Restart the Bloop server for Pants users if it\'s running a known old version\\n [\\\\#1460](https://github.com/scalameta/metals/pull/1460)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polishing touches on Pants integration\\n [\\\\#1459](https://github.com/scalameta/metals/pull/1459)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix issues discovered while testing out IntelliJ integration.\\n [\\\\#1457](https://github.com/scalameta/metals/pull/1457)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in checkmark for debug on emacs\\n [\\\\#1458](https://github.com/scalameta/metals/pull/1458)\\n ([ckipp01](https://github.com/ckipp01))\\n- Make use of latest Pants and Bloop improvements\\n [\\\\#1452](https://github.com/scalameta/metals/pull/1452)\\n ([olafurpg](https://github.com/olafurpg))\\n- add properties back in [\\\\#1455](https://github.com/scalameta/metals/pull/1455)\\n ([ckipp01](https://github.com/ckipp01))\\n- Record visited Scala files to make sure they are not duplicated\\n [\\\\#1451](https://github.com/scalameta/metals/pull/1451)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move some properties to clientExperimentalCapabilities\\n [\\\\#1414](https://github.com/scalameta/metals/pull/1414)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use proper range for references with backticks\\n [\\\\#1430](https://github.com/scalameta/metals/pull/1430)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we properly handle overflow events even if the path is null\\n [\\\\#1435](https://github.com/scalameta/metals/pull/1435)\\n ([tgodzik](https://github.com/tgodzik))\\n- Rename \\"link\\" subcommand to \\"switch\\"\\n [\\\\#1446](https://github.com/scalameta/metals/pull/1446)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix typo: s/lastVisistedParentTrees/lastVisitedParentTrees/\\n [\\\\#1444](https://github.com/scalameta/metals/pull/1444)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update sbt-munit to 0.5.2\\n [\\\\#1443](https://github.com/scalameta/metals/pull/1443)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-munit to 0.5.0\\n [\\\\#1442](https://github.com/scalameta/metals/pull/1442)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add missing config in Eglot\\n [\\\\#1441](https://github.com/scalameta/metals/pull/1441)\\n ([carlosrogue](https://github.com/carlosrogue))\\n- Update scalafmt-dynamic to 2.4.1\\n [\\\\#1440](https://github.com/scalameta/metals/pull/1440)\\n ([scala-steward](https://github.com/scala-steward))\\n- Mark most often failing tests as flaky and fix DefinitionLspSuite test\\n [\\\\#1439](https://github.com/scalameta/metals/pull/1439)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scalafmt-dynamic to 2.4.0\\n [\\\\#1437](https://github.com/scalameta/metals/pull/1437)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix download URL for Coursier command-line interface\\n [\\\\#1436](https://github.com/scalameta/metals/pull/1436)\\n ([keiSunagawa](https://github.com/keiSunagawa))\\n- Document emacs integration with debug adapter and tree view protocol\\n [\\\\#1438](https://github.com/scalameta/metals/pull/1438)\\n ([zainab-ali](https://github.com/zainab-ali))\\n- Update bloop-config, bloop-launcher to 1.4.0-RC1-62-d098adda\\n [\\\\#1434](https://github.com/scalameta/metals/pull/1434)\\n ([scala-steward](https://github.com/scala-steward))\\n- Refactor: split Completions.scala into smaller files\\n [\\\\#1423](https://github.com/scalameta/metals/pull/1423)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update bloop-config, bloop-launcher to 1.4.0-RC1-56-a2040035\\n [\\\\#1429](https://github.com/scalameta/metals/pull/1429)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix issue with multiple pipes in string\\n [\\\\#1427](https://github.com/scalameta/metals/pull/1427)\\n ([tgodzik](https://github.com/tgodzik))\\n- Return all rename file changes up to a threshold\\n [\\\\#1405](https://github.com/scalameta/metals/pull/1405)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.2.3\\n [\\\\#1426](https://github.com/scalameta/metals/pull/1426)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update metaconfig-core to 0.9.8\\n [\\\\#1425](https://github.com/scalameta/metals/pull/1425)\\n ([tgodzik](https://github.com/tgodzik))\\n- Send stackTraces as paths rather than URIs\\n [\\\\#1418](https://github.com/scalameta/metals/pull/1418)\\n ([danilbykov](https://github.com/danilbykov))\\n- Revamp the BloopPants command-line interface.\\n [\\\\#1420](https://github.com/scalameta/metals/pull/1420)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update ujson to 0.9.9 [\\\\#1419](https://github.com/scalameta/metals/pull/1419)\\n ([scala-steward](https://github.com/scala-steward))\\n- CodeAction: insert missing abstract members\\n [\\\\#1379](https://github.com/scalameta/metals/pull/1379)\\n ([tanishiking](https://github.com/tanishiking))\\n- Don\'t insert parentheses when importing\\n [\\\\#1284](https://github.com/scalameta/metals/pull/1284)\\n ([kubukoz](https://github.com/kubukoz))\\n- Change config options to match coc\\n [\\\\#1390](https://github.com/scalameta/metals/pull/1390)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use workspace level Gradle wrapper if present\\n [\\\\#1412](https://github.com/scalameta/metals/pull/1412)\\n ([Arthurm1](https://github.com/Arthurm1))\\n- Update sbt-ci-release to 1.5.2\\n [\\\\#1408](https://github.com/scalameta/metals/pull/1408)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.12.2 [\\\\#1410](https://github.com/scalameta/metals/pull/1410)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove check for focused document on non-supporting editors\\n [\\\\#1407](https://github.com/scalameta/metals/pull/1407)\\n ([ckipp01](https://github.com/ckipp01))\\n- Added Command to create new worksheet\\n [\\\\#1339](https://github.com/scalameta/metals/pull/1339)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Add in tree view protocol docs for vim\\n [\\\\#1392](https://github.com/scalameta/metals/pull/1392)\\n ([ckipp01](https://github.com/ckipp01))\\n- Improve logic to merge Pants targets.\\n [\\\\#1400](https://github.com/scalameta/metals/pull/1400)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update pprint to 0.5.9 [\\\\#1403](https://github.com/scalameta/metals/pull/1403)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.2.2\\n [\\\\#1401](https://github.com/scalameta/metals/pull/1401)\\n ([scala-steward](https://github.com/scala-steward))\\n- Do not accept empty string values from the lsp settings\\n [\\\\#1397](https://github.com/scalameta/metals/pull/1397)\\n ([tgodzik](https://github.com/tgodzik))\\n- Enable verbose sbt loggers in CI.\\n [\\\\#1399](https://github.com/scalameta/metals/pull/1399)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix exhaustive match completion on Java enums\\n [\\\\#1393](https://github.com/scalameta/metals/pull/1393)\\n ([Duhemm](https://github.com/Duhemm))\\n- Update munit, sbt-munit to 0.4.5\\n [\\\\#1395](https://github.com/scalameta/metals/pull/1395)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add .scalafmt.conf symbolic link when exporting Pants build.\\n [\\\\#1386](https://github.com/scalameta/metals/pull/1386)\\n ([olafurpg](https://github.com/olafurpg))\\n- Avoid long filename for Pants output file.\\n [\\\\#1385](https://github.com/scalameta/metals/pull/1385)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update interface to 0.0.18\\n [\\\\#1383](https://github.com/scalameta/metals/pull/1383)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.8\\n [\\\\#1384](https://github.com/scalameta/metals/pull/1384)\\n ([scala-steward](https://github.com/scala-steward))\\n- Rename file only if renamed symbol is directly enclosed by a package (closes\\n #1380) [\\\\#1382](https://github.com/scalameta/metals/pull/1382)\\n ([kubukoz](https://github.com/kubukoz))\\n- Several improvements to Pants integration\\n [\\\\#1375](https://github.com/scalameta/metals/pull/1375)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include ScalaBuildTarget in ScalaTarget\\n [\\\\#1374](https://github.com/scalameta/metals/pull/1374)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade bloop-launcher to nightly version of Bloop.\\n [\\\\#1371](https://github.com/scalameta/metals/pull/1371)\\n ([olafurpg](https://github.com/olafurpg))\\n- Mark flaky tests as flaky.\\n [\\\\#1373](https://github.com/scalameta/metals/pull/1373)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update flyway-core to 6.2.1\\n [\\\\#1372](https://github.com/scalameta/metals/pull/1372)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade to the latest junit-interface.\\n [\\\\#1368](https://github.com/scalameta/metals/pull/1368)\\n ([olafurpg](https://github.com/olafurpg)) Cannot read PR 1352\\n- Add support for rambo worksheets without build target\\n [\\\\#1364](https://github.com/scalameta/metals/pull/1364)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add documentation for using proxy and mirrors\\n [\\\\#1356](https://github.com/scalameta/metals/pull/1356)\\n ([tgodzik](https://github.com/tgodzik))\\n- Merge pull request #1363 from olafurpg/pants-resources\\n [\\\\#1363](https://github.com/scalameta/metals/pull/1363)\\n ([olafurpg](https://github.com/olafurpg)) Cannot read PR 1361\\n- Start recording test reports with sbt-munit\\n [\\\\#1360](https://github.com/scalameta/metals/pull/1360)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update munit to 0.4.3 [\\\\#1358](https://github.com/scalameta/metals/pull/1358)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix testAsync -> test after a logical merge conflict\\n [\\\\#1357](https://github.com/scalameta/metals/pull/1357)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not accept synthetic symbol with matching qualifier\\n [\\\\#1338](https://github.com/scalameta/metals/pull/1338)\\n ([tgodzik](https://github.com/tgodzik))\\n- Replace utest with MUnit\\n [\\\\#1277](https://github.com/scalameta/metals/pull/1277)\\n ([gabro](https://github.com/gabro))\\n- Update interface to 0.0.17\\n [\\\\#1355](https://github.com/scalameta/metals/pull/1355)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jol-core to 0.10\\n [\\\\#1351](https://github.com/scalameta/metals/pull/1351)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update nuprocess to 1.2.6\\n [\\\\#1350](https://github.com/scalameta/metals/pull/1350)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several Pants fixes [\\\\#1349](https://github.com/scalameta/metals/pull/1349)\\n ([olafurpg](https://github.com/olafurpg))\\n- Copy jars from Pants export-classpath into Bloop directory.\\n [\\\\#1348](https://github.com/scalameta/metals/pull/1348)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve uri from path properly for setting breakpoints\\n [\\\\#1346](https://github.com/scalameta/metals/pull/1346)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Nu Process to 1.2.5 and directory watcher to 0.9.9\\n [\\\\#1340](https://github.com/scalameta/metals/pull/1340)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update flyway-core to 6.2.0\\n [\\\\#1344](https://github.com/scalameta/metals/pull/1344)\\n ([scala-steward](https://github.com/scala-steward))\\n- Updated \\"unsupported features\\"\\n [\\\\#1343](https://github.com/scalameta/metals/pull/1343)\\n ([rtar](https://github.com/rtar))\\n- fix logic for detected if bloop-sbt is already installed\\n [\\\\#1342](https://github.com/scalameta/metals/pull/1342)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add caching to github actions for Cousier\\n [\\\\#1276](https://github.com/scalameta/metals/pull/1276)\\n ([tgodzik](https://github.com/tgodzik))\\n- Mention debugging in contributing docs\\n [\\\\#1337](https://github.com/scalameta/metals/pull/1337)\\n ([kubukoz](https://github.com/kubukoz))\\n- Make sure the path on windows is a proper URI\\n [\\\\#1335](https://github.com/scalameta/metals/pull/1335)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change last require in PC to warning\\n [\\\\#1333](https://github.com/scalameta/metals/pull/1333)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change the non-fatal jar error to debug rather than log warning\\n [\\\\#1331](https://github.com/scalameta/metals/pull/1331)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix issues when go to implementation resolves local symbols\\n [\\\\#1330](https://github.com/scalameta/metals/pull/1330)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use actual mill version in predef\\n [\\\\#1307](https://github.com/scalameta/metals/pull/1307)\\n ([jodersky](https://github.com/jodersky))\\n- Update recommended mappings with the latest\\n [\\\\#1289](https://github.com/scalameta/metals/pull/1289)\\n ([ckipp01](https://github.com/ckipp01))\\n- Add in fix for onTypeFormatting on top level multi-line strings\\n [\\\\#1329](https://github.com/scalameta/metals/pull/1329)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update lz4-java to 1.7.1\\n [\\\\#1327](https://github.com/scalameta/metals/pull/1327)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add an override for build tool plugin version and promote LSP settings\\n [\\\\#1310](https://github.com/scalameta/metals/pull/1310)\\n ([tgodzik](https://github.com/tgodzik))\\n- Change require to warning for the presentation compiler\\n [\\\\#1324](https://github.com/scalameta/metals/pull/1324)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix version of sbt-metals for pre 0.8.0 instructions\\n [\\\\#1323](https://github.com/scalameta/metals/pull/1323)\\n ([gabro](https://github.com/gabro))\\n- Update sbt, scripted-plugin to 1.3.7\\n [\\\\#1319](https://github.com/scalameta/metals/pull/1319)\\n ([scala-steward](https://github.com/scala-steward))\\n- Typo [\\\\#1318](https://github.com/scalameta/metals/pull/1318)\\n ([joriscode](https://github.com/joriscode))\\n- Fix worksheet gif for cobalt release notes to show proper extension\\n [\\\\#1314](https://github.com/scalameta/metals/pull/1314)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update versions in issue templates\\n [\\\\#1312](https://github.com/scalameta/metals/pull/1312)\\n ([ckipp01](https://github.com/ckipp01))\\n- Use bloop.export-jar-classifiers property\\n [\\\\#1212](https://github.com/scalameta/metals/pull/1212)\\n ([joriscode](https://github.com/joriscode))\\n- Update screen-record of Scaladoc auto-completion in v0.8.0 release-note.\\n [\\\\#1309](https://github.com/scalameta/metals/pull/1309)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update ujson to 0.9.8 [\\\\#1299](https://github.com/scalameta/metals/pull/1299)\\n ([scala-steward](https://github.com/scala-steward))\\n- Link authors\' github accounts for release notes\\n [\\\\#1295](https://github.com/scalameta/metals/pull/1295)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove nix publishing and add a reminder to update version\\n [\\\\#1294](https://github.com/scalameta/metals/pull/1294)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for the epic version of Metals :D\\n [\\\\#1278](https://github.com/scalameta/metals/pull/1278)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2020/01/10/cobalt","metadata":{"permalink":"/metals/blog/2020/01/10/cobalt","source":"@site/blog/2020-01-10-cobalt.md","title":"Metals v0.8.0 - Cobalt","description":"We are excited to announce the release of Metals v0.8.0, codename Cobalt. This","date":"2020-01-10T00:00:00.000Z","formattedDate":"January 10, 2020","tags":[],"readingTime":18.95,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.8.0 - Cobalt","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.1 - Cobalt","permalink":"/metals/blog/2020/02/26/cobalt"},"nextItem":{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"}},"content":"We are excited to announce the release of Metals v0.8.0, codename Cobalt. This\\nrelease includes a large number of new features and improvements, which have\\nbeen under development since September 2019.\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
Commits since last release772
Merged PRs214
Contributors19
Closed issues84
New features8
\\n\\nFor full details: https://github.com/scalameta/metals/milestone/9?closed=1\\n\\nMetals is a language server for Scala that works with VS Code, Vim, Emacs,\\nSublime Text, Atom and Eclipse. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community. Recently, Metals has also gained\\nsupport from [Lunatech](https://lunatech.com) with the contributions from\\n[@ckipp01](https://github.com/ckipp01). We are extremely grateful for the\\ngrowing support from the community and businesses alike, which shows in the\\nnumber of new contributions and their quality.\\n\\n## TL;DR\\n\\nCheck out [https://scalameta.org/metals/](https://scalameta.org/metals/) and\\ngive Metals a try!\\n\\n- run and debug for tests and main methods\\n- go to implementations\\n- rename symbol\\n- first code action - import missing symbol\\n- worksheet support\\n- improvements for Bloop integration\\n- better support for Vim via coc-metals\\n- completion to add all abstract members\\n- scaladoc auto completion on type `/**`\\n\\n## Debugging\\n\\nIt is now possible to run and test directly from VS Code using the new \\"Run\\",\\n\\"Test\\", \\"Debug\\" and \\"Debug test\\" buttons. The debug buttons support debugging\\nwith breakpoints. It\'s possible to insert breakpoints in Java and Scala sources\\nfor both workspace sources as well as library dependency sources.\\n\\n![debug](https://user-images.githubusercontent.com/3709537/70703645-d0cb9680-1cd0-11ea-9034-a2ef18ffb588.gif)\\n\\nTo support other editors please take a look into the documentation on the Metals\\nwebsite.\\n\\nKnown breakpoints limitations we are working on:\\n\\n- debugging is only supported in VS Code at this moment, we hope to increase the\\n editor support in the future. To support debugging, editors need to implement\\n the\\n [Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/)\\n- breakpoints may not work as expected in all source locations (example: inner\\n classes, ambiguous names, lambdas). Please share your feedback by reporting\\n issues!\\n\\n## Navigation\\n\\n### Go to implementations\\n\\nMetals now implements the textDocument/implementations LSP endpoint, which\\nenables all supported editors to display a list of all implementations of\\nabstract classes or members.\\n\\n![implementations](https://i.imgur.com/rke6iny.gif)\\n\\nFinding implementations also works for symbols outside of the workspace, at the\\nprice of a small performance penalty for the first invocation.\\n\\nThe work done for this feature was also instrumental for implementing the Rename\\nrefactor (see below).\\n\\n## Refactor\\n\\nRefactoring support is one of the most requested features in Metals. In this\\nrelease, we started by implementing the most commonly used refactors: rename and\\nimport missing symbol.\\n\\nWe plan to add more common refactors along the way. Make sure to check out the\\n[ones that have already been proposed](https://github.com/scalameta/metals/issues/707)\\nand consider suggesting other refactors that are essential in your development\\nworkflow.\\n\\n### Rename symbol\\n\\nThanks to the implementation of the `Go to implementations` feature, we were\\nable to work on a proper rename for any workspace symbol that will rename all\\noccurrences of a symbol even if that symbol is a part of a class hierarchy.\\n\\n![rename](https://i.imgur.com/QHaJCr0.gif)\\n\\nThere are a couple of cases in which rename might behave differently based on\\nthe particular symbol being renamed:\\n\\n- renaming an overriden symbol will rename all occurrences for both parent and\\n all children overriding that symbol\\n- java symbols are not renamed\\n- renaming \\"hashCode\\", \\"unapply\\", \\"unary\\\\_!\\", \\"!\\" is not supported, since they\\n change the semantics\\n- methods starting with `:` can only be renamed to ones with the same first\\n character to make sure code compiles afterwards\\n- renaming apply will change all occurrences with just `()` to a full name\\n `.newname()`\\n- if renaming a class with the same name as the file, the file\'s name will also\\n be renamed\\n- companion objects will also be renamed along with their companion classes\\n\\n### Import missing symbol\\n\\nAnother refactor that is commonly requested is the ability to fix a compilation\\nerror by auto-importing a symbol present on the classpath.\\n\\nThis was previously possible in Metals only during completions, but we were\\nlacking what LSP calls a code action.\\n\\nCode actions are context-sensitive actions that are proposed to the user in\\norder to fix an error or to perform a relevant refactor.\\n\\nThanks to the work of [@gabro](https://github.com/gabro) we now have a basic\\narchitecture in place for supporting code actions and we were able to implement\\nthis feature.\\n\\n![missing-symbol](https://user-images.githubusercontent.com/691940/68937367-8839bf80-079c-11ea-8401-4927f6531d24.gif)\\n\\n## Worksheet support\\n\\nThanks to great work by [@olafurpg](https://github.com/olafurpg) and some\\nadditional refinements by\\n[@alekseiAlefirov](https://github.com/alekseiAlefirov), worksheets are now\\navailable in all supported editors.\\n\\nWorksheets are a way to evaluate code in real time to test and prototype any new\\nfeatures in a simple way. To create a worksheet all that is needed is to create\\na file with the extension `.worksheet.sc` within the source directory of your\\nworkspace (like `/src/main/scala`) and Metals will take care of the rest.\\n\\nThere are two ways worksheets are implemented for different editors. One is with\\nan additional extension to LSP called `Decoration extension` and it\'s used by\\nVisual Studio Code and coc-metals.\\n\\nVisual Studio Code:\\n\\n![worksheet](https://i.imgur.com/8c1NkIx.gif)\\n\\nThe other way worksheets are implemented for all other editors that don\'t\\nsupport the `Decoration extension` is using workspace/applyEdits and comments\\nwith hover for larger results.\\n\\nSublime:\\n\\n![worksheet2](https://user-images.githubusercontent.com/10850363/70265661-29fc6d00-179b-11ea-842e-935045e27f96.gif)\\n\\n## Build tools\\n\\nIn order to make the integration between Bloop and Metals a smoother experience,\\nseveral new improvements are included in this release. There\'re based on\\nfeedback from users as well us our own experiences while working with Metals and\\nshould make the overall experience of importing the build and compiling much\\nbetter.\\n\\n### SemanticDB is resolved inside Bloop\\n\\nMetals requires the SemanticDB compiler plugin for a number of features to\\nfunction properly. Because of that it was quite difficult to add it\\nautomatically in all supported build tools even if those supported Bloop itself.\\nPerfect examples are Seed and Fury, which use Bloop to compile code, however\\nadding a plugin automatically would require changes to their core code.\\n\\nCurrently, thanks to\\n[recent changes](https://github.com/scalacenter/bloop/pull/942), Metals can send\\ninformation about the SemanticDB version, which Bloop uses to automatically\\ndownload and configure the SemanticDB scalac plugin. Thanks to that no changes\\nin the build tool itself are needed. Particular changes in regards to build\\ntools are:\\n\\n- Gradle - predef script code used in automatic import is now simplified a lot\\n and works with even more customized workspaces. The only thing it needs to do\\n is add the Bloop plugin and run `bloopInstall`, which can easily also be done\\n manually by the user.\\n- Maven - no manual configuration is now needed. To import automatically just\\n the plugin is needed to be invoked with a setting for downloading sources.\\n- Sbt - the `metals-sbt` plugin is now removed and the Bloop plugin is now added\\n via automatically generated `./project/metals.sbt` file and ran when imported\\n automatically. Thanks to this solution it should be possible to reuse Metals\\n compilation in the upcoming feature for offloading compilation in Sbt.\\n- Mill - logic for adding semanticDB plugin is removed from Mill.\\n- Fury, Seed - no changes were needed for the semanticDB integration and should\\n work out of the box.\\n\\n### Switch to to using Bloop Launcher\\n\\nInstead of using internal Metals logic, we now use the Bloop Launcher, which\\nenables us to either connect to an existing Bsp server or start a new Bloop\\ninstance with the specified version if none is running. This greatly simplified\\nthe connection to Bloop and enabled us to work on further improvements.\\n\\n### Restart Bloop automatically if newer version is needed\\n\\nWhenever Metals is started and connects to the Bloop build server it receives\\ninformation about the version it is running. We compare that version to the one\\nneeded by Metals to make sure everything is properly working. If the current\\nrunning version is older we offer to automatically restart it with the newer\\nversion. However, this may not work if Bloop was installed manually.\\n\\n### Automatically reconnect to Bsp/Bloop if connection is broken\\n\\nThere were numerous issues reported that the connection to Bps or Bloop was\\nbeing lost, which causes Metals to behave erratically due to no compilation\\nbeing run. To solve this, we now detect if the connection is closed and offer\\nthe user the option of automatic reconnection. This works both when the build\\nserver was down and when the connection was just interrupted. It should also\\nsolve the issues on MacOs with dropped connection.\\n\\n## Completions\\n\\n### Completion to add all abstract members\\n\\nIn the past when you were implementing an abstract member in a concrete class,\\nyou\'d see the completion option to override the member. However, if you wanted\\nto implement all of the abstract members, you\'d need to do each one\\nindividually. Now you\'ll see a new completion option in the scenario to\\nImplement all members which will implement all the members at once.\\n\\n![implement-all](https://camo.githubusercontent.com/d698c2adb18a420fcb4259e4264b6417a5e4bb54/68747470733a2f2f692e696d6775722e636f6d2f617942614344552e676966)\\n\\n### Support scaladoc auto completion on type `/**`\\n\\nThanks to recent work by [tanishiking](https://github.com/tanishiking) Metals\\nnow supports auto completing scaladoc for method definition and class definition\\non typing `/**`. More details about it can be found in\\n[the pull request](https://github.com/scalameta/metals/pull/1250).\\n\\n![scaladoc](https://user-images.githubusercontent.com/9353584/72444047-ae0e2f80-37f2-11ea-97b0-c5afac035340.gif)\\n\\n## Better support for Vim via coc-metals\\n\\nIn order to better support the Vim experience with Metals, coc-metals extension\\nwas created which is an extension for coc.nvim, the most popular LSP client for\\nVim and Neovim. With this new extension comes a whole bunch of new features for\\nMetals + Vim users.\\n\\n- automated installation\\n- easier configuration options\\n- easier workspace commands\\n- embedded doctor\\n- input box support\\n- implementation of the decoration protocol (Neovim only)\\n\\n![coc-metals](https://camo.githubusercontent.com/0f56f5a3a874e7c69eff3aaeb2dfe47dc586e3d3/68747470733a2f2f692e696d6775722e636f6d2f7a6f66753456492e706e67)\\n\\n## Support for java 11\\n\\nThanks to [@isomarcte](https://github.com/isomarcte) we now also run all tests\\non JDK 11, which enables us to be more confident about the support for it. With\\nsome additional changes to the documentation we now can fully claim that support\\nfor JDK 11 is available.\\n\\n## Other changes\\n\\nThis version includes approximately 25% of the Metals git commit log, which\\nmakes it impossible to explain every possible improvement in these release\\nnotes. Some other features and fixes that we should mention are:\\n\\n- fix for handling abstract var overrides\\n- add an empty line after the package declaration before import\\n- sort auto-completed exhaustive matches by declaration order\\n- encode the workspace path directory in build digests\\n- tone down \\"No SemanticDB\\" warning\\n- send Tree View update notification on first no-op compilation.\\n- enable `goToDefinition` when cursor is at end of symbol\\n- prioritize build targets with supported Scala versions.\\n- add automatic formatting of multi-line `stripMargin` strings on paste\\n- remove support for 2.12.7\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\nWe had a lot of new contributors that provided us with some amazing new features\\nand with some amazing quality.\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.6..v0.8.0\\n\xd3lafur P\xe1ll Geirsson\\nTomasz Godzik\\nMarek \u017barnowski\\nScala Steward\\nGabriele Petronella\\nChris Kipp\\nRikito Taniguchi\\nSzymon \u015awistun\\nDavid Strawn\\nAyoub Benali\\nAleksei Alefirov\\nAshwin Bhaskar\\nAlexandre Archambault\\nAndy Czerwonka\\nEnrique Molina\\nMarc A. Saegesser\\nSoham Rohankar\\nChris Birchall\\nkostafey\\n```\\n\\n## Merged PRs\\n\\n## [v0.8.0](https://github.com/scalameta/metals/tree/v0.8.0) (2020-01-10)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.6...v0.8.0)\\n\\n**Merged pull requests:**\\n\\n- Silence noisy FlywayDB logs\\n [\\\\#1293](https://github.com/scalameta/metals/pull/1293)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support scaladoc auto completion on type `/**`\\n [\\\\#1250](https://github.com/scalameta/metals/pull/1250)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add ability to cancel build server connection\\n [\\\\#1292](https://github.com/scalameta/metals/pull/1292)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update utest to 0.7.3 [\\\\#1291](https://github.com/scalameta/metals/pull/1291)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 0.9.7 [\\\\#1290](https://github.com/scalameta/metals/pull/1290)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.5.8 [\\\\#1288](https://github.com/scalameta/metals/pull/1288)\\n ([scala-steward](https://github.com/scala-steward))\\n- Compute \'Import missing symbol\' code actions for all diagnostics in range\\n [\\\\#1286](https://github.com/scalameta/metals/pull/1286)\\n ([gabro](https://github.com/gabro))\\n- Change namespace to scalameta\\n [\\\\#1285](https://github.com/scalameta/metals/pull/1285)\\n ([ckipp01](https://github.com/ckipp01))\\n- Allow only to dismiss build server reconnection for 5 minutes\\n [\\\\#1282](https://github.com/scalameta/metals/pull/1282)\\n ([tgodzik](https://github.com/tgodzik))\\n- Automatically restart bsp connection when connection socket is closed\\n [\\\\#1266](https://github.com/scalameta/metals/pull/1266)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use scala.sys.Process for BloopPants command-line.\\n [\\\\#1280](https://github.com/scalameta/metals/pull/1280)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve IntelliJ application detection when launching Pants bui\u2026\\n [\\\\#1279](https://github.com/scalameta/metals/pull/1279)\\n ([olafurpg](https://github.com/olafurpg))\\n- Further polish to --vscode flag.\\n [\\\\#1274](https://github.com/scalameta/metals/pull/1274)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add --vscode flag to Pants export tool.\\n [\\\\#1274](https://github.com/scalameta/metals/pull/1274)\\n ([olafurpg](https://github.com/olafurpg))\\n- Minor Pants fixes . [\\\\#1273](https://github.com/scalameta/metals/pull/1273)\\n ([olafurpg](https://github.com/olafurpg))\\n- More small changes to the Pants export.\\n [\\\\#1271](https://github.com/scalameta/metals/pull/1271)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use unique name for synthetic Pants projects.\\n [\\\\#1269](https://github.com/scalameta/metals/pull/1269)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update coursier to 2.0.0-RC5-6\\n [\\\\#1267](https://github.com/scalameta/metals/pull/1267)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several improvements to Pants export\\n [\\\\#1265](https://github.com/scalameta/metals/pull/1265)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add separate \\"debug\\" code lens\\n [\\\\#1200](https://github.com/scalameta/metals/pull/1200)\\n ([marek1840](https://github.com/marek1840))\\n- Support breakpoints in java static methods and nested classes\\n [\\\\#1214](https://github.com/scalameta/metals/pull/1214)\\n ([marek1840](https://github.com/marek1840))\\n- Update flyway-core to 6.1.4\\n [\\\\#1264](https://github.com/scalameta/metals/pull/1264)\\n ([scala-steward](https://github.com/scala-steward))\\n- Upgrade Pants sbt testing interface.\\n [\\\\#1257](https://github.com/scalameta/metals/pull/1257)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update coursier to 2.0.0-RC5-5\\n [\\\\#1261](https://github.com/scalameta/metals/pull/1261)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.0.29.Final\\n [\\\\#1262](https://github.com/scalameta/metals/pull/1262)\\n ([scala-steward](https://github.com/scala-steward))\\n- Restart Bloop automatically if newer version is needed\\n [\\\\#1256](https://github.com/scalameta/metals/pull/1256)\\n ([tgodzik](https://github.com/tgodzik))\\n- typo - evaluating [\\\\#1255](https://github.com/scalameta/metals/pull/1255)\\n ([ckipp01](https://github.com/ckipp01))\\n- Failing test case for #1253\\n [\\\\#1254](https://github.com/scalameta/metals/pull/1254)\\n ([gabro](https://github.com/gabro))\\n- Slightly more compliant initialization of codeActionProvider\\n [\\\\#1251](https://github.com/scalameta/metals/pull/1251)\\n ([gabro](https://github.com/gabro))\\n- add in another test for multi-line string formatting\\n [\\\\#1249](https://github.com/scalameta/metals/pull/1249)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update geny to 0.4.2 [\\\\#1248](https://github.com/scalameta/metals/pull/1248)\\n ([gabro](https://github.com/gabro))\\n- Fix multi-line range formatting when on first line\\n [\\\\#1245](https://github.com/scalameta/metals/pull/1245)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-mdoc to 2.1.1\\n [\\\\#1247](https://github.com/scalameta/metals/pull/1247)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces to 2.1.1\\n [\\\\#1243](https://github.com/scalameta/metals/pull/1243)\\n ([gabro](https://github.com/gabro))\\n- Remove duplicated Arr in doctor json\\n [\\\\#1241](https://github.com/scalameta/metals/pull/1241)\\n ([ckipp01](https://github.com/ckipp01))\\n- Disable flaky test cases\\n [\\\\#1238](https://github.com/scalameta/metals/pull/1238)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add in server property for doctor-format and implement json format\\n [\\\\#1235](https://github.com/scalameta/metals/pull/1235)\\n ([ckipp01](https://github.com/ckipp01))\\n- Discard \'code\' from BSP diagnostics\\n [\\\\#1232](https://github.com/scalameta/metals/pull/1232)\\n ([gabro](https://github.com/gabro))\\n- Updates to vim section [\\\\#1227](https://github.com/scalameta/metals/pull/1227)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update sbt-ci-release to 1.5.0\\n [\\\\#1230](https://github.com/scalameta/metals/pull/1230)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt, scripted-plugin to 1.3.6\\n [\\\\#1228](https://github.com/scalameta/metals/pull/1228)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove showMessage and showMessageRequest configuration options\\n [\\\\#1222](https://github.com/scalameta/metals/pull/1222)\\n ([gabro](https://github.com/gabro))\\n- Update ujson to 0.9.6 [\\\\#1224](https://github.com/scalameta/metals/pull/1224)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.1.0\\n [\\\\#1225](https://github.com/scalameta/metals/pull/1225)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 28.2-jre\\n [\\\\#1223](https://github.com/scalameta/metals/pull/1223)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update Sublime settings regarding window/showMessage\\n [\\\\#1218](https://github.com/scalameta/metals/pull/1218)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Update ujson to 0.9.5 [\\\\#1221](https://github.com/scalameta/metals/pull/1221)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.3\\n [\\\\#1216](https://github.com/scalameta/metals/pull/1216)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove unreachable code\\n [\\\\#1217](https://github.com/scalameta/metals/pull/1217)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update pprint to 0.5.7 [\\\\#1219](https://github.com/scalameta/metals/pull/1219)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC5-4\\n [\\\\#1215](https://github.com/scalameta/metals/pull/1215)\\n ([scala-steward](https://github.com/scala-steward))\\n- Fix scaladoc for methods in Completions\\n [\\\\#1213](https://github.com/scalameta/metals/pull/1213)\\n ([tanishiking](https://github.com/tanishiking))\\n- Continued improvements to Pants export\\n [\\\\#1210](https://github.com/scalameta/metals/pull/1210)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in documenation for coc-metals\\n [\\\\#1197](https://github.com/scalameta/metals/pull/1197)\\n ([ckipp01](https://github.com/ckipp01))\\n- Don\'t create Bloop projects for Pants targets of type \\"files\\".\\n [\\\\#1211](https://github.com/scalameta/metals/pull/1211)\\n ([olafurpg](https://github.com/olafurpg))\\n- Set the working directory to the workspace in Pants export.\\n [\\\\#1209](https://github.com/scalameta/metals/pull/1209)\\n ([olafurpg](https://github.com/olafurpg))\\n- Further polish to the Pants export.\\n [\\\\#1207](https://github.com/scalameta/metals/pull/1207)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update cats-core to 2.1.0\\n [\\\\#1206](https://github.com/scalameta/metals/pull/1206)\\n ([scala-steward](https://github.com/scala-steward))\\n- Add breakpoint support while debugging\\n [\\\\#1163](https://github.com/scalameta/metals/pull/1163)\\n ([marek1840](https://github.com/marek1840))\\n- Update ujson to 0.9.0 [\\\\#1205](https://github.com/scalameta/metals/pull/1205)\\n ([scala-steward](https://github.com/scala-steward))\\n- Several more improvements to the Pants export\\n [\\\\#1203](https://github.com/scalameta/metals/pull/1203)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include jdk in the job name\\n [\\\\#1202](https://github.com/scalameta/metals/pull/1202)\\n ([marek1840](https://github.com/marek1840))\\n- Avoid re-compilation when restarting Bloop in Pants workspace\\n [\\\\#1201](https://github.com/scalameta/metals/pull/1201)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several improvements to Pants export step\\n [\\\\#1198](https://github.com/scalameta/metals/pull/1198)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update bloop-config, bloop-launcher to 1.3.4+298-2c6ff971\\n [\\\\#1192](https://github.com/scalameta/metals/pull/1192)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update The Getting Started Documentation For Java 11\\n [\\\\#1194](https://github.com/scalameta/metals/pull/1194)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update flyway-core to 6.1.2\\n [\\\\#1193](https://github.com/scalameta/metals/pull/1193)\\n ([scala-steward](https://github.com/scala-steward))\\n- Remove Usage Of Deprecated `lines` Method\\n [\\\\#1171](https://github.com/scalameta/metals/pull/1171)\\n ([isomarcte](https://github.com/isomarcte))\\n- Sort auto-completed exhaustive match\'es by declaration order\\n [\\\\#1174](https://github.com/scalameta/metals/pull/1174)\\n ([tanishiking](https://github.com/tanishiking))\\n- Update bloop-config, bloop-launcher to 1.3.4+297-48a21249\\n [\\\\#1187](https://github.com/scalameta/metals/pull/1187)\\n ([scala-steward](https://github.com/scala-steward))\\n- Hopefully fix flaky test failure\\n [\\\\#1186](https://github.com/scalameta/metals/pull/1186)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix renames for edited companion objects and case class apply\\n [\\\\#1186](https://github.com/scalameta/metals/pull/1169)\\n ([tgodzik](https://github.com/tgodzik))\\n- Implement code action for importing missing symbols\\n [\\\\#1065](https://github.com/scalameta/metals/pull/1065)\\n ([gabro](https://github.com/gabro))\\n- Update bloop-config, bloop-launcher to 1.3.4+271-42941449\\n [\\\\#1184](https://github.com/scalameta/metals/pull/1184)\\n ([scala-steward](https://github.com/scala-steward))\\n- Improve Pants to Bloop export step.\\n [\\\\#1181](https://github.com/scalameta/metals/pull/1181)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update bloop-config, bloop-launcher to 1.3.4+260-896345c2\\n [\\\\#1180](https://github.com/scalameta/metals/pull/1180)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.1\\n [\\\\#1179](https://github.com/scalameta/metals/pull/1179)\\n ([scala-steward](https://github.com/scala-steward))\\n- Ignore flaky BspSwitchSuite and reenable FoldingRangeSuite on Windows.\\n [\\\\#1177](https://github.com/scalameta/metals/pull/1177)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update utest to 0.7.2 [\\\\#1178](https://github.com/scalameta/metals/pull/1178)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalafmt-core, scalafmt-dynamic to 2.3.2\\n [\\\\#1173](https://github.com/scalameta/metals/pull/1173)\\n ([scala-steward](https://github.com/scala-steward))\\n- Minor tweaks to CI jobs names\\n [\\\\#1176](https://github.com/scalameta/metals/pull/1176)\\n ([gabro](https://github.com/gabro))\\n- Disable EOL Conversion On /.jvmopts\\n [\\\\#1170](https://github.com/scalameta/metals/pull/1170)\\n ([isomarcte](https://github.com/isomarcte))\\n- Fix Runtime Error In Metals Bench\\n [\\\\#1165](https://github.com/scalameta/metals/pull/1165)\\n ([isomarcte](https://github.com/isomarcte))\\n- Try fixing the Windows CI\\n [\\\\#1164](https://github.com/scalameta/metals/pull/1164)\\n ([gabro](https://github.com/gabro))\\n- Upgrade to Scalafmt v2.3.1\\n [\\\\#1162](https://github.com/scalameta/metals/pull/1162)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update interface to 0.0.16\\n [\\\\#1159](https://github.com/scalameta/metals/pull/1159)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update ujson to 0.8.0 [\\\\#1157](https://github.com/scalameta/metals/pull/1157)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update lz4-java to 1.7.0\\n [\\\\#1167](https://github.com/scalameta/metals/pull/1167)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0.0 [\\\\#1166](https://github.com/scalameta/metals/pull/1166)\\n ([scala-steward](https://github.com/scala-steward))\\n- Use atomic file move operations.\\n [\\\\#1155](https://github.com/scalameta/metals/pull/1155)\\n ([olafurpg](https://github.com/olafurpg))\\n- Worksheets support for non-VS Code editors\\n [\\\\#1089](https://github.com/scalameta/metals/pull/1089)\\n ([alekseiAlefirov](https://github.com/alekseiAlefirov))\\n- Update import documentation for Emacs\\n [\\\\#1156](https://github.com/scalameta/metals/pull/1156)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add basic support for the Pants build tool\\n [\\\\#935](https://github.com/scalameta/metals/pull/935)\\n ([Sohamr](https://github.com/Sohamr))\\n- Cleanup MarkdownGenerator\\n [\\\\#1152](https://github.com/scalameta/metals/pull/1152)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Unused `packagePriority` Parameter From ClasspathSearch\\n [\\\\#1149](https://github.com/scalameta/metals/pull/1149)\\n ([isomarcte](https://github.com/isomarcte))\\n- Internal refactorings to prepare for Pants support\\n [\\\\#1145](https://github.com/scalameta/metals/pull/1145)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove Unnecessary `asInstanceOf` And Unused Values\\n [\\\\#1151](https://github.com/scalameta/metals/pull/1151)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Unused Local Variable `count`\\n [\\\\#1150](https://github.com/scalameta/metals/pull/1150)\\n ([isomarcte](https://github.com/isomarcte))\\n- Remove Two More Usages Of Deprecated `lines` Method\\n [\\\\#1148](https://github.com/scalameta/metals/pull/1148)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update interface to 0.0.15\\n [\\\\#1147](https://github.com/scalameta/metals/pull/1147)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update coursier to 2.0.0-RC5-3\\n [\\\\#1146](https://github.com/scalameta/metals/pull/1146)\\n ([scala-steward](https://github.com/scala-steward))\\n- Revert \\"Update directory watcher to 0.9.6\\"\\n [\\\\#1144](https://github.com/scalameta/metals/pull/1144)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update directory watcher to 0.9.6\\n [\\\\#1135](https://github.com/scalameta/metals/pull/1135)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update scribe to 2.7.10 and remove duplicate newline\\n [\\\\#1137](https://github.com/scalameta/metals/pull/1137)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use git fetch --unshallow to restore version number\\n [\\\\#1143](https://github.com/scalameta/metals/pull/1143)\\n ([olafurpg](https://github.com/olafurpg))\\n- [DAP-tests] Adapt new lines to the underlying OS\\n [\\\\#1124](https://github.com/scalameta/metals/pull/1124)\\n ([marek1840](https://github.com/marek1840))\\n- Remove Deprecated Usage Of String#lines Method\\n [\\\\#1139](https://github.com/scalameta/metals/pull/1139)\\n ([isomarcte](https://github.com/isomarcte))\\n- Update better-monadic-for to 0.3.1\\n [\\\\#1104](https://github.com/scalameta/metals/pull/1104)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update mdoc-interfaces, sbt-mdoc to 2.0.3\\n [\\\\#1141](https://github.com/scalameta/metals/pull/1141)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 6.1.0\\n [\\\\#1132](https://github.com/scalameta/metals/pull/1132)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update xnio-nio to 3.7.7.Final\\n [\\\\#1140](https://github.com/scalameta/metals/pull/1140)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt to 1.3.4 and fix flaky 2.13.0 test\\n [\\\\#1138](https://github.com/scalameta/metals/pull/1138)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid renaming synthetic occurrences\\n [\\\\#1077](https://github.com/scalameta/metals/pull/1077)\\n ([gabro](https://github.com/gabro))\\n- Update coursier interface to 0.0.14\\n [\\\\#1136](https://github.com/scalameta/metals/pull/1136)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to h2 v1.4.200.\\n [\\\\#1133](https://github.com/scalameta/metals/pull/1133)\\n ([olafurpg](https://github.com/olafurpg))\\n- Revert \\"Update jna, jna-platform to 5.5.0\\"\\n [\\\\#1134](https://github.com/scalameta/metals/pull/1134)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix renames in case of macro annotations\\n [\\\\#1095](https://github.com/scalameta/metals/pull/1095)\\n ([tgodzik](https://github.com/tgodzik))\\n- Revert \\"Update directory-watcher to 0.8.3\\"\\n [\\\\#1126](https://github.com/scalameta/metals/pull/1126)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update xnio-nio to 3.6.9.Final\\n [\\\\#1113](https://github.com/scalameta/metals/pull/1113)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update simulacrum to 1.0.0\\n [\\\\#1099](https://github.com/scalameta/metals/pull/1099)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 5.5.0\\n [\\\\#1131](https://github.com/scalameta/metals/pull/1131)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-jmh to 0.3.7\\n [\\\\#1121](https://github.com/scalameta/metals/pull/1121)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update org.eclipse.lsp4j, ... to 0.8.1\\n [\\\\#1111](https://github.com/scalameta/metals/pull/1111)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update utest to 0.7.1 [\\\\#1129](https://github.com/scalameta/metals/pull/1129)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jsoup to 1.12.1 [\\\\#1114](https://github.com/scalameta/metals/pull/1114)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-ci-release to 1.4.31\\n [\\\\#1125](https://github.com/scalameta/metals/pull/1125)\\n ([marek1840](https://github.com/marek1840))\\n- Upgrade to latest Bloop.\\n [\\\\#1096](https://github.com/scalameta/metals/pull/1096)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update cats-core to 2.0.0\\n [\\\\#1120](https://github.com/scalameta/metals/pull/1120)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update jna, jna-platform to 4.5.2\\n [\\\\#1110](https://github.com/scalameta/metals/pull/1110)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update directory-watcher to 0.8.3\\n [\\\\#1108](https://github.com/scalameta/metals/pull/1108)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update guava to 28.1-jre\\n [\\\\#1100](https://github.com/scalameta/metals/pull/1100)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update paradise to 2.1.1\\n [\\\\#1116](https://github.com/scalameta/metals/pull/1116)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update scalameta, semanticdb-scalac, ... to 4.3.0\\n [\\\\#1119](https://github.com/scalameta/metals/pull/1119)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-mdoc to 2.0.2\\n [\\\\#1117](https://github.com/scalameta/metals/pull/1117)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update flyway-core to 5.2.4\\n [\\\\#1112](https://github.com/scalameta/metals/pull/1112)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update undertow-core to 2.0.28.Final\\n [\\\\#1109](https://github.com/scalameta/metals/pull/1109)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update qdox to 2.0-M10 [\\\\#1106](https://github.com/scalameta/metals/pull/1106)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update utest to 0.6.9 [\\\\#1103](https://github.com/scalameta/metals/pull/1103)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update pprint to 0.5.6 [\\\\#1102](https://github.com/scalameta/metals/pull/1102)\\n ([scala-steward](https://github.com/scala-steward))\\n- Update sbt-scalafix to 0.9.11\\n [\\\\#1097](https://github.com/scalameta/metals/pull/1097)\\n ([scala-steward](https://github.com/scala-steward))\\n- Delay renaming in closed files until the first save is run\\n [\\\\#1094](https://github.com/scalameta/metals/pull/1094)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sublime documentation\\n [\\\\#1093](https://github.com/scalameta/metals/pull/1093)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Decode for better readability\\n [\\\\#1092](https://github.com/scalameta/metals/pull/1092)\\n ([ckipp01](https://github.com/ckipp01))\\n- Fix cross macro tests for older Scala versions\\n [\\\\#1091](https://github.com/scalameta/metals/pull/1091)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue with no source dependencies being downloaded by Bloop\\n [\\\\#1090](https://github.com/scalameta/metals/pull/1090)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update to the latest setup-scala.\\n [\\\\#1087](https://github.com/scalameta/metals/pull/1087)\\n ([olafurpg](https://github.com/olafurpg))\\n- add in more documentatin for vim setup\\n [\\\\#1082](https://github.com/scalameta/metals/pull/1082)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update documentation [\\\\#1080](https://github.com/scalameta/metals/pull/1080)\\n ([ckipp01](https://github.com/ckipp01))\\n- Replace coursier-small with coursier-interface\\n [\\\\#1080](https://github.com/scalameta/metals/pull/1030)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Use exact match when computing file renames\\n [\\\\#1075](https://github.com/scalameta/metals/pull/1075)\\n ([gabro](https://github.com/gabro))\\n- Force sequential publishLocal for mtags 2.11/2.13.\\n [\\\\#1073](https://github.com/scalameta/metals/pull/1073)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update emacs docs to include yasnippet\\n [\\\\#1068](https://github.com/scalameta/metals/pull/1068)\\n ([ckipp01](https://github.com/ckipp01))\\n- Update Sublime settings since it does have auto-indent\\n [\\\\#1064](https://github.com/scalameta/metals/pull/1064)\\n ([ckipp01](https://github.com/ckipp01))\\n- Respect client capabilities for completion item snippets\\n [\\\\#1057](https://github.com/scalameta/metals/pull/1057)\\n ([gabro](https://github.com/gabro))\\n- Disable flaky test on Window\\n [\\\\#1060](https://github.com/scalameta/metals/pull/1060)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add completion to add all abstract members\\n [\\\\#1031](https://github.com/scalameta/metals/pull/1031)\\n ([ckipp01](https://github.com/ckipp01))\\n- Welcome Chris to the team!\\n [\\\\#1059](https://github.com/scalameta/metals/pull/1059)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/rename\\n [\\\\#1048](https://github.com/scalameta/metals/pull/1048)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle abstract var overrides\\n [\\\\#1056](https://github.com/scalameta/metals/pull/1056)\\n ([gabro](https://github.com/gabro))\\n- Add an empty line after the package declaration before import\\n [\\\\#1051](https://github.com/scalameta/metals/pull/1051)\\n ([ckipp01](https://github.com/ckipp01))\\n- Implement basic worksheet mode using mdoc and text decorations\\n [\\\\#1041](https://github.com/scalameta/metals/pull/1041)\\n ([olafurpg](https://github.com/olafurpg))\\n- Give Bloop more visibility on the website.\\n [\\\\#1053](https://github.com/scalameta/metals/pull/1053)\\n ([olafurpg](https://github.com/olafurpg))\\n- Only run tests on master branch or in PRs\\n [\\\\#1044](https://github.com/scalameta/metals/pull/1044)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sbt version to 1.3.2\\n [\\\\#1043](https://github.com/scalameta/metals/pull/1043)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sample Emacs configuration to avoid AutoSave files in src dir\\n [\\\\#1032](https://github.com/scalameta/metals/pull/1032)\\n ([marcsaegesser](https://github.com/marcsaegesser))\\n- Update SemanticDB version to 4.2.5 and enable previously broken test\\n [\\\\#1033](https://github.com/scalameta/metals/pull/1033)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add type annotations for public members with Scalafix\\n [\\\\#1034](https://github.com/scalameta/metals/pull/1034)\\n ([olafurpg](https://github.com/olafurpg))\\n- Delegating client should not always call configure\\n [\\\\#1039](https://github.com/scalameta/metals/pull/1039)\\n ([tgodzik](https://github.com/tgodzik))\\n- Suppress model-refresh if debugging is unsupported\\n [\\\\#1019](https://github.com/scalameta/metals/pull/1019)\\n ([marek1840](https://github.com/marek1840))\\n- trace the debug adapter protocol messages\\n [\\\\#1023](https://github.com/scalameta/metals/pull/1023)\\n ([marek1840](https://github.com/marek1840))\\n- Reenable and fix tests on Windows\\n [\\\\#1020](https://github.com/scalameta/metals/pull/1020)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add guards against nulls that happened in the HoverProvider code\\n [\\\\#1025](https://github.com/scalameta/metals/pull/1025)\\n ([tgodzik](https://github.com/tgodzik))\\n- Move all tests into github actions\\n [\\\\#1018](https://github.com/scalameta/metals/pull/1018)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to Bloop v1.3.5.\\n [\\\\#1017](https://github.com/scalameta/metals/pull/1017)\\n ([olafurpg](https://github.com/olafurpg))\\n- Encode the workspace path directory in build digests\\n [\\\\#1015](https://github.com/scalameta/metals/pull/1015)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve problem with coc.nvim installation\\n [\\\\#1013](https://github.com/scalameta/metals/pull/1013)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Suppress code lenses if debugging is not supported\\n [\\\\#1012](https://github.com/scalameta/metals/pull/1012)\\n ([marek1840](https://github.com/marek1840))\\n- Switch to to using Bloop Launcher\\n [\\\\#1004](https://github.com/scalameta/metals/pull/1004)\\n ([tgodzik](https://github.com/tgodzik))\\n- Keep code lenses after error until next successful compilation\\n [\\\\#994](https://github.com/scalameta/metals/pull/994)\\n ([marek1840](https://github.com/marek1840))\\n- Send Tree View update notification on first no-op compilation.\\n [\\\\#997](https://github.com/scalameta/metals/pull/997)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix current CI flakiness with DiagnosticLspSuite and LensesLspSuite\\n [\\\\#1000](https://github.com/scalameta/metals/pull/1000)\\n ([tgodzik](https://github.com/tgodzik))\\n- Switch shutdownNow to shutdown due to excessive exceptions being logged\\n [\\\\#1003](https://github.com/scalameta/metals/pull/1003)\\n ([tgodzik](https://github.com/tgodzik))\\n- Strip \\"metals.\\" prefix from `workspace/executeCommand` requests.\\n [\\\\#998](https://github.com/scalameta/metals/pull/998)\\n ([olafurpg](https://github.com/olafurpg))\\n- Strip library version when comparing expected output in TreeViewLspSuite.\\n [\\\\#999](https://github.com/scalameta/metals/pull/999)\\n ([olafurpg](https://github.com/olafurpg))\\n- Install bloop server in CI\\n [\\\\#982](https://github.com/scalameta/metals/pull/982)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- A documentation change in support of Java 11 configuration\\n [\\\\#995](https://github.com/scalameta/metals/pull/995)\\n ([andyczerwonka](https://github.com/andyczerwonka))\\n- Make find implementation run on a separate thread for each file\\n [\\\\#989](https://github.com/scalameta/metals/pull/989)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue when on type formatting threw an exception on last newline\\n [\\\\#990](https://github.com/scalameta/metals/pull/990)\\n ([tgodzik](https://github.com/tgodzik))\\n- Re-introduce Azure pipelines for more stable CI.\\n [\\\\#988](https://github.com/scalameta/metals/pull/988)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add automatic formatting of multi-line `stripMargin` strings on paste\\n [\\\\#968](https://github.com/scalameta/metals/pull/968)\\n ([ckipp01](https://github.com/ckipp01))\\n- Clarify Emacs installation instructions\\n [\\\\#985](https://github.com/scalameta/metals/pull/985)\\n ([sswistun-vl](https://github.com/sswistun-vl))\\n- Add system property to disable project/metals.sbt generation\\n [\\\\#979](https://github.com/scalameta/metals/pull/979)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix typo: Occurence -> Occurrence\\n [\\\\#987](https://github.com/scalameta/metals/pull/987)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add link to new Discord server in the website footer.\\n [\\\\#981](https://github.com/scalameta/metals/pull/981)\\n ([olafurpg](https://github.com/olafurpg))\\n- (Spac)Emacs continuously crashing due to compilation of swap files\\n [\\\\#986](https://github.com/scalameta/metals/pull/986)\\n ([quiquedev](https://github.com/quiquedev))\\n- Remove automatic gitignoring.\\n [\\\\#983](https://github.com/scalameta/metals/pull/983)\\n ([tgodzik](https://github.com/tgodzik))\\n- Refactor slow suite name [\\\\#977](https://github.com/scalameta/metals/pull/977)\\n ([ckipp01](https://github.com/ckipp01))\\n- Tone down \\"No SemanticDB\\" warning\\n [\\\\#973](https://github.com/scalameta/metals/pull/973)\\n ([olafurpg](https://github.com/olafurpg))\\n- Print summary of test failures at the end of the logs.\\n [\\\\#972](https://github.com/scalameta/metals/pull/972)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enable goToDefinition when cursor is at end of symbol\\n [\\\\#965](https://github.com/scalameta/metals/pull/965)\\n ([ashwinbhaskar](https://github.com/ashwinbhaskar))\\n- Test code lenses within packages\\n [\\\\#971](https://github.com/scalameta/metals/pull/971)\\n ([marek1840](https://github.com/marek1840))\\n- Add .bloop and .metals paths to gitignore automatically\\n [\\\\#967](https://github.com/scalameta/metals/pull/967)\\n ([ashwinbhaskar](https://github.com/ashwinbhaskar))\\n- Fall back to mtags position occurrences\\n [\\\\#962](https://github.com/scalameta/metals/pull/962)\\n ([gabro](https://github.com/gabro))\\n- Bump server version in template\\n [\\\\#964](https://github.com/scalameta/metals/pull/964)\\n ([gabro](https://github.com/gabro))\\n- Change manual instalation section for sbt, gradle and maven\\n [\\\\#963](https://github.com/scalameta/metals/pull/963)\\n ([tgodzik](https://github.com/tgodzik))\\n- Warn if bloop version is older than 1.3.3\\n [\\\\#957](https://github.com/scalameta/metals/pull/957)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use consistent naming for metals experimental feature: debugging provider\\n [\\\\#960](https://github.com/scalameta/metals/pull/960)\\n ([marek1840](https://github.com/marek1840))\\n- Add support for running and testing via Debug Adapter Protocol\\n [\\\\#942](https://github.com/scalameta/metals/pull/942)\\n ([marek1840](https://github.com/marek1840))\\n- Add goto implementation [\\\\#934](https://github.com/scalameta/metals/pull/934)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve SemanticDB integration using Bloop\'s newest features\\n [\\\\#852](https://github.com/scalameta/metals/pull/852)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid race conditions during slow/test command.\\n [\\\\#951](https://github.com/scalameta/metals/pull/951)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t file watch inside jar files.\\n [\\\\#950](https://github.com/scalameta/metals/pull/950)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t propose completions for null or nothing\\n [\\\\#949](https://github.com/scalameta/metals/pull/949)\\n ([tgodzik](https://github.com/tgodzik))\\n- Prioritize build targets with supported Scala versions.\\n [\\\\#948](https://github.com/scalameta/metals/pull/948)\\n ([olafurpg](https://github.com/olafurpg))\\n- Replace Azure pipelines with GitHub Actions\\n [\\\\#947](https://github.com/scalameta/metals/pull/947)\\n ([olafurpg](https://github.com/olafurpg))\\n- Replace mvn and mvn.cmd script with jar invocation\\n [\\\\#944](https://github.com/scalameta/metals/pull/944)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/09/23/thorium","metadata":{"permalink":"/metals/blog/2019/09/23/thorium","source":"@site/blog/2019-09-23-thorium.md","title":"Metals v0.7.6 - Thorium","description":"We are excited to announce the release of Metals v0.7.6, which will most likely","date":"2019-09-23T00:00:00.000Z","formattedDate":"September 23, 2019","tags":[],"readingTime":2.215,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.6 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.8.0 - Cobalt","permalink":"/metals/blog/2020/01/10/cobalt"},"nextItem":{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"}},"content":"We are excited to announce the release of Metals v0.7.6, which will most likely\\nbe the last release before the v0.8.0 one. This release includes support for new\\nScala versions (2.12.10, 2.13.1) and a couple of fixes. It also adds a new\\nformatting on paste feature for multiline strings.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 11 PRs and closed 5 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/18?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- add support for Scala 2.12.10 and 2.13.1\\n- formatting on paste for multiline strings\\n- fixes for autofill feature\\n\\n## Add support for Scala 2.12.10 and 2.13.1\\n\\nThanks to @gabro\'s continuing effort we were able to add support for both new\\nScala versions. Those versions fix a couple of important regressions and are now\\navailable to use with Metals!\\n\\n## Formatting on paste for multiline strings\\n\\nWhenever text is pasted into a multiline string with `|` it will be properly\\nformatted by Metals:\\n\\n![format-on-paste](https://i.imgur.com/yJLAIxQ.gif)\\n\\nTo enable this feature you need to enable formatting on paste in your editor of\\nchoice. In Visual Studio Code it can be done via modifying a checkbox:\\n\\n![format-on-paste](https://i.imgur.com/OaBxwer.png)\\n\\n## Fixes for autofill feature\\n\\nAfter releasing the experimental autofill feature we addressed feedback by:\\n\\n- not filling in the default arguments\\n- adding `???` as a first option when alternative values are available to avoid\\n mistakes\\n- add subtypes as valid values\\n- only show autofill option when using named parameters or by explicitly typing\\n `autofill...`\\n\\nLet us know if you have any further feedback!\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.5..v0.7.6\\nTomasz Godzik\\nMarek \u017barnowski\\nGabriele Petronella\\n\xd3lafur P\xe1ll Geirsson\\nSam Halliday\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.6](https://github.com/scalameta/metals/tree/v0.7.6) (2019-09-23)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.5...v0.7.6)\\n\\n**Merged pull requests:**\\n\\n- replace java streams with generators\\n [\\\\#938](https://github.com/scalameta/metals/pull/938)\\n ([marek1840](https://github.com/marek1840))\\n- ENSIME is not an alternative\\n [\\\\#936](https://github.com/scalameta/metals/pull/936)\\n ([fommil](https://github.com/fommil))\\n- Swap field to type parameter for scala Type\\n [\\\\#933](https://github.com/scalameta/metals/pull/933)\\n ([tgodzik](https://github.com/tgodzik))\\n- Refactor autofill option [\\\\#932](https://github.com/scalameta/metals/pull/932)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make sure we continue searching for symbols in try.\\n [\\\\#930](https://github.com/scalameta/metals/pull/930)\\n ([tgodzik](https://github.com/tgodzik))\\n- Disable flaky test. [\\\\#918](https://github.com/scalameta/metals/pull/918)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix indentation when adding pipes in multiline string.\\n [\\\\#922](https://github.com/scalameta/metals/pull/922)\\n ([tgodzik](https://github.com/tgodzik))\\n- Remove dealias to properly support type\\n [\\\\#921](https://github.com/scalameta/metals/pull/921)\\n ([tgodzik](https://github.com/tgodzik))\\n- Simplify testing when calculating position and automatically add pipes when\\n copy pasting input [\\\\#919](https://github.com/scalameta/metals/pull/919)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add Scala 2.12.10 support and use 2.12.10 on Metals\\n [\\\\#913](https://github.com/scalameta/metals/pull/913)\\n ([gabro](https://github.com/gabro))\\n- Update `isCompiled` status of the build target regardless of the compilation\\n result [\\\\#907](https://github.com/scalameta/metals/pull/907)\\n ([marek1840](https://github.com/marek1840))"},{"id":"/2019/09/12/thorium","metadata":{"permalink":"/metals/blog/2019/09/12/thorium","source":"@site/blog/2019-09-12-thorium.md","title":"Metals v0.7.5 - Thorium","description":"We are excited to announce the release of Metals v0.7.5 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-09-12T00:00:00.000Z","formattedDate":"September 12, 2019","tags":[],"readingTime":3.04,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.5 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.7.6 - Thorium","permalink":"/metals/blog/2019/09/23/thorium"},"nextItem":{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"}},"content":"We are excited to announce the release of Metals v0.7.5 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes couple of bug fixes for 0.7.2, which were present in some\\nrare scenarios. We also added a new experimental feature, which we would be\\nhappy to get feedback about.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 12 PRs and closed 6 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/17?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- add auto-fill option to case classes\\n- deduce values for named parameters completions\\n- multiple fixes after adding support for Scala 2.12.9\\n- fixes for automatic addition of `|` in multiline strings\\n\\n## Add auto-fill option to case classes\\n\\nWhenever we invoke a method and try completions inside the brackets there is an\\nadditional option to allow Metals to deduce what should be filled for each\\nparameter.\\n\\n![auto-fill](https://i.imgur.com/8pCiMqE.gif)\\n\\nThis algorithm checks if there exists a value in scope with the same type as the\\nparameters\' and then works according to the rules below:\\n\\n```\\n1. If there is only one candidate, use it.\\n2. If there is more than one, give user an alternative to choose one of them.\\n3. Otherwise use use \\"???\\".\\n```\\n\\nThis feature also uses the snippets syntax to allow to quickly go over the\\nauto-filled parameters and choose or replace the auto-filled values.\\n\\n## Deduce values for named parameters completions\\n\\nLeveraging the work that went into the previous feature, we were also able to\\nprovide additional support for concrete values in named parameter completions.\\n\\n![deduce](https://i.imgur.com/m11xixy.gif)\\n\\nWe generate completion item for each value that fits the type of the parameter.\\n\\n## Multiple fixes after adding support for Scala 2.12.9\\n\\nAfter updating Metals to work with Scala 2.12.9 it turned out that completions\\nand hover didn\'t work correctly and due to the presentation compiler crashing in\\nthe following scenarios:\\n\\n- whenever an older version of SemanticDB plugin was used as was the case with\\n Mill\\n- when using Scala 2.12.8 without SemanticDB plugin\\n\\nBoth issues have now been fixed and additionally we updated the default Mill\\nversion to 0.5.1, which works correctly with Scala 2.12.9.\\n\\n## Fixes for automatic addition of `|` in multiline strings\\n\\nWe now make sure that `stripMargin` exists when adding `|` automatically in\\nmultiline strings. This could cause issues in some scenarios, where multiline\\nstring contained `|`, but it was not only used for formatting.\\n\\nAdditionally, we fixed the feature to also work in interpolated strings, which\\nwas missing in the previous release.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.2..v0.7.5\\nTomasz Godzik\\nGabriele Petronella\\n\u0141ukasz Byczy\u0144ski\\nOlafur Pall Geirsson\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.5](https://github.com/scalameta/metals/tree/v0.7.5) (2019-09-12)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.2...v0.7.5)\\n\\n**Merged pull requests:**\\n\\n- Revert sbt version to 1.2.8\\n [\\\\#915](https://github.com/scalameta/metals/pull/915)\\n ([tgodzik](https://github.com/tgodzik))\\n- Upgrade to latest sbt-sonatype for faster and more stable releases\\n [\\\\#912](https://github.com/scalameta/metals/pull/912)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update with new Eclipse capabilities\\n [\\\\#911](https://github.com/scalameta/metals/pull/911)\\n ([mundacho](https://github.com/mundacho))\\n- Check for stripMargin when adding |\\n [\\\\#904](https://github.com/scalameta/metals/pull/904)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add additional tips & tricks to the sublime text documentation\\n [\\\\#906](https://github.com/scalameta/metals/pull/906)\\n ([LukaszByczynski](https://github.com/LukaszByczynski))\\n- Update sbt to 1.3.0 [\\\\#905](https://github.com/scalameta/metals/pull/905)\\n ([gabro](https://github.com/gabro))\\n- Fix more possible presentation compiler classpath issues\\n [\\\\#901](https://github.com/scalameta/metals/pull/901)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update Mill to 0.5.1 [\\\\#899](https://github.com/scalameta/metals/pull/899)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update website overview and add information about Eclipse\\n [\\\\#894](https://github.com/scalameta/metals/pull/894)\\n ([tgodzik](https://github.com/tgodzik))\\n- Retry with clean compiler after ShutdownReq\\n [\\\\#898](https://github.com/scalameta/metals/pull/898)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add automatic value completions on named arguments\\n [\\\\#827](https://github.com/scalameta/metals/pull/827)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix links to merged PRs in blogpost\\n [\\\\#896](https://github.com/scalameta/metals/pull/896)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for v0.7.2\\n [\\\\#886](https://github.com/scalameta/metals/pull/886)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/09/02/thorium","metadata":{"permalink":"/metals/blog/2019/09/02/thorium","source":"@site/blog/2019-09-02-thorium.md","title":"Metals v0.7.2 - Thorium","description":"We are excited to announce the release of Metals v0.7.2 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-09-02T00:00:00.000Z","formattedDate":"September 2, 2019","tags":[],"readingTime":6.14,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/TomekGodzik","imageURL":"https://github.com/tgodzik.png"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.7.2 - Thorium","authorURL":"https://twitter.com/TomekGodzik","authorImageURL":"https://github.com/tgodzik.png"},"prevItem":{"title":"Metals v0.7.5 - Thorium","permalink":"/metals/blog/2019/09/12/thorium"},"nextItem":{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"}},"content":"We are excited to announce the release of Metals v0.7.2 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes mostly bug fixes with some smaller new features. We are\\nskipping over 0.7.1 due to a critical bug we discovered\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 39 PRs and closed 11 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/14?closed=1\\n\\n## TL;DR\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n- support for Scala 2.12.9\\n- fix completions in case of inline comments\\n- add support for non-directory sources\\n- automatically add package definition to new source files\\n- automatically insert pipes in multiline string\\n- a lot of miscellaneous fixes\\n\\n## Fix completions in case of inline comments\\n\\nPreviously, completions after a comment and newline would yield no results:\\n\\n```scala\\nval List(1,2,3)\\n .map(num => num + 1) // comment\\n @@\\n```\\n\\nThis was fixed by the Metals team in the presentation compiler itself for 2.12.9\\nand 2.13.1, however we also added a workaround for all supported older Scala\\nversions.\\n\\n## Add support for non-directory sources\\n\\nIn case that your build tool supports having single files as sources, we now\\noffer full support for them. That corresponds to the most recent BSP\\nspecification\\n[request](https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#build-target-sources-request)\\n\\n## Automatically add package definition to new source files\\n\\nFor every new Scala file we automatically add package definition based on the\\nrelative path between the new source file and source root. This is done using\\napplyWorkspaceEdit method, which causes the change to be done in editor and this\\ncan easily be rewerted like any other change you would type.\\n\\n![add-package](https://i.imgur.com/6V9gHnM.gif)\\n\\nWe also added support for package objects. Whenever you create `package.scala`\\nfile, we will automatically create the barebone definition of the package\\nobject.\\n\\n![package-object](https://i.imgur.com/CfF0cdE.gif)\\n\\nThere is still some work to be done about moving files between packages, which\\nwill be addressed in the next release.\\n\\nBig thanks to the first time contributor from VirtusLab Tomasz Dudzik for\\nimplementing most of the functionality! \ud83c\udf89\\n\\n## Automatically insert pipes in multiline string\\n\\nWe finally managed to properly support adding `|` in multiline strings using the\\n`onTypeFormatting` method. Previous implementation was very naive and often\\nadded pipes in wrong places.\\n\\n![pipes](https://i.imgur.com/iXGYOf0.gif)\\n\\nTo enable the functionality you need to enable `onTypeFormatting` inside your\\neditor if it\'s not enabled by default.\\n\\nIn Visual Studio Code this needs to be done in settings by checking\\n`Editor: Format On Type`:\\n\\n![on-type](https://i.imgur.com/4eVvSP5.gif)\\n\\nYou will also need the newest version of the Visual Studio Code plugin.\\n\\nThere is still some possible improvements in case of copy pasting entire text\\nfragments, but that needs some more work.\\n\\nBig thanks to another of our first time contributors from VirtusLab Karolina\\nBogacka! Great work! \ud83c\udf89\\n\\n## Add support for Scala 2.12.9\\n\\nMetals now supports Scala 2.12.9! No new Scala version has been deprecated in\\nthis release, since it is possible that Scala 2.12.10 version with some\\nimportant fixes will be released soon.\\n\\nBig thanks to [@gabro](https://github.com/gabro) for again leading the effort!\\nThis took considerably more time and effort than expected.\\n\\n## Miscellaneous fixes\\n\\n- erroneous warning for Scala 2.11 is no longer displayed\\n- don\'t infer build target for non-readonly files\\n- fix several small issues in the tree view protocol spec\\n- set h2.bindAddress to avoid exposing open ports (thanks @blast-hardcheese!)\\n- resolve symlinks that are used within workspaces\\n- fix issues when import was requested multiple times without any change\\n- detect openjdk as a valid jdk home\\n- warn when java sources were not found\\n- string interpolation completions now work properly in multiline string\\n- add ReloadDoctor to the list of all commands (thanks @kurnevsky!)\\n- add correct mill version in the predef script when running `bloopInstall`\\n- SemanticDB plugin issues are no longer reported in java only projects\\n- check if SeamnticDB really exists and only report issue when it doesn\'t\\n- update default scalafmt to 2.0.1\\n- use recommended version for build tools in UI message\\n- fix file leak when importing large Gradle workspaces\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release, a lot more people\\njoined this time to make the release better!\\n\\n```\\n$ git shortlog -sn --no-merges v0.7.0..v0.7.2\\nGabriele Petronella\\nTomasz Godzik\\n\xd3lafur P\xe1ll Geirsson\\nEvgeny Kurnevsky\\nMarek \u017barnowski\\nLucas Satabin\\nAyoub Benali\\nChris Birchall\\nCompro Prasad\\nDevon Stewart\\nJes\xfas Mart\xednez\\nKarolina Bogacka\\nTomasz Dudzik\\nChris Kipp\\nRikito Taniguchi\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.2](https://github.com/scalameta/metals/tree/v0.7.2) (2019-08-29)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.7.0...v0.7.2)\\n\\n**Merged pull requests:**\\n\\n- Fix not closing streams when using Files.list\\n [\\\\#892](https://github.com/scalameta/metals/pull/892)\\n ([tgodzik](https://github.com/tgodzik))\\n- Avoid file leaks when digesting Gradle builds\\n [\\\\#889](https://github.com/scalameta/metals/pull/889)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix broken tests [\\\\#888](https://github.com/scalameta/metals/pull/888)\\n ([olafurpg](https://github.com/olafurpg))\\n- Bump Metals Scala version to 2.12.9\\n [\\\\#887](https://github.com/scalameta/metals/pull/887)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add check mark for formatting under vim\\n [\\\\#885](https://github.com/scalameta/metals/pull/885)\\n ([satabin](https://github.com/satabin))\\n- Recommend a recent version of the build tool when incompatible or unknown\\n [\\\\#881](https://github.com/scalameta/metals/pull/881)\\n ([gabro](https://github.com/gabro))\\n- Use BuildInfo.scalaCompilerVersion over Properties.versionNumberString\\n [\\\\#876](https://github.com/scalameta/metals/pull/876)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove use of early intializers\\n [\\\\#877](https://github.com/scalameta/metals/pull/877)\\n ([gabro](https://github.com/gabro))\\n- Catch ShutdownReq exception from stopping a presentation compiler.\\n [\\\\#873](https://github.com/scalameta/metals/pull/873)\\n ([olafurpg](https://github.com/olafurpg))\\n- Transpose features/editors table\\n [\\\\#875](https://github.com/scalameta/metals/pull/875)\\n ([gabro](https://github.com/gabro))\\n- Make presentation compiler work on 2.12.9\\n [\\\\#872](https://github.com/scalameta/metals/pull/872)\\n ([gabro](https://github.com/gabro))\\n- Scala 2.12.9 support [\\\\#867](https://github.com/scalameta/metals/pull/867)\\n ([gabro](https://github.com/gabro))\\n- Automatically add package objects when creating package.scala file\\n [\\\\#866](https://github.com/scalameta/metals/pull/866)\\n ([tgodzik](https://github.com/tgodzik))\\n- Automatically add package declaration when creating a file\\n [\\\\#862](https://github.com/scalameta/metals/pull/862)\\n ([tdudzik](https://github.com/tdudzik))\\n- Fix TreeViewSlowSuite tests\\n [\\\\#864](https://github.com/scalameta/metals/pull/864)\\n ([gabro](https://github.com/gabro))\\n- Update scalafmt to 2.0.1 [\\\\#863](https://github.com/scalameta/metals/pull/863)\\n ([tanishiking](https://github.com/tanishiking))\\n- Add support for non-directory sources\\n [\\\\#857](https://github.com/scalameta/metals/pull/857)\\n ([tgodzik](https://github.com/tgodzik))\\n- Report an issue only if SemanticDB file doesn\'t really exist.\\n [\\\\#853](https://github.com/scalameta/metals/pull/853)\\n ([tgodzik](https://github.com/tgodzik))\\n- Do not report issues in Java only projects\\n [\\\\#850](https://github.com/scalameta/metals/pull/850)\\n ([tgodzik](https://github.com/tgodzik))\\n- Emacs supports client commands now\\n [\\\\#848](https://github.com/scalameta/metals/pull/848)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Fix issue if exact query is longer than the class name\\n [\\\\#843](https://github.com/scalameta/metals/pull/843)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix issue with wrong mill version in predef script and update millw scripts\\n [\\\\#842](https://github.com/scalameta/metals/pull/842)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix Mercury blog post date by adding an unlisted redirect\\n [\\\\#836](https://github.com/scalameta/metals/pull/836)\\n ([gabro](https://github.com/gabro))\\n- Update sublime doc regarding autoimport\\n [\\\\#839](https://github.com/scalameta/metals/pull/839)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Improve handling of the java sources\\n [\\\\#825](https://github.com/scalameta/metals/pull/825)\\n ([marek1840](https://github.com/marek1840))\\n- Add exact libraries that are expected and fix the test\\n [\\\\#837](https://github.com/scalameta/metals/pull/837)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add ReloadDoctor to the list of all commands.\\n [\\\\#830](https://github.com/scalameta/metals/pull/830)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Install use-package if not already installed\\n [\\\\#828](https://github.com/scalameta/metals/pull/828)\\n ([Compro-Prasad](https://github.com/Compro-Prasad))\\n- Fix multiline edits [\\\\#826](https://github.com/scalameta/metals/pull/826)\\n ([tgodzik](https://github.com/tgodzik))\\n- Timestamps should use currentTimeMillis\\n [\\\\#822](https://github.com/scalameta/metals/pull/822)\\n ([tgodzik](https://github.com/tgodzik))\\n- resolve symlinks from client requests\\n [\\\\#824](https://github.com/scalameta/metals/pull/824)\\n ([marek1840](https://github.com/marek1840))\\n- Setting h2.bindAddress to avoid exposing open ports\\n [\\\\#821](https://github.com/scalameta/metals/pull/821)\\n ([blast-hardcheese](https://github.com/blast-hardcheese))\\n- Use Scalafmt 2.0.0 when setting the version in .scalafmt.conf\\n [\\\\#806](https://github.com/scalameta/metals/pull/806)\\n ([gabro](https://github.com/gabro))\\n- Don\'t infer build target for non-readonly files.\\n [\\\\#810](https://github.com/scalameta/metals/pull/810)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix versions in docs - wrong number of @ was used\\n [\\\\#820](https://github.com/scalameta/metals/pull/820)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update the list of supported Scala binary versions\\n [\\\\#818](https://github.com/scalameta/metals/pull/818)\\n ([cb372](https://github.com/cb372))\\n- Bump mill version [\\\\#817](https://github.com/scalameta/metals/pull/817)\\n ([satabin](https://github.com/satabin))\\n- Send treeViewDidChange only when the client supports it\\n [\\\\#816](https://github.com/scalameta/metals/pull/816)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Fix issue with missing completions after comment and newline.\\n [\\\\#814](https://github.com/scalameta/metals/pull/814)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix several issues in the tree view protocol spec\\n [\\\\#811](https://github.com/scalameta/metals/pull/811)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make test-release.sh script check that artifacts have synced to Maven\\n [\\\\#812](https://github.com/scalameta/metals/pull/812)\\n ([olafurpg](https://github.com/olafurpg))\\n- nvim version and updated info about required java versions\\n [\\\\#807](https://github.com/scalameta/metals/pull/807)\\n ([ckipp01](https://github.com/ckipp01))\\n- Lost a word in the last PR and adding it now\\n [\\\\#805](https://github.com/scalameta/metals/pull/805)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use sonatype:public in our own meta build\\n [\\\\#803](https://github.com/scalameta/metals/pull/803)\\n ([gabro](https://github.com/gabro))\\n- Fix an issue with wrong deprecation warning for 2.11 and update snapshot\\n version [\\\\#804](https://github.com/scalameta/metals/pull/804)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix version typo [\\\\#802](https://github.com/scalameta/metals/pull/802)\\n ([JesusMtnez](https://github.com/JesusMtnez))"},{"id":"/2019/06/28/thorium","metadata":{"permalink":"/metals/blog/2019/06/28/thorium","source":"@site/blog/2019-06-28-thorium.md","title":"Metals v0.7.0 - Thorium","description":"We are excited to announce the release of Metals v0.7.0 - codename \\"Thorium\\" \ud83c\udf89","date":"2019-06-28T00:00:00.000Z","formattedDate":"June 28, 2019","tags":[],"readingTime":6.65,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://github.com/olafurpg.png"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.7.0 - Thorium","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://github.com/olafurpg.png"},"prevItem":{"title":"Metals v0.7.2 - Thorium","permalink":"/metals/blog/2019/09/02/thorium"},"nextItem":{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"}},"content":"We are excited to announce the release of Metals v0.7.0 - codename \\"Thorium\\" \ud83c\udf89\\nThe release includes several new features along with bug fixes.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) and [VirtusLab](https://virtuslab.com)\\nalong with contributors from the community.\\n\\nIn this release we merged 21 PRs and closed 8 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/11?closed=1\\n\\n## TL;DR\\n\\n- New tree view in VS Code\\n- New support for Scala 2.13\\n- New support for JDK 11\\n- New improved classpath indexing performance\\n- New fallback to \\"find references\\" when calling \\"goto definition\\" on a symbol\\n definition\\n- Bug fixes for importing builds in Gradle, Mill and sbt\\n- Dropped support for deprecated Scala versions 2.11.9, 2.11.10, 2.11.11,\\n 2.12.4, 2.12.5 and 2.12.6.\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n## Tree views in VS Code\\n\\nThere is now a new \\"Metals\\" sidebar in VS Code that contains three tree views:\\n\\n- Build: overview of the build state, with buttons to manually trigger build\\n import.\\n- Compile: overview of ongoing compilations, with buttons to manually cascade\\n compilation and cancel ongoing compilation.\\n- Help and feedback: buttons to automate troubleshooting Metals issues and links\\n to relevant online resources such as GitHub, Gitter and Twitter.\\n\\n### Projects explorer\\n\\n![2019-06-26 20 28 14](https://user-images.githubusercontent.com/1408093/60208747-59589680-9859-11e9-8a09-2a6c38683975.gif)\\n\\n### Libraries explorer\\n\\nBrowse symbols that are defined in jars of library dependencies.\\n\\n![2019-06-26 20 28 51](https://user-images.githubusercontent.com/1408093/60208786-6e352a00-9859-11e9-8d55-2125c91d506f.gif)\\n\\n### Reveal active file in Metals side bar\\n\\nThere is a new command \\"Reveal active file in Metals side bar\\" that focuses the\\nlibrary and project explorer to the current open file.\\n\\n![2019-06-27 16 02 33](https://user-images.githubusercontent.com/1408093/60277613-33d19880-98fe-11e9-9aee-71c0a0c0861f.gif)\\n\\n### Compilation explorer\\n\\nGet an overview of all compilations that are ongoing in the build. Previously,\\nonly a single compilation progress was reported through the status bar.\\n\\n![2019-06-23 15 41 07](https://user-images.githubusercontent.com/1408093/60052207-f4743380-96d4-11e9-9192-f71db4100fe9.gif)\\n\\n### Help and feedback explorer\\n\\n\\"Screenshot\\n\\n## Support for Scala 2.13\\n\\nMetals now supports Scala 2.13.0! Please upgrade to Scalafmt v2.0.0 in order to\\nformat 2.13-specific syntax such as underscore separators (`1_000_000`). Note\\nthat completions may in rare situations not work perfectly for Scala 2.13, in\\nparticular:\\n\\n- whitebox string interpolator macros, we had to disable one unit test for 2.13.\\n See [#777](https://github.com/scalameta/metals/issues/777).\\n- better-monadic-for compile plugin, we had to disable one unit test for 2.13.\\n See [#777](https://github.com/scalameta/metals/issues/777).\\n\\nBig thanks to [@gabro](https://github.com/gabro) for leading this effort!\\n\\n## JDK 11 support\\n\\nMetals can now run on Java 11! To use Java 11 instead of Java 8, point the\\n`$JAVA_HOME` environment variable to a Java 11 installation.\\n\\nThe VS Code extension will continue to use Java 8 by default, update the \\"Java\\nHome\\" setting to use Java 11 instead.\\n\\n![](https://i.imgur.com/F5djfzt.png)\\n\\nTo obtain the Java 11 home on macOS, use the following command:\\n\\n```sh\\n$ /usr/libexec/java_home 11\\n/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home\\n```\\n\\nBig thanks to [@er1c](https://github.com/er1c) for pushing for the effort on\\nboth the Bloop and Metals side to support Java 11!\\n\\n## Improved classpath indexing performance\\n\\nPreviously, to support fuzzy symbol search Metals indexed classpath elements\\nusing an algorithm that required a quadratic iteration on the number of\\ncharacters in classfile names. Now, the fuzzy symbol search algorithm only\\nrequires a linear pass on the characters of a classfile name. This optimization\\nresulted in a 2x speedup for indexing a 235Mb classpath in our benchmarks.\\n\\n```diff\\n Benchmark Mode Cnt Score Error Units\\n- ClasspathIndexingBench.run ss 10 1809.068 \xb1 61.461 ms/op # JDK 8\\n+ ClasspathIndexingBench.run ss 10 919.237 \xb1 42.827 ms/op # JDK 8\\n+ ClasspathIndexingBench.run ss 10 1316.451 \xb1 22.595 ms/op # JDK 11\\n```\\n\\n## Fallback to \\"find references\\" from \\"goto definition\\"\\n\\nPreviously, nothing happened when invoking \\"goto definition\\" on the symbol\\ndefinition itself. Now, Metals falls back to \\"find references\\" in this\\nsituation.\\n\\n![Fallback](https://i.imgur.com/BT3h0FJ.gif)\\n\\nBig thanks to [@tanishiking](https://github.com/tanishiking) for contributing\\nthis new feature!\\n\\n## Dropping older Scala versions\\n\\nThe Scala versions supported by Metals are now the following.\\n\\n| Version | Old Status | New Status |\\n| :------ | ----------- | -------------------------------------------------------------- |\\n| 2.11.9 | Deprecated | Dropped |\\n| 2.11.10 | Deprecated | Dropped |\\n| 2.11.11 | Deprecated | Dropped |\\n| 2.11.12 | Supported | Deprecated, with no plans to be dropped in upcoming releases\\\\* |\\n| 2.12.4 | Deprecated | Dropped |\\n| 2.12.5 | Deprecated | Dropped |\\n| 2.12.6 | Deprecated | Dropped |\\n| 2.12.7 | Supported | Deprecated, please upgrade to 2.12.8 |\\n| 2.12.8 | Supported | Supported |\\n| 2.13.0 | Unsupported | Supported |\\n\\n\\\\* Scala 2.11 support will likely stay around for a while given the situation\\nwith Spark, Scala Native, Playframework and other libraries and frameworks that\\nhave been late to adopt 2.12. Our download numbers show that ~10% of Metals\\nusers are still on 2.11. Nevertheless, we encourage our users to upgrade to 2.12\\nto enjoy a better code editing experience thanks to multiple improvements in the\\ncompiler.\\n\\n## Fixes for auto importing builds\\n\\n- digest only `.sbt` files at workspace level for sbt projects (thanks\\n [@wojciechUrbanski](https://github.com/wojciechUrbanski)!)\\n- fix SemanticDB plugin path on Windows for Gradle workspaces\\n- update default Mill version to 0.4.1 to fix an issue with classpath not\\n containing Scala library\\n- Metals now pick up the version from `.mill-version` for the `millw` script\\n\\n## No more \\"work in progress\\"\\n\\nPreviously, the Metals website used the \\"Work-in-progress language server for\\nScala\\" tagline to reflect the experimental status of the project. Now, the\\ntagline on the website has been changed to \\"Scala language server with rich IDE\\nfeatures\\" to reflect that Metals is used by thousands of developers today for\\ntheir day-to-day coding.\\n\\n## Miscellaneous fixes\\n\\n- fix off-by-one for parameter hints when the cursor was after the closing `)`\\n parenthesis\\n- make sure we add an autoimport in the correct line in case of brackets\\n- document symbol outline no longer fails when `val _ = ()` is the only thing in\\n a block expression\\n- nested objects are now imported correctly in case of deeper nesting\\n- fix concurrent modification in text document cache (thanks\\n [@chikei](https://github.com/chikei)!)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release, it\'s amazing we had a\\ncouple of new contributors to Metals!\\n\\n```\\n$ git shortlog -sn --no-merges v0.6.1..v0.7.0\\nGabriele Petronella\\n\xd3lafur P\xe1ll Geirsson\\nTomasz Godzik\\nEric Peters\\ntanishiking\\nRuben Berenguel\\nTzeKei Lee\\nWojciech Urbanski\\n```\\n\\n## Merged PRs\\n\\n## [v0.7.0](https://github.com/scalameta/metals/tree/v0.7.0) (2019-06-28)\\n\\n[Full Changelog](https://github.com/scalameta/metals/compare/v0.6.1...v0.7.0)\\n\\n**Merged pull requests:**\\n\\n- Upgrade to Scalameta v4.2.0\\n [\\\\#799](https://github.com/scalameta/metals/pull/799)\\n ([olafurpg](https://github.com/olafurpg))\\n- Introduce Tree View Protocol\\n [\\\\#797](https://github.com/scalameta/metals/pull/797)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add a benchmark for classpath indexing performance.\\n [\\\\#795](https://github.com/scalameta/metals/pull/795)\\n ([olafurpg](https://github.com/olafurpg))\\n- Migrate Java converters to 2.13\\n [\\\\#794](https://github.com/scalameta/metals/pull/794)\\n ([gabro](https://github.com/gabro))\\n- Remove dot as a commit character\\n [\\\\#793](https://github.com/scalameta/metals/pull/793)\\n ([tgodzik](https://github.com/tgodzik))\\n- Make classpath indexing linear instead of quadratic.\\n [\\\\#792](https://github.com/scalameta/metals/pull/792)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use 2.13 dialect for syntax errors\\n [\\\\#789](https://github.com/scalameta/metals/pull/789)\\n ([gabro](https://github.com/gabro))\\n- Fix off-by-one for parameter hints.\\n [\\\\#786](https://github.com/scalameta/metals/pull/786)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make sure we add an autoimport in the correct line\\n [\\\\#785](https://github.com/scalameta/metals/pull/785)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix typo [\\\\#784](https://github.com/scalameta/metals/pull/784)\\n ([tanishiking](https://github.com/tanishiking))\\n- Remove Work-in-progress from the tagline\\n [\\\\#782](https://github.com/scalameta/metals/pull/782)\\n ([gabro](https://github.com/gabro))\\n- Fix JdkSources not to ignore JAVA_HOME environment variable\\n [\\\\#781](https://github.com/scalameta/metals/pull/781)\\n ([tanishiking](https://github.com/tanishiking))\\n- Fix importing nested objects\\n [\\\\#778](https://github.com/scalameta/metals/pull/778)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix an issue when `val \\\\_ = \\\\(\\\\)` is the only thing in the block\\n [\\\\#776](https://github.com/scalameta/metals/pull/776)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fallback to \\"show usages\\" from \\"Goto definition\\" if the symbol represents a\\n definition itself [\\\\#775](https://github.com/scalameta/metals/pull/775)\\n ([tanishiking](https://github.com/tanishiking))\\n- Move slow tests to separate directories and run them separately on Travis\\n [\\\\#773](https://github.com/scalameta/metals/pull/773)\\n ([tgodzik](https://github.com/tgodzik))\\n- Digest only sbt files at workspace level\\n [\\\\#772](https://github.com/scalameta/metals/pull/772)\\n ([wojciechUrbanski](https://github.com/wojciechUrbanski))\\n- Fix wrong windows SemanticDB file path\\n [\\\\#771](https://github.com/scalameta/metals/pull/771)\\n ([tgodzik](https://github.com/tgodzik))\\n- Fix concurrent modification\\n [\\\\#766](https://github.com/scalameta/metals/pull/766)\\n ([chikei](https://github.com/chikei))\\n- Factor out a ClasspathLoader.getURLs\\\\(classLoader\\\\) helper for java9+\\n compatability, update usages\\n [\\\\#765](https://github.com/scalameta/metals/pull/765)\\n ([er1c](https://github.com/er1c))\\n- Include mill version from .mill-version file\\n [\\\\#764](https://github.com/scalameta/metals/pull/764)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add 2.13 support and drop deprecated versions\\n [\\\\#763](https://github.com/scalameta/metals/pull/763)\\n ([gabro](https://github.com/gabro))\\n- Clarifiyng a setting [\\\\#759](https://github.com/scalameta/metals/pull/759)\\n ([rberenguel](https://github.com/rberenguel))\\n- Fix very small typo in docs\\n [\\\\#758](https://github.com/scalameta/metals/pull/758)\\n ([rberenguel](https://github.com/rberenguel))\\n- Fix completions to compilation in blog\\n [\\\\#757](https://github.com/scalameta/metals/pull/757)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update VS Code docs [\\\\#756](https://github.com/scalameta/metals/pull/756)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add release notes for Metals Radium release\\n [\\\\#752](https://github.com/scalameta/metals/pull/752)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/06/11/radium","metadata":{"permalink":"/metals/blog/2019/06/11/radium","source":"@site/blog/2019-06-11-radium.md","title":"Metals v0.6.1 - Radium","description":"We are excited to announce the release of Metals v0.6.1, codename \\"Radium\\" \ud83c\udf89","date":"2019-06-11T00:00:00.000Z","formattedDate":"June 11, 2019","tags":[],"readingTime":3.915,"hasTruncateMarker":false,"authors":[{"name":"Tomasz Godzik","url":"https://twitter.com/tomekgodzik","imageURL":"https://avatars1.githubusercontent.com/u/3807253?s=460&v=4"}],"frontMatter":{"author":"Tomasz Godzik","title":"Metals v0.6.1 - Radium","authorURL":"https://twitter.com/tomekgodzik","authorImageURL":"https://avatars1.githubusercontent.com/u/3807253?s=460&v=4"},"prevItem":{"title":"Metals v0.7.0 - Thorium","permalink":"/metals/blog/2019/06/28/thorium"},"nextItem":{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"}},"content":"We are excited to announce the release of Metals v0.6.1, codename \\"Radium\\" \ud83c\udf89\\nThe release mostly focused on adding support for the build tools Gradle, Maven\\nand Mill.\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this release we merged 24 PRs and closed 6 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/7?closed=1.\\n\\n## TL;DR\\n\\n- automatic \\"import build\\" for Gradle, Maven and Mill\\n- upgraded to Bloop v1.3.2\\n- better handling of requests that access the presentation compiler\\n- code completions on keywords\\n- VS Code doesn\'t compile projects until it is focused\\n- Metals is now a default server in the Sublime LSP package\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n## Bloop upgrade\\n\\nMetals now depends on Bloop v1.3.2 instead of v1.2.5. The v1.3 release of Bloop\\nhas a ton of nice improvements that benefit Metals users. For full details, see\\nthe\\n[Bloop v1.3.0 release notes](https://github.com/scalacenter/bloop/releases/tag/v1.3.0).\\n\\n## Automatic \\"import build\\" for Gradle, Maven and Mill\\n\\nNow, it\'s possible to use Metals with the build tools Gradle, Maven and Mill!\\nImporting a build with Gradle, Maven and Mill now works the same way it works\\nfor sbt.\\n\\nFor more details, see the corresponding documentation for each build tool:\\n\\n- [Overview](http://scalameta.org/metals/docs/build-tools/overview.html)\\n- [Gradle](http://scalameta.org/metals/docs/build-tools/gradle.html)\\n- [Maven](http://scalameta.org/metals/docs/build-tools/maven.html)\\n- [Mill](http://scalameta.org/metals/docs/build-tools/mill.html)\\n\\n## More reliable shutdown\\n\\nAn issue where the Metals process could continue running even after closing the\\neditor has now been fixed.\\n\\n## Completions freeze less\\n\\nAn issue where Metals could get stuck in an infinite loop using 100% CPU while\\nresponding to completions has now been fixed.\\n\\n## Keyword completions\\n\\nPreviously, Metals did not complete keywords like `import`, `new`, `lazy val` or\\n`trait`. Language keywords are now included in the auto-completions in most\\ncases.\\n\\n```scala\\nobject Main {\\n // Before\\n impo\\n // After\\n import\\n}\\n```\\n\\nKeywords are suggested based on the context (e.g. you won\'t see throw suggested\\nif the cursor is not inside a declaration)\\n\\nThe only keywords that are not completed are: `extends`, `finally`, `with`,\\n`forSome`, `catch` and `finally`.\\n\\n## VS Code doesn\'t compile projects until it is focused\\n\\nPreviously, Metals would trigger compilation in the background even if the VS\\nCode window was not focused. For example, switching git branches in a separate\\nterminal window would still trigger compilation in Metals. Now, Metals waits\\nuntil the VS Code window is focused to trigger compilation.\\n\\nThis feature is implemented as a LSP extension and is currently only supported\\nby VS Code. For details on how to implement this extension for another editor,\\nsee the\\n[documentation on integrating a new text editor](http://scalameta.org/metals/docs/integrations/new-editor#metals-windowstatedidchange).\\n\\n## Metals is now a default server in the Sublime LSP package\\n\\nMetals is now a default server for Scala source files in the LSP package, see\\n[tomv564/LSP#571](https://github.com/tomv564/LSP/pull/571). This greatly\\nsimplifies the installation steps for Sublime Text users.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.5.1..v0.6.1\\n\xd3lafur P\xe1ll Geirsson\\nAdam Gajek\\nTomasz Godzik\\nGabriele Petronella\\nAyoub Benali\\nCody Allen\\nEvgeny Kurnevsky\\nJeffrey Lau\\nMarek \u017barnowski\\nMarkus Hauck\\nGerman Greiner\\n```\\n\\n## Merged PRs\\n\\n- Avoid inifinite loop when shortening types\\n [\\\\#751](https://github.com/scalameta/metals/pull/751)\\n ([olafurpg](https://github.com/olafurpg))\\n- Move releasing info to the website\\n [\\\\#748](https://github.com/scalameta/metals/pull/748)\\n ([gabro](https://github.com/gabro))\\n- Update bloop to 1.3.2 [\\\\#747](https://github.com/scalameta/metals/pull/747)\\n ([tgodzik](https://github.com/tgodzik))\\n- Split build tool and executable name to show properly in output\\n [\\\\#746](https://github.com/scalameta/metals/pull/746)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update bloop to 1.3.0 and BSP to 2.0.0-M4\\n [\\\\#745](https://github.com/scalameta/metals/pull/745)\\n ([tgodzik](https://github.com/tgodzik))\\n- Add better hint in the doctor for Maven workspaces\\n [\\\\#744](https://github.com/scalameta/metals/pull/744)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update emacs docs as scala is supported by lsp-mode directly now\\n [\\\\#741](https://github.com/scalameta/metals/pull/741)\\n ([kurnevsky](https://github.com/kurnevsky))\\n- Remove Scalafix from pre-push git hook.\\n [\\\\#740](https://github.com/scalameta/metals/pull/740)\\n ([olafurpg](https://github.com/olafurpg))\\n- Setup git hooks for scalafmt and scalafix.\\n [\\\\#738](https://github.com/scalameta/metals/pull/738)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add automatic Mill import to metals\\n [\\\\#737](https://github.com/scalameta/metals/pull/737)\\n ([tgodzik](https://github.com/tgodzik))\\n- Improve handling of requests that access the presentation compiler.\\n [\\\\#736](https://github.com/scalameta/metals/pull/736)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enforce scala version for embedded bloop server\\n [\\\\#735](https://github.com/scalameta/metals/pull/735)\\n ([tgodzik](https://github.com/tgodzik))\\n- Ensure build server shuts down before starting new build connection.\\n [\\\\#731](https://github.com/scalameta/metals/pull/731)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix blogpost typo [\\\\#730](https://github.com/scalameta/metals/pull/730)\\n ([zoonfafer](https://github.com/zoonfafer))\\n- Miscellaneous polish fixes\\n [\\\\#729](https://github.com/scalameta/metals/pull/729)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/codeLens to run main function\\n [\\\\#728](https://github.com/scalameta/metals/pull/728)\\n ([marek1840](https://github.com/marek1840))\\n- Fix newlines in process output.\\n [\\\\#727](https://github.com/scalameta/metals/pull/727)\\n ([tgodzik](https://github.com/tgodzik))\\n- Update sublime doc [\\\\#726](https://github.com/scalameta/metals/pull/726)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Fix transitive scala library dependency in Gradle builds.\\n [\\\\#725](https://github.com/scalameta/metals/pull/725)\\n ([tgodzik](https://github.com/tgodzik))\\n- Adds maven integration to metals\\n [\\\\#722](https://github.com/scalameta/metals/pull/722)\\n ([tgodzik](https://github.com/tgodzik))\\n- Use CocRequestAsync in Vim docs\\n [\\\\#717](https://github.com/scalameta/metals/pull/717)\\n ([ceedubs](https://github.com/ceedubs))\\n- Set timeout for shutdown procedure, fixes \\\\#715.\\n [\\\\#716](https://github.com/scalameta/metals/pull/716)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add keyword completion [\\\\#712](https://github.com/scalameta/metals/pull/712)\\n ([markus1189](https://github.com/markus1189))\\n- Make bloop versions customizable via server properties.\\n [\\\\#710](https://github.com/scalameta/metals/pull/710)\\n ([olafurpg](https://github.com/olafurpg))\\n- Pause compile-on-save while the editor window is not focused\\n [\\\\#709](https://github.com/scalameta/metals/pull/709)\\n ([agajek](https://github.com/agajek))\\n- Add gradle support to imports in metals and refactor build tool support.\\n [\\\\#694](https://github.com/scalameta/metals/pull/694)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/04/26/mercury","metadata":{"permalink":"/metals/blog/2019/04/26/mercury","source":"@site/blog/2019-04-26-mercury.md","title":"Metals v0.5.1 - Mercury","description":"This release introduces minor improvements and bug fixes with highlights","date":"2019-04-26T00:00:00.000Z","formattedDate":"April 26, 2019","tags":[],"readingTime":3.29,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.5.1 - Mercury","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.6.1 - Radium","permalink":"/metals/blog/2019/06/11/radium"},"nextItem":{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"}},"content":"This release introduces minor improvements and bug fixes with highlights\\nincluding:\\n\\n- auto-imports are inserted at the toplevel instead of locally\\n- document symbol lists inner methods and anonymous classes\\n- the recommended Vim client is now coc.nvim\\n- diagnostics are cleared for deleted files\\n- fuzzy symbol search no longer returns results for deleted files\\n- find all references now handles synthetic `update` calls\\n- deprecate older Scala versions\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this release we merged 15 PRs and closed 7 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/8?closed=1.\\n\\n## Automatic imports are placed globally instead of locally\\n\\nPreviously, auto-imports were placed locally like this:\\n\\n```scala\\nobject Main {\\n import scala.concurrent.Future // <- automatically added by Metals\\n val future = Future@@\\n}\\n```\\n\\nNow, the import is inserted at the toplevel instead\\n\\n```scala\\nimport scala.concurrent.Future // <- automatically added by Metals\\n\\nobject Main {\\n val future = Future@@\\n}\\n```\\n\\n## Document symbols now shows inner methods and anonymous classes\\n\\n**Before**:\\n\\n![image](https://user-images.githubusercontent.com/691940/56455884-dc92d300-6364-11e9-837e-c8aedd13e78d.png)\\n\\n**After**:\\n\\n![image](https://user-images.githubusercontent.com/691940/56455880-cab13000-6364-11e9-910a-4b55854df147.png)\\n\\n## Diagnostics gracefully handle deleted files\\n\\nPreviously, deleting a file with compile errors would result in the stale\\ndiagnostics to stay until you restarted the Metals server. Now, diagnostics are\\ncleared when a source file is deleted.\\n\\n## Fuzzy symbol search gracefully handles deleted files\\n\\nPreviously, fuzzy searching for a symbol could return results from deleted\\nfiles. Now, fuzzy symbol search only shows results from files that exist on\\ndisk.\\n\\n## Find all references handles synthetic `update` calls\\n\\nPreviously, find all references did not catch references where an `update()`\\nmethod call was synthesized.\\n\\n```scala\\nval cache = mutable.Map.empty[String, String]\\ncache(\\"a\\") = \\"b\\" // before: referenced `Map.update()` instead of `cache`\\n```\\n\\nNow, the reference to `cache` in `cache(\\"a\\") = \\"b\\"` is indexed as well as the\\nsynthetic call to the `Map.update()` method.\\n\\n## The recommended Vim client is now coc.nvim\\n\\nPreviously, the\\n[vim installation instructions](https://scalameta.org/metals/docs/editors/vim.html)\\nrecommended the vim-lsc client. Now, the installation instructions recommend\\ncoc.vim since it supports more functionality of the Language Server Protocol. If\\nyou use Vim, we recommend trying out coc.vim to enjoy more advanced features\\nlike completions with auto-imports.\\n\\n## Deprecate older Scala versions\\n\\nMetals works with Scala 2.11 and Scala 2.12. Starting from the next release,\\nMetals will drop support for the older patch versions of those series, and it\\nwill exclusively support these version:\\n\\n- 2.11.12\\n- 2.12.7\\n- 2.12.8\\n\\nStarting from this release, we will show a warning at startup if you\'re using an\\noutdated Scala version, prompting you to upgrade your project to the latest\\nversion.\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release!\\n\\n```\\n$ git shortlog -sn --no-merges v0.5.0..v0.5.1\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nGabriel Volpe\\nJesusMtnez\\nEric Peters\\nArnout Engelen\\nRobin Green\\nTomasz Godzik\\nDavid Strawn\\n```\\n\\n## Merged PRs\\n\\n- Upgrade to latest Scalameta.\\n [\\\\#702](https://github.com/scalameta/metals/pull/702)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add question template [\\\\#701](https://github.com/scalameta/metals/pull/701)\\n ([gabro](https://github.com/gabro))\\n- Don\'t return workspace/symbol results for deleted files.\\n [\\\\#695](https://github.com/scalameta/metals/pull/695)\\n ([olafurpg](https://github.com/olafurpg))\\n- Insert global imports instead of local imports.\\n [\\\\#692](https://github.com/scalameta/metals/pull/692)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix a dead link to Bloop site\\n [\\\\#691](https://github.com/scalameta/metals/pull/691)\\n ([gabro](https://github.com/gabro))\\n- Update a couple .lines to .linesIterator for java11\\n [\\\\#688](https://github.com/scalameta/metals/pull/688)\\n ([er1c](https://github.com/er1c))\\n- Fix typo [\\\\#687](https://github.com/scalameta/metals/pull/687)\\n ([greenrd](https://github.com/greenrd))\\n- Handle document symbols for nested declarations\\n [\\\\#686](https://github.com/scalameta/metals/pull/686)\\n ([gabro](https://github.com/gabro))\\n- Update Emacs docs [\\\\#681](https://github.com/scalameta/metals/pull/681)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Add \\"Coming from IntelliJ\\" section to VS Code docs.\\n [\\\\#678](https://github.com/scalameta/metals/pull/678)\\n ([olafurpg](https://github.com/olafurpg))\\n- Clear diagnostics on build import, fixes \\\\#644.\\n [\\\\#677](https://github.com/scalameta/metals/pull/677)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable flaky test on Appveyor.\\n [\\\\#676](https://github.com/scalameta/metals/pull/676)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update stable version in issue template\\n [\\\\#671](https://github.com/scalameta/metals/pull/671)\\n ([gabro](https://github.com/gabro))\\n- Documenting coc.nvim as the recommended LSP client for Vim\\n [\\\\#665](https://github.com/scalameta/metals/pull/665)\\n ([gvolpe](https://github.com/gvolpe))\\n- Remove Deprecated Usage Of `java.util.Date` API\\n [\\\\#663](https://github.com/scalameta/metals/pull/663)\\n ([isomarcte](https://github.com/isomarcte))\\n- Link to vscode marketplace\\n [\\\\#661](https://github.com/scalameta/metals/pull/661)\\n ([raboof](https://github.com/raboof))\\n- Use correct GIF for signature help on landing page.\\n [\\\\#660](https://github.com/scalameta/metals/pull/660)\\n ([olafurpg](https://github.com/olafurpg))\\n- Document new features and write release announcement.\\n [\\\\#655](https://github.com/scalameta/metals/pull/655)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make detail view in override not show unicode character.\\n [\\\\#654](https://github.com/scalameta/metals/pull/654)\\n ([tgodzik](https://github.com/tgodzik))"},{"id":"/2019/04/12/mercury","metadata":{"permalink":"/metals/blog/2019/04/12/mercury","source":"@site/blog/2019-04-12-mercury.md","title":"Metals v0.5.0 - Mercury","description":"We are excited to announce the release of Metals v0.5, codename \\"Mercury\\" \ud83c\udf89","date":"2019-04-12T00:00:00.000Z","formattedDate":"April 12, 2019","tags":[],"readingTime":6.49,"hasTruncateMarker":false,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.5.0 - Mercury","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.5.1 - Mercury","permalink":"/metals/blog/2019/04/26/mercury"},"nextItem":{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"}},"content":"We are excited to announce the release of Metals v0.5, codename \\"Mercury\\" \ud83c\udf89\\nThis release introduces new features, performance improvements and bug fixes\\nwith highlights including:\\n\\n- code completions\\n- parameter hints\\n- show type at point\\n- code folding\\n- document highlight\\n\\nMetals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\nIn this milestone we merged 76 PRs and closed 26 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/4?closed=1.\\n\\n## Code completions\\n\\nIt\'s now possible to use code completions to explore APIs, implement interfaces,\\ngenerate exhaustive pattern matches and more.\\n\\n![2019-04-12 14 19 39](https://user-images.githubusercontent.com/1408093/56036958-725bac00-5d2e-11e9-9cf7-46249125494a.gif)\\n\\n- **Auto-import**: symbols that are not in scope are automatically imported\\n locally. Imports still need to be organized manually, we are exploring ways to\\n automate this workflow in the future.\\n- **Override def**: implement methods from the super class.\\n- **Exhaustive match**: generate an exhaustive pattern match for sealed types.\\n- **String interpolator**: automatically convert string literals into string\\n interpolators.\\n- **Filename**: complete classnames based on the enclosing file.\\n- **Documentation**: read the docstring for method symbols by pressing\\n ctrl+space in VS Code.\\n\\n## Hover (aka. type at point)\\n\\nIt\'s now possible to see the expression type and symbol signature under the\\ncursor.\\n\\n![](https://i.imgur.com/2MfQvsM.gif)\\n\\n- **Expression type**: shows the non-generic type of the highlighted expression.\\n- **Symbol signature**: shows the generic signature of symbol under the cursor\\n along with its docstring, if available.\\n\\n## Signature help (aka. parameter hints)\\n\\nIt\'s now possible to view a method signature and overloads as you fill in\\narguments.\\n\\n![](https://i.imgur.com/DAWIrHu.gif)\\n\\n## Code folding\\n\\nIt\'s now possible to fold ranges such as large expressions, import groups and\\ncomments.\\n\\n![](https://camo.githubusercontent.com/3fdd7ae28907ac61c0a1ac5fdc07d085245957aa/68747470733a2f2f692e696d6775722e636f6d2f667149554a54472e676966)\\n\\nBig thanks to [@marek1840](https://github.com/marek1840) for contributing this\\nfeature!\\n\\n## Document highlight\\n\\nIt\'s now possible to highlight references to the same symbol in the open file.\\n\\n![](https://i.imgur.com/0uhc9P5.gif)\\n\\nBig thanks to [@tgodzik](https://github.com/tgodzik) for contributing this\\nfeature!\\n\\n## Faster and more relevant fuzzy symbol search\\n\\nPreviously, fuzzy symbol search (`workspace/symbol` in LSP) always returned\\nresults from both the workspace and library dependencies. Now, fuzzy symbol\\nsearch returns only results from the workspace unless the query contains a\\nsemicolon character `;`. For example:\\n\\n- query \\"Future\\": workspace only, with fallback to library dependencies if\\n workspace contains 0 results\\n- queries \\"Future;\\" or \\";Future\\" or \\"Fut;ure\\": workspace + library dependencies.\\n\\n![](https://i.imgur.com/w5yrK1w.gif)\\n\\nThis change improves the quality for the search results since most often you\\nwant to navigate to symbols defined in the workspace. A nice side-effect is that\\nworkspace-only searches are faster because we avoid redundant work by not\\nlooking at library dependencies.\\n\\nIn addition, this release introduces a new in-memory index for workspace-only\\nsymbol queries resulting in even better performance compared to the last\\nrelease.\\n\\n## Goto definition for in-memory edits\\n\\nPreviously, goto definition worked only for identifiers that had been saved and\\nsuccessfully compiled in the build tool. Now, you can use goto definition for\\nsymbols that you just typed even if the source file hasn\'t been saved or\\ncontains type errors.\\n\\n![](https://i.imgur.com/63PYPhX.gif)\\n\\n## Standalone Scala files outside a build tool\\n\\nPreviously, semantic features like goto definition worked only for sources that\\nbelong to a build project. Now, Metals provides completions, parameter hints,\\nhover and definition for local symbols in standalone Scala files. The classpath\\nfor standalone Scala files includes the JDK and the Scala standard library so\\nfeatures like completion will not understand symbols from external library\\ndependencies.\\n\\n**Known limitation**: only syntax errors are published for standalone Scala\\nfiles, the file must belong to a build in order to see type errors.\\n\\n## New collaboration with VirtusLab\\n\\nAs part of a new collaboration between [VirtusLab](https://virtuslab.com/) and\\nthe Scala Center, [Marek \u017barnowski (@marek1840)](https://github.com/marek1840)\\nand [Tomasz Godzik (@tgodzik)](https://github.com/tgodzik) will be contributing\\nto Metals development for the coming months. They have already contributed\\nseveral impressive pull requests:\\n\\n- `textDocument/foldingRange`\\n [(#632)](https://github.com/scalameta/metals/pull/632): code folding that\\n understands Scala syntax.\\n- `textDocument/documentHighlight`\\n [(#621)](https://github.com/scalameta/metals/pull/621): highlight occurrences\\n of a symbol in the current file.\\n- `textDocument/completion`\\n [(#640)](https://github.com/scalameta/metals/pull/640): override def\\n completions from without the need to type \\"override def \\".\\n\\nIt is our pleasure to welcome them to the team and we look forward to working\\ntogether with them to improve the Scala editing experience :)\\n\\n## Contributors\\n\\nBig thanks to everybody who contributed to this release! In particular, big\\nthanks to [@jvican](https://github.com/jvican/) and\\n[@gabro](https://github.com/gabro/) for invaluable feedback both online and\\noffline.\\n\\n```\\n$ git shortlog -sn --no-merges v0.4.4..v0.5.0\\n\xd3lafur P\xe1ll Geirsson\\nMarek \u017barnowski\\nJohan Muedsam\\nJesusMtnez\\nTomasz Godzik\\nTim Nieradzik\\nAyoub Benali\\nEric Peters\\nAlexey Alekhin\\nkeiSunagawa\\n```\\n\\n## Merged PRs\\n\\n- Implement goto definition fallback with the presentation compiler.\\n [\\\\#645](https://github.com/scalameta/metals/pull/645)\\n ([olafurpg](https://github.com/olafurpg))\\n- Generate exhaustive pattern match for sealed types.\\n [\\\\#643](https://github.com/scalameta/metals/pull/643)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve quality and performance of workspace/symbol, fixes \\\\#639.\\n [\\\\#642](https://github.com/scalameta/metals/pull/642)\\n ([olafurpg](https://github.com/olafurpg))\\n- Enable workspace query to match package object\\n [\\\\#641](https://github.com/scalameta/metals/pull/641)\\n ([mudsam](https://github.com/mudsam))\\n- Make completions work on overr\\\\ and def\\\\\\n [\\\\#640](https://github.com/scalameta/metals/pull/640)\\n ([tgodzik](https://github.com/tgodzik))\\n- Give CompletionPosition finer control over sorting, fixes \\\\#619.\\n [\\\\#638](https://github.com/scalameta/metals/pull/638)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several UX improvements [\\\\#637](https://github.com/scalameta/metals/pull/637)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use fallback presentation compiler for missing build target.\\n [\\\\#634](https://github.com/scalameta/metals/pull/634)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix six bugs [\\\\#633](https://github.com/scalameta/metals/pull/633)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/foldingRange\\n [\\\\#632](https://github.com/scalameta/metals/pull/632)\\n ([marek1840](https://github.com/marek1840))\\n- Provide fuzzier type member matching and more polished sorting.\\n [\\\\#629](https://github.com/scalameta/metals/pull/629)\\n ([olafurpg](https://github.com/olafurpg))\\n- Sort symbols defined in the current file to the top, fixes \\\\#618.\\n [\\\\#628](https://github.com/scalameta/metals/pull/628)\\n ([olafurpg](https://github.com/olafurpg))\\n- Render @see as links. Improve inline link handling and update test cases.\\n [\\\\#627](https://github.com/scalameta/metals/pull/627)\\n ([mudsam](https://github.com/mudsam))\\n- Disable macro-paradise compiler plugin, fixes \\\\#622.\\n [\\\\#625](https://github.com/scalameta/metals/pull/625)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve completion snippets, fixes \\\\#610.\\n [\\\\#623](https://github.com/scalameta/metals/pull/623)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/documentHighlight\\n [\\\\#621](https://github.com/scalameta/metals/pull/621)\\n ([tgodzik](https://github.com/tgodzik))\\n- Handle exceptions when computing completion position.\\n [\\\\#616](https://github.com/scalameta/metals/pull/616)\\n ([olafurpg](https://github.com/olafurpg))\\n- Don\'t eagerly load presentation compiler during tests.\\n [\\\\#614](https://github.com/scalameta/metals/pull/614)\\n ([olafurpg](https://github.com/olafurpg))\\n- Eagerly load presentation compiler for open buffers.\\n [\\\\#605](https://github.com/scalameta/metals/pull/605)\\n ([olafurpg](https://github.com/olafurpg))\\n- Eagerly load Scalafmt during initialized\\n [\\\\#604](https://github.com/scalameta/metals/pull/604)\\n ([olafurpg](https://github.com/olafurpg))\\n- Complete filename when defining toplevel class/trait/object\\n [\\\\#603](https://github.com/scalameta/metals/pull/603)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove signature help fallback in hover.\\n [\\\\#602](https://github.com/scalameta/metals/pull/602)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#599, don\'t insert import above generated parameter accessors\\n [\\\\#600](https://github.com/scalameta/metals/pull/600)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several small fixes [\\\\#597](https://github.com/scalameta/metals/pull/597)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support navigation for library dependencies in Scala versions.\\n [\\\\#596](https://github.com/scalameta/metals/pull/596)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement hover \\\\(aka. type at point\\\\).\\n [\\\\#595](https://github.com/scalameta/metals/pull/595)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix auto-import position around definition annotations, fixes \\\\#593\\n [\\\\#594](https://github.com/scalameta/metals/pull/594)\\n ([olafurpg](https://github.com/olafurpg))\\n- Provide completions on `case` for valid subclasses.\\n [\\\\#592](https://github.com/scalameta/metals/pull/592)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polish snippets when completing with existing parentheses and braces\\n [\\\\#590](https://github.com/scalameta/metals/pull/590)\\n ([olafurpg](https://github.com/olafurpg))\\n- Handle generic unapply signatures in signature help.\\n [\\\\#589](https://github.com/scalameta/metals/pull/589)\\n ([olafurpg](https://github.com/olafurpg))\\n- Explicitly set filter text for all completions.\\n [\\\\#588](https://github.com/scalameta/metals/pull/588)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add server property config to disable features.\\n [\\\\#587](https://github.com/scalameta/metals/pull/587)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add support for non-Lightbend compilers\\n [\\\\#586](https://github.com/scalameta/metals/pull/586)\\n ([tindzk](https://github.com/tindzk))\\n- Fix signature help bug for tuple patterns.\\n [\\\\#585](https://github.com/scalameta/metals/pull/585)\\n ([olafurpg](https://github.com/olafurpg))\\n- Escape keyword identifier in packag prefixes.\\n [\\\\#584](https://github.com/scalameta/metals/pull/584)\\n ([olafurpg](https://github.com/olafurpg))\\n- Filter out ensuring and -\\\\> extension methods from Predef.\\n [\\\\#583](https://github.com/scalameta/metals/pull/583)\\n ([olafurpg](https://github.com/olafurpg))\\n- Include method signature in completion item label.\\n [\\\\#581](https://github.com/scalameta/metals/pull/581)\\n ([olafurpg](https://github.com/olafurpg))\\n- Two completion improvements\\n [\\\\#579](https://github.com/scalameta/metals/pull/579)\\n ([olafurpg](https://github.com/olafurpg))\\n- Insert local import when completing workspace symbol.\\n [\\\\#578](https://github.com/scalameta/metals/pull/578)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Sublime Text doc regarding Goto symbol in workspace\\n [\\\\#577](https://github.com/scalameta/metals/pull/577)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Include `case` completion when writing partial function on tuples.\\n [\\\\#576](https://github.com/scalameta/metals/pull/576)\\n ([olafurpg](https://github.com/olafurpg))\\n- Restart the presentation compile more aggressively.\\n [\\\\#575](https://github.com/scalameta/metals/pull/575)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#573, provide unique filter text for each interpolator completion item\\n [\\\\#574](https://github.com/scalameta/metals/pull/574)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix \\\\#569, remove completion items with `\\\\_CURSOR\\\\_` name.\\n [\\\\#572](https://github.com/scalameta/metals/pull/572)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement `override def` completions.\\n [\\\\#570](https://github.com/scalameta/metals/pull/570)\\n ([olafurpg](https://github.com/olafurpg))\\n- Make bloop server startup more robust, reuse sockets wherever possible.\\n [\\\\#566](https://github.com/scalameta/metals/pull/566)\\n ([mudsam](https://github.com/mudsam))\\n- Implement type member selection in string interpolators.\\n [\\\\#563](https://github.com/scalameta/metals/pull/563)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Atom info [\\\\#561](https://github.com/scalameta/metals/pull/561)\\n ([laughedelic](https://github.com/laughedelic))\\n- Improve string interpolator completions\\n [\\\\#560](https://github.com/scalameta/metals/pull/560)\\n ([olafurpg](https://github.com/olafurpg))\\n- Remove root package from completion results.\\n [\\\\#559](https://github.com/scalameta/metals/pull/559)\\n ([olafurpg](https://github.com/olafurpg))\\n- Resolve mtags from Sonatype Snapshots, fixes \\\\#554.\\n [\\\\#558](https://github.com/scalameta/metals/pull/558)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable `\\\\(` as commit character.\\n [\\\\#557](https://github.com/scalameta/metals/pull/557)\\n ([olafurpg](https://github.com/olafurpg))\\n- Wrap identifiers in backticks when necessary.\\n [\\\\#556](https://github.com/scalameta/metals/pull/556)\\n ([olafurpg](https://github.com/olafurpg))\\n- Trigger parameter hints command after completion, if supported.\\n [\\\\#552](https://github.com/scalameta/metals/pull/552)\\n ([olafurpg](https://github.com/olafurpg))\\n- Cross-publish mtags for all supported Scala versions.\\n [\\\\#541](https://github.com/scalameta/metals/pull/541)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement completions and signature help.\\n [\\\\#527](https://github.com/scalameta/metals/pull/527)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/02/01/tin","metadata":{"permalink":"/metals/blog/2019/02/01/tin","source":"@site/blog/2019-02-01-tin.md","title":"Metals v0.4.4 - Tin","description":"Metals is a language server for Scala that works with VS Code, Atom, Vim,","date":"2019-02-01T00:00:00.000Z","formattedDate":"February 1, 2019","tags":[],"readingTime":1.965,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.4.4 - Tin","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.5.0 - Mercury","permalink":"/metals/blog/2019/04/12/mercury"},"nextItem":{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"}},"content":"Metals is a language server for Scala that works with VS Code, Atom, Vim,\\nSublime Text and Emacs. Metals is developed at the\\n[Scala Center](https://scala.epfl.ch/) along with contributors from the\\ncommunity.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nIn this milestone we merged 5 PRs, full details:\\nhttps://github.com/scalameta/metals/milestone/5?closed=1.\\n\\n### Improved code navigation\\n\\nSeveral \\"goto definition\\" and \\"find references\\" bugs have been fixed in this\\nrelease. In particular, code navigation should work more reliably now for the\\nfollowing language features\\n\\n- for comprehensions with multiple assignments and guards\\n- eta-expanded methods and functions passed as values\\n- val patterns like `val (a, b) = ...`\\n- named arguments in `apply` methods\\n- repeated parameter types (varargs)\\n\\n### Empty source directories are no longer created\\n\\nPreviously, Metals created all source directories like `src/main/java` and\\n`src/main/scala-2.12` even if they were unused. Now, Metals still creates these\\ndirectories but removes them again after the file watcher has started. Big\\nthanks to first-time contributor [@mudsam](https://github.com/mudsam) for\\nimplementing this fix!\\n\\n### Multiple workspace folders\\n\\nMetals now looks for `.scalafmt.conf` in all workspace folders instead of only\\nthe workspace root.\\n\\n### Avoid `metals.sbt` compile errors on old sbt versions\\n\\nThe generated `metals.sbt` file in `~/.sbt/0.13/plugins/metals.sbt` now compiles\\non all versions of sbt 0.13.x even if Metals itself still only works with sbt\\n0.13.17+.\\n\\n## Visual Studio Code\\n\\nThe Metals extension was installed over 1000 times over the past week!\\n\\n### `JAVA_OPTS`\\n\\nThe Metals extension now respects the `JAVA_OPTS` environment variable the same\\nit does the `.jvmopts` file. For example, set `JAVA_OPTS` to\\n`-Dhttps.proxyHost=\u2026 -Dhttps.proxyPort=\u2026` to configure HTTP proxies. It\'s\\nrecommended to start VS Code with the `code` binary from the terminal to ensure\\nenvironment variables propagate correctly.\\n\\n## Sublime Text\\n\\nThere\'s a WIP pull request\\n[tom654/LSP#501](https://github.com/tomv564/LSP/pull/501) adding support for\\nfuzzy symbol search (`workspace/symbol`). Please upvote with \ud83d\udc4d if you\'d like to\\nuse this feature!\\n\\n## Emacs\\n\\nThere is a new Gitter channel\\n[rossabaker/lsp-scala](https://gitter.im/rossabaker/lsp-scala) for Emacs and\\nMetals users.\\n\\nThe `lsp-scala` package is now published to MELPA\\n[melpa/melpa#5868](https://github.com/melpa/melpa/pull/5868).\\n\\n## Merged PRs\\n\\n- Upgrade to Bloop v1.2.5 [\\\\#513](https://github.com/scalameta/metals/pull/513)\\n ([olafurpg](https://github.com/olafurpg))\\n- Respect workspace folders for Scalafmt formatting, fixes \\\\#509.\\n [\\\\#512](https://github.com/scalameta/metals/pull/512)\\n ([olafurpg](https://github.com/olafurpg))\\n- Fix navigation bug for var setters.\\n [\\\\#511](https://github.com/scalameta/metals/pull/511)\\n ([olafurpg](https://github.com/olafurpg))\\n- Upgrade to Scalameta v4.1.3.\\n [\\\\#510](https://github.com/scalameta/metals/pull/510)\\n ([olafurpg](https://github.com/olafurpg))\\n- Change behavior of FileWatcher so that it doesn\'t create non-existing source\\n directories [\\\\#506](https://github.com/scalameta/metals/pull/506)\\n ([mudsam](https://github.com/mudsam))\\n- Reference pluginCrossBuild via reflection to support older sbt 0.13.\\n [\\\\#505](https://github.com/scalameta/metals/pull/505)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/01/24/tin","metadata":{"permalink":"/metals/blog/2019/01/24/tin","source":"@site/blog/2019-01-24-tin.md","title":"Metals v0.4.0 - Tin","description":"We are excited to announce the release of Metals v0.4, codename \\"Tin\\" \ud83c\udf89 Metals","date":"2019-01-24T00:00:00.000Z","formattedDate":"January 24, 2019","tags":[],"readingTime":6.37,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.4.0 - Tin","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.4.4 - Tin","permalink":"/metals/blog/2019/02/01/tin"},"nextItem":{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"}},"content":"We are excited to announce the release of Metals v0.4, codename \\"Tin\\" \ud83c\udf89 Metals\\nis a language server for Scala that works with VS Code, Atom, Vim, Sublime Text\\nand Emacs. Metals is developed at the [Scala Center](https://scala.epfl.ch/)\\nwith contributors from the community.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nIn this release we merged 50 PRs and closed 21 issues, full details:\\nhttps://github.com/scalameta/metals/milestone/4?closed=1.\\n\\n### Upgraded Bloop\\n\\nThis release upgrades from Bloop v1.1.2 to v1.2.5, which includes several\\nimprovements to diagnostics and compilation performance. See release notes for\\nmore details and upgrade guide.\\n\\n- [v1.2.5](https://github.com/scalacenter/bloop/releases/tag/v1.2.5)\\n- [v1.2.4](https://github.com/scalacenter/bloop/releases/tag/v1.2.4)\\n- [v1.2.3](https://github.com/scalacenter/bloop/releases/tag/v1.2.3)\\n- [v1.2.1](https://github.com/scalacenter/bloop/releases/tag/v1.2.1)\\n- [v1.2.0](https://github.com/scalacenter/bloop/releases/tag/v1.2.0)\\n\\nMajor props to [@jvican](https://github.com/jvican) for his great work on Bloop.\\nBloop does the heavy lifting around build import and compilation for Metals.\\n\\n### Syntax errors as you type\\n\\nPreviously, Metals only published compile errors from the build on file save.\\nNow, a syntax error is also published as you type making it easier to catch\\ncommon errors like unclosed string literals and missing parentheses.\\n\\n![Syntax errors as you type](https://i.imgur.com/2nzeSQv.gif)\\n\\nThis change has an additional benefit in editors like Vim where compile errors\\nwould previously disappear if you for example inserted a newline above an error.\\nNow, Metals updates the positions of errors as you type.\\n\\n### Faster and more reliable clearing of fixed compile errors\\n\\nA bug where red squiggles for fixed errors would occasionally not be cleared has\\nnow been fixed.\\n\\nAlso red squiggles for fixed errors disappear faster thanks to an improvement in\\nBloop. Previously, diagnostics were cleared after the bytecode generation phase\\nin the compiler and now they are cleared after the typer phase.\\n\\n### More detailed compilation progress\\n\\nThe status bar now includes information which individual build targets are being\\ncompiled along with a percentage estimate for how much remains of the\\ncompilation.\\n\\n![Detailed compile progress](https://i.imgur.com/fbQysxW.gif)\\n\\n### Cascade compile command\\n\\nUse the new \\"Cascade compile\\" command to trigger compilation in downstream build\\ntargets in the workspace. For example, if you have made changes in the main\\nsources of you project you can run cascade compile to trigger compilation in the\\ntest sources.\\n\\n![Cascade compile](https://i.imgur.com/EbKPn6g.png)\\n\\n### Formatting with Scalafmt\\n\\nIt\'s now possible to format code with\\n[Scalafmt](https://scalameta.org/scalafmt/).\\n\\n![Formatting with scalafmt](https://user-images.githubusercontent.com/1408093/50635748-b0894880-0f53-11e9-913b-acfd5f505351.gif)\\n\\nIt\'s possible to use different version of Scalafmt between different workspaces.\\nTo configure which Scalafmt version to use for a given workspace update the\\n`version` setting in `.scalafmt.conf`.\\n\\n```conf\\n# .scalafmt.conf\\nversion = \\"1.5.1\\"\\n```\\n\\n### Symbol outline\\n\\nIt\'s now possible to browse the symbol outline of a source file.\\n\\n![Document Symbols](https://user-images.githubusercontent.com/1408093/50635569-014c7180-0f53-11e9-8898-62803898781c.gif)\\n\\nMetals returns a hierarchical outline for editor that support it (like Visual\\nStudio Code, Atom, Emacs) and otherwise returns a flat outline.\\n\\n### Find symbol references\\n\\nIt\'s now possible to look up all usages of a given symbol in the workspace.\\n\\n![Find symbol references](https://user-images.githubusercontent.com/1408093/51531254-3a368280-1e3d-11e9-8df2-4560c6294e35.gif)\\n\\n### Fuzzy symbol search\\n\\nIt\'s now possible to look up a symbol definition in the workspace or library\\ndependencies by typing its name. All-lowercase queries are treated as\\ncase-insensitive searches.\\n\\n![Fuzzy symbol search example](https://user-images.githubusercontent.com/1408093/51537603-44fa1300-1e4f-11e9-84f2-eb7d4c6fc7ef.gif)\\n\\nThis feature is not supported yet in Sublime Text.\\n\\n### Blog post on low-memory symbol indexing with Bloom filters\\n\\nRead the post\\n[\\"Low-memory symbol indexing with bloom filters\\"](https://olafurpg.github.io/metals/blog/2019/01/22/bloom-filters.html)\\nto learn how Metals implements indexing for the features \\"fuzzy symbol search\\"\\nand \\"find symbol references\\".\\n\\n## Visual Studio Code\\n\\nFull changelog:\\nhttps://github.com/scalameta/metals-vscode/blob/master/CHANGELOG.md\\n\\n### Lower default memory settings\\n\\nThe extension now starts Metals with the JVM option `-Xms100M` instead of\\n`-Xms1G`. The exact memory usage of Metals depends on the size of the project\\nand whether Bloop is installed on the computer or not, but only 50-100Mb can be\\nsufficient memory for Metals in many cases.\\n\\n### Improved Java home detection\\n\\nThe extension now chooses the latest available JDK home for Java 8. Previously,\\nthe extension sometimes picked the JRE over JDK or an older version of Java 8\\nwhen newer security updates were installed on the computer.\\n\\n### .jvmopts detection\\n\\nThe extension now uses JVM options from `.jvmopts` when launching Metals so it\'s\\npossible to configure HTTP proxy settings without custom configuration. Memory\\noptions like `-Xms100M` are ignored in `.jvmopts`, use the \\"Server Properties\\"\\nsetting to customize memory settings.\\n\\n## Vim\\n\\nIt\'s recommended to update vim-lsc to the latest version, full changelog:\\nhttps://github.com/natebosch/vim-lsc/blob/master/CHANGELOG.md\\n\\n### Update log_level setting\\n\\nA recent change in how log messages are displayed makes the status bar updates\\nfrom Metals disappear unless you set the default `log_level` setting to `Log`.\\nUpdate `.vimrc` as follows:\\n\\n```diff\\n let g:lsc_server_commands = {\\n- \\\\ \'scala\': \'metals-vim\'\\n+ \\\\ \'scala\': {\\n+ \\\\ \'command\': \'metals-vim\',\\n+ \\\\ \'log_level\': \'Log\'\\n+ \\\\ }\\n+ \\\\}\\n```\\n\\n### View multi-line error messages\\n\\nRun the new `:LSClientLineDiagnostics` command to display all diagnostics on the\\ncurrent line and to un-truncate multi-line error messages. Big thanks to\\n[@ayoub-benali](https://github.com/ayoub-benali) for contributing several\\n[improvements to LSP](https://github.com/tomv564/LSP/pulls?q=is%3Apr+author%3Aayoub-benali+sort%3Aupdated-desc).\\n\\n## Sublime Text\\n\\nIt\'s recommended to upgrade to LSP v0.8.1, full changelogs:\\n\\n- https://github.com/tomv564/LSP/releases/tag/0.8.1\\n- https://github.com/tomv564/LSP/releases/tag/0.8.0\\n\\n### Built-in \\"import build\\" dialogue\\n\\nIt\'s now possible to respond to the \\"Import build\\" dialogue from Sublime Text\\nwithout using the HTTP server.\\n\\n### Manual \\"import build\\" command\\n\\nIt\'s now possible to manually trigger a build import from the command palette.\\n\\n![Import build command](https://i.imgur.com/LViPc95.png)\\n\\nSee\\n[manually trigger build import](https://scalameta.org/metals/docs/editors/sublime#manually-trigger-build-import)\\nfor instructions how to configure this command.\\n\\n## Emacs\\n\\nThe\\n[Emacs installation instructions](https://scalameta.org/metals/docs/editors/emacs.html)\\nhave been improved thanks to [@JesusMtnez](https://github.com/JesusMtnez).\\n\\n## Merged PRs\\n\\n- Trigger didFocus when current compile may affect focused buffer.\\n [\\\\#500](https://github.com/scalameta/metals/pull/500)\\n ([olafurpg](https://github.com/olafurpg))\\n- Several polish improvements to workspace symbols\\n [\\\\#498](https://github.com/scalameta/metals/pull/498)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update sublime doc for manual build import trigger\\n [\\\\#495](https://github.com/scalameta/metals/pull/495)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Handle sbt pluginsDirectory as symbolic link\\n [\\\\#417](https://github.com/scalameta/metals/pull/417)\\n ([gabro](https://github.com/gabro))\\n- Update feature_request.md\\n [\\\\#491](https://github.com/scalameta/metals/pull/491)\\n ([gabro](https://github.com/gabro))\\n- Avoid redundant didFocus compiles, fixes \\\\#483.\\n [\\\\#488](https://github.com/scalameta/metals/pull/488)\\n ([olafurpg](https://github.com/olafurpg))\\n- Polish before v0.4 release.\\n [\\\\#485](https://github.com/scalameta/metals/pull/485)\\n ([olafurpg](https://github.com/olafurpg))\\n- Update Emacs docs [\\\\#484](https://github.com/scalameta/metals/pull/484)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Upgrade to Bloop v1.2.4 [\\\\#481](https://github.com/scalameta/metals/pull/481)\\n ([olafurpg](https://github.com/olafurpg))\\n- Clean up indexing pipeline.\\n [\\\\#480](https://github.com/scalameta/metals/pull/480)\\n ([olafurpg](https://github.com/olafurpg))\\n- Avoid duplicate classpath indexing.\\n [\\\\#477](https://github.com/scalameta/metals/pull/477)\\n ([olafurpg](https://github.com/olafurpg))\\n- Support navigation for visited dependency sources via workspace/symbol.\\n [\\\\#476](https://github.com/scalameta/metals/pull/476)\\n ([olafurpg](https://github.com/olafurpg))\\n- Limit classpath search to jars.\\n [\\\\#475](https://github.com/scalameta/metals/pull/475)\\n ([olafurpg](https://github.com/olafurpg))\\n- Small fixes to workspace symbol\\n [\\\\#472](https://github.com/scalameta/metals/pull/472)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement workspace/symbol to search symbol by name.\\n [\\\\#471](https://github.com/scalameta/metals/pull/471)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement fast, low-overhead and synthetics-aware find references.\\n [\\\\#469](https://github.com/scalameta/metals/pull/469)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add \\"Cascade compile\\" and \\"Cancel compile\\" tasks.\\n [\\\\#467](https://github.com/scalameta/metals/pull/467)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve \\"No SemanticDB\\" error message\\n [\\\\#466](https://github.com/scalameta/metals/pull/466)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve the status bar redirection to window/logMessage\\n [\\\\#465](https://github.com/scalameta/metals/pull/465)\\n ([olafurpg](https://github.com/olafurpg))\\n- Lower recommended memory settings.\\n [\\\\#464](https://github.com/scalameta/metals/pull/464)\\n ([olafurpg](https://github.com/olafurpg))\\n- Disable SbtSlowSuite in Appveyor CI.\\n [\\\\#460](https://github.com/scalameta/metals/pull/460)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve diagnostic reporting.\\n [\\\\#459](https://github.com/scalameta/metals/pull/459)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add test case for \\"missing scalafmt version\\"\\n [\\\\#458](https://github.com/scalameta/metals/pull/458)\\n ([olafurpg](https://github.com/olafurpg))\\n- Use scalafmt-dynamic module to simplify formatting implementation.\\n [\\\\#452](https://github.com/scalameta/metals/pull/452)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve compilation tracking in the status bar.\\n [\\\\#451](https://github.com/scalameta/metals/pull/451)\\n ([olafurpg](https://github.com/olafurpg))\\n- Improve eglot documentation\\n [\\\\#450](https://github.com/scalameta/metals/pull/450)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Feature/appveyor memory limits\\n [\\\\#449](https://github.com/scalameta/metals/pull/449)\\n ([PanAeon](https://github.com/PanAeon))\\n- Preinit sbt on appveyor, because it usually fails the first time\\n [\\\\#448](https://github.com/scalameta/metals/pull/448)\\n ([PanAeon](https://github.com/PanAeon))\\n- Add note to Emacs docs about Eglot usage\\n [\\\\#446](https://github.com/scalameta/metals/pull/446)\\n ([olafurpg](https://github.com/olafurpg))\\n- Removed ansi colors & fixed TimerSuite for non standard locales\\n [\\\\#445](https://github.com/scalameta/metals/pull/445)\\n ([entangled90](https://github.com/entangled90))\\n- Update sublime doc to reflect the changes in the LSP plugin\\n [\\\\#443](https://github.com/scalameta/metals/pull/443)\\n ([ayoub-benali](https://github.com/ayoub-benali))\\n- Upgrade to mdoc v1.0.0 [\\\\#442](https://github.com/scalameta/metals/pull/442)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add snapshot resolver since we\'re publishing snapshots\\n [\\\\#441](https://github.com/scalameta/metals/pull/441)\\n ([mpollmeier](https://github.com/mpollmeier))\\n- Document textDocument/documentSymbol and textDocument/formatting\\n [\\\\#440](https://github.com/scalameta/metals/pull/440)\\n ([gabro](https://github.com/gabro))\\n- Remove -Dmetals.documentSymbol in favor of client capabilities\\n [\\\\#439](https://github.com/scalameta/metals/pull/439)\\n ([gabro](https://github.com/gabro))\\n- Fix wrong log [\\\\#437](https://github.com/scalameta/metals/pull/437)\\n ([gabro](https://github.com/gabro))\\n- Add log when skipping formatting of a file due to Scalafmt configuration\\n [\\\\#436](https://github.com/scalameta/metals/pull/436)\\n ([gabro](https://github.com/gabro))\\n- Don\'t attempt build import if sbt version is \\\\< 0.13.17\\n [\\\\#434](https://github.com/scalameta/metals/pull/434)\\n ([gabro](https://github.com/gabro))\\n- Implement textDocument/formatting using Scalafmt\\n [\\\\#429](https://github.com/scalameta/metals/pull/429)\\n ([gabro](https://github.com/gabro))\\n- Move critical file watching in-house.\\n [\\\\#427](https://github.com/scalameta/metals/pull/427)\\n ([olafurpg](https://github.com/olafurpg))\\n- Implement textDocument/documentSymbols\\n [\\\\#424](https://github.com/scalameta/metals/pull/424)\\n ([gabro](https://github.com/gabro))\\n- Add test to CreateDirectoriesSuite\\n [\\\\#421](https://github.com/scalameta/metals/pull/421)\\n ([gabro](https://github.com/gabro))\\n- Improve Emacs docs [\\\\#419](https://github.com/scalameta/metals/pull/419)\\n ([JesusMtnez](https://github.com/JesusMtnez))\\n- Fix incorrect docs [\\\\#418](https://github.com/scalameta/metals/pull/418)\\n ([olafurpg](https://github.com/olafurpg))\\n- Add more steps to release process.\\n [\\\\#414](https://github.com/scalameta/metals/pull/414)\\n ([olafurpg](https://github.com/olafurpg))"},{"id":"/2019/01/22/bloom-filters","metadata":{"permalink":"/metals/blog/2019/01/22/bloom-filters","source":"@site/blog/2019-01-22-bloom-filters.md","title":"Low-memory symbol indexing with bloom filters","description":"The latest Metals release introduces three new in-memory indexes to implement","date":"2019-01-22T00:00:00.000Z","formattedDate":"January 22, 2019","tags":[],"readingTime":12.545,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Low-memory symbol indexing with bloom filters","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.4.0 - Tin","permalink":"/metals/blog/2019/01/24/tin"},"nextItem":{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"}},"content":"The latest Metals release introduces three new in-memory indexes to implement\\nthe features \\"find symbol references\\" and \\"fuzzy symbol search\\". Indexes are\\nimportant to provide fast response times for user requests but they come at the\\nprice of higher memory usage. To keep memory usage low, Metals uses a data\\nstructure called bloom filters that implements space-efficient sets. Thanks to\\nbloom filters, the three new indexes added in the last release use only a few\\nmegabytes of memory even for large projects with >500k lines of code.\\n\\nIn this post, we look into how Metals uses bloom filters for fast indexing with\\nsmall memory footprint. We explain what bloom filters are and how we can encode\\nproblems like fuzzy searching to take advantage of the nice properties of bloom\\nfilters. Finally, we evaluate these new features on a real-world project: the\\n[Akka](https://github.com/akka/akka) build.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe work presented in this post was done as part of my job at the\\n[Scala Center](https://scala.epfl.ch/).\\n\\n## Bloom filters\\n\\n[Bloom filters](https://en.wikipedia.org/wiki/Bloom_filter) are a probabilistic\\ndata structure that implements space-efficient sets. The difference between a\\nbloom filter and a regular set such as `HashSet` is that bloom filters have the\\nfollowing limitations:\\n\\n- the `contains(element)` method may return false positives, meaning it can\\n occasionally return true even when the element is not a member of the set.\\n- when creating a bloom filter, you must provide an estimate for how many\\n elements will be added to the set. A large estimate results in lower false\\n positive rates for the `contains(element)` method at the cost of higher space\\n usage. Conversely, a low estimate results in lower memory usage at the cost of\\n higher false positives for the `contains(element)` method.\\n- you can\'t iterate through the elements of a bloom filter.\\n\\nIn exchange for these limitations, bloom filters are able to compress a large\\nnumber of elements into a small number of bits. Due to their space-efficiency,\\nbloom filters are used in many applications ranging from browsers, CDNs and\\ncryptocurrencies. In the next sections, we\'ll explore how bloom filters can also\\nbe used in the context of a language server like Metals.\\n\\n## Find symbol references\\n\\nThe \\"find symbol references\\" feature shows all usages of a given symbol. For\\nexample, in the demo below we find 843 references to the method `Actor.sender()`\\nin the Akka build.\\n\\n![Find symbol references example](https://user-images.githubusercontent.com/1408093/51531254-3a368280-1e3d-11e9-8df2-4560c6294e35.gif)\\n\\nFind symbol references is helpful for users when exploring a codebase and it\'s\\nalso an important component for Metals to implement other features down the road\\nsuch as \\"rename symbol\\".\\n\\nThe challenge when implementing find references is that large projects have many\\nsymbol references. Iterating through all symbol references for every source file\\non every request is too slow. Most symbols appear only in a few source files so\\nwe need some way to reduce the search space.\\n\\nMetals uses bloom filters to reduce the number of files we search when looking\\nfor a symbol reference. For every file on disk, we keep an in-memory bloom\\nfilter which contains the set of all referenced symbols in that file. When\\nlooking for references to a given symbol, we skip files\xa0when their accompanying\\nbloom filter does not contain a reference to that symbol. False positive results\\nfrom the bloom filter are not a problem\xa0because they only slow down the response\\nbut don\'t compromise the correctness of the final result.\\n\\nConcretely, Metals keeps an in-memory map where keys are paths to source files\\nin the workspace.\\n\\n```scala\\nval references: Map[Path, BloomFilter[Symbol]]\\n```\\n\\nThe values represent the set of\\n[SemanticDB symbols](https://scalameta.org/docs/semanticdb/specification.html)\\nreferenced in that file. A nice property of keying the map by file paths is that\\nwe can incrementally update the map as files change. When a file is re-compiled\\nproducing a new SemanticDB file, we throw out the old bloom filter and compute a\\nnew one from scratch.\\n\\nTo implement the search, we iterate through all entries of the map and only read\\nSemanticDB files from disk when their accompanying bloom filter contains the\\nquery symbol (recap: false positives are OK).\\n\\n```scala\\nval query = // ...\\nfor {\\n (path, bloom) <- references\\n if bloom.mightContain(query)\\n symbolOccurrence <- readSemanticdbOccurrences(path) // read from disk\\n if isSameSymbol(query, symbolOccurrence)\\n} yield symbolOccurrence\\n```\\n\\nIn the actual Metals implementation, we additionally take care of adjusting\\npositions of the results in case the source file contents have changed since the\\nSemanticDB file was created.\\n\\n## Fuzzy symbol search\\n\\nThe \\"fuzzy symbol search\\" feature allows you to navigate to a symbol definition\\nin the workspace sources or library dependencies by typing the symbol\'s name.\\n\\n![Fuzzy symbol search example](https://user-images.githubusercontent.com/1408093/51537603-44fa1300-1e4f-11e9-84f2-eb7d4c6fc7ef.gif)\\n\\nThe search is fuzzy, meaning the query doesn\'t have to be an exact match or a\\nsubstring match with the target symbol. For example, we want the query `ReaSer`\\nto match the symbol `ReactDOMServer`. Additionally, all-lowercase queries are\\ntreated as case-insensitive so that searching for `nelis` matches the symbol\\n`NonEmptyList`.\\n\\nLike with find symbol references, the challenge when implementing fuzzy symbol\\nsearch is that we have little time to respond and a lot of symbols to search.\\nTesting\xa0the search query against every source file the workspace and every entry\\nin the library classpath is too slow.\\n\\nMetals uses bloom filters to reduce the search space so that we only look at\\nplaces that are likely to contain matches for the query. We have two different\\nindexes, one for workspace sources and another one for the library classpath.\\n\\n### Workspace sources\\n\\nThe first index is a map keyed by source files in the workspace.\\n\\n```scala\\nval inWorkspace: Map[Path, BloomFilter[String]]\\n```\\n\\nThe values of the map is the set of all possible sub-queries that match symbols\\ndefined in that source file. For example, consider the code below.\\n\\n```scala\\npackage data\\nclass NonEmptyListSpec { ... }\\nobject Props { ... }\\n```\\n\\nFor this source file, we insert the following sub-queries into the index.\\n\\n```txt\\nd\\nda\\ndat\\ndata\\nN\\nNo\\nNon\\nL\\nLi\\nLis\\nList\\nS\\nSp\\nSpe\\nSpec\\nNEL\\nNES\\nELS\\nP\\nPr\\nPro\\nProp\\nProps\\n```\\n\\nWhen searching for a query like `NoLi`, we split the query into the words `No`\\nand `Li` and visit only files whose bloom filter contains all of those exact\\nsub-queries. We include trigrams of the uppercase characters to further reduce\\nthe search space for queries like `NELS` that have few lowercase character.\\n\\nFor all-lowercase queries, we return the union of results from multiple\\ncapitalization combinations in order to support case-insensitive searches. For\\nexample, the query `neli` returns all results matching any of the following\\nqueries.\\n\\n```txt\\nneli\\nNeli\\nNEli\\nNeLi\\nNelI\\nNELi\\nNElI\\nNeLI\\nNELI\\n```\\n\\nTo implement the search, we iterate through all entries of the in-memory map and\\nonly visit the source files on disk whose bloom filter contain a match for the\\nquery.\\n\\n```scala\\nval query = ...\\nfor {\\n (file, bloom) <- inWorkspace\\n if bloom.mightContain(query)\\n symbol <- parseSymbols(file) // reads from disk\\n if isFuzzyMatch(query, symbol)\\n} yield symbol\\n```\\n\\nLike with find symbol references, false positive results from the bloom filter\\nslow down the response but don\'t compromise the correctness of the result. Also,\\nwe incrementally update the map as files in the workspace change by removing old\\nentries and compute a new bloom filter for the updated source file.\\n\\n### Library classpath\\n\\nThe library classpath index is similar to the workspace sources index except the\\nkeys of the map are package symbols (example `scala/collection/`) instead of\\nfile paths.\\n\\n```scala\\nval inClasspath: Map[Symbol, (BloomFilter[String], Seq[Symbol])]\\n```\\n\\nUnlike the workspace sources index, the library classpath index does not need to\\nbe incrementally updated when files re-compile. The bloom filters in the values\\nof the map use the same sub-query technique as the bloom filters in the\\nworkspace sources index. For each bloom filter, we additionally store a listing\\nof all members of that package. If a query matches a given bloom filter, we test\\nthe fuzzy search against all members of the package.\\n\\n```scala\\nval query = ...\\nfor {\\n (pkg, (bloom, packageMembers)) <- inClasspath\\n if bloom.mightContain(query)\\n member <- packageMembers\\n if isFuzzyMatch(query, symbol(pkg, member))\\n definitionOnDisk <- findDefinition(member) // writes to disk\\n} yield definitionOnDisk\\n```\\n\\nDue to how the Language Server Protocol works, the `findDefinition` method\\nwrites sources of library dependencies to disk so the editor can find the symbol\\ndefinition location. To reduce the number of files written to disk, Metals\\nlimits the number of non-exact search results from the library classpath index.\\n\\nIn the actual Metals implementation, the listing of package members is GZIP\\ncompressed to reduce memory usage and the members are decompressed on-demand\\nwhen a bloom filter matches the query.\\n\\n## Evaluation\\n\\nWe test Metals on the [Akka codebase](https://github.com/akka/akka) to evaluate\\nthe performance of our bloom filter indexes. Akka is a library to build highly\\nconcurrent, distributed, and resilient message-driven applications on the JVM.\\n\\n![Akka repository](https://user-images.githubusercontent.com/1408093/51541018-159bd400-1e58-11e9-9181-cf2e32a0a40b.png)\\n\\nThe Akka codebase has 300-600k lines of code depending on whether you include\\ncomments and/or Java sources. Metals indexes both Java and Scala sources for\\nfuzzy symbol search but only Scala sources for find symbol references.\\n\\n```\\n$ git clone https://github.com/akka/akka.git\\n$ cd akka\\n$ loc\\nLanguage Files Lines Blank Comment Code\\nScala 1,951 358,149 57,528 76,605 224,016\\nJava 486 250,609 19,838 51,291 179,480\\n```\\n\\nWe open the base directory with Visual Studio Code and update the \\"Metals Server\\nProperties\\" setting to `-Dmetals.statistics=all` to enable additional\\nlogging\xa0output. We import the build, open the file `Actor.scala` and wait until\\ncompilation has finished. It is normal if this step takes several minutes to\\ncomplete.\\n\\n### Response times\\n\\nFirst, we measure the response times for find symbol references.\\n\\n```\\ntime: found 8 references to symbol \'akka/actor/ActorCell.contextStack.\' in 8ms\\ntime: found 11 references to symbol \'akka/actor/Actor#postRestart().\' in 17ms\\ntime: found 146 references to symbol \'akka/actor/PoisonPill.\' in 0.16s\\ntime: found 163 references to symbol \'scala/collection/IterableLike#head().\' in 0.23s\\ntime: found 1027 references to symbol \'akka/actor/Actor#\' in 0.5s\\ntime: found 816 references to symbol \'scala/package.Throwable#\' in 0.63s\\ntime: found 6103 references to symbol \'scala/Predef.String#\' in 1.54s\\n```\\n\\nResponse times range from 8ms up to 1.6s depending on the number of results. The\\n6103 references to `String` origin from 913 source files, which is almost half\\nof all Scala source files in the repository. These numbers do not take into\\naccount the delay in the editor to display the results in the UI. For large\\nresults like `String`, this delay can be several seconds depending on the\\neditor.\\n\\nNext, we measure the response times for fuzzy symbol search.\\n\\n```\\ntime: found 0 results for query \'ConfigSEr\' in 13ms\\ntime: found 10 results for query \'ConfigSer\' in 0.1s\\ntime: found 105 results for query \'ActorRef\' in 0.21s\\ntime: found 105 results for query \'actorref\' in 0.31s\\ntime: found 1002 results for query \'actor\' in 0.54s\\ntime: found 3974 results for query \'S\' in 1.98s\\n```\\n\\nResponse times range from 13ms up to 2s depending on the query and number of\\nresults. Queries with typos like `ConfigSEr` have 0 results and respond\\ninstantly, while generic queries like `S` have ~4k results and take 2 seconds to\\nrespond. Observe that all-lowercase queries like `actorref` are slower than\\ncapitalized queries like `ActorRef`, which is expected because we test multiple\\ncapitalization combinations for case-insensitive searches.\\n\\n### Memory usage\\n\\nNext, we look at the memory usage of the bloom filter indexes. The numbers are\\ncomputed with [JOL](https://openjdk.java.net/projects/code-tools/jol/)\\n`GraphLayout` and the element counts are approximate number of insertions into\\nthe bloom filters.\\n\\n```\\nmemory: references index using 3.72M (274,747 elements)\\nmemory: workspace symbol index using 1.89M (173,419 elements)\\nmemory: classpath symbol index using 1.72M (382,243 elements)\\n```\\n\\nThe three bloom filter indexes use 8Mb combined for the entire Akka build. The\\n8Mb include the maps with file/symbol keys and also a GZIP compressed listing of\\npackage members for the classpath symbol index. For comparison, the\\n[goto definition index](https://scalameta.org/metals/blog/2018/12/12/fast-goto-definition.html)\\nthat does not use bloom filters requires 16Mb alone.\\n\\n```\\nmemory: definition index using 15.9M (337,532 lines Scala)\\n```\\n\\n### Indexing time\\n\\nNext, we look at the time it takes to construct the indexes after build import.\\n\\n```\\ntime: imported build in 2.41s\\ntime: updated build targets in 0.12s\\ntime: started file watcher in 4.36s\\ntime: indexed library classpath in 0.8s\\ntime: indexed workspace SemanticDBs in 2.18s\\ntime: indexed workspace sources in 3.35s\\ntime: indexed library sources in 1.59s\\n```\\n\\nThe Akka build contains many source files but few library dependencies. The\\nbottle-neck appears to be starting the file watcher and parsing all `*.scala`\\nand `*.java` sources in the workspace. The following flamegraph shows a detailed\\nbreakdown of what goes on during indexing.\\n\\n![Akka indexing flamegraph](https://i.imgur.com/Xhr1wXp.jpg)(https://geirsson.com/assets/metals-akka-initialize.svg)\\n\\n> Click on image to interactively explore the flamegraph.\\n\\nSome observations:\\n\\n- it\'s slower to start the file watcher than compute all three indexes for find\\n symbol references and fuzzy symbol search, combined.\\n- the method `BloomFilter.put()` accounts for 2.26% of the total runtime.\\n\\nFor comparison, below is another flamegraph for the same indexing pipeline but\\nin a different project, [Prisma](https://github.com/prisma/prisma). The total\\nindexing time is around 8 seconds on a cold server for both Akka and Prisma but\\nthe distribution is different for how long each indexing task takes. Prisma has\\nfewer sources (80k lines of Scala code, no Java) and a larger number of library\\ndependencies compared to Akka.\\n\\n![Prisma indexing flamegraph](https://i.imgur.com/JR3SNx6.jpg)(https://geirsson.com/assets/metals-prisma-initialize.svg)\\n\\n> Click on image to interactively explore the flamegraph.\\n\\nComputing the bloom filter indexes for find symbol references and fuzzy symbol\\nsearch takes proportionally even less time in Prisma compared to Akka. The\\nPrisma project is a good representation\xa0for projects with less than 100k lines\\nof code and a large number of library dependencies.\\n\\n## Conclusion\\n\\nMetals uses three bloom filter indexes to implement the features \\"find symbol\\nreferences\\" and \\"fuzzy symbol search\\". On a case study project containing 600k\\nlines of code, all three indexes use 8Mb of memory combined and enable\\nsub-second response times for most user requests. Response times for fuzzy\\nsymbol search is occasionally slower for short queries like `S` but this\\nlimitation is not inherent with the bloom filter indexing approach and may be\\naddressed in future releases.\\n\\nComputing the bloom filter indexes takes 4s in our case-study project, out of\\ntotal 16s for the combined \\"import build\\" and \\"indexing\\" steps. These steps run\\nwhenever Metals starts in an existing project or after the build changes. Can\\nindexing be made faster? Probably yes, but the user experience will still remain\\nbottle-necked by sbt build export and compilation of workspace sources, which\\nfrequently take many minutes\xa0to complete on large projects.\\n\\nThe indexes are in-memory maps where the keys are file paths and values are\\nbloom filters. When files change, we can incrementally update the indexes\xa0by\\ncomputing a new bloom filter for the updated source file.\\n\\nThe bloom filter indexes are only used to narrow down the search space by\\neliminating files and packages that don\'t contain relevant results for the user\\nquery. False positive results slow down response times but don\'t compromise the\\ncorrectness of the final result.\\n\\nTry out Metals today with VS Code, Atom, Vim, Sublime Text or Emacs using the\\ninstallation instructions here\\nhttps://scalameta.org/metals/docs/editors/overview.html.\\n\\nThe indexer is working when the status bar says `Indexing\u280b`\\n![Indexing status bar](https://i.imgur.com/6VLPu9c.gif)"},{"id":"/2018/12/14/iron","metadata":{"permalink":"/metals/blog/2018/12/14/iron","source":"@site/blog/2018-12-14-iron.md","title":"Metals v0.3.2 - Iron","description":"We are pleased to announce the release of Metals v0.3.2. Metals is a language","date":"2018-12-14T00:00:00.000Z","formattedDate":"December 14, 2018","tags":[],"readingTime":1.595,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.3.2 - Iron","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Low-memory symbol indexing with bloom filters","permalink":"/metals/blog/2019/01/22/bloom-filters"},"nextItem":{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"}},"content":"We are pleased to announce the release of Metals v0.3.2. Metals is a language\\nserver for Scala that works with VS Code, Atom, Vim, Sublime Text and Emacs.\\nMetals is developed at the [Scala Center](https://scala.epfl.ch/) with\\ncontributors from the community.\\n\\n\x3c!-- truncate --\x3e\\n\\n## Metals server\\n\\nFull details: https://github.com/scalameta/metals/milestone/3?closed=1\\n\\nIn this release we closed 7 issues and merged 17 PRs.\\n\\n### Improved sbt launcher\\n\\nMetals now respects `.sbtopts` and `.jvmopts` when running `sbt bloopInstall`.\\nIf you need further customization like reading environment variables, then you\\ncan configure the \\"Sbt Script\\" setting (`-Dmetals.sbt-script=/path/to/sbt`).\\n\\n![sbt script](https://user-images.githubusercontent.com/1408093/50009698-e4f29000-ffb7-11e8-8d05-acb11f575748.png)\\n\\n### Build server discovery\\n\\nMetals now works with any build tool that implements\\n[\\"BSP Connection Protocol\\"](https://github.com/scalacenter/bsp/blob/master/docs/bsp.md#bsp-connection-protocol).\\nSee the Metals docs for more information:\\nhttps://scalameta.org/metals/docs/integrations/new-build-tool#custom-build-server\\n\\n### Blog post on fast goto definition with low memory footprint\\n\\nNew blog post on how Metals implements Goto Definition:\\nhttps://scalameta.org/metals/blog/2018/12/12/fast-goto-definition.html\\n\\n## VS Code\\n\\nRelease notes: https://github.com/scalameta/metals-vscode/releases/tag/v1.1.0\\n\\n### Improved Java home detection\\n\\nThe extension now automatically detects a Java 8 home directory even if Java 11\\nis installed on the computer. Also, the extension now works for `jenv` users.\\n\\n### Outdated server version detection\\n\\nThe extension now automatically detects when you have a custom \\"Server Version\\"\\nsetting with an outdated version.\\n\\n![Reload Window](https://user-images.githubusercontent.com/1408093/50012764-cdb7a080-ffbf-11e8-9549-82ec6c216376.jpg)\\n\\n## Sublime Text\\n\\nThe Metals process now exits when Sublime Text quits so that you no longer end\\nup with zombie `metals-sublime` processes.\\n\\n[@ayoub-benali](https://github.com/ayoub-benali) has contributed several\\nimprovements to [tomv564/LSP](https://github.com/tomv564/LSP) to improve the\\nexperience of using Metals with Sublime Text.\\n\\nWatch the\\n[scalameta/metals-sublime](https://github.com/scalameta/metals-sublime/)\\nrepository for updates on further improvements to the Sublime Text integration.\\n\\n## Emacs\\n\\nThe website now documents the installation steps for Emacs:\\nhttps://scalameta.org/metals/docs/editors/emacs.html\\n\\nNote that the Emacs LSP client has several known issues so the experience is not\\nas good as it could be.\\n\\n## Contributors\\n\\nBig thanks to all contributors who reported issues, reviewed PRs and contributed\\ncode!\\n\\n```sh\\n$ git shortlog -sn --no-merges v0.3.1..v0.3.2\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nChris\\nJakub Koz\u0142owski\\n```"},{"id":"/2018/12/12/fast-goto-definition","metadata":{"permalink":"/metals/blog/2018/12/12/fast-goto-definition","source":"@site/blog/2018-12-12-fast-goto-definition.md","title":"Fast goto definition with low memory footprint","description":"Metals throws away its navigation index when it shuts down. Next time it starts,","date":"2018-12-12T00:00:00.000Z","formattedDate":"December 12, 2018","tags":[],"readingTime":8.42,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Fast goto definition with low memory footprint","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Metals v0.3.2 - Iron","permalink":"/metals/blog/2018/12/14/iron"},"nextItem":{"title":"Metals v0.3 - Iron","permalink":"/metals/blog/2018/12/06/iron"}},"content":"Metals throws away its navigation index when it shuts down. Next time it starts,\\nthe index is computed again from scratch. Although this approach is simple, it\\nrequires indexing to be fast enough so you don\'t mind running it again and\\nagain. Also, because we don\'t persist the index to disk, we need to be careful\\nwith memory usage.\\n\\nThis post covers how Metals achieves fast source indexing for Scala with a small\\nmemory footprint. We describe the problem statement, explain the initial\\nsolution and how an optimization delivered a 10x speedup. Finally, we evaluate\\nthe result on a real-world project.\\n\\n\x3c!-- truncate --\x3e\\n\\nThe work presented in this post was done as part of my job at the\\n[Scala Center](https://scala.epfl.ch/).\\n\\n## Problem statement\\n\\nWhat happens when you run Goto Definition? In reality, a lot goes on but in this\\npost we\'re gonna focus on a specific problem: given a method like\\n`scala.Some.isEmpty` and many thousand source files with millions of lines of\\ncode, how do we quickly find the source file that defines that method?\\n\\n![goto-definition](https://user-images.githubusercontent.com/1408093/49591684-67070700-f96f-11e8-873d-90c40480528b.gif)\\n\\nThere are some hard constraints:\\n\\n- we must answer quickly, normal requests should respond within 100-200ms.\\n- memory usage should not exceed 10-100Mb since we also need memory to implement\\n other features and we\'re sharing the computer with other applications.\\n- computing an index should not take more than ~10 seconds after importing the\\n build, even for large projects with millions of lines of source code\\n (including dependencies).\\n\\nTo keep things simple, imagine we have all source files available in a directory\\nthat we can walk and read.\\n\\n```scala\\nwalk()\\n// Stream(\\"scala/Option.scala\\", \\"scala/Predef.scala\\", ...)\\n\\nread(\\"scala/Option.scala\\")\\n// \\"sealed abstract class Option { ... }; class Some extends Option { ... }\\"\\n```\\n\\n### Java\\n\\nFor Java, the challenge is not so difficult since the compiler enforces that\\neach source file contains a single public class with matching filename.\\n\\n```java\\n// java/nio/file/Files.java\\npackage java.nio.file;\\npublic class Files {\\n public static byte[] readAllBytes(path: Path) {\\n // ...\\n }\\n}\\n```\\n\\nTo respond to a Goto Definition request for the `Files.readAllBytes` method, we\\n\\n- take the enclosing toplevel class `java.nio.file.Files`\\n- read the corresponding file `java/nio/File/Files.java`\\n- parse `Files.java` to find the exact position of `readAllBytes`\\n\\nThis approach is fast (parsing one file is cheap) and it also requires no index\\n(0Mb memory!).\\n\\n### Scala\\n\\nFor Scala, the problem is trickier because the compiler allows multiple toplevel\\nclasses in the same source file.\\n\\n```scala\\n// scala/Option.scala\\npackage scala\\nsealed abstract class Option[+T] { /* ... */ }\\nfinal class Some[+T](value: T) extends Option[T] {\\n def isEmpty = false\\n // ...\\n}\\n```\\n\\nTo navigate to the `scala.Some.isEmpty` method we can\'t use the same approach as\\nin Java because the class `scala.Some` is in `scala/Option.scala`, not\\n`scala/Some.scala`.\\n\\nOne possible solution is to read the `scala/Some.class` classfile that contains\\nthe filename `Option.scala` where `scala.Some` is defined.\\n\\n```sh\\n$ javap -classpath $(coursier fetch org.scala-lang:scala-library:2.12.8) scala.Some\\nCompiled from \\"Option.scala\\"\\n...\\n```\\n\\nHowever, source information in classfiles is not always reliable and it may be\\nremoved by tools that process jar files. Let\'s restrict the problem to only use\\nsource files.\\n\\nInstead of using JVM classfiles, we can walk all Scala source files and build an\\nindex that maps toplevel classes to the source file that defines that class. The\\nindex looks something like this:\\n\\n```scala\\nval index = Map[Symbol, Path](\\n Symbol(\\"scala.Some\\") -> Path(\\"scala/Option.scala\\"),\\n // ...\\n)\\n```\\n\\nWith this index, we find the definition of `Some.isEmpty` using the same steps\\nas for `Files.readAllBytes` in Java:\\n\\n- take the enclosing toplevel class `scala.Some`\\n- query index to know that `scala.Some` is defined in `scala/Option.scala`\\n- parse `scala/Option.scala` to find exact position of `isEmpty` method.\\n\\nThe challenge is to efficiently build the index.\\n\\n## Initial solution\\n\\nOne approach to build the index is to use the\\n[Scalameta](https://scalameta.org/) parser to extract the toplevel classes of\\neach source file. This parser does not desugar the original code making it\\nuseful for refactoring and code-formatting tools like\\n[Scalafix](http://scalacenter.github.io/scalafix/)/[Scalafmt](http://scalameta.org/scalafmt).\\nI\'m also familiar with Scalameta parser API so it was fast to get a working\\nimplementation. However, is the parser fast enough to parse millions of lines of\\ncode on every server startup?\\n\\nAccording to JMH benchmarks, the Scalameta parser handles ~92k lines/second\\nmeasured against a sizable corpus of Scala code. The benchmarks use the\\n\\"single-shot\\" mode of JMH, for which the documentation says:\\n\\n> \\"This mode is useful to estimate the \\"cold\\" performance when you don\'t want to\\n> hide the warmup invocations.\\"\\n\\nCold performance is an OK estimate for our use-case since indexing happens\\nduring server startup.\\n\\nThe Scala standard library is ~36k lines so at 92k lines/second this solution\\nscales up to a codebase with up to 20-30 similarly-sized library dependencies.\\nIf we add more library dependencies, we exceed the 10 second constraint for\\nindexing time. For a codebase with 5 million lines of code, users might have to\\nwait one minute for indexing to complete. We should aim for better.\\n\\n## Optimized solution\\n\\nWe can speed up indexing by writing a custom parser that extracts only the\\ninformation we need from a source file. For example, the Scalameta parser\\nextracts method implementations that are irrelevant for our indexer. Our indexer\\nneeds to know the toplevel classes and nothing more.\\n\\nThe simplified algorithm for this custom parser goes something like this:\\n\\n- tokenize source file\\n- on consecutive `package object` keywords, record package object\\n- on `package` keyword, record package name\\n- on `class` and `trait` and `object` keywords, record toplevel class\\n- on `(` and `[` and `{` delimiters, skip tokens until we find matching closing\\n delimiter\\n\\nThere are a few more cases to handle, but the implementation ended up being ~200\\nlines of code that took an afternoon to write and test (less time than it took\\nto write this blog post!).\\n\\nBenchmarks show that the custom parser is almost 10x faster compared to the\\ninitial solution.\\n\\n```text\\n[info] Benchmark Mode Cnt Score Error Units\\n[info] MetalsBench.toplevelParse ss 30 0.349 \xb1 0.003 s/op\\n[info] MetalsBench.scalametaParse ss 30 3.370 \xb1 0.175 s/op\\n```\\n\\nAt ~920k lines/second it takes ~6 seconds to index a codebase with 5 million\\nlines of code, a noticeable improvement to the user experience compared to the\\none minute it took with the previous solution.\\n\\n## Evaluation\\n\\nMicro-benchmarks are helpful but they don\'t always reflect user experience. To\\nevaluate how our indexer performs in the real world, we test Metals on the\\n[Prisma](https://www.prisma.io/) codebase. Prisma is a server\xa0implemented in\\nScala that replaces traditional ORMs and data access layers with a universal\\ndatabase abstraction.\\n\\n![prisma](https://user-images.githubusercontent.com/1408093/49875321-08cf9d80-fe21-11e8-9f02-54ff4960a7af.png)\\n\\nThe project has around 80k lines of Scala code.\\n\\n```sh\\n$ git clone https://github.com/prisma/prisma.git\\n$ cd prisma/server\\n$ loc\\nLanguage Files Lines Blank Comment Code\\nScala 673 88730 12811 1812 74107\\n```\\n\\nWe open VS Code with the Metals extension, enable the server property\\n`-Dmetals.statistics=all` and import the build.\\n\\n```sh\\n$ tail -f .metals/metals.log\\ntime: ran \'sbt bloopInstall\' in 1m4s\\ntime: imported workspace in 13s\\nmemory: index using 13.1M (923,085 lines Scala)\\n```\\n\\nWe run \\"Import build\\" again to get a second measurement.\\n\\n```sh\\ntime: ran \'sbt bloopInstall\' in 41s\\ntime: imported workspace in 7s\\nmemory: index using 13.1M (990,144 Scala)\\n```\\n\\n- **\\"ran \'sbt bloopInstall\'\\"**: the time it takes to dump the sbt build\\n structure with [Bloop](https://scalacenter.github.io/bloop/), the build server\\n used by Metals.\\n - The Prisma build has 44 sbt projects.\\n - Running `sbt` takes 23 seconds to reach the sbt shell.\\n- **\\"imported workspace\\"**: the time it takes to import the build structure into\\n Metals and index sources of all projects, including the following steps:\\n 1. Query Bloop for the dumped build structure, listing all project\\n dependencies, sources and compiler options.\\n 2. Walk, read and index all Scala sources in the workspace, happens in both\\n runs.\\n 3. Walk, read and index all library dependency sources, happens only for the\\n first run since the indexer caches\xa0`*-sources.jar` file results.\\n - It\'s expected that \\"lines of code\\" increased by ~70k lines in the second run\\n since we indexed the workspace sources again.\\n - It\'s expected that indexing was faster in the second run since indexes are\\n cached for `*-sources.jar` files and the JVM has also warmed up.\\n- **\\"index using 13.1M\\"**: the memory footprint of the index mapping toplevel\\n Scala classes to which file they are defined in.\\n - Memory is measured using\\n [OpenJDK JOL](https://openjdk.java.net/projects/code-tools/jol/)\\n `GraphLayout.totalSize()`.\\n - Note that the server uses more memory in total, this is only for the\\n navigation index.\\n - The index does not contain entries where the toplevel classname matches the\\n filename, for the same reason we don\'t index Java sources.\\n\\nOn average, Goto Definition responds well within our 100ms goal.\\n\\n```text\\ntime: definition in 0.03s\\ntime: definition in 0.02s\\n```\\n\\nHowever, occasional definition requests take much longer to respond.\\n\\n```text\\ninfo time: definition in 8s\\ninfo time: definition in 0.62s\\n```\\n\\nThe outliers happen when navigating inside library dependency sources, which is\\nexpected to be slower since we need to type-check those sources before querying\\nthe index.\\n\\n## Conclusion\\n\\nMetals uses a custom Scala parser to index sources at roughly 1 million\\nlines/second in micro-benchmarks. The index is used to quickly respond to Goto\\nDefinition requests. On a case-study project containing 44 modules and ~900k\\nlines of Scala sources (including library dependencies), it takes ~10 seconds to\\nimport the build structure (including source indexing) and the resulting index\\nuses 13M memory.\\n\\nThe Java+Scala source indexers used by Metals are available in a standalone\\nlibrary called mtags.\\n\\n```scala\\nlibraryDependencies += \\"org.scalameta\\" %% \\"mtags\\" % \\"0.3.1\\"\\n```\\n\\nThe mtags library is already being used by the\\n[Almond Scala kernel for Jupyter](http://almond-sh.github.io/almond/stable/docs/intro)\\nto support Goto Definition inside Jupyter notebooks.\\n\\nCan the indexer become faster? Sure, I suspect there\'s still room for 2-3x\\nspeedups with further optimizations. However, I\'m not convinced it will make a\\nsignificant improvement to the user experience since we remain bottle-necked by\\ndumping sbt build structure and compiling the sources.\\n\\nTry out Goto Definition with Metals today using VS Code, Atom, Vim, Sublime Text\\nor Emacs using the installation instructions here:\\nhttps://scalameta.org/metals/docs/editors/overview.html. The indexer is working\\nwhen you see \\"Importing build\\" in the status bar\\n![imageedit_3_3576623823](https://user-images.githubusercontent.com/1408093/49924982-f5234600-feb7-11e8-9edd-715388bb546f.gif)"},{"id":"/2018/12/06/iron","metadata":{"permalink":"/metals/blog/2018/12/06/iron","source":"@site/blog/2018-12-06-iron.md","title":"Metals v0.3 - Iron","description":"We are excited to announce the release of Metals v0.3, codename \\"Iron\\" \ud83c\udf89 Metals","date":"2018-12-06T00:00:00.000Z","formattedDate":"December 6, 2018","tags":[],"readingTime":2.265,"hasTruncateMarker":true,"authors":[{"name":"\xd3lafur P\xe1ll Geirsson","url":"https://twitter.com/olafurpg","imageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"}],"frontMatter":{"author":"\xd3lafur P\xe1ll Geirsson","title":"Metals v0.3 - Iron","authorURL":"https://twitter.com/olafurpg","authorImageURL":"https://avatars2.githubusercontent.com/u/1408093?s=460&v=4"},"prevItem":{"title":"Fast goto definition with low memory footprint","permalink":"/metals/blog/2018/12/12/fast-goto-definition"}},"content":"We are excited to announce the release of Metals v0.3, codename \\"Iron\\" \ud83c\udf89 Metals\\nis a language server for Scala.\\n\\n## TL;DR\\n\\n- simple installation\\n- accurate diagnostics\\n- goto definition\\n- text editors: Visual Studio Code, Atom, Vim and Sublime Text\\n- no completions\\n\\nCheck out the website and give Metals a try: https://scalameta.org/metals/\\n\\n\x3c!-- truncate --\x3e\\n\\n## Simple installation\\n\\nA useful IDE needs to understand your project\'s directory structure and library\\ndependencies. Metals can now import sbt and Bloop builds with the following\\nworkflow\\n\\n- Open a directory in your editor\\n- Click on a button to import the build\\n- Wait for the build import step to complete, this may take a while\\n- Enjoy IDE features \ud83d\udc4c\\n- When your build changes, Metals asks you to import again.\\n\\n![vscode-import-build](https://user-images.githubusercontent.com/1408093/49659280-26c58880-fa44-11e8-92e6-b3df984fbdd2.png)\\n\\n## Accurate diagnostics\\n\\nOnce your build has been imported, Metals triggers compilation on file save and\\npublishes compiler errors as red squiggles in your editor. By construction, this\\napproach avoids the situation where users see different errors in their editor\\nand the build tool.\\n\\n![accurate-diagnostics](https://user-images.githubusercontent.com/1408093/49591682-666e7080-f96f-11e8-9fc0-e48bbe13187d.png)\\n\\n## Goto definition\\n\\nMetals supports goto definition for project sources and Scala+Java library\\ndependencies. Navigation works even when the open buffer contains syntax errors.\\n\\nNavigation in Metals is fast and consumes little memory. For a case study\\nproject, Metals indexes 800k lines of Scala code per second and the resulting\\nsearch index requires 25Mb RAM per million lines of code.\\n\\n![goto-definition](https://user-images.githubusercontent.com/1408093/49591684-67070700-f96f-11e8-873d-90c40480528b.gif)\\n\\n## Text editors\\n\\nThanks to the\\n[Language Server Protocol](https://microsoft.github.io/language-server-protocol/),\\nMetals works multiple text editors. The following editors have been validated to\\nwork with Metals and the installation steps have been documented on the Metals\\nwebsite.\\n\\n- Overview: https://scalameta.org/metals/docs/editors/overview.html\\n- Visual Studio Code: https://scalameta.org/metals/docs/editors/vscode.html\\n- Atom: https://scalameta.org/metals/docs/editors/atom.html\\n- Vim: https://scalameta.org/metals/docs/editors/vim.html\\n- Sublime Text: https://scalameta.org/metals/docs/editors/sublime.html\\n- guide to integrate new editors:\\n https://scalameta.org/metals/docs/editors/new-editor.html\\n\\n## Contributors\\n\\nBig thanks to all the contributors who contributed to this release. In\\nparticular, I want to thank the following people:\\n\\n- Jorge Vicente Cantero (@jvican) for his great work in Bloop and helping out\\n with unblocking a lot of Metals issues on the build side. Most the heavy\\n lifting in \\"simple installation\\" is provided by Bloop.\\n- Gabriele Petronella (@gabro) for his great work on the VS Code plugin and\\n heroic code reviews of multiple large PRs (of which one that was +12,645\\n \u22121,126!!).\\n- Alexey Alekhin (@laughedelic) for his great work on the Atom `ide-scala`\\n package.\\n- Eugene Burmako (@xeno-by) for close collaboration on Scalameta and SemanticDB\\n that made the features in this release possible.\\n- Justin Kaeser (@jastice) from Jetbrains for collaboration on the Build Server\\n Protocol specification and bsp4j library.\\n\\n```sh\\n$ git shortlog -sn --no-merges v0.1.0..v0.3.1\\n\xd3lafur P\xe1ll Geirsson\\nGabriele Petronella\\nCorey O\'Connor\\nPavel Logvinov\\nCody Allen\\n```"}]}')}}]); \ No newline at end of file diff --git a/assets/js/e38d6f3f.487438a6.js b/assets/js/e38d6f3f.324c49ce.js similarity index 59% rename from assets/js/e38d6f3f.487438a6.js rename to assets/js/e38d6f3f.324c49ce.js index 4f974adb882..c84a56db476 100644 --- a/assets/js/e38d6f3f.487438a6.js +++ b/assets/js/e38d6f3f.324c49ce.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4355],{1863:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/22","page":22,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/21","nextPage":"/metals/blog/page/23","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4355],{1863:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/22","page":22,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/21","nextPage":"/metals/blog/page/23","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/e82430ca.2c9e5e25.js b/assets/js/e82430ca.340c4767.js similarity index 59% rename from assets/js/e82430ca.2c9e5e25.js rename to assets/js/e82430ca.340c4767.js index c570ffbab8b..602b8eedd15 100644 --- a/assets/js/e82430ca.2c9e5e25.js +++ b/assets/js/e82430ca.340c4767.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5411],{2121:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/47","page":47,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/46","nextPage":"/metals/blog/page/48","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5411],{2121:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/47","page":47,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/46","nextPage":"/metals/blog/page/48","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/e879be1f.7defae35.js b/assets/js/e879be1f.a12b43d8.js similarity index 59% rename from assets/js/e879be1f.7defae35.js rename to assets/js/e879be1f.a12b43d8.js index 38d56c316a3..3fc0957bcb9 100644 --- a/assets/js/e879be1f.7defae35.js +++ b/assets/js/e879be1f.a12b43d8.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7591],{6213:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/45","page":45,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/44","nextPage":"/metals/blog/page/46","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7591],{6213:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/45","page":45,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/44","nextPage":"/metals/blog/page/46","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/eac4f91f.2a7673b3.js b/assets/js/eac4f91f.460a2a59.js similarity index 59% rename from assets/js/eac4f91f.2a7673b3.js rename to assets/js/eac4f91f.460a2a59.js index 334eab22d3a..8731e76fa97 100644 --- a/assets/js/eac4f91f.2a7673b3.js +++ b/assets/js/eac4f91f.460a2a59.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3808],{3808:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/52","page":52,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/51","nextPage":"/metals/blog/page/53","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3808],{3808:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/52","page":52,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/51","nextPage":"/metals/blog/page/53","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f78a808a.8a81bc2f.js b/assets/js/f78a808a.8a81bc2f.js deleted file mode 100644 index 453116c6fea..00000000000 --- a/assets/js/f78a808a.8a81bc2f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7962],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function i(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function n(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function r(t){for(var e=1;e=0||(i[a]=t[a]);return i}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(i[a]=t[a])}return i}var s=l.createContext({}),o=function(t){var e=l.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},p=function(t){var e=o(t.components);return l.createElement(s.Provider,{value:e},t.children)},h="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,i=t.mdxType,n=t.originalType,s=t.parentName,p=m(t,["components","mdxType","originalType","parentName"]),h=o(a),c=i,k=h["".concat(s,".").concat(c)]||h[c]||u[c]||n;return a?l.createElement(k,r(r({ref:e},p),{},{components:a})):l.createElement(k,r({ref:e},p))}));function k(t,e){var a=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var n=a.length,r=new Array(n);r[0]=c;var m={};for(var s in e)hasOwnProperty.call(e,s)&&(m[s]=e[s]);m.originalType=t,m[h]="string"==typeof t?t:i,r[1]=m;for(var o=2;o{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>k,frontMatter:()=>m,metadata:()=>o,toc:()=>h});var l=a(7462),i=a(3366),n=(a(7294),a(3905)),r=["components"],m={author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},s=void 0,o={permalink:"/metals/blog/2023/08/28/silver",source:"@site/blog/2023-08-28-silver.md",title:"Metals v1.0.1 - Silver",description:"We're happy to announce the release of Metals v1.0.1, which comes with",date:"2023-08-28T00:00:00.000Z",formattedDate:"August 28, 2023",tags:[],readingTime:7.85,hasTruncateMarker:!1,authors:[{name:"Jakub Ciesluk",url:"https://github.com/jkciesluk",imageURL:"https://github.com/jkciesluk.png"}],frontMatter:{author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},nextItem:{title:"Metals v1.0.0 - Silver",permalink:"/metals/blog/2023/07/19/silver"}},p={authorsImageUrls:[void 0]},h=[{value:"TL;DR",id:"tldr",level:2},{value:"Completions in Java files",id:"completions-in-java-files",level:2},{value:"Liveness monitor",id:"liveness-monitor",level:2},{value:"Improvements for enums",id:"improvements-for-enums",level:2},{value:"Semantic highlighting",id:"semantic-highlighting",level:2},{value:"Plugin authors",id:"plugin-authors",level:2},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.0.1 (2023-08-28)",id:"v101-2023-08-28",level:2}],u={toc:h},c="wrapper";function k(t){var e=t.components,a=(0,i.Z)(t,r);return(0,n.kt)(c,(0,l.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We're happy to announce the release of Metals v1.0.1, which comes with\na couple of exciting new features and stability improvements."),(0,n.kt)("table",null,(0,n.kt)("tbody",null,(0,n.kt)("tr",null,(0,n.kt)("td",null,"Commits since last release"),(0,n.kt)("td",{align:"center"},"86")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Merged PRs"),(0,n.kt)("td",{align:"center"},"78")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Contributors"),(0,n.kt)("td",{align:"center"},"13")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Closed issues"),(0,n.kt)("td",{align:"center"},"20")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"New features"),(0,n.kt)("td",{align:"center"},"4")))),(0,n.kt)("p",null,"For full details: ","[https://github.com/scalameta/metals/milestone/59?closed=1]","\n(",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/59?closed=1"},"https://github.com/scalameta/metals/milestone/59?closed=1"),")"),(0,n.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,n.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,n.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from ",(0,n.kt)("a",{parentName:"p",href:"https://lunatech.com"},"Lunatech")," along with contributors from\nthe community."),(0,n.kt)("h2",{id:"tldr"},"TL;DR"),(0,n.kt)("p",null,"Check out ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#completions-in-java-files"},"Completions in java files")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#liveness-monitor"},"Liveness monitor")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#improvements-for-enums"},"Improvements for enums")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#semantic-highlighting"},"Semantic highlighting")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#miscellaneous"},"Miscellaneous")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#plugin-authors"},"Plugin authors"))),(0,n.kt)("h2",{id:"completions-in-java-files"},"Completions in Java files"),(0,n.kt)("p",null,"Thanks to amazing work done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/VankaTaganai"},"VankaTaganai")," and further improvements by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"tgodzik"),",\nyou will be able to get completions in Java files. It should make\nworking with Java sources easier, though Metals will not strive to be a full Java language server."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/wLlh7ig.gif",alt:"java-completion"})),(0,n.kt)("h2",{id:"liveness-monitor"},"Liveness monitor"),(0,n.kt)("p",null,"Up to the current release, users would not be informed if something happened\nand the build server stopped responding. Thanks to ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")," Metals will now monitor the state\nof the build server and notify the user if it becomes unresponsive."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://imgur.com/R2T5x3t.png",alt:"not-responsive"})),(0,n.kt)("p",null,"Dismissing the notification will dismiss it for the current connection."),(0,n.kt)("h2",{id:"improvements-for-enums"},"Improvements for enums"),(0,n.kt)("p",null,"This release also brings in multiple fixes connected to enums: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"better highlighting on enum cases"),(0,n.kt)("li",{parentName:"ul"},"improved navigation on enum parameters"),(0,n.kt)("li",{parentName:"ul"},"multiple fixes on enum type parameters")),(0,n.kt)("p",null,"This great work was done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/tZrSDYC.gif",alt:"enum"})),(0,n.kt)("h2",{id:"semantic-highlighting"},"Semantic highlighting"),(0,n.kt)("p",null,"Semantic highlighting enables syntax highlighting based on knowledge from the compiler.\nThanks to this, users can have specific colors for parameters, methods, mutable ",(0,n.kt)("inlineCode",{parentName:"p"},"var"),"s, packages etc.\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it's ready\nto be turned on by default. You can always change this using ",(0,n.kt)("inlineCode",{parentName:"p"},"metals.enableSemanticHighlighting")," setting.\nSome editors also require enabling this feature in other places.\nIn VS Code, you also need to set ",(0,n.kt)("inlineCode",{parentName:"p"},"editor.semanticHighlighting.enabled")," to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("p",null,"More details can be found ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens"},"here"),"."),(0,n.kt)("h2",{id:"plugin-authors"},"Plugin authors"),(0,n.kt)("p",null,"Fixing the display of encoded test names for JUnit ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5485"},"here")," required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names."),(0,n.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"improvement: create java semanticdb info using JDK instead of javac CLI\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Go to definition for named constructor params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens misaligned in triple quote s-string\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Completion item resolve for symbolic names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't decode nor encode URIs\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"feature: Add hover on class,object,type def in Scala 2\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add proper Stable Presentation Compiler Support\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show completions ending with CURSOR\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: add ",(0,n.kt)("inlineCode",{parentName:"li"},"minimal")," option for inferred type decorations\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Implement all members with end marker\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: deduplicate NamedArgParams with Def params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")")),(0,n.kt)("h2",{id:"contributors"},"Contributors"),(0,n.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.0..v1.0.1\n21 Katarzyna Marek\n 21 Tomasz Godzik\n 19 Scalameta Bot\n 11 Jakub Ciesluk\n 4 scalameta-bot\n 3 tgodzik\n 1 Adrien Piquerez\n 1 Arthur McGibbon\n 1 J\u0119drzej Rochala\n 1 Panov Ivan\n 1 Vadim Chelyshov\n 1 dependabot[bot]\n 1 eason du\n")),(0,n.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,n.kt)("h2",{id:"v101-2023-08-28"},(0,n.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.0.1"},"v1.0.1")," (2023-08-28)"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1"},"Full Changelog")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"bugfix: Catch exception from the compiler when coursier api is on cla\u2026\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5586"},"#","5586"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.1 to 3.24.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5591"},"#","5591"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"create java semanticdb info using JDK instead of javac CLI\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5352"},"#","5352"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5579"},"#","5579"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight and definition for enum type params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5550"},"#","5550"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5434"},"#","5434"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add some more details about the release\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5574"},"#","5574"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5584"},"#","5584"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.1 to 9.21.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5582"},"#","5582"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.5 to 2.1.6\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5581"},"#","5581"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5580"},"#","5580"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't collect map, flatMap, withFilter in for-comprehension\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5552"},"#","5552"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.0 to 3.24.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5569"},"#","5569"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Try to fix issues with sbt integration tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5557"},"#","5557"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: unignore tests for dotty pc after c90ad6b\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5565"},"#","5565"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5549"},"#","5549"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5563"},"#","5563"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5564"},"#","5564"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't show build server not responding error just after coming out of idle\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5537"},"#","5537"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Go to definition for named constructor params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5541"},"#","5541"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5450"},"#","5450"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Semantic tokens misaligned in triple quote s-string\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5556"},"#","5556"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: InverseSemanticdbSymbols for symbolic names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5481"},"#","5481"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5533"},"#","5533"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5547"},"#","5547"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.23.4 to 3.24.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5546"},"#","5546"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Fix #5518: don't decode nor encode URIs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5519"},"#","5519"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5545"},"#","5545"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5544"},"#","5544"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't try formatting in auto releases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5551"},"#","5551"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: port ",(0,n.kt)("inlineCode",{parentName:"li"},"extension-methods-complex")," test fix from dotty\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5542"},"#","5542"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight enum cases correctly\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5529"},"#","5529"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"feat: Add hover on class,object,type def in Scala 2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5540"},"#","5540"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Fix lines numbers for CI testing\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5538"},"#","5538"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Set semantic highlighting to true by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5532"},"#","5532"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5530"},"#","5530"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: print better bracket suffix in label, Scala 3 completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5497"},"#","5497"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5535"},"#","5535"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5524"},"#","5524"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add proper Stable Presentation Support\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5476"},"#","5476"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix issues with select in debugger completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5526"},"#","5526"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5520"},"#","5520"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: emit type for enum cases when needed\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5501"},"#","5501"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Show direct members first\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5523"},"#","5523"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5485"},"#","5485"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5517"},"#","5517"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5515"},"#","5515"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5514"},"#","5514"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5513"},"#","5513"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5516"},"#","5516"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix type issue after last two PRs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5521"},"#","5521"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't show completions ending with CURSOR\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5196"},"#","5196"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show keywords or constructors on select\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5509"},"#","5509"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Make debug completions work for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5505"},"#","5505"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: monitor build server liveness\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5462"},"#","5462"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Automatically add colon to get better completions for Java\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5506"},"#","5506"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5499"},"#","5499"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5134"},"#","5134"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5287"},"#","5287"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.0 to 9.21.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5489"},"#","5489"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5488"},"#","5488"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5490"},"#","5490"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Bump scalatest to fix zip issue\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5495"},"#","5495"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add java completion\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5314"},"#","5314"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/VankaTaganai"},"VankaTaganai"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5493"},"#","5493"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5465"},"#","5465"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5491"},"#","5491"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5470"},"#","5470"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement:don't show types for match case for showInferredType\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5284"},"#","5284"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Implement all members with end marker\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5412"},"#","5412"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Fix memory leak in tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5477"},"#","5477"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.20.1 to 9.21.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5474"},"#","5474"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5473"},"#","5473"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Scala2 - deduplicate NamedArgParams with Def params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5466"},"#","5466"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5463"},"#","5463"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5381"},"#","5381"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Change release notes to properly show in VS Code\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5464"},"#","5464"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add release notes for Metals 1.0.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5453"},"#","5453"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f78a808a.e7e5eb54.js b/assets/js/f78a808a.e7e5eb54.js new file mode 100644 index 00000000000..92cc38e23cd --- /dev/null +++ b/assets/js/f78a808a.e7e5eb54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7962],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var l=a(7294);function i(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function n(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function r(t){for(var e=1;e=0||(i[a]=t[a]);return i}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(i[a]=t[a])}return i}var s=l.createContext({}),o=function(t){var e=l.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},p=function(t){var e=o(t.components);return l.createElement(s.Provider,{value:e},t.children)},h="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},c=l.forwardRef((function(t,e){var a=t.components,i=t.mdxType,n=t.originalType,s=t.parentName,p=m(t,["components","mdxType","originalType","parentName"]),h=o(a),c=i,k=h["".concat(s,".").concat(c)]||h[c]||u[c]||n;return a?l.createElement(k,r(r({ref:e},p),{},{components:a})):l.createElement(k,r({ref:e},p))}));function k(t,e){var a=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var n=a.length,r=new Array(n);r[0]=c;var m={};for(var s in e)hasOwnProperty.call(e,s)&&(m[s]=e[s]);m.originalType=t,m[h]="string"==typeof t?t:i,r[1]=m;for(var o=2;o{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>k,frontMatter:()=>m,metadata:()=>o,toc:()=>h});var l=a(7462),i=a(3366),n=(a(7294),a(3905)),r=["components"],m={author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},s=void 0,o={permalink:"/metals/blog/2023/08/28/silver",source:"@site/blog/2023-08-28-silver.md",title:"Metals v1.0.1 - Silver",description:"We're happy to announce the release of Metals v1.0.1, which comes with",date:"2023-08-28T00:00:00.000Z",formattedDate:"August 28, 2023",tags:[],readingTime:7.85,hasTruncateMarker:!1,authors:[{name:"Jakub Ciesluk",url:"https://github.com/jkciesluk",imageURL:"https://github.com/jkciesluk.png"}],frontMatter:{author:"Jakub Ciesluk",title:"Metals v1.0.1 - Silver",authorURL:"https://github.com/jkciesluk",authorImageURL:"https://github.com/jkciesluk.png"},prevItem:{title:"Metals v1.1.0 - Silver",permalink:"/metals/blog/2023/10/17/silver"},nextItem:{title:"Metals v1.0.0 - Silver",permalink:"/metals/blog/2023/07/19/silver"}},p={authorsImageUrls:[void 0]},h=[{value:"TL;DR",id:"tldr",level:2},{value:"Completions in Java files",id:"completions-in-java-files",level:2},{value:"Liveness monitor",id:"liveness-monitor",level:2},{value:"Improvements for enums",id:"improvements-for-enums",level:2},{value:"Semantic highlighting",id:"semantic-highlighting",level:2},{value:"Plugin authors",id:"plugin-authors",level:2},{value:"Miscellaneous",id:"miscellaneous",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Merged PRs",id:"merged-prs",level:2},{value:"v1.0.1 (2023-08-28)",id:"v101-2023-08-28",level:2}],u={toc:h},c="wrapper";function k(t){var e=t.components,a=(0,i.Z)(t,r);return(0,n.kt)(c,(0,l.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We're happy to announce the release of Metals v1.0.1, which comes with\na couple of exciting new features and stability improvements."),(0,n.kt)("table",null,(0,n.kt)("tbody",null,(0,n.kt)("tr",null,(0,n.kt)("td",null,"Commits since last release"),(0,n.kt)("td",{align:"center"},"86")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Merged PRs"),(0,n.kt)("td",{align:"center"},"78")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Contributors"),(0,n.kt)("td",{align:"center"},"13")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"Closed issues"),(0,n.kt)("td",{align:"center"},"20")),(0,n.kt)("tr",null,(0,n.kt)("td",null,"New features"),(0,n.kt)("td",{align:"center"},"4")))),(0,n.kt)("p",null,"For full details: ","[https://github.com/scalameta/metals/milestone/59?closed=1]","\n(",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/milestone/59?closed=1"},"https://github.com/scalameta/metals/milestone/59?closed=1"),")"),(0,n.kt)("p",null,"Metals is a language server for Scala that works with VS Code, Vim, Emacs and\nSublime Text. Metals is developed at the\n",(0,n.kt)("a",{parentName:"p",href:"https://scala.epfl.ch/"},"Scala Center")," and ",(0,n.kt)("a",{parentName:"p",href:"https://virtuslab.com"},"VirtusLab"),"\nwith the help from ",(0,n.kt)("a",{parentName:"p",href:"https://lunatech.com"},"Lunatech")," along with contributors from\nthe community."),(0,n.kt)("h2",{id:"tldr"},"TL;DR"),(0,n.kt)("p",null,"Check out ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/"},"https://scalameta.org/metals/"),", and\ngive Metals a try!"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#completions-in-java-files"},"Completions in java files")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#liveness-monitor"},"Liveness monitor")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#improvements-for-enums"},"Improvements for enums")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#semantic-highlighting"},"Semantic highlighting")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#miscellaneous"},"Miscellaneous")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#plugin-authors"},"Plugin authors"))),(0,n.kt)("h2",{id:"completions-in-java-files"},"Completions in Java files"),(0,n.kt)("p",null,"Thanks to amazing work done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/VankaTaganai"},"VankaTaganai")," and further improvements by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/tgodzik"},"tgodzik"),",\nyou will be able to get completions in Java files. It should make\nworking with Java sources easier, though Metals will not strive to be a full Java language server."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/wLlh7ig.gif",alt:"java-completion"})),(0,n.kt)("h2",{id:"liveness-monitor"},"Liveness monitor"),(0,n.kt)("p",null,"Up to the current release, users would not be informed if something happened\nand the build server stopped responding. Thanks to ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")," Metals will now monitor the state\nof the build server and notify the user if it becomes unresponsive."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://imgur.com/R2T5x3t.png",alt:"not-responsive"})),(0,n.kt)("p",null,"Dismissing the notification will dismiss it for the current connection."),(0,n.kt)("h2",{id:"improvements-for-enums"},"Improvements for enums"),(0,n.kt)("p",null,"This release also brings in multiple fixes connected to enums: "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"better highlighting on enum cases"),(0,n.kt)("li",{parentName:"ul"},"improved navigation on enum parameters"),(0,n.kt)("li",{parentName:"ul"},"multiple fixes on enum type parameters")),(0,n.kt)("p",null,"This great work was done by ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kasiaMarek"},"kasiaMarek")),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://i.imgur.com/tZrSDYC.gif",alt:"enum"})),(0,n.kt)("h2",{id:"semantic-highlighting"},"Semantic highlighting"),(0,n.kt)("p",null,"Semantic highlighting enables syntax highlighting based on knowledge from the compiler.\nThanks to this, users can have specific colors for parameters, methods, mutable ",(0,n.kt)("inlineCode",{parentName:"p"},"var"),"s, packages etc.\nFor the last half year, semantic highlighting was hidden behind a flag, but now we think it's ready\nto be turned on by default. You can always change this using ",(0,n.kt)("inlineCode",{parentName:"p"},"metals.enableSemanticHighlighting")," setting.\nSome editors also require enabling this feature in other places.\nIn VS Code, you also need to set ",(0,n.kt)("inlineCode",{parentName:"p"},"editor.semanticHighlighting.enabled")," to ",(0,n.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,n.kt)("p",null,"More details can be found ",(0,n.kt)("a",{parentName:"p",href:"https://scalameta.org/metals/blog/2023/03/02/aluminium#introduce-support-for-semantic-tokens"},"here"),"."),(0,n.kt)("h2",{id:"plugin-authors"},"Plugin authors"),(0,n.kt)("p",null,"Fixing the display of encoded test names for JUnit ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/pull/5485"},"here")," required changes in the extension API. This should not break anything, but you might want to adjust to display nicer test names."),(0,n.kt)("h2",{id:"miscellaneous"},"Miscellaneous"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"improvement: create java semanticdb info using JDK instead of javac CLI\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Go to definition for named constructor params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Semantic tokens misaligned in triple quote s-string\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Completion item resolve for symbolic names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't decode nor encode URIs\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"feature: Add hover on class,object,type def in Scala 2\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add proper Stable Presentation Compiler Support\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show completions ending with CURSOR\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: add ",(0,n.kt)("inlineCode",{parentName:"li"},"minimal")," option for inferred type decorations\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Implement all members with end marker\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: deduplicate NamedArgParams with Def params\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")")),(0,n.kt)("h2",{id:"contributors"},"Contributors"),(0,n.kt)("p",null,"Big thanks to everybody who contributed to this release or reported an issue!"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"$ git shortlog -sn --no-merges v1.0.0..v1.0.1\n21 Katarzyna Marek\n 21 Tomasz Godzik\n 19 Scalameta Bot\n 11 Jakub Ciesluk\n 4 scalameta-bot\n 3 tgodzik\n 1 Adrien Piquerez\n 1 Arthur McGibbon\n 1 J\u0119drzej Rochala\n 1 Panov Ivan\n 1 Vadim Chelyshov\n 1 dependabot[bot]\n 1 eason du\n")),(0,n.kt)("h2",{id:"merged-prs"},"Merged PRs"),(0,n.kt)("h2",{id:"v101-2023-08-28"},(0,n.kt)("a",{parentName:"h2",href:"https://github.com/scalameta/metals/tree/v1.0.1"},"v1.0.1")," (2023-08-28)"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/scalameta/metals/compare/v1.0.0...v1.0.1"},"Full Changelog")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Merged pull requests:")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"bugfix: Catch exception from the compiler when coursier api is on cla\u2026\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5586"},"#","5586"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.1 to 3.24.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5591"},"#","5591"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"create java semanticdb info using JDK instead of javac CLI\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5352"},"#","5352"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/Arthurm1"},"Arthurm1"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't enable * kind project syntax by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5579"},"#","5579"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight and definition for enum type params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5550"},"#","5550"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: offer amend to handle single file scala-cli config on new file\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5434"},"#","5434"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add some more details about the release\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5574"},"#","5574"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.3 to 1.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5584"},"#","5584"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.1 to 9.21.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5582"},"#","5582"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update coursier from 2.1.5 to 2.1.6\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5581"},"#","5581"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.4 to 0.9.5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5580"},"#","5580"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't collect map, flatMap, withFilter in for-comprehension\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5552"},"#","5552"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.24.0 to 3.24.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5569"},"#","5569"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Try to fix issues with sbt integration tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5557"},"#","5557"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: unignore tests for dotty pc after c90ad6b\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5565"},"#","5565"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update cli_3, scala-cli-bsp from 1.0.2 to 1.0.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5549"},"#","5549"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.2 to 0.9.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5563"},"#","5563"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update xnio-nio from 3.8.9.Final to 3.8.10.Final\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5564"},"#","5564"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: don't show build server not responding error just after coming out of idle\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5537"},"#","5537"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Go to definition for named constructor params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5541"},"#","5541"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Add date and time to reports and backup log files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5450"},"#","5450"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Semantic tokens misaligned in triple quote s-string\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5556"},"#","5556"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: InverseSemanticdbSymbols for symbolic names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5481"},"#","5481"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: suggest correct arg name completions for lambda expressions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5533"},"#","5533"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.9.0 to 0.9.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5547"},"#","5547"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update protobuf-java from 3.23.4 to 3.24.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5546"},"#","5546"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Fix #5518: don't decode nor encode URIs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5519"},"#","5519"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/adpi2"},"adpi2"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-welcome from 0.3.1 to 0.3.2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5545"},"#","5545"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Add support for Scala 3.3.1-RC5\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5544"},"#","5544"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't try formatting in auto releases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5551"},"#","5551"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: port ",(0,n.kt)("inlineCode",{parentName:"li"},"extension-methods-complex")," test fix from dotty\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5542"},"#","5542"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: highlight enum cases correctly\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5529"},"#","5529"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"feat: Add hover on class,object,type def in Scala 2\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5540"},"#","5540"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Fix lines numbers for CI testing\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5538"},"#","5538"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Set semantic highlighting to true by default\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5532"},"#","5532"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't report tokenizer errors as stale\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5530"},"#","5530"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: print better bracket suffix in label, Scala 3 completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5497"},"#","5497"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Support Java when using sbt server via BSP\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5535"},"#","5535"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add info about the versioning strategy\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5524"},"#","5524"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add proper Stable Presentation Support\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5476"},"#","5476"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/rochala"},"rochala"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix issues with select in debugger completions\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5526"},"#","5526"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: do not emit cases in pattern match as enum cases\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5520"},"#","5520"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: emit type for enum cases when needed\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5501"},"#","5501"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Show direct members first\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5523"},"#","5523"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: accommodate junit encoded test names\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5485"},"#","5485"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.11 to 3.7.12\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5517"},"#","5517"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scribe, scribe-file, scribe-slf4j from 3.11.8 to 3.11.9\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5515"},"#","5515"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update guava from 32.1.1-jre to 32.1.2-jre\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5514"},"#","5514"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scala-debug-adapter from 3.1.3 to 3.1.4\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5513"},"#","5513"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.26 to 0.9.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5516"},"#","5516"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Fix type issue after last two PRs\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5521"},"#","5521"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Don't show completions ending with CURSOR\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5196"},"#","5196"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Don't show keywords or constructors on select\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5509"},"#","5509"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Make debug completions work for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5505"},"#","5505"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: monitor build server liveness\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5462"},"#","5462"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Automatically add colon to get better completions for Java\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5506"},"#","5506"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): bump clsx from 1.2.1 to 2.0.0 in /website\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5499"},"#","5499"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dependabot%5Bbot%5D"},"dependabot[bot]"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: better heuristic for fixing imports unpon file move\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5134"},"#","5134"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: show args completions for all matching overloaded methods\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5287"},"#","5287"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.21.0 to 9.21.1\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5489"},"#","5489"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update semanticdb-java from 0.8.24 to 0.8.26\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5488"},"#","5488"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt, scripted-plugin from 1.9.2 to 1.9.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5490"},"#","5490"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: Bump scalatest to fix zip issue\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5495"},"#","5495"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"Add java completion\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5314"},"#","5314"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/VankaTaganai"},"VankaTaganai"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: hover on nested selectable\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5493"},"#","5493"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: Docstring on apply method\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5465"},"#","5465"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update scalafmt-core, scalafmt-dynamic from 3.7.10 to 3.7.11\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5491"},"#","5491"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"bugfix: adjust parsing ",(0,n.kt)("inlineCode",{parentName:"li"},"ScalafmtConfig")," for ",(0,n.kt)("inlineCode",{parentName:"li"},"StandardConvention")," layout\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5470"},"#","5470"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement:don't show types for match case for showInferredType\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5284"},"#","5284"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/doofin"},"doofin"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Implement all members with end marker\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5412"},"#","5412"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"fix: Fix memory leak in tests\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5477"},"#","5477"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jkciesluk"},"jkciesluk"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update flyway-core from 9.20.1 to 9.21.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5474"},"#","5474"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"build(deps): Update sbt-mima-plugin from 1.1.2 to 1.1.3\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5473"},"#","5473"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta-bot"},"scalameta-bot"),")"),(0,n.kt)("li",{parentName:"ul"},"Scala2 - deduplicate NamedArgParams with Def params\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5466"},"#","5466"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/dos65"},"dos65"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Don't show semantic tokens warning for Java files\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5463"},"#","5463"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"improvement: restart sbt after java home change\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5381"},"#","5381"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/kasiaMarek"},"kasiaMarek"),")"),(0,n.kt)("li",{parentName:"ul"},"chore: Change release notes to properly show in VS Code\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5464"},"#","5464"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")"),(0,n.kt)("li",{parentName:"ul"},"docs: Add release notes for Metals 1.0.0\n",(0,n.kt)("a",{parentName:"li",href:"https://github.com/scalameta/metals/pull/5453"},"#","5453"),"\n(",(0,n.kt)("a",{parentName:"li",href:"https://github.com/tgodzik"},"tgodzik"),")")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f87b843d.ecc2bc7f.js b/assets/js/f87b843d.29747dce.js similarity index 59% rename from assets/js/f87b843d.ecc2bc7f.js rename to assets/js/f87b843d.29747dce.js index 3810475ff0d..1d4cda22fad 100644 --- a/assets/js/f87b843d.ecc2bc7f.js +++ b/assets/js/f87b843d.29747dce.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2726],{6272:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/49","page":49,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/48","nextPage":"/metals/blog/page/50","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2726],{6272:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/49","page":49,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/48","nextPage":"/metals/blog/page/50","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/f9150bb6.498d1f53.js b/assets/js/f9150bb6.db2c4c30.js similarity index 79% rename from assets/js/f9150bb6.498d1f53.js rename to assets/js/f9150bb6.db2c4c30.js index 60d7f28791e..5415dfeeff3 100644 --- a/assets/js/f9150bb6.498d1f53.js +++ b/assets/js/f9150bb6.db2c4c30.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[50],{1455:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/48","page":48,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/47","nextPage":"/metals/blog/page/49","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[50],{1455:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/48","page":48,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/47","nextPage":"/metals/blog/page/49","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/fb11efee.e7e249b2.js b/assets/js/fb11efee.6a35c593.js similarity index 59% rename from assets/js/fb11efee.e7e249b2.js rename to assets/js/fb11efee.6a35c593.js index b76e32b08c2..30d673bf7e4 100644 --- a/assets/js/fb11efee.e7e249b2.js +++ b/assets/js/fb11efee.6a35c593.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3758],{8027:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/21","page":21,"postsPerPage":1,"totalPages":58,"totalCount":58,"previousPage":"/metals/blog/page/20","nextPage":"/metals/blog/page/22","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3758],{8027:e=>{e.exports=JSON.parse('{"permalink":"/metals/blog/page/21","page":21,"postsPerPage":1,"totalPages":59,"totalCount":59,"previousPage":"/metals/blog/page/20","nextPage":"/metals/blog/page/22","blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/main.2c03a189.js b/assets/js/main.2c03a189.js new file mode 100644 index 00000000000..f161c189590 --- /dev/null +++ b/assets/js/main.2c03a189.js @@ -0,0 +1,2 @@ +/*! For license information please see main.2c03a189.js.LICENSE.txt */ +(self.webpackChunk=self.webpackChunk||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"00813942":[function(){return n.e(517).then(n.bind(n,6811))},"@site/blog/2022-07-04-aluminium.md?truncated=true",6811],"01456d3b":[function(){return n.e(7099).then(n.t.bind(n,6777,19))},"~blog/default/metals-blog-page-14-de1.json",6777],"01706c44":[function(){return n.e(3315).then(n.bind(n,2665))},"@site/blog/2022-06-03-aluminium.md",2665],"022bb252":[function(){return n.e(5975).then(n.t.bind(n,685,19))},"~blog/default/metals-blog-page-51-bb4.json",685],"03b2a692":[function(){return n.e(5949).then(n.bind(n,4754))},"@site/blog/2021-02-24-tungsten.md",4754],"0529b5a5":[function(){return n.e(6002).then(n.bind(n,5235))},"@site/blog/2021-05-31-tungsten.md",5235],"07ab39c8":[function(){return n.e(8031).then(n.t.bind(n,2218,19))},"~blog/default/metals-blog-page-38-ec7.json",2218],"07c8b2d8":[function(){return n.e(8131).then(n.t.bind(n,2625,19))},"~blog/default/metals-blog-page-33-38b.json",2625],"08b44b83":[function(){return n.e(8821).then(n.bind(n,7e3))},"@site/target/docs/features/scripts.md",7e3],"0beb67bc":[function(){return n.e(7705).then(n.bind(n,7853))},"@site/blog/2020-09-21-lithium.md?truncated=true",7853],"0c130405":[function(){return n.e(198).then(n.t.bind(n,2880,19))},"~blog/default/metals-blog-page-12-a5a.json",2880],"0c485ec1":[function(){return n.e(190).then(n.bind(n,4346))},"@site/blog/2019-09-12-thorium.md?truncated=true",4346],"0d126b35":[function(){return n.e(6622).then(n.t.bind(n,4560,19))},"~blog/default/metals-blog-page-17-c89.json",4560],"0d7cd0de":[function(){return n.e(3164).then(n.bind(n,2410))},"@site/blog/2020-01-10-cobalt.md",2410],"0d8e09e6":[function(){return n.e(2063).then(n.t.bind(n,9246,19))},"~blog/default/metals-blog-page-25-e19.json",9246],"0e2b725e":[function(){return n.e(4256).then(n.t.bind(n,4893,19))},"~blog/default/metals-blog-page-40-1c4.json",4893],"143cbec3":[function(){return n.e(119).then(n.t.bind(n,8681,19))},"~blog/default/metals-blog-page-3-7ee.json",8681],"1512f001":[function(){return n.e(569).then(n.t.bind(n,7893,19))},"~blog/default/metals-blog-page-57-0bb.json",7893],"15b090c7":[function(){return n.e(3214).then(n.t.bind(n,5359,19))},"~blog/default/metals-blog-page-5-02c.json",5359],"17823fa5":[function(){return n.e(3553).then(n.bind(n,2964))},"@site/target/docs/build-tools/mill.md",2964],17896441:[function(){return Promise.all([n.e(532),n.e(394),n.e(7918)]).then(n.bind(n,8945))},"@theme/DocItem",8945],"17a26cd8":[function(){return n.e(2822).then(n.bind(n,8552))},"@site/blog/2020-12-19-lithium.md",8552],"1a1ad967":[function(){return n.e(1977).then(n.bind(n,1217))},"@site/blog/2021-02-24-tungsten.md?truncated=true",1217],"1a4e3797":[function(){return Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,1473))},"@theme/SearchPage",1473],"1a79d8f3":[function(){return n.e(4167).then(n.t.bind(n,9536,19))},"~blog/default/metals-blog-page-41-7a1.json",9536],"1b9d5eae":[function(){return n.e(9624).then(n.bind(n,3483))},"@site/blog/2019-09-23-thorium.md",3483],"1be78505":[function(){return Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963))},"@theme/DocPage",9963],"1ed82af1":[function(){return n.e(9135).then(n.bind(n,9735))},"@site/target/docs/features/code-actions.md",9735],"205a1816":[function(){return n.e(8778).then(n.bind(n,345))},"@site/blog/2022-08-10-aluminium.md?truncated=true",345],"2131c61b":[function(){return n.e(8797).then(n.bind(n,6243))},"@site/blog/2020-07-23-configuring-a-client.md?truncated=true",6243],"21dcb4fb":[function(){return n.e(5642).then(n.t.bind(n,6858,19))},"~blog/default/metals-blog-page-50-6cb.json",6858],"2216edbc":[function(){return n.e(9253).then(n.bind(n,5786))},"@site/blog/2018-12-06-iron.md?truncated=true",5786],"22c2c9b0":[function(){return n.e(3980).then(n.t.bind(n,1940,19))},"~blog/default/metals-blog-page-4-20a.json",1940],"2328fd63":[function(){return n.e(9043).then(n.bind(n,4727))},"@site/blog/2020-02-26-cobalt.md?truncated=true",4727],"2387c651":[function(){return n.e(2036).then(n.t.bind(n,2217,19))},"~blog/default/metals-blog-page-30-56d.json",2217],"243d370e":[function(){return n.e(5016).then(n.bind(n,9410))},"@site/blog/2022-04-26-aluminium.md?truncated=true",9410],"25446b1f":[function(){return n.e(3681).then(n.bind(n,1664))},"@site/target/docs/build-tools/maven.md",1664],"26934d81":[function(){return n.e(5264).then(n.bind(n,1791))},"@site/target/docs/build-tools/sbt.md",1791],"27feb48a":[function(){return n.e(3351).then(n.bind(n,9423))},"@site/target/docs/diagrams/instruction.md",9423],28906591:[function(){return n.e(1648).then(n.bind(n,5691))},"@site/target/docs/integrations/new-editor.md",5691],"291a747b":[function(){return n.e(7205).then(n.t.bind(n,6116,19))},"~blog/default/metals-blog-page-18-eff.json",6116],"2c5862c4":[function(){return n.e(4019).then(n.t.bind(n,9499,19))},"~blog/default/metals-blog-page-37-3bb.json",9499],"2d522398":[function(){return n.e(6251).then(n.bind(n,4781))},"@site/blog/2019-02-01-tin.md?truncated=true",4781],"2e1ac853":[function(){return n.e(2041).then(n.t.bind(n,5023,19))},"~blog/default/metals-blog-page-20-935.json",5023],"2ff5ad1b":[function(){return n.e(8840).then(n.bind(n,5212))},"@site/target/docs/integrations/debug-adapter-protocol.md",5212],30083153:[function(){return n.e(7372).then(n.bind(n,7858))},"@site/blog/2023-01-02-aluminium.md?truncated=true",7858],"309b8d38":[function(){return n.e(1753).then(n.bind(n,6263))},"@site/blog/2019-06-11-radium.md?truncated=true",6263],"35bd5843":[function(){return n.e(9632).then(n.bind(n,7297))},"@site/blog/2020-11-06-sbt-BSP-support.md?truncated=true",7297],"35db43ad":[function(){return n.e(366).then(n.bind(n,600))},"@site/blog/2023-10-17-silver.md?truncated=true",600],"36958d65":[function(){return n.e(7429).then(n.t.bind(n,3121,19))},"~blog/default/metals-blog-page-16-975.json",3121],"3839ad99":[function(){return n.e(2882).then(n.bind(n,6355))},"@site/blog/2021-11-03-tungsten.md",6355],"38b82327":[function(){return n.e(6573).then(n.bind(n,730))},"@site/blog/2022-02-23-towards-better-releases.md",730],"39178d36":[function(){return n.e(3710).then(n.bind(n,3007))},"@site/target/docs/editors/online-ides.md",3007],"3cf1e930":[function(){return n.e(4408).then(n.bind(n,9048))},"@site/blog/2020-11-20-lithium.md?truncated=true",9048],"3d6e158a":[function(){return n.e(448).then(n.bind(n,9847))},"@site/blog/2018-12-14-iron.md",9847],"3f977ffc":[function(){return n.e(6469).then(n.bind(n,3830))},"@site/blog/2020-03-19-cobalt.md?truncated=true",3830],"400a1ae3":[function(){return n.e(5014).then(n.bind(n,2141))},"@site/blog/2021-02-02-metals-retro-part1.md",2141],"404bab64":[function(){return n.e(2240).then(n.t.bind(n,1681,19))},"~blog/default/metals-blog-page-54-0ed.json",1681],"432804b2":[function(){return n.e(9191).then(n.bind(n,189))},"@site/target/docs/editors/user-configuration.md",189],"43bfba49":[function(){return n.e(8988).then(n.t.bind(n,2266,19))},"~blog/default/metals-blog-page-59-77a.json",2266],"4844a7cd":[function(){return n.e(2975).then(n.bind(n,417))},"@site/blog/2019-01-22-bloom-filters.md",417],"48a1d228":[function(){return n.e(4694).then(n.bind(n,7195))},"@site/blog/2021-02-02-metals-retro-part1.md?truncated=true",7195],49773175:[function(){return n.e(4100).then(n.bind(n,357))},"@site/target/docs/editors/vim.md",357],"4ad5693c":[function(){return n.e(2859).then(n.t.bind(n,1277,19))},"~blog/default/metals-blog-page-6-d90.json",1277],"4af6d88b":[function(){return n.e(8476).then(n.t.bind(n,4247,19))},"~blog/default/metals-blog-page-56-a80.json",4247],"4e26f5de":[function(){return n.e(4015).then(n.bind(n,2748))},"@site/blog/2021-01-19-lithium.md",2748],"508e58e7":[function(){return n.e(9952).then(n.bind(n,7732))},"@site/target/docs/troubleshooting/faq.md",7732],"515fa385":[function(){return n.e(3333).then(n.t.bind(n,9035,19))},"~blog/default/metals-blog-page-15-ac6.json",9035],"5346cb4e":[function(){return n.e(8563).then(n.bind(n,7735))},"@site/blog/2023-07-19-silver.md?truncated=true",7735],"53c82ccc":[function(){return n.e(98).then(n.bind(n,4675))},"@site/blog/2019-04-12-mercury.md?truncated=true",4675],"55a95aa3":[function(){return n.e(48).then(n.bind(n,8175))},"@site/blog/2021-11-03-tungsten.md?truncated=true",8175],"560d1d3c":[function(){return n.e(5890).then(n.bind(n,7830))},"@site/blog/2020-12-19-lithium.md?truncated=true",7830],"56bbb0f8":[function(){return n.e(504).then(n.bind(n,3329))},"@site/blog/2020-02-26-cobalt.md",3329],"56cef870":[function(){return n.e(1566).then(n.bind(n,3947))},"@site/blog/2022-02-23-towards-better-releases.md?truncated=true",3947],"57d9d0fa":[function(){return n.e(5865).then(n.t.bind(n,9775,19))},"~blog/default/metals-blog-page-24-d22.json",9775],"5980cb66":[function(){return n.e(9707).then(n.t.bind(n,9479,19))},"~blog/default/metals-blog-page-13-35f.json",9479],"5d80abc8":[function(){return n.e(9282).then(n.bind(n,9041))},"@site/target/docs/integrations/test-explorer.md",9041],"5d99d17c":[function(){return n.e(9820).then(n.bind(n,2365))},"@site/target/docs/contributors/getting-started.md",2365],"5e9f5e1a":[function(){return Promise.resolve().then(n.bind(n,6809))},"@generated/docusaurus.config",6809],"5ec07b8b":[function(){return n.e(9537).then(n.bind(n,9100))},"@site/blog/2020-09-21-lithium.md",9100],"6079a6bf":[function(){return n.e(490).then(n.bind(n,4191))},"@site/blog/2019-02-01-tin.md",4191],"615063b9":[function(){return n.e(9783).then(n.bind(n,9526))},"@site/blog/2018-12-14-iron.md?truncated=true",9526],"627fd629":[function(){return n.e(6013).then(n.bind(n,4660))},"@site/blog/2021-04-06-tungsten.md?truncated=true",4660],"643c52ed":[function(){return n.e(984).then(n.bind(n,597))},"@site/blog/2020-08-19-lithium.md?truncated=true",597],"64912a2b":[function(){return n.e(3104).then(n.t.bind(n,3813,19))},"~blog/default/metals-blog-page-28-689.json",3813],"64d6e9a7":[function(){return n.e(8377).then(n.bind(n,8593))},"@site/blog/2020-11-26-lithium.md?truncated=true",8593],"6722346e":[function(){return n.e(833).then(n.t.bind(n,7489,19))},"~blog/default/metals-blog-page-26-c9a.json",7489],"674a37b6":[function(){return n.e(7472).then(n.t.bind(n,3330,19))},"~blog/default/metals-blog-page-32-721.json",3330],"6999e097":[function(){return n.e(3282).then(n.bind(n,2203))},"@site/blog/2020-07-15-lithium.md?truncated=true",2203],"6a125964":[function(){return n.e(6466).then(n.bind(n,8040))},"@site/blog/2020-07-01-lithium.md",8040],"6a60bac4":[function(){return n.e(6162).then(n.t.bind(n,815,19))},"~blog/default/metals-blog-page-9-d5d.json",815],"6ea6fc78":[function(){return n.e(6999).then(n.bind(n,9747))},"@site/target/docs/contributors/updating-website.md",9747],"6ed4e313":[function(){return n.e(8607).then(n.t.bind(n,6711,19))},"~blog/default/metals-blog-page-7-2e5.json",6711],"70f9df55":[function(){return n.e(4797).then(n.bind(n,707))},"@site/blog/2019-09-02-thorium.md?truncated=true",707],"71846d42":[function(){return n.e(9777).then(n.bind(n,1400))},"@site/blog/2022-01-12-aluminium.md?truncated=true",1400],"71926bbd":[function(){return n.e(328).then(n.bind(n,4944))},"@site/blog/2020-04-12-mercury.md?truncated=true",4944],"73043cbc":[function(){return n.e(224).then(n.t.bind(n,3381,19))},"~blog/default/metals-blog-page-53-d27.json",3381],"7475f9e7":[function(){return n.e(463).then(n.bind(n,4520))},"@site/blog/2023-04-21-aluminium.md?truncated=true",4520],"74f6f7a6":[function(){return n.e(1295).then(n.bind(n,6742))},"@site/blog/2019-04-12-mercury.md",6742],"752eae27":[function(){return n.e(8984).then(n.bind(n,111))},"@site/blog/2021-10-26-tungsten.md?truncated=true",111],"75d4c63e":[function(){return n.e(3726).then(n.bind(n,4538))},"@site/blog/2019-09-12-thorium.md",4538],"7745fd32":[function(){return n.e(5372).then(n.bind(n,6463))},"@site/blog/2022-04-28-aluminium.md",6463],"77892e30":[function(){return n.e(202).then(n.bind(n,2366))},"@site/blog/2020-11-10-lithium.md?truncated=true",2366],"786192e2":[function(){return n.e(1557).then(n.t.bind(n,4100,19))},"~blog/default/metals-blog-page-58-0c4.json",4100],"794071d8":[function(){return n.e(989).then(n.bind(n,2459))},"@site/blog/2018-12-12-fast-goto-definition.md",2459],79920604:[function(){return n.e(7785).then(n.t.bind(n,8064,19))},"~blog/default/metals-blog-page-35-352.json",8064],"7af95c3c":[function(){return n.e(3470).then(n.t.bind(n,6708,19))},"~blog/default/metals-blog-page-19-203.json",6708],"7c0269a6":[function(){return n.e(5430).then(n.t.bind(n,1494,19))},"~blog/default/metals-blog-page-34-212.json",1494],"7d4f68c1":[function(){return n.e(1733).then(n.bind(n,2589))},"@site/blog/2018-12-06-iron.md",2589],"7d61c055":[function(){return n.e(6583).then(n.bind(n,3597))},"@site/target/docs/build-tools/overview.md",3597],"7ea62e57":[function(){return n.e(9774).then(n.t.bind(n,9375,19))},"~blog/default/metals-blog-page-10-3da.json",9375],"801caf39":[function(){return n.e(5561).then(n.bind(n,6049))},"@site/blog/2021-05-17-tungsten.md?truncated=true",6049],"80d94b51":[function(){return n.e(2884).then(n.bind(n,7018))},"@site/blog/2019-09-02-thorium.md",7018],"814f3328":[function(){return n.e(2535).then(n.t.bind(n,5641,19))},"~blog/default/blog-post-list-prop-default.json",5641],"81c1ce9e":[function(){return n.e(5061).then(n.bind(n,7526))},"@site/blog/2022-07-04-aluminium.md",7526],"82e8fb15":[function(){return n.e(2010).then(n.bind(n,463))},"@site/blog/2020-08-19-lithium.md",463],"88d8e9a5":[function(){return n.e(6776).then(n.bind(n,2368))},"@site/blog/2021-10-26-tungsten.md",2368],"8947246e":[function(){return n.e(5130).then(n.bind(n,8152))},"@site/blog/2020-07-15-lithium.md",8152],"8a0b8ece":[function(){return n.e(4782).then(n.bind(n,1344))},"@site/target/docs/editors/sublime.md",1344],"8ac2579a":[function(){return n.e(5358).then(n.bind(n,5030))},"@site/blog/2023-10-17-silver.md",5030],"8b7e7f73":[function(){return n.e(8933).then(n.bind(n,4572))},"@site/blog/2018-12-12-fast-goto-definition.md?truncated=true",4572],"8ead6264":[function(){return n.e(4391).then(n.bind(n,3567))},"@site/blog/2021-05-31-tungsten.md?truncated=true",3567],"8f9f6130":[function(){return n.e(1667).then(n.bind(n,3305))},"@site/blog/2022-06-03-aluminium.md?truncated=true",3305],"905a60c6":[function(){return n.e(5518).then(n.bind(n,2894))},"@site/target/docs/troubleshooting/proxy.md",2894],"9349bfb9":[function(){return n.e(2287).then(n.bind(n,3775))},"@site/blog/2020-11-26-lithium.md",3775],"935f2afb":[function(){return n.e(53).then(n.t.bind(n,1109,19))},"~docs/default/version-current-metadata-prop-751.json",1109],"94015cb6":[function(){return n.e(6520).then(n.bind(n,6761))},"@site/target/docs/editors/emacs.md",6761],"94cc8923":[function(){return n.e(8059).then(n.bind(n,3410))},"@site/blog/2022-04-27-aluminium.md?truncated=true",3410],"96a3e035":[function(){return n.e(6499).then(n.bind(n,7407))},"@site/blog/2022-04-26-aluminium.md",7407],"970a5f4e":[function(){return n.e(6561).then(n.bind(n,4755))},"@site/target/docs/editors/vscode.md",4755],"97ce67ef":[function(){return n.e(4839).then(n.t.bind(n,8076,19))},"~blog/default/metals-blog-page-44-066.json",8076],"995bfa6d":[function(){return n.e(9242).then(n.t.bind(n,7851,19))},"~blog/default/metals-blog-page-31-e79.json",7851],"99d3dc3a":[function(){return n.e(713).then(n.bind(n,2265))},"@site/blog/2019-09-23-thorium.md?truncated=true",2265],"99d7db30":[function(){return n.e(382).then(n.bind(n,2977))},"@site/blog/2019-04-26-mercury.md?truncated=true",2977],"9a20f037":[function(){return n.e(8978).then(n.bind(n,6639))},"@site/blog/2022-04-28-aluminium.md?truncated=true",6639],"9a7faebf":[function(){return n.e(2174).then(n.t.bind(n,3704,19))},"~blog/default/metals-blog-page-2-4e4.json",3704],"9ae6eeaa":[function(){return n.e(3737).then(n.bind(n,9982))},"@site/blog/2019-01-22-bloom-filters.md?truncated=true",9982],"9b49e051":[function(){return n.e(3621).then(n.bind(n,4817))},"@site/target/docs/integrations/new-build-tool.md",4817],"9b4a23be":[function(){return n.e(5688).then(n.bind(n,8731))},"@site/target/docs/editors/overview.md",8731],"9e4087bc":[function(){return n.e(3608).then(n.bind(n,3169))},"@theme/BlogArchivePage",3169],"9ea6b57a":[function(){return n.e(3740).then(n.bind(n,996))},"@site/target/docs/integrations/decoration-protocol.md",996],a1f1bc88:[function(){return n.e(9567).then(n.bind(n,3393))},"@site/target/docs/integrations/tree-view-protocol.md",3393],a4b63d05:[function(){return n.e(3733).then(n.t.bind(n,4236,19))},"~blog/default/metals-blog-page-43-574.json",4236],a4c9fa90:[function(){return n.e(7602).then(n.bind(n,1295))},"@site/blog/2020-11-06-sbt-BSP-support.md",1295],a64b4ddf:[function(){return n.e(4583).then(n.bind(n,782))},"@site/blog/2020-11-20-lithium.md",782],a6aa9e1f:[function(){return Promise.all([n.e(532),n.e(394),n.e(6048),n.e(3089)]).then(n.bind(n,3269))},"@theme/BlogListPage",3269],a81ab01c:[function(){return n.e(9981).then(n.t.bind(n,793,19))},"~blog/default/metals-blog-page-8-b21.json",793],a91b50a6:[function(){return n.e(9641).then(n.t.bind(n,5646,19))},"~blog/default/metals-blog-page-55-048.json",5646],a935f661:[function(){return n.e(1239).then(n.t.bind(n,1612,19))},"~blog/default/metals-blog-page-46-b19.json",1612],ab2e7d85:[function(){return n.e(5359).then(n.bind(n,5507))},"@site/blog/2019-06-28-thorium.md",5507],abf165a1:[function(){return n.e(1976).then(n.bind(n,8932))},"@site/blog/2020-07-01-lithium.md?truncated=true",8932],ac2e449c:[function(){return n.e(4307).then(n.bind(n,205))},"@site/blog/2019-01-24-tin.md?truncated=true",205],ad29d74f:[function(){return n.e(7031).then(n.bind(n,4419))},"@site/blog/2021-09-06-tungsten.md?truncated=true",4419],ad57a4da:[function(){return n.e(2847).then(n.bind(n,9340))},"@site/blog/2020-04-12-mercury.md",9340],adb52a11:[function(){return n.e(9959).then(n.bind(n,8149))},"@site/target/docs/contributors/releasing.md",8149],adce20d1:[function(){return n.e(9505).then(n.t.bind(n,1050,19))},"~blog/default/metals-blog-page-39-273.json",1050],af8d2261:[function(){return n.e(2604).then(n.bind(n,6633))},"@site/blog/2021-09-06-tungsten.md",6633],b04d5738:[function(){return n.e(1457).then(n.bind(n,1613))},"@site/blog/2019-06-28-thorium.md?truncated=true",1613],b0577adc:[function(){return n.e(9026).then(n.bind(n,3958))},"@site/blog/2020-03-19-cobalt.md",3958],b28f3685:[function(){return n.e(3707).then(n.bind(n,4705))},"@site/blog/2019-06-11-radium.md",4705],b3904d08:[function(){return n.e(7528).then(n.bind(n,6450))},"@site/blog/2022-01-17-aluminium.md",6450],b54e7820:[function(){return n.e(9766).then(n.t.bind(n,6717,19))},"~blog/default/metals-blog-page-23-a00.json",6717],b79c2638:[function(){return n.e(7769).then(n.bind(n,2557))},"@site/target/docs/build-tools/gradle.md",2557],bb177581:[function(){return n.e(4663).then(n.bind(n,5931))},"@site/blog/2023-01-02-aluminium.md",5931],bc8294f9:[function(){return n.e(2665).then(n.bind(n,9146))},"@site/blog/2022-10-06-aluminium.md",9146],bcb36622:[function(){return n.e(9748).then(n.bind(n,7088))},"@site/blog/2022-03-08-aluminium.md?truncated=true",7088],bd301d6b:[function(){return n.e(6596).then(n.bind(n,7263))},"@site/blog/2021-07-14-tungsten.md?truncated=true",7263],bd78ee39:[function(){return n.e(9732).then(n.t.bind(n,1529,19))},"~blog/default/metals-blog-eef.json",1529],bdbe54cc:[function(){return n.e(9423).then(n.t.bind(n,3877,19))},"~blog/default/metals-blog-page-27-3d6.json",3877],bdc47ac0:[function(){return n.e(1157).then(n.bind(n,2630))},"@site/blog/2020-11-10-lithium.md",2630],bdea20ec:[function(){return n.e(1181).then(n.bind(n,3283))},"@site/blog/2021-09-16-tungsten.md",3283],bfd27103:[function(){return n.e(867).then(n.bind(n,2602))},"@site/blog/2022-03-08-aluminium.md",2602],c109e00d:[function(){return n.e(4131).then(n.bind(n,5591))},"@site/target/docs/acknowledgements/development.md",5591],c278e024:[function(){return n.e(1046).then(n.bind(n,1356))},"@site/blog/2020-05-04-lithium.md?truncated=true",1356],c4083f57:[function(){return n.e(4766).then(n.t.bind(n,1285,19))},"~blog/default/metals-blog-page-29-2a4.json",1285],c424153c:[function(){return n.e(2994).then(n.bind(n,7239))},"@site/blog/2020-04-10-cobalt.md",7239],c4f5d8e4:[function(){return n.e(4195).then(n.bind(n,2841))},"@site/src/pages/index.js",2841],c64e8655:[function(){return n.e(8784).then(n.bind(n,5579))},"@site/target/docs/contributors/project-goals.md",5579],c6da16b1:[function(){return n.e(7696).then(n.t.bind(n,6964,19))},"~blog/default/metals-blog-page-36-aa5.json",6964],c7875d0d:[function(){return n.e(758).then(n.bind(n,4409))},"@site/blog/2023-08-28-silver.md",4409],cabfa371:[function(){return n.e(4073).then(n.bind(n,4895))},"@site/blog/2022-01-12-aluminium.md",4895],cb899f97:[function(){return n.e(2057).then(n.t.bind(n,2310,19))},"~blog/default/metals-blog-page-42-d3a.json",2310],cc1c03c7:[function(){return n.e(8313).then(n.bind(n,1089))},"@site/blog/2023-03-02-aluminium.md?truncated=true",1089],cc709768:[function(){return n.e(8858).then(n.bind(n,7296))},"@site/blog/2021-01-19-lithium.md?truncated=true",7296],ccc49370:[function(){return Promise.all([n.e(532),n.e(394),n.e(6048),n.e(6103)]).then(n.bind(n,5203))},"@theme/BlogPostPage",5203],cfe9f849:[function(){return n.e(4117).then(n.bind(n,8262))},"@site/blog/2020-05-04-lithium.md",8262],d11fc459:[function(){return n.e(5780).then(n.bind(n,727))},"@site/blog/2021-04-20-tungsten.md?truncated=true",727],d24c97fd:[function(){return n.e(8255).then(n.bind(n,3051))},"@site/blog/2022-04-27-aluminium.md",3051],d3dc0327:[function(){return n.e(6105).then(n.bind(n,5563))},"@site/blog/2020-01-10-cobalt.md?truncated=true",5563],d4d282d4:[function(){return n.e(6373).then(n.bind(n,4414))},"@site/blog/2022-10-06-aluminium.md?truncated=true",4414],d7024f94:[function(){return n.e(8180).then(n.t.bind(n,2379,19))},"~blog/default/metals-blog-page-11-d73.json",2379],d8176b79:[function(){return n.e(1650).then(n.t.bind(n,5745,19))},"/home/runner/work/metals/metals/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],d8beb153:[function(){return n.e(9604).then(n.bind(n,9796))},"@site/blog/2023-07-17-workspace-folders.md",9796],d8cf581d:[function(){return n.e(3290).then(n.t.bind(n,2776,19))},"/home/runner/work/metals/metals/website/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],d94b0c5c:[function(){return n.e(7792).then(n.bind(n,2262))},"@site/blog/2021-05-17-tungsten.md",2262],da363e62:[function(){return n.e(5555).then(n.t.bind(n,7688,19))},"~blog/default/metals-blog-archive-d94.json",7688],db18f655:[function(){return n.e(4372).then(n.bind(n,607))},"@site/blog/2023-03-02-aluminium.md",607],dc0c48b3:[function(){return n.e(8534).then(n.bind(n,761))},"@site/blog/2020-07-23-configuring-a-client.md",761],dd4c9461:[function(){return n.e(8225).then(n.bind(n,7911))},"@site/blog/2023-04-21-aluminium.md",7911],df53e5ec:[function(){return n.e(450).then(n.bind(n,6093))},"@site/blog/2023-07-17-workspace-folders.md?truncated=true",6093],e2e5f5d1:[function(){return n.e(363).then(n.bind(n,6625))},"@site/blog/2022-01-17-aluminium.md?truncated=true",6625],e38d6f3f:[function(){return n.e(4355).then(n.t.bind(n,1863,19))},"~blog/default/metals-blog-page-22-3e0.json",1863],e68a2502:[function(){return n.e(6290).then(n.bind(n,6810))},"@site/blog/2019-04-26-mercury.md",6810],e82430ca:[function(){return n.e(5411).then(n.t.bind(n,2121,19))},"~blog/default/metals-blog-page-47-8cb.json",2121],e879be1f:[function(){return n.e(7591).then(n.t.bind(n,6213,19))},"~blog/default/metals-blog-page-45-113.json",6213],e882c012:[function(){return n.e(6275).then(n.bind(n,4102))},"@site/blog/2019-01-24-tin.md",4102],e8c5917f:[function(){return n.e(6633).then(n.bind(n,203))},"@site/blog/2022-08-10-aluminium.md",203],e9356b00:[function(){return n.e(608).then(n.bind(n,5800))},"@site/blog/2021-04-20-tungsten.md",5800],eac4f91f:[function(){return n.e(3808).then(n.t.bind(n,3808,19))},"~blog/default/metals-blog-page-52-e3a.json",3808],eae80572:[function(){return n.e(7457).then(n.bind(n,2470))},"@site/blog/2021-04-06-tungsten.md",2470],ed7c6679:[function(){return n.e(9025).then(n.bind(n,3463))},"@site/blog/2020-04-10-cobalt.md?truncated=true",3463],ef440da7:[function(){return n.e(2172).then(n.t.bind(n,4469,19))},"/home/runner/work/metals/metals/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],ef96a7a2:[function(){return n.e(600).then(n.t.bind(n,3769,19))},"/home/runner/work/metals/metals/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],f0507210:[function(){return n.e(9289).then(n.bind(n,2761))},"@site/target/docs/integrations/remote-language-server.md",2761],f1a7d268:[function(){return n.e(1228).then(n.bind(n,5761))},"@site/blog/2021-09-16-tungsten.md?truncated=true",5761],f3503827:[function(){return n.e(3827).then(n.bind(n,4506))},"@site/target/docs/build-tools/bloop.md",4506],f78a808a:[function(){return n.e(7962).then(n.bind(n,2886))},"@site/blog/2023-08-28-silver.md?truncated=true",2886],f87b843d:[function(){return n.e(2726).then(n.t.bind(n,6272,19))},"~blog/default/metals-blog-page-49-a73.json",6272],f9150bb6:[function(){return n.e(50).then(n.t.bind(n,1455,19))},"~blog/default/metals-blog-page-48-2f5.json",1455],f922820e:[function(){return n.e(4807).then(n.bind(n,4239))},"@site/blog/2023-07-19-silver.md",4239],fb11efee:[function(){return n.e(3758).then(n.t.bind(n,8027,19))},"~blog/default/metals-blog-page-21-4bb.json",8027],fda909f7:[function(){return n.e(7631).then(n.bind(n,7318))},"@site/blog/2021-07-14-tungsten.md",7318]};function u(e){var t=e.error,n=e.retry,a=e.pastDelay;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:function(){return n.e(4972).then(n.bind(n,4972))},modules:["@theme/NotFound"],webpack:function(){return[4972]},render:function(e,t){var n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});var o=l[e+"-"+t],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((function(e){var t=e[0],n=e[1],r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:function(){return m},render:function(t,n){var i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((function(t){var n=t[0],r=t[1],a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((function(e){return"default"!==e})).forEach((function(e){a[e]=r[e]}));var o=i,l=n.split(".");l.slice(0,-1).forEach((function(e){o=o[e]})),o[l[l.length-1]]=a}));var l=i.__comp;delete i.__comp;var s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/metals/blog",component:f("/metals/blog","a0e"),exact:!0},{path:"/metals/blog/2018/12/06/iron",component:f("/metals/blog/2018/12/06/iron","935"),exact:!0},{path:"/metals/blog/2018/12/12/fast-goto-definition",component:f("/metals/blog/2018/12/12/fast-goto-definition","7cc"),exact:!0},{path:"/metals/blog/2018/12/14/iron",component:f("/metals/blog/2018/12/14/iron","36f"),exact:!0},{path:"/metals/blog/2019/01/22/bloom-filters",component:f("/metals/blog/2019/01/22/bloom-filters","208"),exact:!0},{path:"/metals/blog/2019/01/24/tin",component:f("/metals/blog/2019/01/24/tin","c8d"),exact:!0},{path:"/metals/blog/2019/02/01/tin",component:f("/metals/blog/2019/02/01/tin","872"),exact:!0},{path:"/metals/blog/2019/04/12/mercury",component:f("/metals/blog/2019/04/12/mercury","9d1"),exact:!0},{path:"/metals/blog/2019/04/26/mercury",component:f("/metals/blog/2019/04/26/mercury","f9e"),exact:!0},{path:"/metals/blog/2019/06/11/radium",component:f("/metals/blog/2019/06/11/radium","294"),exact:!0},{path:"/metals/blog/2019/06/28/thorium",component:f("/metals/blog/2019/06/28/thorium","c3d"),exact:!0},{path:"/metals/blog/2019/09/02/thorium",component:f("/metals/blog/2019/09/02/thorium","db9"),exact:!0},{path:"/metals/blog/2019/09/12/thorium",component:f("/metals/blog/2019/09/12/thorium","139"),exact:!0},{path:"/metals/blog/2019/09/23/thorium",component:f("/metals/blog/2019/09/23/thorium","456"),exact:!0},{path:"/metals/blog/2020/01/10/cobalt",component:f("/metals/blog/2020/01/10/cobalt","821"),exact:!0},{path:"/metals/blog/2020/02/26/cobalt",component:f("/metals/blog/2020/02/26/cobalt","765"),exact:!0},{path:"/metals/blog/2020/03/19/cobalt",component:f("/metals/blog/2020/03/19/cobalt","b1c"),exact:!0},{path:"/metals/blog/2020/04/10/cobalt",component:f("/metals/blog/2020/04/10/cobalt","e65"),exact:!0},{path:"/metals/blog/2020/04/12/mercury",component:f("/metals/blog/2020/04/12/mercury","aee"),exact:!0},{path:"/metals/blog/2020/05/04/lithium",component:f("/metals/blog/2020/05/04/lithium","b0e"),exact:!0},{path:"/metals/blog/2020/07/01/lithium",component:f("/metals/blog/2020/07/01/lithium","388"),exact:!0},{path:"/metals/blog/2020/07/15/lithium",component:f("/metals/blog/2020/07/15/lithium","993"),exact:!0},{path:"/metals/blog/2020/07/23/configuring-a-client",component:f("/metals/blog/2020/07/23/configuring-a-client","21c"),exact:!0},{path:"/metals/blog/2020/08/19/lithium",component:f("/metals/blog/2020/08/19/lithium","5ac"),exact:!0},{path:"/metals/blog/2020/09/21/lithium",component:f("/metals/blog/2020/09/21/lithium","8f1"),exact:!0},{path:"/metals/blog/2020/11/06/sbt-BSP-support",component:f("/metals/blog/2020/11/06/sbt-BSP-support","080"),exact:!0},{path:"/metals/blog/2020/11/10/lithium",component:f("/metals/blog/2020/11/10/lithium","fb8"),exact:!0},{path:"/metals/blog/2020/11/20/lithium",component:f("/metals/blog/2020/11/20/lithium","4c6"),exact:!0},{path:"/metals/blog/2020/11/26/lithium",component:f("/metals/blog/2020/11/26/lithium","0bc"),exact:!0},{path:"/metals/blog/2020/12/19/lithium",component:f("/metals/blog/2020/12/19/lithium","749"),exact:!0},{path:"/metals/blog/2021/01/19/lithium",component:f("/metals/blog/2021/01/19/lithium","596"),exact:!0},{path:"/metals/blog/2021/02/02/metals-retro-part1",component:f("/metals/blog/2021/02/02/metals-retro-part1","0a1"),exact:!0},{path:"/metals/blog/2021/02/24/tungsten",component:f("/metals/blog/2021/02/24/tungsten","c0d"),exact:!0},{path:"/metals/blog/2021/04/06/tungsten",component:f("/metals/blog/2021/04/06/tungsten","4b8"),exact:!0},{path:"/metals/blog/2021/04/20/tungsten",component:f("/metals/blog/2021/04/20/tungsten","949"),exact:!0},{path:"/metals/blog/2021/05/17/tungsten",component:f("/metals/blog/2021/05/17/tungsten","57d"),exact:!0},{path:"/metals/blog/2021/05/31/tungsten",component:f("/metals/blog/2021/05/31/tungsten","daf"),exact:!0},{path:"/metals/blog/2021/07/14/tungsten",component:f("/metals/blog/2021/07/14/tungsten","824"),exact:!0},{path:"/metals/blog/2021/09/06/tungsten",component:f("/metals/blog/2021/09/06/tungsten","fc2"),exact:!0},{path:"/metals/blog/2021/09/16/tungsten",component:f("/metals/blog/2021/09/16/tungsten","4f3"),exact:!0},{path:"/metals/blog/2021/10/26/tungsten",component:f("/metals/blog/2021/10/26/tungsten","f60"),exact:!0},{path:"/metals/blog/2021/11/03/tungsten",component:f("/metals/blog/2021/11/03/tungsten","7de"),exact:!0},{path:"/metals/blog/2022/01/12/aluminium",component:f("/metals/blog/2022/01/12/aluminium","0c3"),exact:!0},{path:"/metals/blog/2022/01/17/aluminium",component:f("/metals/blog/2022/01/17/aluminium","b4d"),exact:!0},{path:"/metals/blog/2022/02/23/towards-better-releases",component:f("/metals/blog/2022/02/23/towards-better-releases","510"),exact:!0},{path:"/metals/blog/2022/03/08/aluminium",component:f("/metals/blog/2022/03/08/aluminium","3df"),exact:!0},{path:"/metals/blog/2022/04/26/aluminium",component:f("/metals/blog/2022/04/26/aluminium","9db"),exact:!0},{path:"/metals/blog/2022/04/27/aluminium",component:f("/metals/blog/2022/04/27/aluminium","1e7"),exact:!0},{path:"/metals/blog/2022/04/28/aluminium",component:f("/metals/blog/2022/04/28/aluminium","91e"),exact:!0},{path:"/metals/blog/2022/06/03/aluminium",component:f("/metals/blog/2022/06/03/aluminium","0e3"),exact:!0},{path:"/metals/blog/2022/07/04/aluminium",component:f("/metals/blog/2022/07/04/aluminium","76f"),exact:!0},{path:"/metals/blog/2022/08/10/aluminium",component:f("/metals/blog/2022/08/10/aluminium","f97"),exact:!0},{path:"/metals/blog/2022/10/06/aluminium",component:f("/metals/blog/2022/10/06/aluminium","b38"),exact:!0},{path:"/metals/blog/2023/01/02/aluminium",component:f("/metals/blog/2023/01/02/aluminium","289"),exact:!0},{path:"/metals/blog/2023/03/02/aluminium",component:f("/metals/blog/2023/03/02/aluminium","aef"),exact:!0},{path:"/metals/blog/2023/04/21/aluminium",component:f("/metals/blog/2023/04/21/aluminium","eb5"),exact:!0},{path:"/metals/blog/2023/07/17/workspace-folders",component:f("/metals/blog/2023/07/17/workspace-folders","2c8"),exact:!0},{path:"/metals/blog/2023/07/19/silver",component:f("/metals/blog/2023/07/19/silver","eb6"),exact:!0},{path:"/metals/blog/2023/08/28/silver",component:f("/metals/blog/2023/08/28/silver","7a2"),exact:!0},{path:"/metals/blog/2023/10/17/silver",component:f("/metals/blog/2023/10/17/silver","285"),exact:!0},{path:"/metals/blog/archive",component:f("/metals/blog/archive","857"),exact:!0},{path:"/metals/blog/page/10",component:f("/metals/blog/page/10","b38"),exact:!0},{path:"/metals/blog/page/11",component:f("/metals/blog/page/11","82c"),exact:!0},{path:"/metals/blog/page/12",component:f("/metals/blog/page/12","75c"),exact:!0},{path:"/metals/blog/page/13",component:f("/metals/blog/page/13","602"),exact:!0},{path:"/metals/blog/page/14",component:f("/metals/blog/page/14","84a"),exact:!0},{path:"/metals/blog/page/15",component:f("/metals/blog/page/15","251"),exact:!0},{path:"/metals/blog/page/16",component:f("/metals/blog/page/16","4a5"),exact:!0},{path:"/metals/blog/page/17",component:f("/metals/blog/page/17","1da"),exact:!0},{path:"/metals/blog/page/18",component:f("/metals/blog/page/18","b46"),exact:!0},{path:"/metals/blog/page/19",component:f("/metals/blog/page/19","6ea"),exact:!0},{path:"/metals/blog/page/2",component:f("/metals/blog/page/2","17e"),exact:!0},{path:"/metals/blog/page/20",component:f("/metals/blog/page/20","c79"),exact:!0},{path:"/metals/blog/page/21",component:f("/metals/blog/page/21","6da"),exact:!0},{path:"/metals/blog/page/22",component:f("/metals/blog/page/22","1d2"),exact:!0},{path:"/metals/blog/page/23",component:f("/metals/blog/page/23","a56"),exact:!0},{path:"/metals/blog/page/24",component:f("/metals/blog/page/24","e51"),exact:!0},{path:"/metals/blog/page/25",component:f("/metals/blog/page/25","a46"),exact:!0},{path:"/metals/blog/page/26",component:f("/metals/blog/page/26","6ce"),exact:!0},{path:"/metals/blog/page/27",component:f("/metals/blog/page/27","8b4"),exact:!0},{path:"/metals/blog/page/28",component:f("/metals/blog/page/28","e0e"),exact:!0},{path:"/metals/blog/page/29",component:f("/metals/blog/page/29","34c"),exact:!0},{path:"/metals/blog/page/3",component:f("/metals/blog/page/3","a13"),exact:!0},{path:"/metals/blog/page/30",component:f("/metals/blog/page/30","4e1"),exact:!0},{path:"/metals/blog/page/31",component:f("/metals/blog/page/31","d3d"),exact:!0},{path:"/metals/blog/page/32",component:f("/metals/blog/page/32","a5a"),exact:!0},{path:"/metals/blog/page/33",component:f("/metals/blog/page/33","056"),exact:!0},{path:"/metals/blog/page/34",component:f("/metals/blog/page/34","967"),exact:!0},{path:"/metals/blog/page/35",component:f("/metals/blog/page/35","bc5"),exact:!0},{path:"/metals/blog/page/36",component:f("/metals/blog/page/36","383"),exact:!0},{path:"/metals/blog/page/37",component:f("/metals/blog/page/37","9a3"),exact:!0},{path:"/metals/blog/page/38",component:f("/metals/blog/page/38","f02"),exact:!0},{path:"/metals/blog/page/39",component:f("/metals/blog/page/39","1a0"),exact:!0},{path:"/metals/blog/page/4",component:f("/metals/blog/page/4","b24"),exact:!0},{path:"/metals/blog/page/40",component:f("/metals/blog/page/40","b59"),exact:!0},{path:"/metals/blog/page/41",component:f("/metals/blog/page/41","8fa"),exact:!0},{path:"/metals/blog/page/42",component:f("/metals/blog/page/42","f4d"),exact:!0},{path:"/metals/blog/page/43",component:f("/metals/blog/page/43","816"),exact:!0},{path:"/metals/blog/page/44",component:f("/metals/blog/page/44","8ed"),exact:!0},{path:"/metals/blog/page/45",component:f("/metals/blog/page/45","286"),exact:!0},{path:"/metals/blog/page/46",component:f("/metals/blog/page/46","570"),exact:!0},{path:"/metals/blog/page/47",component:f("/metals/blog/page/47","3e9"),exact:!0},{path:"/metals/blog/page/48",component:f("/metals/blog/page/48","6a8"),exact:!0},{path:"/metals/blog/page/49",component:f("/metals/blog/page/49","2e8"),exact:!0},{path:"/metals/blog/page/5",component:f("/metals/blog/page/5","c7a"),exact:!0},{path:"/metals/blog/page/50",component:f("/metals/blog/page/50","75d"),exact:!0},{path:"/metals/blog/page/51",component:f("/metals/blog/page/51","fa0"),exact:!0},{path:"/metals/blog/page/52",component:f("/metals/blog/page/52","983"),exact:!0},{path:"/metals/blog/page/53",component:f("/metals/blog/page/53","60c"),exact:!0},{path:"/metals/blog/page/54",component:f("/metals/blog/page/54","8ab"),exact:!0},{path:"/metals/blog/page/55",component:f("/metals/blog/page/55","eda"),exact:!0},{path:"/metals/blog/page/56",component:f("/metals/blog/page/56","820"),exact:!0},{path:"/metals/blog/page/57",component:f("/metals/blog/page/57","f47"),exact:!0},{path:"/metals/blog/page/58",component:f("/metals/blog/page/58","528"),exact:!0},{path:"/metals/blog/page/59",component:f("/metals/blog/page/59","bfc"),exact:!0},{path:"/metals/blog/page/6",component:f("/metals/blog/page/6","187"),exact:!0},{path:"/metals/blog/page/7",component:f("/metals/blog/page/7","42c"),exact:!0},{path:"/metals/blog/page/8",component:f("/metals/blog/page/8","9d5"),exact:!0},{path:"/metals/blog/page/9",component:f("/metals/blog/page/9","d00"),exact:!0},{path:"/metals/search",component:f("/metals/search","b6a"),exact:!0},{path:"/metals/docs",component:f("/metals/docs","26f"),routes:[{path:"/metals/docs/",component:f("/metals/docs/","436"),exact:!0,sidebar:"docs"},{path:"/metals/docs/acknowledgements/development",component:f("/metals/docs/acknowledgements/development","180"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/bloop",component:f("/metals/docs/build-tools/bloop","89f"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/gradle",component:f("/metals/docs/build-tools/gradle","7ea"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/maven",component:f("/metals/docs/build-tools/maven","d5a"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/mill",component:f("/metals/docs/build-tools/mill","ec6"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/overview",component:f("/metals/docs/build-tools/overview","1fd"),exact:!0,sidebar:"docs"},{path:"/metals/docs/build-tools/sbt",component:f("/metals/docs/build-tools/sbt","fee"),exact:!0,sidebar:"docs"},{path:"/metals/docs/contributors/getting-started",component:f("/metals/docs/contributors/getting-started","31b"),exact:!0,sidebar:"docs"},{path:"/metals/docs/contributors/project-goals",component:f("/metals/docs/contributors/project-goals","46c"),exact:!0,sidebar:"docs"},{path:"/metals/docs/contributors/releasing",component:f("/metals/docs/contributors/releasing","550"),exact:!0,sidebar:"docs"},{path:"/metals/docs/contributors/updating-website",component:f("/metals/docs/contributors/updating-website","918"),exact:!0,sidebar:"docs"},{path:"/metals/docs/diagrams/instruction",component:f("/metals/docs/diagrams/instruction","f59"),exact:!0},{path:"/metals/docs/editors/emacs",component:f("/metals/docs/editors/emacs","a6f"),exact:!0,sidebar:"docs"},{path:"/metals/docs/editors/online-ides",component:f("/metals/docs/editors/online-ides","00b"),exact:!0,sidebar:"docs"},{path:"/metals/docs/editors/sublime",component:f("/metals/docs/editors/sublime","921"),exact:!0,sidebar:"docs"},{path:"/metals/docs/editors/user-configuration",component:f("/metals/docs/editors/user-configuration","154"),exact:!0,sidebar:"docs"},{path:"/metals/docs/editors/vim",component:f("/metals/docs/editors/vim","06e"),exact:!0,sidebar:"docs"},{path:"/metals/docs/editors/vscode",component:f("/metals/docs/editors/vscode","fa2"),exact:!0,sidebar:"docs"},{path:"/metals/docs/features/codeactions",component:f("/metals/docs/features/codeactions","306"),exact:!0,sidebar:"docs"},{path:"/metals/docs/features/scripts",component:f("/metals/docs/features/scripts","6c5"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/debug-adapter-protocol",component:f("/metals/docs/integrations/debug-adapter-protocol","899"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/decoration-protocol",component:f("/metals/docs/integrations/decoration-protocol","9ed"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/new-build-tool",component:f("/metals/docs/integrations/new-build-tool","332"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/new-editor",component:f("/metals/docs/integrations/new-editor","3f0"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/remote-language-server",component:f("/metals/docs/integrations/remote-language-server","c40"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/test-explorer",component:f("/metals/docs/integrations/test-explorer","afb"),exact:!0,sidebar:"docs"},{path:"/metals/docs/integrations/tree-view-protocol",component:f("/metals/docs/integrations/tree-view-protocol","33c"),exact:!0,sidebar:"docs"},{path:"/metals/docs/troubleshooting/faq",component:f("/metals/docs/troubleshooting/faq","261"),exact:!0,sidebar:"docs"},{path:"/metals/docs/troubleshooting/proxy",component:f("/metals/docs/troubleshooting/proxy","4bf"),exact:!0,sidebar:"docs"}]},{path:"/metals/",component:f("/metals/","925"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294),a=r.createContext(!1);function o(e){var t=e.children,n=(0,r.useState)(!1),o=n[0],i=n[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(a.Provider,{value:o},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(6657),n(2497),n(3310),n(8320),n(7253)];var u=n(723),c=n(6550),d=n(8790);function f(e){var t=e.children;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),x=n(197);function _(){var e=(0,g.Z)().i18n,t=e.defaultLocale,n=e.localeConfigs,a=(0,y.l)();return r.createElement(m.Z,null,Object.entries(n).map((function(e){var t=e[0],n=e[1].htmlLang;return r.createElement("link",{key:t,rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:n})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){var t=e.permalink,n=(0,g.Z)().siteConfig.url,a=function(){var e=(0,g.Z)().siteConfig,t=e.url,n=e.baseUrl,r=e.trailingSlash,a=(0,c.TH)().pathname;return t+(0,E.applyTrailingSlash)((0,h.Z)(a),{trailingSlash:r,baseUrl:n})}(),o=t?""+n+t:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){var e=(0,g.Z)().i18n.currentLocale,t=(0,b.L)(),n=t.metadata,a=t.image;return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),a&&r.createElement(v.d,{image:a}),r.createElement(S,null),r.createElement(_,null),r.createElement(x.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,n.map((function(e,t){return r.createElement("meta",(0,p.Z)({key:t},e))}))))}var T=new Map;function L(e){if(T.has(e.pathname))return Object.assign({},e,{pathname:T.get(e.pathname)});if((0,d.f)(u.Z,e.pathname).some((function(e){return!0===e.route.exact})))return T.set(e.pathname,e.pathname),e;var t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),Object.assign({},e,{pathname:t})}var A=n(8934),D=n(8940),P=n(4578);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n\n'}(e)).replace(/{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["UA-140140828-1"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/metals/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/metals/docs","mainDocId":"editors/overview","docs":[{"id":"acknowledgements/development","path":"/metals/docs/acknowledgements/development","sidebar":"docs"},{"id":"build-tools/bloop","path":"/metals/docs/build-tools/bloop","sidebar":"docs"},{"id":"build-tools/gradle","path":"/metals/docs/build-tools/gradle","sidebar":"docs"},{"id":"build-tools/maven","path":"/metals/docs/build-tools/maven","sidebar":"docs"},{"id":"build-tools/mill","path":"/metals/docs/build-tools/mill","sidebar":"docs"},{"id":"build-tools/overview","path":"/metals/docs/build-tools/overview","sidebar":"docs"},{"id":"build-tools/sbt","path":"/metals/docs/build-tools/sbt","sidebar":"docs"},{"id":"contributors/getting-started","path":"/metals/docs/contributors/getting-started","sidebar":"docs"},{"id":"contributors/project-goals","path":"/metals/docs/contributors/project-goals","sidebar":"docs"},{"id":"contributors/releasing","path":"/metals/docs/contributors/releasing","sidebar":"docs"},{"id":"contributors/updating-website","path":"/metals/docs/contributors/updating-website","sidebar":"docs"},{"id":"diagrams/instruction","path":"/metals/docs/diagrams/instruction"},{"id":"editors/emacs","path":"/metals/docs/editors/emacs","sidebar":"docs"},{"id":"editors/online-ides","path":"/metals/docs/editors/online-ides","sidebar":"docs"},{"id":"editors/overview","path":"/metals/docs/","sidebar":"docs"},{"id":"editors/sublime","path":"/metals/docs/editors/sublime","sidebar":"docs"},{"id":"editors/user-configuration","path":"/metals/docs/editors/user-configuration","sidebar":"docs"},{"id":"editors/vim","path":"/metals/docs/editors/vim","sidebar":"docs"},{"id":"editors/vscode","path":"/metals/docs/editors/vscode","sidebar":"docs"},{"id":"features/codeactions","path":"/metals/docs/features/codeactions","sidebar":"docs"},{"id":"features/scripts","path":"/metals/docs/features/scripts","sidebar":"docs"},{"id":"integrations/debug-adapter-protocol","path":"/metals/docs/integrations/debug-adapter-protocol","sidebar":"docs"},{"id":"integrations/decoration-protocol","path":"/metals/docs/integrations/decoration-protocol","sidebar":"docs"},{"id":"integrations/new-build-tool","path":"/metals/docs/integrations/new-build-tool","sidebar":"docs"},{"id":"integrations/new-editor","path":"/metals/docs/integrations/new-editor","sidebar":"docs"},{"id":"integrations/remote-language-server","path":"/metals/docs/integrations/remote-language-server","sidebar":"docs"},{"id":"integrations/test-explorer","path":"/metals/docs/integrations/test-explorer","sidebar":"docs"},{"id":"integrations/tree-view-protocol","path":"/metals/docs/integrations/tree-view-protocol","sidebar":"docs"},{"id":"troubleshooting/faq","path":"/metals/docs/troubleshooting/faq","sidebar":"docs"},{"id":"troubleshooting/proxy","path":"/metals/docs/troubleshooting/proxy","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/metals/docs/","label":"editors/overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"2.4.3"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.36.0"}}}');var u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){var t=e.children;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(4578),a=n(7294),o=n(412),i=n(5742),l=n(8780),s=n(179);function u(e){var t=e.error,n=e.tryAgain;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},a.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),a.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),a.createElement(c,{error:t}))}function c(e){var t=e.error,n=(0,l.getErrorCausalChain)(t).map((function(e){return e.message})).join("\n\nCause:\n");return a.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function d(e){var t=e.error,n=e.tryAgain;return a.createElement(p,{fallback:function(){return a.createElement(u,{error:t,tryAgain:n})}},a.createElement(i.Z,null,a.createElement("title",null,"Page Error")),a.createElement(s.Z,null,a.createElement(u,{error:t,tryAgain:n})))}var f=function(e){return a.createElement(d,e)},p=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={error:null},n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidCatch=function(e){o.Z.canUseDOM&&this.setState({error:e})},n.render=function(){var e=this,t=this.props.children,n=this.state.error;if(n){var r,a={error:n,tryAgain:function(){return e.setState({error:null})}};return(null!=(r=this.props.fallback)?r:f)(a)}return null!=t?t:null},t}(a.Component)},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document;const a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(7462),a=n(3366),o=n(7294),i=n(3727),l=n(8780),s=n(2263),u=n(3919),c=n(412),d=o.createContext({collectLink:function(){}});var f=n(4996),p=["isNavLink","to","href","activeClassName","isActive","data-noBrokenLinkCheck","autoAddBaseUrl"];function m(e,t){var n,m,g=e.isNavLink,h=e.to,b=e.href,v=e.activeClassName,y=e.isActive,w=e["data-noBrokenLinkCheck"],k=e.autoAddBaseUrl,E=void 0===k||k,x=(0,a.Z)(e,p),_=(0,s.Z)().siteConfig,S=_.trailingSlash,C=_.baseUrl,T=(0,f.C)().withBaseUrl,L=(0,o.useContext)(d),A=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(function(){return A.current}));var D=h||b;var P,N=(0,u.Z)(D),O=null==D?void 0:D.replace("pathname://",""),F=void 0!==O?(P=O,E&&function(e){return e.startsWith("/")}(P)?T(P):P):void 0;F&&N&&(F=(0,l.applyTrailingSlash)(F,{trailingSlash:S,baseUrl:C}));var I=(0,o.useRef)(!1),R=g?i.OL:i.rU,M=c.Z.canUseIntersectionObserver,B=(0,o.useRef)(),j=function(){I.current||null==F||(window.docusaurus.preload(F),I.current=!0)};(0,o.useEffect)((function(){return!M&&N&&null!=F&&window.docusaurus.prefetch(F),function(){M&&B.current&&B.current.disconnect()}}),[B,F,M,N]);var z=null!=(n=null==(m=F)?void 0:m.startsWith("#"))&&n,U=!F||!N||z;return U||w||L.collectLink(F),U?o.createElement("a",(0,r.Z)({ref:A,href:F},D&&!N&&{target:"_blank",rel:"noopener noreferrer"},x)):o.createElement(R,(0,r.Z)({},x,{onMouseEnter:j,onTouchStart:j,innerRef:function(e){A.current=e,M&&e&&N&&(B.current=new window.IntersectionObserver((function(t){t.forEach((function(t){e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(B.current.unobserve(e),B.current.disconnect(),null!=F&&window.docusaurus.prefetch(F))}))})),B.current.observe(e))},to:F},g&&{isActive:y,activeClassName:v}))}const g=o.forwardRef(m)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){var n=e.split(/(\{\w+\})/).map((function(e,n){if(n%2==1){var r=null==t?void 0:t[e.slice(1,-1)];if(void 0!==r)return r}return e}));return n.some((function(e){return(0,r.isValidElement)(e)}))?n.map((function(e,t){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e})).filter((function(e){return""!==e})):n.join("")}var o=n(7529);function i(e){var t,n,r=e.id,a=e.message;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=o[null!=r?r:a])?n:a)?t:r}function l(e,t){return a(i({message:e.message,id:e.id}),t)}function s(e){var t=e.children,n=e.id,o=e.values;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");var l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});var r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){var e=(0,a.Z)().siteConfig,t=e.baseUrl,n=e.url,i=(0,r.useCallback)((function(e,r){return function(e,t,n,r){var a=void 0===r?{}:r,i=a.forcePrependBaseUrl,l=void 0!==i&&i,s=a.absolute,u=void 0!==s&&s;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(l)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;var c=n.startsWith(t)?n:t+n.replace(/^\//,"");return u?e+c:c}(n,t,e,r)}),[n,t]);return{withBaseUrl:i}}function l(e,t){return void 0===t&&(t={}),(0,i().withBaseUrl)(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(e){return"object"==typeof e&&!!e&&Object.keys(e).length>0};function a(e){var t={};return function e(n,a){Object.entries(n).forEach((function(n){var o=n[0],i=n[1],l=a?a+"."+o:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294),a=r.createContext(null);function o(e){var t=e.children,n=e.value,o=r.useContext(a),i=(0,r.useMemo)((function(){return function(e){var t=e.parent,n=e.value;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}var r=Object.assign({},t.data,null==n?void 0:n.data);return{plugin:t.plugin,data:r}}({parent:o,value:n})}),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});var n=(0,a.Z)().globalData[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}var l=function(e){return e.versions.find((function(e){return e.isLast}))};function s(e,t){var n,a,o=function(e,t){var n=l(e);return[].concat(e.versions.filter((function(e){return e!==n})),[n]).find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})}))}(e,t),i=null==o?void 0:o.docs.find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?(n=i.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(t){t.id===n&&(a[e.name]=t)}))})),a):{}}}var u={},c=function(){var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:u},d=function(e){return function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});var r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return a}("docusaurus-plugin-content-docs",e,{failfast:!0})};function f(e){return void 0===e&&(e={}),function(e,t,n){void 0===n&&(n={});var a=Object.entries(e).sort((function(e,t){return t[1].path.localeCompare(e[1].path)})).find((function(e){var n=e[1];return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error("Can't find active docs plugin for \""+t+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((function(e){return e.path})).join(", "));return o}(c(),(0,r.TH)().pathname,e)}function p(e){return d(e).versions}function m(e){var t=d(e);return l(t)}function g(e){return s(d(e),(0,r.TH)().pathname)}function h(e){return function(e,t){var n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(d(e),(0,r.TH)().pathname)}},6657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate:function(e){var t=e.location,n=e.previousLocation;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((function(){window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate:function(e){var t=e.location,n=e.previousLocation;if(n&&t.pathname!==n.pathname){var r=window.setTimeout((function(){a().start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r,a,o=n(7410),i=n(6809);r=o.Z,a=i.default.themeConfig.prism.additionalLanguages,globalThis.Prism=r,a.forEach((function(e){n(4961)("./prism-"+e)})),delete globalThis.Prism},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){var t=e.width,n=void 0===t?13.5:t,o=e.height,i=void 0===o?13.5:o;return r.createElement("svg",{width:n,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>nn});var r=n(7294),a=n(4334),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936),d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){var e=(0,r.useRef)(null),t=(0,s.k6)().action,n=(0,r.useCallback)((function(e){e.preventDefault();var t,n=null!=(t=document.querySelector("main:first-of-type"))?t:document.getElementById(d);n&&f(n)}),[]);return(0,c.S)((function(n){var r=n.location;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}var m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){var t,n=null!=(t=e.children)?t:m,a=p(),o=a.containerRef,i=a.onClick;return r.createElement("div",{ref:o,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:"#"+d,onClick:i}),n))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),k=n(9689),E=n(3366),x=["width","height","color","strokeWidth","className"];function _(e){var t=e.width,n=void 0===t?21:t,a=e.height,o=void 0===a?21:a,i=e.color,s=void 0===i?"currentColor":i,u=e.strokeWidth,c=void 0===u?1.2:u,d=(e.className,(0,E.Z)(e,x));return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:n,height:o},d),r.createElement("g",{stroke:s,strokeWidth:c},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function C(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(_,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function L(e){var t=(0,w.L)().announcementBar.content;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:t}}))}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function D(){var e=(0,w.L)().announcementBar,t=(0,k.nT)(),n=t.isActive,a=t.close;if(!n)return null;var o=e.backgroundColor,i=e.textColor,l=e.isCloseable;return r.createElement("div",{className:A.announcementBar,style:{backgroundColor:o,color:i},role:"banner"},l&&r.createElement("div",{className:A.announcementBarPlaceholder}),r.createElement(L,{className:A.announcementBarContent}),l&&r.createElement(C,{onClick:a,className:A.announcementBarClose}))}var P=n(2961),N=n(2466);var O=n(9688),F=n(3102),I=r.createContext(null);function R(e){var t,n,a,o,i,l,s,u=e.children,c=(t=(0,P.e)(),n=(0,F.HY)(),a=(0,r.useState)(!1),o=a[0],i=a[1],l=null!==n.component,s=(0,O.D9)(l),(0,r.useEffect)((function(){l&&!s&&i(!0)}),[l,s]),(0,r.useEffect)((function(){l?t.shown||i(!0):i(!1)}),[t.shown,l]),(0,r.useMemo)((function(){return[o,i]}),[o]));return r.createElement(I.Provider,{value:c},u)}function M(e){if(e.component){var t=e.component;return r.createElement(t,e.props)}}function B(){var e=(0,r.useContext)(I);if(!e)throw new O.i6("NavbarSecondaryMenuDisplayProvider");var t=e[0],n=e[1],a=(0,r.useCallback)((function(){return n(!1)}),[n]),o=(0,F.HY)();return(0,r.useMemo)((function(){return{shown:t,hide:a,content:M(o)}}),[a,o,t])}function j(e){var t=e.header,n=e.primaryMenu,o=e.secondaryMenu,i=B().shown;return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(2949),U=n(2389);function Z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const H={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Q(e){var t=e.className,n=e.buttonClassName,o=e.value,i=e.onChange,l=(0,U.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(H.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",H.toggleButton,!l&&H.toggleButtonDisabled,n),type:"button",onClick:function(){return i("dark"===o?"light":"dark")},disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(Z,{className:(0,a.Z)(H.toggleIcon,H.lightToggleIcon)}),r.createElement($,{className:(0,a.Z)(H.toggleIcon,H.darkToggleIcon)})))}const V=r.memo(Q),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){var t=e.className,n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,o=(0,z.I)(),i=o.colorMode,l=o.setColorMode;return a?null:r.createElement(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:i,onChange:l})}var q=n(1327);function Y(){return r.createElement(q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){var e=(0,P.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:function(){return e.toggle()}},r.createElement(_,{color:"var(--ifm-color-emphasis-600)"}))}function X(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Y,null),r.createElement(G,{className:"margin-right--md"}),r.createElement(K,null))}var J=n(9960),ee=n(4996),te=n(3919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var re=n(9471),ae=["activeBasePath","activeBaseRegex","to","href","label","html","isDropdownLink","prependBaseUrlToHref"];function oe(e){var t=e.activeBasePath,n=e.activeBaseRegex,a=e.to,o=e.href,i=e.label,s=e.html,u=e.isDropdownLink,c=e.prependBaseUrlToHref,d=(0,E.Z)(e,ae),f=(0,ee.Z)(a),p=(0,ee.Z)(t),m=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,te.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(re.Z,u&&{width:12,height:12}))};return o?r.createElement(J.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(J.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:function(e,t){return n?ne(n,t.pathname):t.pathname.startsWith(p)}},d,h))}var ie=["className","isDropdownItem"],le=["className","isDropdownItem"],se=["mobile","position"];function ue(e){var t=e.className,n=e.isDropdownItem,o=void 0!==n&&n,i=(0,E.Z)(e,ie),s=r.createElement(oe,(0,l.Z)({className:(0,a.Z)(o?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:o},i));return o?r.createElement("li",null,s):s}function ce(e){var t=e.className,n=(e.isDropdownItem,(0,E.Z)(e,le));return r.createElement("li",{className:"menu__list-item"},r.createElement(oe,(0,l.Z)({className:(0,a.Z)("menu__link",t)},n)))}function de(e){var t,n=e.mobile,a=void 0!==n&&n,o=(e.position,(0,E.Z)(e,se)),i=a?ce:ue;return r.createElement(i,(0,l.Z)({},o,{activeClassName:null!=(t=o.activeClassName)?t:a?"menu__link--active":"navbar__link--active"}))}var fe=n(6043),pe=n(8596),me=n(2263);var ge=["items","position","className","onClick"],he=["items","className","position","onClick"],be=["mobile"];function ve(e,t){return e.some((function(e){return function(e,t){return!!(0,pe.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)}))}function ye(e){var t,n=e.items,o=e.position,i=e.className,s=(e.onClick,(0,E.Z)(e,ge)),u=(0,r.useRef)(null),c=(0,r.useState)(!1),d=c[0],f=c[1];return(0,r.useEffect)((function(){var e=function(e){u.current&&!u.current.contains(e.target)&&f(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d})},r.createElement(oe,(0,l.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},s,{onClick:s.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),f(!d))}}),null!=(t=s.children)?t:s.label),r.createElement("ul",{className:"dropdown__menu"},n.map((function(e,t){return r.createElement(ft,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))}))))}function we(e){var t,n,o=e.items,i=e.className,u=(e.position,e.onClick),c=(0,E.Z)(e,he),d=(n=(0,me.Z)().siteConfig.baseUrl,(0,s.TH)().pathname.replace(n,"/")),f=ve(o,d),p=(0,fe.u)({initialState:function(){return!f}}),m=p.collapsed,g=p.toggleCollapsed,h=p.setCollapsed;return(0,r.useEffect)((function(){f&&h(!f)}),[d,f,h]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":m})},r.createElement(oe,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},c,{onClick:function(e){e.preventDefault(),g()}}),null!=(t=c.children)?t:c.label),r.createElement(fe.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:m},o.map((function(e,t){return r.createElement(ft,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:u,activeClassName:"menu__link--active"},e,{key:t}))}))))}function ke(e){var t=e.mobile,n=void 0!==t&&t,a=(0,E.Z)(e,be),o=n?we:ye;return r.createElement(o,a)}var Ee=n(4711),xe=["width","height"];function _e(e){var t=e.width,n=void 0===t?20:t,a=e.height,o=void 0===a?20:a,i=(0,E.Z)(e,xe);return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:n,height:o,"aria-hidden":!0},i),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const Se="iconLanguage_nlXk";var Ce=["mobile","dropdownItemsBefore","dropdownItemsAfter"];var Te=n(1029),Le=n(4165),Ae=n(7855),De=n(5861),Pe=n(1728),Ne=n(412),Oe=n(373),Fe=n(143),Ie=n(22),Re=n(8202),Me=n(3926),Be=n(1073),je=n(2539),ze=n(726),Ue='',Ze='',$e='',He='',Qe='',Ve='',We='';const Ge={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function qe(e){var t=e.document,n=e.type,r=e.page,a=e.metadata,o=e.tokens,i=e.isInterOfTree,l=e.isLastOfTree,s=0===n,u=1===n,c=[];i?c.push(Ve):l&&c.push(We);var d=c.map((function(e){return''+e+""})),f=''+(s?Ue:u?Ze:$e)+"",p=[''+(0,ze.o)(t.t,(0,Be.m)(a,"t"),o)+""];if(!i&&!l&&Te.H6){var m,g=r?(null!=(m=r.b)?m:[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;p.push(''+(0,Me.e)(null!=g?g:[])+"")}else s||p.push(''+(0,je.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),o)+"");var h=''+He+"";return[].concat(d,[f,''],p,["",h]).join("")}function Ye(){return''+Qe+""+(0,u.I)({id:"theme.SearchBar.noResultsText",message:"No results"})+""}var Ke=n(311);function Xe(){return Je.apply(this,arguments)}function Je(){return(Je=(0,De.Z)((0,Le.Z)().mark((function e(){var t,r;return(0,Le.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23));case 2:return t=e.sent,(r=t.default).noConflict?r.noConflict():t.noConflict&&t.noConflict(),e.abrupt("return",r);case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var et="_highlight";const tt=function(e){var t,n,a,o=e.handleSearchBarToggle,i=(0,me.Z)().siteConfig.baseUrl,l=(0,Fe.gA)(),c=i;try{var d,f=(0,Oe.J)(null!=(d=null==l?void 0:l.pluginId)?d:Te.gQ).preferredVersion;f&&!f.isLast&&(c=f.path+"/")}catch(H){if(Te.l9&&!(H instanceof O.i6))throw H}var p=(0,s.k6)(),m=(0,s.TH)(),g=(0,r.useRef)(null),h=(0,r.useRef)(new Map),b=(0,r.useRef)(!1),v=(0,r.useState)(!1),y=v[0],w=v[1],k=(0,r.useState)(!1),E=k[0],x=k[1],_=(0,r.useState)(""),S=_[0],C=_[1],T=(0,r.useRef)(null),L=(0,r.useRef)(""),A=(0,r.useState)(""),D=A[0],P=A[1];(0,r.useEffect)((function(){if(Array.isArray(Te.Kc)){var e="";if(m.pathname.startsWith(c)){var t=m.pathname.substring(c.length),n=Te.Kc.find((function(e){return t===e||t.startsWith(e+"/")}));n&&(e=n)}L.current!==e&&(h.current.delete(e),L.current=e),P(e)}}),[m.pathname,c]);var N=!!Te.hG&&Array.isArray(Te.Kc)&&""===D,F=(0,r.useCallback)((0,De.Z)((0,Le.Z)().mark((function e(){var t,n,r,a,o,l,s,d,f,m;return(0,Le.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!N&&!h.current.get(D)){e.next=2;break}return e.abrupt("return");case 2:return h.current.set(D,"loading"),null==(t=T.current)||t.autocomplete.destroy(),w(!0),e.next=7,Promise.all([(0,Ie.w)(c,D),Xe()]);case 7:r=e.sent,a=r[0],o=a.wrappedIndexes,l=a.zhDictionary,s=r[1],d=function(e){var t,n=e.query,r=e.isEmpty,a=document.createElement("a"),o=new URLSearchParams,l=(0,u.I)({id:"theme.SearchBar.seeAll",message:"See all results"}),s=(0,u.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:D}),d=(0,u.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:D});if(o.set("q",n),t=D&&r?s:D?d:l,Array.isArray(Te.Kc)&&!r&&o.set("ctx",D),c!==i){if(!c.startsWith(i))throw new Error("Version url '"+c+"' does not start with base url '"+i+"', this is a bug of `@easyops-cn/docusaurus-search-local`, please report it.");o.set("version",c.substring(i.length))}var f=i+"search?"+o.toString();return a.href=f,a.textContent=t,a.addEventListener("click",(function(e){var t;e.ctrlKey||e.metaKey||(e.preventDefault(),null==(t=T.current)||t.autocomplete.close(),p.push(f))})),a},T.current=s(g.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,Pe.Z)(Ge.searchBar,(n={},n[Ge.searchBarLeft]="left"===Te.pu,n)),noPrefix:!0,dropdownMenu:Ge.dropdownMenu,input:Ge.input,hint:Ge.hint,suggestions:Ge.suggestions,suggestion:Ge.suggestion,cursor:Ge.cursor,dataset:Ge.dataset,empty:Ge.empty}},[{source:(0,Re.v)(o,l,Te.qo),templates:{suggestion:qe,empty:Ye,footer:function(e){var t=e.query,n=e.isEmpty;if(!n||D){var r=d({query:t,isEmpty:n}),a=document.createElement("div");return a.className=Ge.hitFooter,a.appendChild(r),a}}}}]).on("autocomplete:selected",(function(e,t){var n,r=t.document,a=r.u,o=r.h,i=t.tokens;null==(n=g.current)||n.blur();var l=a;if(Te.vc&&i.length>0){for(var s,u=new URLSearchParams,c=(0,Ae.Z)(i);!(s=c()).done;){var d=s.value;u.append(et,d)}l+="?"+u.toString()}o&&(l+=o),p.push(l)})).on("autocomplete:closed",(function(){var e;null==(e=g.current)||e.blur()})),h.current.set(D,"done"),w(!1),b.current&&((f=g.current).value&&(null==(m=T.current)||m.autocomplete.open()),f.focus());case 17:case"end":return e.stop()}}),e)}))),[N,D,c,i,p]);(0,r.useEffect)((function(){if(Te.vc){var e=Ne.Z.canUseDOM?new URLSearchParams(m.search).getAll(et):[];setTimeout((function(){var t,n=document.querySelector("article");if(n){var r=new Te.vc(n);r.unmark(),0!==e.length&&r.mark(e),C(e.join(" ")),null==(t=T.current)||t.autocomplete.setVal(e.join(" "))}}))}}),[m.search,m.pathname]);var I=(0,r.useState)(!1),R=I[0],M=I[1],B=(0,r.useCallback)((function(){b.current=!0,F(),M(!0),null==o||o(!0)}),[o,F]),j=(0,r.useCallback)((function(){M(!1),null==o||o(!1)}),[o]),z=(0,r.useCallback)((function(){F()}),[F]),U=(0,r.useCallback)((function(e){C(e.target.value),e.target.value&&x(!0)}),[]),Z=!!Ne.Z.canUseDOM&&/mac/i.test(null!=(t=null==(n=navigator.userAgentData)?void 0:n.platform)?t:navigator.platform);(0,r.useEffect)((function(){if(Te.AY){var e=function(e){var t;!(Z?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),null==(t=g.current)||t.focus(),B())};return document.addEventListener("keydown",e),function(){document.removeEventListener("keydown",e)}}}),[Z,B]);var $=(0,r.useCallback)((function(){var e,t=new URLSearchParams(m.search);t.delete(et);var n=t.toString(),r=m.pathname+(""!=n?"?"+n:"")+m.hash;r!=m.pathname+m.search+m.hash&&p.push(r),C(""),null==(e=T.current)||e.autocomplete.setVal("")}),[m.pathname,m.search,m.hash,p]);return r.createElement("div",{className:(0,Pe.Z)("navbar__search",Ge.searchBarContainer,(a={},a[Ge.searchIndexLoading]=y&&E,a[Ge.focused]=R,a)),hidden:N},r.createElement("input",{placeholder:(0,u.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:z,onFocus:B,onBlur:j,onChange:U,ref:g,value:S}),r.createElement(Ke.Z,{className:Ge.searchBarLoadingRing}),Te.AY&&Te.t_&&(""!==S?r.createElement("button",{className:Ge.searchClearButton,onClick:$},"\u2715"):Ne.Z.canUseDOM&&r.createElement("div",{className:Ge.searchHintContainer},r.createElement("kbd",{className:Ge.searchHint},Z?"\u2318":"ctrl"),r.createElement("kbd",{className:Ge.searchHint},"K"))))},nt={searchBox:"searchBox_ZlJk"};function rt(e){var t=e.children,n=e.className;return r.createElement("div",{className:(0,a.Z)(n,nt.searchBox)},t)}var at=n(2802),ot=["docId","label","docsPluginId"];var it=["sidebarId","label","docsPluginId"];var lt=["label","to","docsPluginId"];var st=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],ut=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};const ct={default:de,localeDropdown:function(e){var t=e.mobile,n=e.dropdownItemsBefore,a=e.dropdownItemsAfter,o=(0,E.Z)(e,Ce),i=(0,me.Z)().i18n,c=i.currentLocale,d=i.locales,f=i.localeConfigs,p=(0,Ee.l)(),m=(0,s.TH)(),g=m.search,h=m.hash,b=d.map((function(e){var n=""+("pathname://"+p.createUrl({locale:e,fullyQualified:!1}))+g+h;return{label:f[e].label,lang:f[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===c?t?"menu__link--active":"dropdown__link--active":""}})),v=[].concat(n,b,a),y=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):f[c].label;return r.createElement(ke,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(_e,{className:Se}),y),items:v}))},search:function(e){var t=e.mobile,n=e.className;return t?null:r.createElement(rt,{className:n},r.createElement(tt,null))},dropdown:ke,html:function(e){var t=e.value,n=e.className,o=e.mobile,i=void 0!==o&&o,l=e.isDropdownItem,s=void 0!==l&&l,u=s?"li":"div";return r.createElement(u,{className:(0,a.Z)({navbar__item:!i&&!s,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){var t=e.docId,n=e.label,a=e.docsPluginId,o=(0,E.Z)(e,ot),i=(0,Fe.Iw)(a).activeDoc,s=(0,at.vY)(t,a);return null===s?null:r.createElement(de,(0,l.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.path)===s.path||!(null==i||!i.sidebar)&&i.sidebar===s.sidebar},label:null!=n?n:s.id,to:s.path}))},docSidebar:function(e){var t=e.sidebarId,n=e.label,a=e.docsPluginId,o=(0,E.Z)(e,it),i=(0,Fe.Iw)(a).activeDoc,s=(0,at.oz)(t,a).link;if(!s)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return r.createElement(de,(0,l.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.sidebar)===t},label:null!=n?n:s.label,to:s.path}))},docsVersion:function(e){var t=e.label,n=e.to,a=e.docsPluginId,o=(0,E.Z)(e,lt),i=(0,at.lO)(a)[0],s=null!=t?t:i.label,u=null!=n?n:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(i).path;return r.createElement(de,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){var t=e.mobile,n=e.docsPluginId,a=e.dropdownActiveClassDisabled,o=e.dropdownItemsBefore,i=e.dropdownItemsAfter,c=(0,E.Z)(e,st),d=(0,s.TH)(),f=d.search,p=d.hash,m=(0,Fe.Iw)(n),g=(0,Fe.gB)(n),h=(0,Oe.J)(n).savePreferredVersionName,b=g.map((function(e){var t,n=null!=(t=m.alternateDocVersions[e.name])?t:ut(e);return{label:e.label,to:""+n.path+f+p,isActive:function(){return e===m.activeVersion},onClick:function(){return h(e.name)}}})),v=[].concat(o,b,i),y=(0,at.lO)(n)[0],w=t&&v.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):y.label,k=t&&v.length>1?void 0:ut(y).path;return v.length<=1?r.createElement(de,(0,l.Z)({},c,{mobile:t,label:w,to:k,isActive:a?function(){return!1}:void 0})):r.createElement(ke,(0,l.Z)({},c,{mobile:t,label:w,to:k,items:v,isActive:a?function(){return!1}:void 0}))}};var dt=["type"];function ft(e){var t=e.type,n=(0,E.Z)(e,dt),a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=ct[a];if(!o)throw new Error('No NavbarItem component found for type "'+t+'".');return r.createElement(o,n)}function pt(){var e=(0,P.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map((function(t,n){return r.createElement(ft,(0,l.Z)({mobile:!0},t,{onClick:function(){return e.toggle()},key:n}))})))}function mt(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function gt(){var e=0===(0,w.L)().navbar.items.length,t=B();return r.createElement(r.Fragment,null,!e&&r.createElement(mt,{onClick:function(){return t.hide()}}),t.content)}function ht(){var e,t=(0,P.e)();return void 0===(e=t.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),t.shouldRender?r.createElement(j,{header:r.createElement(X,null),primaryMenu:r.createElement(pt,null),secondaryMenu:r.createElement(gt,null)}):null}const bt={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function vt(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function yt(e){var t=e.children,n=(0,w.L)().navbar,o=n.hideOnScroll,i=n.style,l=(0,P.e)(),s=function(e){var t=(0,r.useState)(e),n=t[0],a=t[1],o=(0,r.useRef)(!1),i=(0,r.useRef)(0),l=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)((function(t,n){var r=t.scrollY;if(e)if(r=l?a(!1):r+u0&&r.createElement($t,{links:n}),logo:a&&r.createElement(Wt,{logo:a}),copyright:t&&r.createElement(Gt,{copyright:t})})}const Kt=r.memo(Yt);var Xt=(0,O.Qc)([z.S,k.pl,N.OC,Oe.L5,i.VC,function(e){var t=e.children;return r.createElement(F.n2,null,r.createElement(P.M,null,r.createElement(R,null,t)))}]);function Jt(e){var t=e.children;return r.createElement(Xt,null,t)}function en(e){var t=e.error,n=e.tryAgain;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(xt,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(_t,{error:t})))))}const tn={mainWrapper:"mainWrapper_z2l0"};function nn(e){var t=e.children,n=e.noFooter,l=e.wrapperClassName,s=e.title,u=e.description;return(0,b.t)(),r.createElement(Jt,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(D,null),r.createElement(Ft,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,tn.mainWrapper,l)},r.createElement(o.Z,{fallback:function(e){return r.createElement(en,e)}},t)),!n&&r.createElement(Kt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(3366),o=n(7294),i=n(9960),l=n(4996),s=n(2263),u=n(6668),c=n(941),d=["imageClassName","titleClassName"];function f(e){var t=e.logo,n=e.alt,r=e.imageClassName,a={light:(0,l.Z)(t.src),dark:(0,l.Z)(t.srcDark||t.src)},i=o.createElement(c.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},i):i}function p(e){var t,n=(0,s.Z)().siteConfig.title,c=(0,u.L)().navbar,p=c.title,m=c.logo,g=e.imageClassName,h=e.titleClassName,b=(0,a.Z)(e,d),v=(0,l.Z)((null==m?void 0:m.href)||"/"),y=p?"":n,w=null!=(t=null==m?void 0:m.alt)?t:y;return o.createElement(i.Z,(0,r.Z)({to:v},b,(null==m?void 0:m.target)&&{target:m.target}),m&&o.createElement(f,{logo:m,alt:w,imageClassName:g}),null!=p&&o.createElement("b",{className:h},p))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){var t=e.locale,n=e.version,o=e.tag,i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(3366),o=n(7294),i=n(4334),l=n(2389),s=n(2949);const u={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};var c=["sources","className","alt"];function d(e){var t=(0,l.Z)(),n=(0,s.I)().colorMode,d=e.sources,f=e.className,p=e.alt,m=(0,a.Z)(e,c),g=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,g.map((function(e){return o.createElement("img",(0,r.Z)({key:e,src:d[e],alt:p,className:(0,i.Z)(u.themedImage,u["themedImage--"+e],f)},m))})))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>d,z:()=>y});var r=n(7462),a=n(3366),o=n(7294),i=n(412),l=n(1442),s=["collapsed"],u=["lazy"],c="ease-in-out";function d(e){var t=e.initialState,n=(0,o.useState)(null!=t&&t),r=n[0],a=n[1],i=(0,o.useCallback)((function(){a((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:a,toggleCollapsed:i}}var f={display:"none",overflow:"hidden",height:"0px"},p={display:"block",overflow:"visible",height:"auto"};function m(e,t){var n=t?f:p;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function g(e){var t=e.collapsibleRef,n=e.collapsed,r=e.animation,a=(0,o.useRef)(!1);(0,o.useEffect)((function(){var e,o=t.current;function i(){var e,t,n=o.scrollHeight,a=null!=(e=null==r?void 0:r.duration)?e:function(e){if((0,l.n)())return 1;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}(n);return{transition:"height "+a+"ms "+(null!=(t=null==r?void 0:r.easing)?t:c),height:n+"px"}}function s(){var e=i();o.style.transition=e.transition,o.style.height=e.height}if(!a.current)return m(o,n),void(a.current=!0);return o.style.willChange="height",e=requestAnimationFrame((function(){n?(s(),requestAnimationFrame((function(){o.style.height=f.height,o.style.overflow=f.overflow}))):(o.style.display="block",requestAnimationFrame((function(){s()})))})),function(){return cancelAnimationFrame(e)}}),[t,n,r])}function h(e){if(!i.Z.canUseDOM)return e?f:p}function b(e){var t=e.as,n=void 0===t?"div":t,r=e.collapsed,a=e.children,i=e.animation,l=e.onCollapseTransitionEnd,s=e.className,u=e.disableSSRStyle,c=(0,o.useRef)(null);return g({collapsibleRef:c,collapsed:r,animation:i}),o.createElement(n,{ref:c,style:u?void 0:h(r),onTransitionEnd:function(e){"height"===e.propertyName&&(m(c.current,r),null==l||l(r))},className:s},a)}function v(e){var t=e.collapsed,n=(0,a.Z)(e,s),i=(0,o.useState)(!t),l=i[0],u=i[1],c=(0,o.useState)(t),d=c[0],f=c[1];return(0,o.useLayoutEffect)((function(){t||u(!0)}),[t]),(0,o.useLayoutEffect)((function(){l&&f(t)}),[l,t]),l?o.createElement(b,(0,r.Z)({},n,{collapsed:d})):null}function y(e){var t=e.lazy,n=(0,a.Z)(e,u),r=t?v:b;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(9688),l=n(6668),s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=function(){return"true"===s.get()},d=function(e){return s.set(String(e))},f=r.createContext(null);function p(e){var t=e.children,n=function(){var e=(0,l.L)().announcementBar,t=(0,a.Z)(),n=(0,r.useState)((function(){return!!t&&c()})),o=n[0],i=n[1];(0,r.useEffect)((function(){i(c())}),[]);var s=(0,r.useCallback)((function(){d(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=u.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;u.set(t),r&&d(!1),!r&&c()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!o,close:s}}),[e,o,s])}();return r.createElement(f.Provider,{value:n},t)}function m(){var e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(9688),i=n(12),l=n(6668),s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=function(e){return e===d.dark?d.dark:d.light},p=function(e){return a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e)},m=function(e){c.set(f(e))};function g(e){var t=e.children,n=function(){var e=(0,l.L)().colorMode,t=e.defaultMode,n=e.disableSwitch,a=e.respectPrefersColorScheme,o=(0,r.useState)(p(t)),i=o[0],s=o[1];(0,r.useEffect)((function(){n&&c.del()}),[n]);var g=(0,r.useCallback)((function(e,n){void 0===n&&(n={});var r=n.persist,o=void 0===r||r;e?(s(e),o&&m(e)):(s(a?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:t),c.del())}),[a,t]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",f(i))}),[i]),(0,r.useEffect)((function(){if(!n){var e=function(e){if(e.key===u){var t=c.get();null!==t&&g(f(t))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[n,g]);var h=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!n||a){var e=window.matchMedia("(prefers-color-scheme: dark)"),t=function(){window.matchMedia("print").matches||h.current?h.current=window.matchMedia("print").matches:g(null)};return e.addListener(t),function(){return e.removeListener(t)}}}),[g,n,a]),(0,r.useMemo)((function(){return{colorMode:i,setColorMode:g,get isDarkTheme(){return i===d.dark},setLightTheme:function(){g(d.light)},setDarkTheme:function(){g(d.dark)}}}),[i,g])}();return r.createElement(s.Provider,{value:n},t)}function h(){var e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(9688),u=n(12),c=function(e){return"docs-preferred-version-"+e},d={save:function(e,t,n){(0,u.WA)(c(e),{persistence:t}).set(n)},read:function(e,t){return(0,u.WA)(c(e),{persistence:t}).get()},clear:function(e,t){(0,u.WA)(c(e),{persistence:t}).del()}},f=function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))};var p=r.createContext(null);function m(){var e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),o=(0,r.useState)((function(){return f(n)})),l=o[0],s=o[1];return(0,r.useEffect)((function(){s(function(e){var t=e.pluginIds,n=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(t.map((function(e){return[e,(t=e,a=d.read(t,n),r[t].versions.some((function(e){return e.name===a}))?{preferredVersionName:a}:(d.clear(t,n),{preferredVersionName:null}))];var t,a})))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]),[l,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,n){d.save(e,t,n),s((function(t){var r;return Object.assign({},t,((r={})[e]={preferredVersionName:n},r))}))}}}),[t])]}function g(e){var t=e.children,n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){var t=e.children;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){var e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){var t;void 0===e&&(e=o.m);var n=(0,a.zh)(e),i=b(),l=i[0],s=i[1],u=l[e].preferredVersionName;return{preferredVersion:null!=(t=n.versions.find((function(e){return e.name===u})))?t:null,savePreferredVersionName:(0,r.useCallback)((function(t){s.savePreferredVersion(e,t)}),[s,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(9688),o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){var t=e.children,n=e.name,a=e.items,o=(0,r.useMemo)((function(){return n&&a?{name:n,items:a}:null}),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){var e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=(n(1688),n(9688));function s(e){!function(e){var t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((function(){return t.block((function(e,t){return n(e,t)}))}),[t,n])}((function(t,n){if("POP"===n)return e(t,n)}))}var u=n(6668),c=r.createContext(void 0);function d(){var e,t=(e=(0,a.HY)(),0===(0,u.L)().navbar.items.length&&!e.component),n=(0,o.i)(),i=!t&&"mobile"===n,l=(0,r.useState)(!1),c=l[0],d=l[1];s((function(){if(c)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===n&&d(!1)}),[n]),(0,r.useMemo)((function(){return{disabled:t,shouldRender:i,toggle:f,shown:c}}),[t,i,f,c])}function f(e){var t=e.children,n=d();return r.createElement(c.Provider,{value:n},t)}function p(){var e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(9688),o=r.createContext(null);function i(e){var t=e.children,n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){var e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){var t=e.component,n=e.props,i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");var l=i[1],s=(0,a.Ql)(n);return(0,r.useEffect)((function(){l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((function(){return function(){return l({component:null,props:null})}}),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294),a="navigation-with-keyboard";function o(){(0,r.useEffect)((function(){function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),function(){document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412),o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}var s=!1;function u(){var e=(0,r.useState)((function(){return s?"ssr":l()})),t=e[0],n=e[1];return(0,r.useEffect)((function(){function e(){n(l())}var t=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e),clearTimeout(t)}}),[]),t}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});var r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:function(e){return"theme-admonition-"+e}},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>f,hI:()=>E,lO:()=>y,vY:()=>k,oz:()=>w,s1:()=>v});var r=n(7855),a=n(7294),o=n(6550),i=n(8790),l=n(143),s=n(373),u=n(1116);function c(e){return Array.from(new Set(e))}var d=n(8596),f=!!l._r;function p(e){if(e.href)return e.href;for(var t,n=(0,r.Z)(e.items);!(t=n()).done;){var a=t.value;if("link"===a.type)return a.href;if("category"===a.type){var o=p(a);if(o)return o}}}var m=function(e,t){return void 0!==e&&(0,d.Mg)(e,t)},g=function(e,t){return e.some((function(e){return h(e,t)}))};function h(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||g(e.items,t))}function b(e){var t=e.sidebarItems,n=e.pathname,a=e.onlyCategories,o=void 0!==a&&a,i=[];return function e(t){for(var a,l=(0,r.Z)(t);!(a=l()).done;){var s=a.value;if("category"===s.type&&((0,d.Mg)(s.href,n)||e(s.items))||"link"===s.type&&(0,d.Mg)(s.href,n))return o&&"category"!==s.type||i.unshift(s),!0}return!1}(t),i}function v(){var e,t=(0,u.V)(),n=(0,o.TH)().pathname;return!1!==(null==(e=(0,l.gA)())?void 0:e.pluginData.breadcrumbs)&&t?b({sidebarItems:t.items,pathname:n}):null}function y(e){var t=(0,l.Iw)(e).activeVersion,n=(0,s.J)(e).preferredVersion,r=(0,l.yW)(e);return(0,a.useMemo)((function(){return c([t,n,r].filter(Boolean))}),[t,n,r])}function w(e,t){var n=y(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=t.find((function(t){return t[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\nAvailable sidebar ids are:\n- '+t.map((function(e){return e[0]})).join("\n- "));return r[1]}),[e,n])}function k(e,t){var n=y(t);return(0,a.useMemo)((function(){var t=n.flatMap((function(e){return e.docs})),r=t.find((function(t){return t.id===e}));if(!r){if(n.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("Couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+' "'+n.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+c(t.map((function(e){return e.id}))).join("\n- "))}return r}),[e,n])}function E(e){var t=e.route,n=e.versionMetadata,r=(0,o.TH)(),a=t.routes,l=a.find((function(e){return(0,o.LX)(r.pathname,e)}));if(!l)return null;var s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,i.H)(a),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(7459),o=n(5742),i=n(226);function l(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){var t=e.title,n=e.description,a=e.keywords,i=e.image,l=e.children,c=function(e){var t=(0,u.Z)().siteConfig,n=t.title,r=t.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+r+" "+n:n}(t),d=(0,s.C)().withBaseUrl,f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}var d=r.createContext(void 0);function f(e){var t=e.className,n=e.children,i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){var t=e.children,n=l(),o="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),i="plugin-id-"+n.plugin.id;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},9688:(e,t,n)=>{"use strict";n.d(t,{i6:()=>p,Qc:()=>g,zX:()=>d,D9:()=>f,Ql:()=>m});var r=n(7099),a=n(4578);function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}var i=n(9611);function l(e,t,n){return l=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&(0,i.Z)(a,n.prototype),a},l.apply(null,arguments)}function s(e){var t="function"==typeof Map?new Map:void 0;return s=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return l(e,arguments,o(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(n,e)},s(e)}var u=n(7294),c=n(412).Z.canUseDOM?u.useLayoutEffect:u.useEffect;function d(e){var t=(0,u.useRef)(e);return c((function(){t.current=e}),[e]),(0,u.useCallback)((function(){return t.current.apply(t,arguments)}),[])}function f(e){var t=(0,u.useRef)();return c((function(){t.current=e})),t.current}var p=function(e){function t(t,n){var a,o,i;return(i=e.call(this)||this).name="ReactContextError",i.message="Hook "+(null!=(a=null==(o=i.stack)||null==(o=o.split("\n")[1])||null==(o=o.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:o.groups.name)?a:"")+" is called outside the <"+t+">. "+(null!=n?n:""),i}return(0,a.Z)(t,e),t}(s(Error));function m(e){var t=Object.entries(e);return t.sort((function(e,t){return e[0].localeCompare(t[0])})),(0,u.useMemo)((function(){return e}),t.flat())}function g(e){return function(t){var n=t.children;return u.createElement(u.Fragment,null,e.reduceRight((function(e,t){return u.createElement(t,null,e)}),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){var n=function(e){var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){var e=(0,o.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var t=e.baseUrl;function n(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0!==t.length)return t.find(n)||e(t.filter(r).flatMap((function(e){var t;return null!=(t=e.routes)?t:[]})))}(e.routes)}({routes:a.Z,baseUrl:e})}),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(9688);var l=r.createContext(void 0);function s(e){var t,n=e.children,a=(t=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:t,enableScrollEvents:function(){t.current=!0},disableScrollEvents:function(){t.current=!1}}}),[]));return r.createElement(l.Provider,{value:a},n)}function u(){var e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}var c=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function d(e,t){void 0===t&&(t=[]);var n=u().scrollEventsEnabledRef,a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((function(){var e=function(){if(n.current){var e=c();o(e,a.current),a.current=e}},t={passive:!0};return e(),window.addEventListener("scroll",e,t),function(){return window.removeEventListener("scroll",e,t)}}),[o,n].concat(t))}function f(){var e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(n){e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(n):function(e){var t=null,n=document.documentElement.scrollTop>e;return function r(){var a=document.documentElement.scrollTop;(n&&a>e||!n&&a{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);var r="default";function a(e,t){return"docs-"+e+"-"+t}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);var r="localStorage";function a(e){var t=e.key,n=e.oldValue,r=e.newValue,a=e.storage;if(n!==r){var o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}var i=!1;var l={get:function(){return null},set:function(){},del:function(){},listen:function(){return function(){}}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:t,set:t,del:t,listen:t}}(e);var n=o(null==t?void 0:t.persistence);return null===n?l:{get:function(){try{return n.getItem(e)}catch(t){return console.error("Docusaurus storage error, can't get key="+e,t),null}},set:function(t){try{var r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(o){console.error("Docusaurus storage error, can't set "+e+"="+t,o)}},del:function(){try{var t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(r){console.error("Docusaurus storage error, can't delete key="+e,r)}},listen:function(t){try{var r=function(r){r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),function(){return window.removeEventListener("storage",r)}}catch(a){return console.error("Docusaurus storage error, can't listen for changes of key="+e,a),function(){}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){var e=(0,r.Z)(),t=e.siteConfig,n=t.baseUrl,i=t.url,l=t.trailingSlash,s=e.i18n,u=s.defaultLocale,c=s.currentLocale,d=(0,a.TH)().pathname,f=(0,o.applyTrailingSlash)(d,{trailingSlash:l,baseUrl:n}),p=c===u?n:n.replace("/"+c+"/","/"),m=f.replace(n,"");return{createUrl:function(e){var t=e.locale;return""+(e.fullyQualified?i:"")+function(e){return e===u?""+p:""+p+e+"/"}(t)+m}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(9688);function i(e){var t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((function(){n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=t.trailingSlash,r=t.baseUrl;if(e.startsWith("#"))return e;if(void 0===n)return e;var a,o=e.split(/[#?]/)[0],i="/"===o||o===r?o:(a=o,n?function(e){return e.endsWith("/")?e:e+"/"}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));return e.replace(o,i)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t].concat(e(t.cause)):[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),a=n(1728);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};function i(e){var t=e.className;return r.createElement("div",{className:(0,a.Z)(o.loadingRing,t)},r.createElement("div",null),r.createElement("div",null),r.createElement("div",null),r.createElement("div",null))}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>c});var r=n(4165),a=n(7855),o=n(5861),i=n(1336),l=n.n(i),s=n(1029),u=new Map;function c(e,t){var n=""+e+t,r=u.get(n);return r||(r=function(e,t){return d.apply(this,arguments)}(e,t),u.set(n,r)),r}function d(){return(d=(0,o.Z)((0,r.Z)().mark((function e(t,n){var o,i,u,c;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=""+t+s.J.replace("{dir}",n?"-"+n.replace(/\//g,"-"):""),new URL(o,location.origin).origin===location.origin){e.next=5;break}throw new Error("Unexpected version url");case 5:return e.next=7,fetch(o);case 7:return e.next=9,e.sent.json();case 9:return i=e.sent,u=i.map((function(e,t){var n=e.documents,r=e.index;return{type:t,documents:n,index:l().Index.load(r)}})),c=i.reduce((function(e,t){for(var n,r=(0,a.Z)(t.index.invertedIndex);!(n=r()).done;){var o=n.value;/(?:[\u3400-\u4DBF\u4E00-\u9FFF\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/.test(o[0][0])&&e.add(o[0])}return e}),new Set),e.abrupt("return",{wrappedIndexes:u,zhDictionary:Array.from(c)});case 13:return e.abrupt("return",{wrappedIndexes:[],zhDictionary:[]});case 14:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>c});var r=n(7855),a=n(1336),o=n.n(a);function i(e,t){var n=[];return function e(a,o){if(0!==a.length){var i=a[0];if(/(?:[\u3400-\u4DBF\u4E00-\u9FFF\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/.test(i))for(var l,s=function(e,t){var n=[];return function e(a,o){for(var i,l=0,s=!1,u=(0,r.Z)(t);!(i=u()).done;){var c=i.value;if(a.substr(0,c.length)===c){var d={missed:o.missed,term:o.term.concat({value:c})};a.length>c.length?e(a.substr(c.length),d):n.push(d),s=!0}else for(var f=c.length-1;f>l;f-=1){var p=c.substr(0,f);if(a.substr(0,f)===p){l=f;var m={missed:o.missed,term:o.term.concat({value:p,trailing:!0})};a.length>f?e(a.substr(f),m):n.push(m),s=!0;break}}}s||(a.length>0?e(a.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort((function(e,t){var n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((function(e){return e.term}))}(i,t),u=(0,r.Z)(s);!(l=u()).done;){var c=l.value,d=o.concat.apply(o,c);e(a.slice(1),d)}else{var f=o.concat({value:i});e(a.slice(1),f)}}else n.push(o)}(e,[]),n}var l=n(1029);function s(e){return u(e).concat(u(e.filter((function(e){var t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function u(e,t){return e.map((function(e){return{tokens:e.map((function(e){return e.value})),term:e.map((function(e){return{value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE}}))}}))}function c(e,t,n){return function(a,u){var c=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((function(e){return e.toString()}));var n=/[^-\s]+/g;return t.includes("zh")&&(n=/[0-9A-Z_a-z]+|(?:[\u3400-\u4DBF\u4E00-\u9FFF\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+/g),e.toLowerCase().match(n)||[]}(a,l.dK);if(0!==c.length){var d=function(e,t){var n=i(e,t);if(0===n.length)return[{tokens:e,term:e.map((function(e){return{value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING}}))}];for(var a,u=(0,r.Z)(n);!(a=u()).done;){var c=a.value;c[c.length-1].maybeTyping=!0}for(var d,f,p=[],m=(0,r.Z)(l.dK);!(d=m()).done;){var g=d.value;if("en"===g)l._k||p.unshift(o().stopWordFilter);else{var h=o()[g];h.stopWordFilter&&p.unshift(h.stopWordFilter)}}if(p.length>0){var b=function(e){return p.reduce((function(e,t){return e.filter((function(e){return t(e.value)}))}),e)};f=[];for(var v,y=[],w=(0,r.Z)(n);!(v=w()).done;){var k=v.value,E=b(k);f.push(E),E.length0&&y.push(E)}n.push.apply(n,y)}else f=n.slice();for(var x,_=[],S=(0,r.Z)(f);!(x=S()).done;){var C=x.value;if(C.length>2)for(var T=C.length-1;T>=0;T-=1)_.push(C.slice(0,T).concat(C.slice(T+1)))}return s(n).concat(s(_))}(c,t),f=[],p=function(){for(var t,a,o=m.value,i=o.term,l=o.tokens,s=function(){var t=a.value,o=t.documents,s=t.index,u=t.type;if(f.push.apply(f,s.query((function(e){for(var t,n=(0,r.Z)(i);!(t=n()).done;){var a=t.value;e.term(a.value,{wildcard:a.wildcard,presence:a.presence})}})).slice(0,n).filter((function(e){return!f.some((function(t){return t.document.i.toString()===e.ref}))})).slice(0,n-f.length).map((function(t){var n=o.find((function(e){return e.i.toString()===t.ref}));return{document:n,type:u,page:0!==u&&e[0].documents.find((function(e){return e.i===n.p})),metadata:t.matchData.metadata,tokens:l,score:t.score}}))),f.length>=n)return{v:1}},u=(0,r.Z)(e);!(a=u()).done;)if(t=s())return t.v};e:for(var m,g=(0,r.Z)(d);!(m=g()).done&&!p(););!function(e){e.forEach((function(e,t){e.index=t})),e.sort((function(t,n){var r=t.type>0&&t.page?e.findIndex((function(e){return e.document===t.page})):t.index,a=n.type>0&&n.page?e.findIndex((function(e){return e.document===n.page})):n.index;return-1===r&&(r=t.index),-1===a&&(a=n.index),r===a?0===t.type?-1:0===n.type?1:t.index-n.index:r-a}))}(f),function(e){e.forEach((function(t,n){n>0&&t.page&&e.some((function(e){return e.document===t.page}))&&(n{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){for(var n=[],r=0,a=Object.values(e);rr})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(7855),a=n(1690);function o(e,t,n){for(var i,l=[],s=(0,r.Z)(t);!(i=s()).done;){var u=i.value,c=e.toLowerCase().indexOf(u);if(c>=0){c>0&&l.push(o(e.substr(0,c),t)),l.push(""+(0,a.X)(e.substr(c,u.length))+"");var d=c+u.length;d"+(0,a.X)(e)+"":(0,a.X)(e):l.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>u});var r=n(7855),a=n(1690),o=n(2539),i=/[0-9A-Z_a-z]+|(?:[\u3400-\u4DBF\u4E00-\u9FFF\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/;function l(e){for(var t=[],n=0,r=e;r.length>0;){var a=r.match(i);if(!a){t.push(r);break}a.index>0&&t.push(r.substring(0,a.index)),t.push(a[0]),n+=a.index+a[0].length,r=e.substring(n)}return t}var s=n(1029);function u(e,t,n,i){void 0===i&&(i=s.Hk);for(var u=function(e,t,n){var i=[],s=0,u=0,c=-1;for(;su)for(var m,g=l(e.substring(u,f)).map((function(e){return{html:(0,a.X)(e),textLength:e.length}})),h=(0,r.Z)(g);!(m=h()).done;){var b=m.value;i.push(b)}-1===c&&(c=i.length),u=f+p,i.push({html:(0,o.C)(e.substring(f,u),n,!0),textLength:p})}}if(u0){var k=f.pop();h+k.textLength<=i?(m.unshift(k.html),b+=k.textLength,h+=k.textLength):(y=!0,f.length=0)}else{if(!(g.length>0))break;var E=g.shift();h+E.textLength<=i?(m.push(E.html),v+=E.textLength,h+=E.textLength):(w=!0,g.length=0)}return(y||f.length>0)&&m.unshift("\u2026"),(w||g.length>0)&&m.push("\u2026"),m.join("")}},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>o,gQ:()=>p,H6:()=>u,hG:()=>h,l9:()=>m,dK:()=>r,_k:()=>a,pu:()=>f,AY:()=>c,t_:()=>d,Kc:()=>g,J:()=>i,Hk:()=>s,qo:()=>l,pQ:()=>b});n(1336);var r=["en"],a=!1,o=null,i="search-index{dir}.json",l=8,s=50,u=!1,c=!0,d=!0,f="right",p=void 0,m=!0,g=null,h=!1,b=!1},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>L,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,a;!function(){var o,i,l,s,u,c,d,f,p,m,g,h,b,v,y,w,k,E,x,_,S,C,T,L,A,D,P,N,O,F,I=function(e){var t=new I.Builder;return t.pipeline.add(I.trimmer,I.stopWordFilter,I.stemmer),t.searchPipeline.add(I.stemmer),e.call(t,t),t.build()};I.version="2.3.9",I.utils={},I.utils.warn=(o=this,function(e){o.console&&console.warn&&console.warn(e)}),I.utils.asString=function(e){return null==e?"":e.toString()},I.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var s=I.utils.clone(t)||{};s.position=[i,l],s.index=a.length,a.push(new I.Token(n.slice(i,o),s))}i=o+1}}return a},I.tokenizer.separator=/[\s\-]+/,I.Pipeline=function(){this._stack=[]},I.Pipeline.registeredFunctions=Object.create(null),I.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&I.utils.warn("Overwriting existing registered function: "+t),e.label=t,I.Pipeline.registeredFunctions[e.label]=e},I.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||I.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},I.Pipeline.load=function(e){var t=new I.Pipeline;return e.forEach((function(e){var n=I.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},I.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){I.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},I.Pipeline.prototype.after=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},I.Pipeline.prototype.before=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},I.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},I.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(oe&&(n=a),o!=e);)r=n-t,a=t+Math.floor(r/2),o=this.elements[2*a];return o==e||o>e?2*a:ol?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},I.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},I.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var o,i=a.str.charAt(0);i in a.node.edges?o=a.node.edges[i]:(o=new I.TokenSet,a.node.edges[i]=o),1==a.str.length&&(o.final=!0),r.push({node:o,editsRemaining:a.editsRemaining,str:a.str.slice(1)})}if(0!=a.editsRemaining){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new I.TokenSet;a.node.edges["*"]=l}if(0==a.str.length&&(l.final=!0),r.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str}),a.str.length>1&&r.push({node:a.node,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)}),1==a.str.length&&(a.node.final=!0),a.str.length>=1){if("*"in a.node.edges)var s=a.node.edges["*"];else{s=new I.TokenSet;a.node.edges["*"]=s}1==a.str.length&&(s.final=!0),r.push({node:s,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.str.length>1){var u,c=a.str.charAt(0),d=a.str.charAt(1);d in a.node.edges?u=a.node.edges[d]:(u=new I.TokenSet,a.node.edges[d]=u),1==a.str.length&&(u.final=!0),r.push({node:u,editsRemaining:a.editsRemaining-1,str:c+a.str.slice(2)})}}}return n},I.TokenSet.fromString=function(e){for(var t=new I.TokenSet,n=t,r=0,a=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},I.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},I.Index.prototype.search=function(e){return this.query((function(t){new I.QueryParser(e,t).parse()}))},I.Index.prototype.query=function(e){for(var t=new I.Query(this.fields),n=Object.create(null),r=Object.create(null),a=Object.create(null),o=Object.create(null),i=Object.create(null),l=0;l1?1:e},I.Builder.prototype.k1=function(e){this._k1=e},I.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var a=0;a=this.length)return I.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},I.QueryLexer.prototype.width=function(){return this.pos-this.start},I.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},I.QueryLexer.prototype.backup=function(){this.pos-=1},I.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=I.QueryLexer.EOS&&this.backup()},I.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(I.QueryLexer.TERM)),e.ignore(),e.more())return I.QueryLexer.lexText},I.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.EDIT_DISTANCE),I.QueryLexer.lexText},I.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.BOOST),I.QueryLexer.lexText},I.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(I.QueryLexer.TERM)},I.QueryLexer.termSeparator=I.tokenizer.separator,I.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==I.QueryLexer.EOS)return I.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return I.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if(t.match(I.QueryLexer.termSeparator))return I.QueryLexer.lexTerm}else e.escapeCharacter()}},I.QueryParser=function(e,t){this.lexer=new I.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},I.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=I.QueryParser.parseClause;e;)e=e(this);return this.query},I.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},I.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},I.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},I.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case I.QueryLexer.PRESENCE:return I.QueryParser.parsePresence;case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new I.QueryParseError(n,t.start,t.end)}},I.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=I.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=I.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new I.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new I.QueryParseError(n,t.start,t.end)}switch(r.type){case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new I.QueryParseError(n,r.start,r.end)}}},I.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var a=e.peekLexeme();if(null==a){r="expecting term, found nothing";throw new I.QueryParseError(r,t.start,t.end)}if(a.type===I.QueryLexer.TERM)return I.QueryParser.parseTerm;r="expecting term, found '"+a.type+"'";throw new I.QueryParseError(r,a.start,a.end)}},I.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new I.QueryParseError(r,n.start,n.end)}else e.nextClause()}},I.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new I.QueryParseError(r,a.start,a.end)}else e.nextClause()}},I.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new I.QueryParseError(r,a.start,a.end)}else e.nextClause()}},void 0===(a="function"==typeof(r=function(){return I})?r.call(t,n,t,e):r)||(e.exports=a)}()},2497:(e,t,n)=>{"use strict";n.r(t)},7253:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var S,C=1;if(v){if(!(S=o(k,x,e,b))||S.index>=e.length)break;var T=S.index,L=S.index+S[0].length,A=x;for(A+=E.value.length;T>=A;)A+=(E=E.next).value.length;if(x=A-=E.value.length,E.value instanceof a)continue;for(var D=E;D!==t.tail&&(Ad.reach&&(d.reach=F);var I=E.prev;if(N&&(I=s(t,I,N),x+=N.length),u(t,I,C),E=s(t,I,new a(f,h?r.tokenize(P,h):P,y,P)),O&&s(t,E,O),C>1){var R={cause:f+","+m,reach:F};i(e,t,n,E.prev,x,R),d&&R.reach>d.reach&&(d.reach=R.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},5520:()=>{!function(e){function t(e){return RegExp(/(\()/.source+"(?:"+e+")"+/(?=[\s\)])/.source)}function n(e){return RegExp(/([\s([])/.source+"(?:"+e+")"+/(?=[\s)])/.source)}var r=/(?!\d)[-+*/~!@$%^=<>{}\w]+/.source,a="&"+r,o="(\\()",i="(?=\\s)",l=/(?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\((?:[^()]|\([^()]*\))*\))*\))*\))*\))*/.source,s={heading:{pattern:/;;;.*/,alias:["comment","title"]},comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\s])/,symbol:RegExp("`"+r+"'")}},"quoted-symbol":{pattern:RegExp("#?'"+r),alias:["variable","symbol"]},"lisp-property":{pattern:RegExp(":"+r),alias:"property"},splice:{pattern:RegExp(",@?"+r),alias:["symbol","variable"]},keyword:[{pattern:RegExp(o+"(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)"+i),lookbehind:!0},{pattern:RegExp(o+"(?:append|by|collect|concat|do|finally|for|in|return)"+i),lookbehind:!0}],declare:{pattern:t(/declare/.source),lookbehind:!0,alias:"keyword"},interactive:{pattern:t(/interactive/.source),lookbehind:!0,alias:"keyword"},boolean:{pattern:n(/nil|t/.source),lookbehind:!0},number:{pattern:n(/[-+]?\d+(?:\.\d*)?/.source),lookbehind:!0},defvar:{pattern:RegExp(o+"def(?:const|custom|group|var)\\s+"+r),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(r)}},defun:{pattern:RegExp(o+/(?:cl-)?(?:defmacro|defun\*?)\s+/.source+r+/\s+\(/.source+l+/\)/.source),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\S+/,arguments:null,function:{pattern:RegExp("(^\\s)"+r),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(o+"lambda\\s+\\(\\s*(?:&?"+r+"(?:\\s+&?"+r+")*\\s*)?\\)"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(o+r),lookbehind:!0},punctuation:[/(?:['`,]?\(|[)\[\]])/,{pattern:/(\s)\.(?=\s)/,lookbehind:!0}]},u={"lisp-marker":RegExp(a),varform:{pattern:RegExp(/\(/.source+r+/\s+(?=\S)/.source+l+/\)/.source),inside:s},argument:{pattern:RegExp(/(^|[\s(])/.source+r),lookbehind:!0,alias:"variable"},rest:s},c="\\S+(?:\\s+\\S+)*",d={pattern:RegExp(o+l+"(?=\\))"),lookbehind:!0,inside:{"rest-vars":{pattern:RegExp("&(?:body|rest)\\s+"+c),inside:u},"other-marker-vars":{pattern:RegExp("&(?:aux|optional)\\s+"+c),inside:u},keys:{pattern:RegExp("&key\\s+"+c+"(?:\\s+&allow-other-keys)?"),inside:u},argument:{pattern:RegExp(r),alias:"variable"},punctuation:/[()]/}};s.lambda.inside.arguments=d,s.defun.inside.arguments=e.util.clone(d),s.defun.inside.arguments.inside.sublist=d,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages["emacs-lisp"]=s}(Prism)},4961:(e,t,n)=>{var r={"./prism-lisp":5520};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=4961},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n