{
  "name": "metals",
  "displayName": "Scala (Metals)",
  "description": "Scala language server with rich IDE features",
  "keywords": [
    "scala",
    "lsp",
    "language server",
    "ide",
    "scalameta"
  ],
  "version": "1.68.1",
  "publisher": "scalameta",
  "contributors": [
    {
      "name": "Alexey Alekhin",
      "url": "https://github.com/laughedelic"
    },
    {
      "name": "Gabriele Petronella",
      "url": "https://github.com/gabro"
    },
    {
      "name": "Ólafur Páll Geirsson",
      "url": "https://github.com/olafurpg"
    }
  ],
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/scalameta/metals-vscode/issues"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/scalameta/metals-vscode.git"
  },
  "homepage": "https://scalameta.org/metals/",
  "engines": {
    "vscode": "^1.74.0"
  },
  "icon": "images/logo.png",
  "categories": [
    "Programming Languages",
    "Debuggers"
  ],
  "extensionKind": [
    "workspace"
  ],
  "activationEvents": [
    "onDebugResolve:scala",
    "onLanguage:scala",
    "onLanguage:java",
    "onLanguage:twirl-html",
    "onLanguage:twirl-xml",
    "onLanguage:twirl-js",
    "onLanguage:twirl-txt",
    "workspaceContains:build.sbt",
    "workspaceContains:build.sc",
    "workspaceContains:build.mill",
    "workspaceContains:build.mill.scala",
    "workspaceContains:project/build.properties",
    "workspaceContains:project.scala",
    "workspaceContains:.scala-build",
    "workspaceContains:src/main/scala",
    "workspaceContains:*/src/main/scala",
    "workspaceContains:*/*/src/main/scala"
  ],
  "contributes": {
    "languages": [
      {
        "id": "javap-verbose",
        "extensions": [
          ".javap-verbose"
        ],
        "icon": {
          "dark": "icons/file_type_java.svg",
          "light": "icons/file_type_java.svg"
        }
      },
      {
        "id": "semanticdb",
        "extensions": [
          ".semanticdb-detailed",
          ".semanticdb-compact"
        ]
      },
      {
        "id": "markdown",
        "extensions": [
          ".explain"
        ]
      },
      {
        "id": "javap",
        "extensions": [
          ".javap"
        ],
        "icon": {
          "dark": "icons/file_type_java.svg",
          "light": "icons/file_type_java.svg"
        }
      },
      {
        "id": "java",
        "extensions": [
          ".cfr",
          ".class"
        ],
        "icon": {
          "dark": "icons/file_type_java.svg",
          "light": "icons/file_type_java.svg"
        }
      },
      {
        "id": "scala",
        "extensions": [
          ".scala.html"
        ]
      },
      {
        "id": "routes",
        "filenames": [
          "routes"
        ],
        "icon": {
          "dark": "icons/file_type_play.svg",
          "light": "icons/file_type_play.svg"
        }
      },
      {
        "id": "tasty",
        "aliases": [
          "TASTy",
          "tasty"
        ],
        "extensions": [
          ".tasty-decoded"
        ],
        "icon": {
          "dark": "icons/file_type_scala.svg",
          "light": "icons/file_type_scala.svg"
        }
      },
      {
        "id": "buildtarget",
        "extensions": [
          ".metals-buildtarget"
        ],
        "icon": {
          "dark": "icons/book-dark.svg",
          "light": "icons/book-light.svg"
        }
      },
      {
        "id": "semanticdb",
        "extensions": [
          ".semanticdb",
          ".semanticdb-detailed",
          ".semanticdb-compact",
          ".semanticdb-proto"
        ],
        "icon": {
          "dark": "icons/scalameta-logo.png",
          "light": "icons/scalameta-logo.png"
        }
      },
      {
        "id": "twirl-html",
        "extensions": [
          ".scala.html"
        ],
        "aliases": [
          "Twirl HTML"
        ],
        "configuration": "./syntaxes/language-configurations/twirl-html.language-configuration.json",
        "icon": {
          "dark": "icons/file_type_play.svg",
          "light": "icons/file_type_play.svg"
        }
      },
      {
        "id": "twirl-xml",
        "aliases": [
          "Twirl XML"
        ],
        "extensions": [
          ".scala.xml"
        ],
        "icon": {
          "dark": "icons/file_type_play.svg",
          "light": "icons/file_type_play.svg"
        }
      },
      {
        "id": "twirl-js",
        "aliases": [
          "Twirl JavaScript"
        ],
        "extensions": [
          ".scala.js"
        ],
        "icon": {
          "dark": "icons/file_type_play.svg",
          "light": "icons/file_type_play.svg"
        }
      },
      {
        "id": "twirl-txt",
        "aliases": [
          "Twirl Text"
        ],
        "extensions": [
          ".scala.txt"
        ],
        "icon": {
          "dark": "icons/file_type_play.svg",
          "light": "icons/file_type_play.svg"
        }
      }
    ],
    "customEditors": [
      {
        "viewType": "metals.classDecoder",
        "displayName": "Metals (decoded class file)",
        "selector": [
          {
            "filenamePattern": "*.class"
          },
          {
            "filenamePattern": "*.tasty"
          },
          {
            "filenamePattern": "*.semanticdb"
          }
        ],
        "priority": "option"
      }
    ],
    "grammars": [
      {
        "language": "javap-verbose",
        "scopeName": "source.jvm-bytecode-verbose",
        "path": "./syntaxes/jvm-bytecode-verbose.json"
      },
      {
        "language": "javap",
        "scopeName": "source.jvm-bytecode",
        "path": "./syntaxes/jvm-bytecode.json"
      },
      {
        "language": "tasty",
        "scopeName": "source.tasty",
        "path": "./syntaxes/tasty.json"
      },
      {
        "language": "routes",
        "scopeName": "source.routes",
        "path": "./syntaxes/routes.json"
      },
      {
        "language": "buildtarget",
        "scopeName": "source.buildtarget",
        "path": "./syntaxes/buildtarget.json"
      },
      {
        "language": "semanticdb",
        "scopeName": "source.semanticdb",
        "path": "./syntaxes/semanticdb.json"
      },
      {
        "language": "twirl-html",
        "scopeName": "source.twirl",
        "path": "./syntaxes/twirl-html.json",
        "unbalancedBracketScopes": [
          "source.twirl"
        ],
        "embeddedLanguages": {
          "text.html.basic": "html"
        }
      },
      {
        "language": "twirl-xml",
        "scopeName": "text.xml.twirl",
        "path": "./syntaxes/twirl-xml.json",
        "embeddedLanguages": {
          "text.xml": "xml"
        }
      },
      {
        "language": "twirl-js",
        "scopeName": "source.js.twirl",
        "path": "./syntaxes/twirl-js.json",
        "embeddedLanguages": {
          "source.js": "javascript"
        }
      }
    ],
    "configurationDefaults": {
      "[scala]": {
        "editor.suggestSelection": "first",
        "editor.formatOnPaste": true,
        "editor.formatOnType": true,
        "editor.autoIndent": "advanced"
      }
    },
    "viewsContainers": {
      "activitybar": [
        {
          "id": "metals-explorer",
          "title": "Metals",
          "icon": "images/scalameta.svg"
        },
        {
          "id": "metals-find-in-files",
          "title": "Find in files (Metals)",
          "icon": "$(search)"
        }
      ]
    },
    "viewsWelcome": [
      {
        "view": "metalsPackages",
        "contents": "No Scala project found. Create a new one or start Metals manually.\n[New Scala project](command:metals.new-scala-project)",
        "when": "!metals:enabled || workbenchState != empty"
      }
    ],
    "views": {
      "metals-find-in-files": [
        {
          "id": "metalsFindInFiles",
          "name": "Find in files (Metals)",
          "when": "metals.showFindInFiles"
        }
      ],
      "metals-explorer": [
        {
          "id": "metalsPackages",
          "name": "Packages"
        },
        {
          "id": "metalsBuild",
          "name": "Build commands"
        },
        {
          "id": "metalsHelp",
          "name": "Help and feedback"
        }
      ]
    },
    "configuration": {
      "title": "Metals",
      "properties": {
        "metals.disableReleaseNotes": {
          "type": "boolean",
          "default": false,
          "scope": "machine",
          "markdownDescription": "Do not show release notes when Metals was updated."
        },
        "metals.forceCoursierJar": {
          "type": "boolean",
          "default": false,
          "scope": "machine",
          "markdownDescription": "Do not attempt to download/use Coursier executable and instead use fallback JAR in order to skip downloading from GitHub. It will try to download coursier jar from configured repositories. If Maven Central is not available make sure that your internal repository is properly configured."
        },
        "metals.enableBestEffort": {
          "type": "boolean",
          "default": false,
          "scope": "window",
          "markdownDescription": "Enable best effort mode for Metals in Scala 3. If enabled, Metals will try to provide most up to date information from the codebase even if it's not compiling."
        },
        "metals.protobufLsp": {
          "type": "boolean",
          "default": true,
          "scope": "window",
          "markdownDescription": "Enable Metals language server support for Protocol Buffers files. Requires another extension to contribute the `proto` language and reloading the window."
        },
        "metals.defaultShell": {
          "type": "string",
          "scope": "machine-overridable",
          "markdownDescription": "Optionally provide a default shell executable to use for build operations."
        },
        "metals.serverVersion": {
          "type": "string",
          "default": "1.6.7",
          "markdownDescription": "The version of the Metals server artifact. Requires reloading the window.  \n\n**VS Code extension version is guaranteed to work only with the default version, change if you know what you're doing**"
        },
        "metals.customServerLauncher": {
          "type": "string",
          "default": "",
          "scope": "machine-overridable",
          "markdownDescription": "Optional command to launch a Metals-compatible language server over standard input/output. When set, this completely overrides the default Metals server launch flow, including `metals.serverVersion`, `metals.serverProperties`, and `metals.customRepositories`."
        },
        "metals.serverProperties": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^-(X[a-zA-Z0-9:]+|D[a-zA-Z0-9._-]+(=[^\\s]*)?|XX:[+-]?[a-zA-Z0-9]+(=[a-zA-Z0-9.,]+)?|agentlib:[a-zA-Z0-9]+(=[^\\s]*)?|agentpath:[^\\s]+(=[^\\s]*)?|[a-zA-Z0-9]+)$"
          },
          "default": [
            "-Xmx2G",
            "-XX:+UseZGC",
            "-XX:ZUncommitDelay=30",
            "-XX:ZCollectionInterval=5",
            "-XX:+IgnoreUnrecognizedVMOptions"
          ],
          "markdownDescription": "Optional list of properties to pass along to the Metals server. By default, the environment variable `JAVA_OPTS` and `.jvmopts` file are respected. Each property needs to be a separate item.\n\nExample: `-Dhttps.proxyHost=…`, `-Dhttps.proxyPort=…` or `-Dmetals.statistics=all`"
        },
        "metals.coursierMirror": {
          "type": "string",
          "markdownDescription": "Optional alternative repository to maven central if maven central is not available. For example: `https://jcenter.bintray.com`, which will be used to set to property described [here](https://get-coursier.io/blog/#mirrors)"
        },
        "metals.excludedPackages": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": [],
          "markdownDescription": "List of packages you'd like to be left out of completions, symbol searches, and code actions.\n\nEx. `akka.actor.typed.javadsl` will ensure nothing in the `javadsl` package gets recommended to you.\n\nYou can find the list of default exclusions [here on the Metals website](https://scalameta.org/metals/docs/editors/user-configuration/#excluded-packages).\n\nIf you need to remove one of the defaults, you can simply include it and preface it with `--`."
        },
        "metals.inlayHints.inferredTypes.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for inferred variable types and method return types.\n```scala \n\n val x/*: List[Int]*/ = List(1)\n def foo(x: Int)/*: Option[Int]*/ = Some(x)\n```"
        },
        "metals.inlayHints.implicitArguments.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for implicit arguments. \n```scala \n\n given bar: Int = 123\n def foo(x: Int)(using Int) = ??? \n foo(1)/*(using bar)*/\n```"
        },
        "metals.inlayHints.implicitConversions.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for implicit conversions. \n```scala \n\n implicit class MInt(i: Int) {\n   def incr: Int = i + 1\n }\n val x = /*MInt(*/1/*)*/.incr \n```"
        },
        "metals.inlayHints.typeParameters.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for type parameters. \n```scala \n\n val x = List[Int](1)\n def foo[T](x: T) = x\n foo/*[Int]*/(1)\n```"
        },
        "metals.inlayHints.hintsInPatternMatch.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints in pattern matches. \n```scala \n\n case class Foo(a: Int, b: Int)\n val foo = Foo(1, 2)\n foo match {\n   case Foo(a/*: Int*/, b/*: Int*/) =>\n }\n```"
        },
        "metals.inlayHints.byNameParameters.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for by-name parameters. \n```scala \n\n def foo(x: => Int) = ???\n foo(/*=> */1 + 2)\n foo {/*=> */\n   val x = 1\n   x + 1\n }\n```"
        },
        "metals.inlayHints.namedParameters.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for named parameters. \n```scala \n\n def foo(number: Int) = ???\n foo(/*number = */1)\n```"
        },
        "metals.inlayHints.hintsXRayMode.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for x-ray like mode. \n```scala \n\n val finalBar: Bar = foo\n  .bar/*  : Bar*/\n  .foo()/*: Foo*/\n  .bar/*  : Bar*/\n```"
        },
        "metals.inlayHints.closingLabels.enable": {
          "type": "boolean",
          "markdownDescription": "Enable/disable inlay hints for closing labels. \n```scala \n\ndef number: Bar = {\n  println(\"This is a long function\"\n}/*number*/\n```"
        },
        "metals.javaHome": {
          "type": "string",
          "scope": "machine-overridable",
          "markdownDescription": "Optional path to the Java home directory that will be used for compiling the project.\n\nDefaults to JDK used by Metals's server (look: Java Version).\n\nThis Java version should be lower or equal to JDK version used by the Metals's server."
        },
        "metals.metalsJavaHome": {
          "type": "string",
          "scope": "machine",
          "markdownDescription": "Optional path to the Java home directory that will be used for the running Metals server.\n\nBy default Metals will try to infer it using the version specified in metals.javaVersion.\n\nThis Java version should be higher or equal to 17."
        },
        "metals.javaVersion": {
          "type": "string",
          "default": "17",
          "enum": [
            "17",
            "21",
            "25"
          ],
          "scope": "machine",
          "markdownDescription": "JDK version used for running the Metals's server.\n\nShould be greater or equal to the JDK version used for the project (look: Java Home)."
        },
        "metals.sbtScript": {
          "type": "string",
          "markdownDescription": "Optional absolute path to an `sbt` executable to use for running `sbt bloopInstall`.\n\nBy default, Metals uses `java -jar sbt-launch.jar` with an embedded launcher while respecting `.jvmopts` and `.sbtopts`.\n\nUpdate this setting if your `sbt` script requires more customizations like using environment variables."
        },
        "metals.millScript": {
          "type": "string",
          "markdownDescription": "Optional absolute path to a `mill` executable to use for running `mill mill.contrib.Bloop/install`.\n\nBy default, Metals uses an embedded `millw` script while respecting `.mill-version` file.\n\nUpdate this setting if your `mill` script requires more customizations."
        },
        "metals.mavenScript": {
          "type": "string",
          "markdownDescription": "Optional absolute path to a `mvn` executable to use for running `mvn ch.epfl.scala:maven-bloop_2.10:<bloop_version>:bloopInstall`.\n\nBy default, Metals uses an embedded `mvnw` script.\n\nUpdate this setting if your `mvn` script requires more customizations."
        },
        "metals.gradleScript": {
          "type": "string",
          "markdownDescription": "Optional absolute path to a `gradle` executable to use for running `gradle bloopInstall`.\n\nBy default, Metals uses an embedded `gradlew` script.\n\nUpdate this setting if your `gradle` script requires more customizations."
        },
        "metals.scalafmtConfigPath": {
          "type": "string",
          "markdownDescription": "Optional custom path to the .scalafmt.conf file.\n\nShould be an absolute path and use forward slashes `/` for file separators (even on Windows)."
        },
        "metals.scalafixConfigPath": {
          "type": "string",
          "markdownDescription": "Optional custom path to the .scalafix.conf file.\n\nShould be an absolute path and use forward slashes `/` for file separators (even on Windows)."
        },
        "metals.scalafixRulesDependencies": {
          "type": "array",
          "scope": "machine",
          "items": {
            "type": "string"
          },
          "markdownDescription": "List of Scalafix rules dependencies in case they are not available by default in Metals and running scalafix fails due to 'rule not found' exception. For example: `com.github.liancheng::organize-imports:0.6.0` which follows the [coursier](https://get-coursier.io/) convention."
        },
        "metals.bloopVersion": {
          "type": "string",
          "scope": "machine",
          "default": "2.0.19",
          "markdownDescription": "This version will be used for the Bloop build tool plugin, for any supported build tool,while importing in Metals as well as for running the embedded server"
        },
        "metals.bloopJvmProperties": {
          "type": "array",
          "scope": "machine",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Optional list of JVM properties to pass along to the Bloop server. Each property needs to be a separate item.\n\nExample: `-Xmx1G` or `-Xms100M`"
        },
        "metals.bloopSbtAlreadyInstalled": {
          "type": "boolean",
          "markdownDescription": "If true, Metals will not generate a `project/metals.sbt` file 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."
        },
        "metals.shutdownBloopOnEditorClose": {
          "type": "boolean",
          "default": false,
          "scope": "machine",
          "markdownDescription": "When enabled, when the last VS Code window with Metals is closed the extension will ask Metals to shut down the build server (Bloop). With multiple windows open, Bloop is only shut down when the last one closes. Machine-scoped because there is one Bloop process per machine. Disable if you run Bloop manually or want it to keep running after closing the editor."
        },
        "metals.customRepositories": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "markdownDescription": "Optional list of custom resolvers passed to Coursier when fetching metals dependencies.\n\nFor documentation on accepted values see the [Coursier documentation](https://get-coursier.io/docs/other-repositories).\n\nThe extension will pass these to Coursier using the COURSIER_REPOSITORIES environment variable after joining the custom repositories with a pipe character (|)."
        },
        "metals.superMethodLensesEnabled": {
          "type": "boolean",
          "default": true,
          "description": "Enable/disable goto super method code lens."
        },
        "metals.enableStripMarginOnTypeFormatting": {
          "type": "boolean",
          "default": true,
          "markdownDescription": "When enabled, if you press the return key from the first line of a multiline string containing a pipe, it will automatically add `.stripMargin`."
        },
        "metals.enableIndentOnPaste": {
          "type": "boolean",
          "default": false,
          "markdownDescription": "When this option is enabled, when user pastes any snippet into a Scala file, Metals will try to adjust the indentation to that of the current cursor."
        },
        "metals.verboseCompilation": {
          "type": "boolean",
          "default": false,
          "markdownDescription": "If a build server supports it (for example Bloop or Scala CLI), setting it to true will make the logs contain all the possible debugging information including that about incremental compilation in Zinc."
        },
        "metals.enableSemanticHighlighting": {
          "type": "boolean",
          "default": true,
          "markdownDescription": "When this option is enabled, Metals will provide semantic tokens for clients that support it. The feature is still experimental and does not work for all sources."
        },
        "metals.classFileOpenEncoding": {
          "type": "string",
          "default": "cfr",
          "enum": [
            "none",
            "cfr",
            "javap",
            "javap-verbose"
          ],
          "enumDescriptions": [
            "Open `.class` files in the editor as usual.",
            "Open with CFR decompiled Java (same as **Metals: Show decompiled Java**).",
            "Open with javap disassembly (same as **Metals: Show javap**).",
            "Open with javap verbose disassembly (same as **Metals: Show javap verbose**)."
          ],
          "scope": "window",
          "markdownDescription": "When not `none`, opening a `.class` file uses a Metals custom editor and together with `workbench.editorAssociations` set VS Code does not treat the file as binary (no “Open anyway” prompt). The decoded view uses the same `metalsDecode:` pipeline as **Show decompiled Java** / **Show javap**."
        },
        "metals.testUserInterface": {
          "type": "string",
          "default": "Test Explorer",
          "enum": [
            "Test Explorer",
            "Code Lenses"
          ],
          "markdownDescription": "Specifies which UI should be used for tests. `Code lenses` shows virtual text above test class, just like it was previously. `Test explorer` is a new option which shows gutter icons on the left of the file in a less intrusive way. Moreover, this option comes with a new panel called `Testing` which lists all test suites in your codebase and allows you to browse tests and navigate to the file which contains them."
        },
        "metals.testEnvironmentVariables": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "markdownDescription": "Optional environment variables to pass to tests. Each key-value pair should be a separate item."
        },
        "metals.customProjectRoot": {
          "type": "string",
          "default": "",
          "scope": "machine-overridable",
          "markdownDescription": "Optional relative path to your project's root. If you want your project root to be the workspace/workspace root set it to \".\" ."
        },
        "metals.fallbackScalaVersion": {
          "type": "string",
          "default": "automatic",
          "enum": [
            "automatic",
            "2.13.18",
            "2.13.17",
            "2.13.16",
            "2.13.15",
            "2.12.20",
            "2.12.19",
            "2.12.18",
            "2.12.17",
            "2.11.12",
            "3.8.3",
            "3.8.2",
            "3.8.1",
            "3.8.0",
            "3.7.4",
            "3.7.3",
            "3.7.2",
            "3.7.1",
            "3.3.7",
            "3.3.6",
            "3.3.5",
            "3.3.4"
          ],
          "markdownDescription": "The Scala compiler version that is used as the default or fallback in case a file doesn't belong to any build target or the specified Scala version isn't supported by Metals.\n\nThis applies to standalone Scala files, worksheets, and Scala CLI scripts.\n\n The `automatic` value means that the Scala version for these files will be inferred from the highest supported Scala version in your projects build definition"
        },
        "metals.javaFormat.eclipseConfigPath": {
          "type": "string",
          "markdownDescription": "Optional custom path to the eclipse-formatter.xml file.\n\nShould be an absolute path and use forward slashes `/` for file separators (even on Windows)."
        },
        "metals.javaFormat.eclipseProfile": {
          "type": "string",
          "markdownDescription": "Optional Eclipse format profile to use."
        },
        "metals.scalaCliLauncher": {
          "type": "string",
          "markdownDescription": "Optional path to Scala CLI launcher to use."
        },
        "metals.suggestLatestUpgrade": {
          "type": "string",
          "enum": [
            "off",
            "on",
            "install"
          ],
          "default": true,
          "enumDescriptions": [
            "Never suggest upgrades",
            "Suggest upgrades with a notification popup",
            "Automatically install latest version without asking"
          ],
          "markdownDescription": "How to handle server version upgrades when a new version is available"
        },
        "metals.defaultBspToBuildTool": {
          "type": "boolean",
          "default": false,
          "markdownDescription": "Default to using build tool as your build server."
        },
        "metals.autoImportBuilds": {
          "type": "string",
          "default": "off",
          "enum": [
            "off",
            "initial",
            "all"
          ],
          "markdownDescription": "Automatically import builds rather than prompting the user to choose. `initial` will only automatically import a build when a project is first opened, `all` will automate build imports after subsequent changes as well."
        },
        "metals.startMcpServer": {
          "type": "boolean",
          "default": false,
          "markdownDescription": "If Metals should start an HTTP Model Context Protocol server, that can be used by AI tools to provide better context about the codebase. Needs to be enabled in the client as well."
        },
        "metals.trace.server": {
          "type": "string",
          "enum": [
            "off",
            "messages",
            "verbose"
          ],
          "default": "off",
          "description": "Traces the communication between VS Code and the Metals language server.",
          "scope": "window"
        }
      }
    },
    "commands": [
      {
        "command": "metals.debug.hotCodeReplace",
        "title": "Hot Code Replace",
        "icon": {
          "light": "icons/hot_code_replace.svg",
          "dark": "icons/hot_code_replace.svg"
        }
      },
      {
        "command": "metals.reveal-active-file",
        "category": "Metals",
        "title": "Reveal Active File in Side Bar",
        "icon": {
          "light": "icons/focus-light.svg",
          "dark": "icons/focus-dark.svg"
        }
      },
      {
        "command": "metals.restart-server",
        "category": "Metals",
        "title": "Restart server"
      },
      {
        "command": "metals.build-restart",
        "category": "Metals",
        "title": "Restart build server"
      },
      {
        "command": "metals.build-import",
        "category": "Metals",
        "title": "Import build"
      },
      {
        "command": "metals.build-connect",
        "category": "Metals",
        "title": "Connect to build server"
      },
      {
        "command": "metals.build-disconnect",
        "category": "Metals",
        "title": "Disconnect from the build server without restarting"
      },
      {
        "command": "metals.bsp-switch",
        "category": "Metals",
        "title": "Switch build server"
      },
      {
        "command": "metals.generate-bsp-config",
        "category": "Metals",
        "title": "Attempt to generate bsp config for build tool."
      },
      {
        "command": "metals.sources-scan",
        "category": "Metals",
        "title": "Rescan sources"
      },
      {
        "command": "metals.compile-cascade",
        "category": "Metals",
        "title": "Cascade compile"
      },
      {
        "command": "metals.compile-clean",
        "category": "Metals",
        "title": "Recompile workspace"
      },
      {
        "command": "metals.compile-cancel",
        "category": "Metals",
        "title": "Cancel compilation"
      },
      {
        "command": "metals.doctor-run",
        "category": "Metals",
        "title": "Run doctor"
      },
      {
        "command": "metals.zip-reports",
        "category": "Metals",
        "title": "Zip reports"
      },
      {
        "command": "metals.reset-workspace",
        "category": "Metals",
        "title": "Clear caches and reimport project"
      },
      {
        "command": "metals.show-release-notes",
        "category": "Metals",
        "title": "Show release notes"
      },
      {
        "command": "metals.scalafix-run",
        "category": "Metals",
        "title": "Run all Scalafix rules"
      },
      {
        "command": "metals.scalafix-run-only",
        "category": "Metals",
        "title": "Run a single Scalafix rule"
      },
      {
        "command": "metals.show-tasty",
        "category": "Metals",
        "title": "Show decoded TASTy"
      },
      {
        "command": "metals.show-cfr",
        "category": "Metals",
        "title": "Show decompiled with CFR"
      },
      {
        "command": "metals.show-javap",
        "category": "Metals",
        "title": "Show decompiled with javap"
      },
      {
        "command": "metals.show-javap-verbose",
        "category": "Metals",
        "title": "Show decompiled with javap verbose"
      },
      {
        "command": "metals.show-semanticdb-compact",
        "category": "Metals",
        "title": "Show Semanticdb"
      },
      {
        "command": "metals.show-semanticdb-detailed",
        "category": "Metals",
        "title": "Show Semanticdb detailed"
      },
      {
        "command": "metals.show-semanticdb-proto",
        "category": "Metals",
        "title": "Show Semanticdb proto"
      },
      {
        "command": "metals.target-info-display",
        "category": "Metals",
        "title": "Display build target info"
      },
      {
        "command": "metals.new-scala-project",
        "category": "Metals",
        "title": "New Scala Project"
      },
      {
        "command": "metals.new-scala-file",
        "category": "Metals",
        "title": "New Scala File..."
      },
      {
        "command": "metals.new-java-file",
        "category": "Metals",
        "title": "New Java File..."
      },
      {
        "command": "metals.new-scala-worksheet",
        "category": "Metals",
        "title": "Create Worksheet"
      },
      {
        "command": "metals.open-new-github-issue",
        "category": "Metals",
        "title": "Open new github issue"
      },
      {
        "command": "metals.super-method-hierarchy",
        "category": "Metals",
        "title": "Reveal super method hierachy"
      },
      {
        "command": "metals.reset-choice",
        "category": "Metals",
        "title": "Reset Choice"
      },
      {
        "command": "metals.reset-notifications",
        "category": "Metals",
        "title": "Reset Notifications"
      },
      {
        "command": "metals.analyze-stacktrace",
        "category": "Metals",
        "title": "Analyze Stacktrace"
      },
      {
        "command": "metals.goto-super-method",
        "category": "Metals",
        "title": "Go to super method"
      },
      {
        "command": "metals.scala-cli-start",
        "category": "Metals",
        "title": "Start Scala CLI BSP server"
      },
      {
        "command": "metals.scala-cli-stop",
        "category": "Metals",
        "title": "Stop Scala CLI BSP server"
      },
      {
        "command": "metals.toggle-implicit-conversions-and-classes",
        "category": "Metals",
        "title": "Toggle inlay hints for implicit conversions"
      },
      {
        "command": "metals.toggle-implicit-parameters",
        "category": "Metals",
        "title": "Toggle inlay hints for implicit parameters"
      },
      {
        "command": "metals.toggle-show-inferred-type",
        "category": "Metals",
        "title": "Toggle inlay hints for inferred type"
      },
      {
        "command": "metals.toggle-x-ray-mode",
        "category": "Metals",
        "title": "Toggle inlay hints for x-ray mode"
      },
      {
        "command": "metals.toggle-type-parameters",
        "category": "Metals",
        "title": "Toggle inlay hints for type parameters"
      },
      {
        "command": "metals.toggle-hints-in-pattern-match",
        "category": "Metals",
        "title": "Toggle inlay hints in pattern matches"
      },
      {
        "command": "metals.toggle-named-parameters",
        "category": "Metals",
        "title": "Toggle inlay hints for named parameters"
      },
      {
        "command": "metals.toggle-by-name-parameters",
        "category": "Metals",
        "title": "Toggle inlay hints for by-name parameters"
      },
      {
        "command": "metals.copy-worksheet-output",
        "category": "Metals",
        "title": "Copy worksheet output"
      },
      {
        "command": "metals.copy-fqn",
        "category": "Metals",
        "title": "Copy Reference"
      },
      {
        "command": "metals.run-current-file",
        "category": "Metals",
        "title": "Run main class or tests in the current file"
      },
      {
        "command": "metals.test-current-target",
        "category": "Metals",
        "title": "Run all test in the current project"
      },
      {
        "command": "metals.run-closest",
        "category": "Metals",
        "title": "Run closest test to the current cursor position"
      },
      {
        "command": "metals.symbol-search",
        "category": "Metals",
        "title": "Search symbol in workspace"
      },
      {
        "command": "metals.find-text-in-dependency-jars",
        "category": "Metals",
        "title": "Find text in dependency JAR files"
      },
      {
        "command": "metals.open-metals-log",
        "category": "Metals",
        "title": "Open Metals Log"
      }
    ],
    "submenus": [
      {
        "id": "metals.analyze",
        "label": "Metals Analyse Source"
      }
    ],
    "keybindings": [
      {
        "key": "ctrl+t",
        "mac": "cmd+t",
        "command": "metals.symbol-search",
        "when": "editorLangId == scala || editorLangId == java || editorLangId == sbt || editorLangId == sc"
      },
      {
        "key": "ctrl+alt+shift+o",
        "mac": "cmd+alt+shift+o",
        "command": "metals.scalafix-run",
        "when": "editorLangId == scala"
      }
    ],
    "menus": {
      "view/title": [
        {
          "command": "metals.reveal-active-file",
          "group": "navigation",
          "when": "view == metalsPackages"
        }
      ],
      "debug/toolBar": [
        {
          "command": "metals.debug.hotCodeReplace",
          "group": "navigation@100",
          "when": "scalaHotReloadOn"
        }
      ],
      "commandPalette": [
        {
          "command": "metals.show-tasty",
          "when": "metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.tasty || metals:enabled && resourceExtname==.tasty-decoded || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-cfr",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.cfr || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-javap",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.javap || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-javap-verbose",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.javap-verbose || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-semanticdb-compact",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.semanticdb-compact || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-semanticdb-detailed",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.semanticdb-detailed || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.show-semanticdb-proto",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.semanticdb-proto || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill"
        },
        {
          "command": "metals.reveal-active-file",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-implicit-conversions-and-classes",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-x-ray-mode",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-implicit-parameters",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-show-inferred-type",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-type-parameters",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-hints-in-pattern-match",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-named-parameters",
          "when": "metals:enabled"
        },
        {
          "command": "metals.toggle-by-name-parameters",
          "when": "metals:enabled"
        },
        {
          "command": "metals.restart-server",
          "when": "metals:enabled"
        },
        {
          "command": "metals.build-import",
          "when": "metals:enabled"
        },
        {
          "command": "metals.build-restart",
          "when": "metals:enabled"
        },
        {
          "command": "metals.build-connect",
          "when": "metals:enabled"
        },
        {
          "command": "metals.sources-scan",
          "when": "metals:enabled"
        },
        {
          "command": "metals.compile-cascade",
          "when": "metals:enabled"
        },
        {
          "command": "metals.compile-clean",
          "when": "metals:enabled"
        },
        {
          "command": "metals.compile-cancel",
          "when": "metals:enabled"
        },
        {
          "command": "metals.doctor-run",
          "when": "metals:enabled"
        },
        {
          "command": "metals.zip-reports",
          "when": "metals:enabled"
        },
        {
          "command": "metals.reset-workspace",
          "when": "metals:enabled"
        },
        {
          "command": "metals.show-release-notes",
          "when": "metals:enabled"
        },
        {
          "command": "metals.scalafix-run",
          "when": "metals:enabled"
        },
        {
          "command": "metals.scalafix-run-only",
          "when": "metals:enabled"
        },
        {
          "command": "metals.target-info-display",
          "when": "metals:enabled"
        },
        {
          "command": "metals.new-scala-file",
          "when": "metals:enabled"
        },
        {
          "command": "metals.new-java-file",
          "when": "metals:enabled"
        },
        {
          "command": "metals.new-scala-project",
          "when": "metals:enabled"
        },
        {
          "command": "metals.super-method-hierarchy",
          "when": "metals:enabled"
        },
        {
          "command": "metals.analyze-stacktrace",
          "when": "metals:enabled"
        },
        {
          "command": "metals.goto-super-method",
          "when": "metals:enabled"
        },
        {
          "command": "metals.reset-choice",
          "when": "metals:enabled"
        },
        {
          "command": "metals.reset-notifications",
          "when": "metals:enabled"
        },
        {
          "command": "metals.scala-cli-start",
          "when": "metals:enabled"
        },
        {
          "command": "metals.scala-cli-stop",
          "when": "metals:enabled"
        },
        {
          "command": "metals.open-metals-log",
          "when": "metals:enabled"
        }
      ],
      "explorer/context": [
        {
          "command": "metals.new-scala-file",
          "when": "metals:enabled",
          "group": "navigation@1"
        },
        {
          "command": "metals.new-java-file",
          "when": "metals:enabled",
          "group": "navigation@2"
        },
        {
          "submenu": "metals.analyze",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.tasty || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "navigation@3"
        }
      ],
      "editor/context": [
        {
          "command": "metals.copy-fqn",
          "when": "metals:enabled",
          "group": "9_cutcopypaste@2"
        }
      ],
      "metals.analyze": [
        {
          "command": "metals.show-tasty",
          "when": "metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.tasty || metals:enabled && resourceExtname==.tasty-decoded || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-1@1"
        },
        {
          "command": "metals.show-cfr",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-2@1"
        },
        {
          "command": "metals.show-javap",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-3@1"
        },
        {
          "command": "metals.show-javap-verbose",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.class || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-3@2"
        },
        {
          "command": "metals.show-semanticdb-compact",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-4@1"
        },
        {
          "command": "metals.show-semanticdb-detailed",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-4@2"
        },
        {
          "command": "metals.show-semanticdb-proto",
          "when": "metals:enabled && resourceExtname==.java || metals:enabled && resourceExtname==.scala || metals:enabled && resourceExtname==.semanticdb || metals:enabled && resourceExtname==.sbt || metals:enabled && resourceExtname==.sc || metals:enabled && resourceExtname==.mill",
          "group": "metals-4@3"
        }
      ],
      "view/item/context": [
        {
          "command": "metals.target-info-display",
          "when": "view == metalsPackages && viewItem == project"
        }
      ]
    },
    "breakpoints": [
      {
        "language": "scala"
      },
      {
        "language": "java"
      }
    ],
    "debuggers": [
      {
        "type": "scala",
        "label": "Scala Debugger",
        "languages": [
          "scala"
        ],
        "configurationAttributes": {
          "launch": {
            "properties": {
              "mainClass": {
                "type": "string",
                "description": "Name of the main class to run"
              },
              "testClass": {
                "type": "string",
                "description": "Name of the test class to run"
              },
              "buildTarget": {
                "type": "string",
                "description": "Name of the build target of the class to run, can be found in the projects section of the Metals tab"
              },
              "args": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Arguments passed to the class to run",
                "default": []
              },
              "jvmOptions": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "default": []
              },
              "env": {
                "type": "object",
                "items": {
                  "type": "string"
                },
                "default": {}
              },
              "envFile": {
                "type": "string",
                "description": "Name of a .env file with additional environment variables",
                "default": null
              }
            }
          },
          "attach": {
            "properties": {
              "buildTarget": {
                "type": "string",
                "description": "Name of the build target to debug"
              },
              "hostName": {
                "type": "string",
                "description": "Host name of the debuggee JVM"
              },
              "port": {
                "type": "number",
                "description": "Port to attach to"
              }
            }
          }
        },
        "configurationSnippets": [
          {
            "label": "Scala: Run main class",
            "description": "A new configuration for running a debug session of a main class",
            "body": {
              "type": "scala",
              "request": "launch",
              "name": "Untitled",
              "mainClass": "???",
              "args": [],
              "jvmOptions": [],
              "env": {}
            }
          },
          {
            "label": "Scala: Run test class",
            "description": "A new configuration for running a debug session of a test class",
            "body": {
              "type": "scala",
              "request": "launch",
              "name": "Untitled",
              "testClass": "???"
            }
          },
          {
            "label": "Scala: Attach debugger",
            "description": "A new configuration for running a debug session of a remote JVM",
            "body": {
              "type": "scala",
              "request": "attach",
              "name": "Untitled",
              "buildTarget": "???",
              "hostName": "localhost",
              "port": 5005
            }
          },
          {
            "label": "Scala: Play framework prod server",
            "description": "A new configuration for running a production Play framework production server",
            "body": {
              "type": "scala",
              "request": "launch",
              "name": "Play main",
              "mainClass": "play.core.server.ProdServerStart",
              "args": [],
              "jvmOptions": [],
              "buildTarget": "???"
            }
          }
        ]
      }
    ]
  },
  "main": "./out/extension",
  "scripts": {
    "vscode:prepublish": "yarn compile",
    "compile": "tsc -p ./",
    "clean": "rimraf out/",
    "watch": "tsc -watch -p ./",
    "test": "ts-mocha src/test/unit/*.test.ts",
    "test-extension": "rimraf out/ && tsc -p ./ && node out/test/extension/runTest.js",
    "build": "yarn clean && vsce package --yarn",
    "vscode:publish": "vsce publish --yarn",
    "ovsx:publish": "ovsx publish",
    "lint": "eslint . --ext .ts --fix && yarn format",
    "format": "prettier --write '**/*.{ts,js,json}'",
    "format-check": "prettier --check '**/*.{ts,js,json}'",
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
  },
  "devDependencies": {
    "@eslint/eslintrc": "^3.3.5",
    "@eslint/js": "^10.0.1",
    "@sourcegraph/scip-typescript": "^0.4.0",
    "@types/chai": "^5.2.3",
    "@types/js-yaml": "4.0.9",
    "@types/marked": "^6.0.0",
    "@types/mocha": "^10.0.10",
    "@types/node": "26.0.1",
    "@types/node-fetch": "^2.6.13",
    "@types/semver": "^7.7.1",
    "@types/shell-quote": "^1.6.1",
    "@types/sinon": "^21.0.1",
    "@types/vscode": "1.74.0",
    "@types/yauzl": "^3.4.0",
    "@typescript-eslint/eslint-plugin": "^8.62.0",
    "@typescript-eslint/parser": "^8.62.1",
    "@vscode/test-electron": "^3.0.0",
    "@vscode/vsce": "^3.9.2",
    "chai": "^6.2.2",
    "conventional-changelog-cli": "5.0.0",
    "eslint": "^10.6.0",
    "eslint-config-prettier": "^10.1.8",
    "eslint-plugin-mocha": "^11.3.0",
    "glob": "^13.0.6",
    "mocha": "^11.7.6",
    "ovsx": "1.0.2",
    "prettier": "3.9.4",
    "rimraf": "^6.1.3",
    "sinon": "^22.0.0",
    "ts-mocha": "^10.1.0",
    "typescript": "6.0.3"
  },
  "dependencies": {
    "ansicolor": "^2.0.3",
    "fp-ts": "^2.16.11",
    "js-yaml": "5.2.0",
    "marked": "^18.0.5",
    "node-fetch": "^3.3.2",
    "promisify-child-process": "4.1.2",
    "semver": "^7.8.5",
    "shell-quote": "^1.9.0",
    "vscode-languageclient": "10.0.1",
    "vscode-languageserver-protocol": "3.18.2",
    "yauzl": "^3.4.0"
  },
  "extensionPack": [
    "scala-lang.scala"
  ]
}