Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/bootstrap.ts')
-rw-r--r--editors/code/src/bootstrap.ts13
1 files changed, 8 insertions, 5 deletions
diff --git a/editors/code/src/bootstrap.ts b/editors/code/src/bootstrap.ts
index 98c2b359bf..440f21cbe3 100644
--- a/editors/code/src/bootstrap.ts
+++ b/editors/code/src/bootstrap.ts
@@ -176,13 +176,16 @@ async function fileExists(uri: vscode.Uri) {
);
}
-// Matches a `components` array that lists `rust-analyzer`. The elements are matched with
-// `[^\]]` rather than `.` so that the array may be spread over several lines, which is just
-// as valid TOML as keeping it on one. TOML strings come in both quote flavours.
-const RA_COMPONENT_RE = /components\s*=\s*\[[^\]]*["']rust-analyzer["'][^\]]*\]/;
+// Captures the elements of a `components` array. They are matched with `[^\]]` rather than `.`
+// so that the array may be spread over several lines, which is just as valid TOML as keeping it
+// on one, while still stopping at the end of the array.
+const COMPONENTS_RE = /components\s*=\s*\[(?<components>[^\]]*)\]/;
+// TOML strings come in both quote flavours.
+const RA_COMPONENT_RE = /["']rust-analyzer["']/;
function declaresRaComponent(toolchainFileContents: string): boolean {
- return RA_COMPONENT_RE.test(toolchainFileContents);
+ const components = toolchainFileContents.match(COMPONENTS_RE)?.groups?.["components"];
+ return components !== undefined && RA_COMPONENT_RE.test(components);
}
async function hasToolchainFileWithRaDeclared(uri: vscode.Uri): Promise<boolean> {