aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yaml2
-rw-r--r--.github/workflows/release.yaml22
-rw-r--r--.vscode/launch.json4
-rw-r--r--.vscode/tasks.json2
-rw-r--r--Cargo.lock76
-rw-r--r--README.md2
-rw-r--r--crates/ra_db/src/input.rs2
-rw-r--r--crates/ra_ide_db/src/feature_flags.rs2
-rw-r--r--crates/ra_lsp_server/src/cargo_target_spec.rs113
-rw-r--r--crates/ra_prof/src/lib.rs4
-rw-r--r--crates/ra_project_model/src/sysroot.rs72
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_tt/Cargo.toml2
-rw-r--r--crates/rust-analyzer/Cargo.toml (renamed from crates/ra_lsp_server/Cargo.toml)7
-rw-r--r--crates/rust-analyzer/build.rs (renamed from crates/ra_lsp_server/build.rs)0
-rw-r--r--crates/rust-analyzer/src/bin/args.rs (renamed from crates/ra_lsp_server/src/args.rs)16
-rw-r--r--crates/rust-analyzer/src/bin/main.rs (renamed from crates/ra_lsp_server/src/main.rs)10
-rw-r--r--crates/rust-analyzer/src/caps.rs (renamed from crates/ra_lsp_server/src/caps.rs)0
-rw-r--r--crates/rust-analyzer/src/cargo_target_spec.rs118
-rw-r--r--crates/rust-analyzer/src/cli.rs (renamed from crates/ra_lsp_server/src/cli.rs)2
-rw-r--r--crates/rust-analyzer/src/cli/analysis_bench.rs (renamed from crates/ra_lsp_server/src/cli/analysis_bench.rs)2
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs (renamed from crates/ra_lsp_server/src/cli/analysis_stats.rs)3
-rw-r--r--crates/rust-analyzer/src/cli/load_cargo.rs (renamed from crates/ra_lsp_server/src/cli/load_cargo.rs)18
-rw-r--r--crates/rust-analyzer/src/cli/progress_report.rs (renamed from crates/ra_lsp_server/src/cli/progress_report.rs)0
-rw-r--r--crates/rust-analyzer/src/config.rs (renamed from crates/ra_lsp_server/src/config.rs)0
-rw-r--r--crates/rust-analyzer/src/conv.rs (renamed from crates/ra_lsp_server/src/conv.rs)3
-rw-r--r--crates/rust-analyzer/src/diagnostics.rs (renamed from crates/ra_lsp_server/src/diagnostics.rs)4
-rw-r--r--crates/rust-analyzer/src/lib.rs (renamed from crates/ra_lsp_server/src/lib.rs)7
-rw-r--r--crates/rust-analyzer/src/main_loop.rs (renamed from crates/ra_lsp_server/src/main_loop.rs)4
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs (renamed from crates/ra_lsp_server/src/main_loop/handlers.rs)10
-rw-r--r--crates/rust-analyzer/src/main_loop/pending_requests.rs (renamed from crates/ra_lsp_server/src/main_loop/pending_requests.rs)2
-rw-r--r--crates/rust-analyzer/src/main_loop/subscriptions.rs (renamed from crates/ra_lsp_server/src/main_loop/subscriptions.rs)3
-rw-r--r--crates/rust-analyzer/src/markdown.rs (renamed from crates/ra_lsp_server/src/markdown.rs)0
-rw-r--r--crates/rust-analyzer/src/req.rs (renamed from crates/ra_lsp_server/src/req.rs)0
-rw-r--r--crates/rust-analyzer/src/vfs_glob.rs (renamed from crates/ra_lsp_server/src/vfs_glob.rs)2
-rw-r--r--crates/rust-analyzer/src/world.rs (renamed from crates/ra_lsp_server/src/world.rs)4
-rw-r--r--crates/rust-analyzer/tests/heavy_tests/main.rs (renamed from crates/ra_lsp_server/tests/heavy_tests/main.rs)2
-rw-r--r--crates/rust-analyzer/tests/heavy_tests/support.rs (renamed from crates/ra_lsp_server/tests/heavy_tests/support.rs)2
-rw-r--r--docs/dev/README.md18
-rw-r--r--docs/dev/architecture.md6
-rw-r--r--docs/dev/debugging.md16
-rw-r--r--docs/user/readme.adoc16
-rw-r--r--editors/code/.eslintrc.js34
-rw-r--r--editors/code/package-lock.json904
-rw-r--r--editors/code/package.json14
-rw-r--r--editors/code/src/commands/index.ts2
-rw-r--r--editors/code/src/commands/ssr.ts4
-rw-r--r--editors/code/src/config.ts42
-rw-r--r--editors/code/src/highlighting.ts2
-rw-r--r--editors/code/src/inlay_hints.ts8
-rw-r--r--editors/code/src/installation/download_artifact.ts4
-rw-r--r--editors/code/src/installation/fetch_artifact_release_info.ts6
-rw-r--r--editors/code/src/installation/server.ts2
-rw-r--r--editors/code/src/main.ts12
-rw-r--r--editors/code/src/status_display.ts2
-rw-r--r--editors/code/tslint.json10
-rw-r--r--xtask/src/install.rs4
-rw-r--r--xtask/tests/tidy-tests/docs.rs1
58 files changed, 1247 insertions, 384 deletions
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 2605bc6ae..42b1c6921 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -95,5 +95,7 @@ jobs:
95 95
96 - run: npm ci 96 - run: npm ci
97 working-directory: ./editors/code 97 working-directory: ./editors/code
98 - run: npm run fmt
99 working-directory: ./editors/code
98 - run: npm run package --scripts-prepend-node-path 100 - run: npm run package --scripts-prepend-node-path
99 working-directory: ./editors/code 101 working-directory: ./editors/code
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index d6d5dba95..a697c0071 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -44,29 +44,29 @@ jobs:
44 CC: clang 44 CC: clang
45 with: 45 with:
46 command: build 46 command: build
47 args: --package ra_lsp_server --bin ra_lsp_server --release --target x86_64-unknown-linux-musl 47 args: --package rust-analyzer --bin rust-analyzer --release --target x86_64-unknown-linux-musl
48 48
49 - name: Build 49 - name: Build
50 if: matrix.os != 'ubuntu-latest' 50 if: matrix.os != 'ubuntu-latest'
51 uses: actions-rs/cargo@v1 51 uses: actions-rs/cargo@v1
52 with: 52 with:
53 command: build 53 command: build
54 args: --package ra_lsp_server --bin ra_lsp_server --release 54 args: --package rust-analyzer --bin rust-analyzer --release
55 55
56 - name: Create distribution dir 56 - name: Create distribution dir
57 run: mkdir ./dist 57 run: mkdir ./dist
58 58
59 - name: Copy binary 59 - name: Copy binary
60 if: matrix.os == 'ubuntu-latest' 60 if: matrix.os == 'ubuntu-latest'
61 run: cp ./target/x86_64-unknown-linux-musl/release/ra_lsp_server ./dist/ra_lsp_server-linux && strip ./dist/ra_lsp_server-linux 61 run: cp ./target/x86_64-unknown-linux-musl/release/rust-analyzer ./dist/rust-analyzer-linux && strip ./dist/rust-analyzer-linux
62 62
63 - name: Copy binary 63 - name: Copy binary
64 if: matrix.os == 'macos-latest' 64 if: matrix.os == 'macos-latest'
65 run: cp ./target/release/ra_lsp_server ./dist/ra_lsp_server-mac 65 run: cp ./target/release/rust-analyzer ./dist/rust-analyzer-mac
66 66
67 - name: Copy binary 67 - name: Copy binary
68 if: matrix.os == 'windows-latest' 68 if: matrix.os == 'windows-latest'
69 run: copy ./target/release/ra_lsp_server.exe ./dist/ra_lsp_server-windows.exe 69 run: copy ./target/release/rust-analyzer.exe ./dist/rust-analyzer-windows.exe
70 70
71 - name: Upload artifacts 71 - name: Upload artifacts
72 uses: actions/upload-artifact@v1 72 uses: actions/upload-artifact@v1
@@ -153,8 +153,8 @@ jobs:
153 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 153 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
154 with: 154 with:
155 upload_url: ${{ steps.create_release.outputs.upload_url }} 155 upload_url: ${{ steps.create_release.outputs.upload_url }}
156 asset_path: ./dist/ra_lsp_server-linux 156 asset_path: ./dist/rust-analyzer-linux
157 asset_name: ra_lsp_server-linux 157 asset_name: rust-analyzer-linux
158 asset_content_type: application/octet-stream 158 asset_content_type: application/octet-stream
159 159
160 - uses: actions/[email protected] 160 - uses: actions/[email protected]
@@ -162,8 +162,8 @@ jobs:
162 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 162 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
163 with: 163 with:
164 upload_url: ${{ steps.create_release.outputs.upload_url }} 164 upload_url: ${{ steps.create_release.outputs.upload_url }}
165 asset_path: ./dist/ra_lsp_server-mac 165 asset_path: ./dist/rust-analyzer-mac
166 asset_name: ra_lsp_server-mac 166 asset_name: rust-analyzer-mac
167 asset_content_type: application/octet-stream 167 asset_content_type: application/octet-stream
168 168
169 - uses: actions/[email protected] 169 - uses: actions/[email protected]
@@ -171,8 +171,8 @@ jobs:
171 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 171 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
172 with: 172 with:
173 upload_url: ${{ steps.create_release.outputs.upload_url }} 173 upload_url: ${{ steps.create_release.outputs.upload_url }}
174 asset_path: ./dist/ra_lsp_server-windows.exe 174 asset_path: ./dist/rust-analyzer-windows.exe
175 asset_name: ra_lsp_server-windows.exe 175 asset_name: rust-analyzer-windows.exe
176 asset_content_type: application/octet-stream 176 asset_content_type: application/octet-stream
177 177
178 - uses: actions/[email protected] 178 - uses: actions/[email protected]
diff --git a/.vscode/launch.json b/.vscode/launch.json
index b1bd98d4a..2e5c61735 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -45,7 +45,7 @@
45 "<node_internals>/**/*.js" 45 "<node_internals>/**/*.js"
46 ], 46 ],
47 "env": { 47 "env": {
48 "__RA_LSP_SERVER_DEBUG": "${workspaceFolder}/target/debug/ra_lsp_server" 48 "__RA_LSP_SERVER_DEBUG": "${workspaceFolder}/target/debug/rust-analyzer"
49 } 49 }
50 }, 50 },
51 { 51 {
@@ -59,7 +59,7 @@
59 "name": "Attach To Server", 59 "name": "Attach To Server",
60 "type": "lldb", 60 "type": "lldb",
61 "request": "attach", 61 "request": "attach",
62 "program": "${workspaceFolder}/target/debug/ra_lsp_server", 62 "program": "${workspaceFolder}/target/debug/rust-analyzer",
63 "pid": "${command:pickMyProcess}", 63 "pid": "${command:pickMyProcess}",
64 "sourceLanguages": [ 64 "sourceLanguages": [
65 "rust" 65 "rust"
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index fc9a8593b..4037e7cce 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -19,7 +19,7 @@
19 "label": "Build Server", 19 "label": "Build Server",
20 "group": "build", 20 "group": "build",
21 "type": "shell", 21 "type": "shell",
22 "command": "cargo build --package ra_lsp_server", 22 "command": "cargo build --package rust-analyzer",
23 "problemMatcher": "$rustc" 23 "problemMatcher": "$rustc"
24 }, 24 },
25 ] 25 ]
diff --git a/Cargo.lock b/Cargo.lock
index c22cbca3a..c10d72aa4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1095,44 +1095,6 @@ dependencies = [
1095] 1095]
1096 1096
1097[[package]] 1097[[package]]
1098name = "ra_lsp_server"
1099version = "0.1.0"
1100dependencies = [
1101 "anyhow",
1102 "crossbeam-channel",
1103 "either",
1104 "env_logger",
1105 "globset",
1106 "itertools",
1107 "jod-thread",
1108 "log",
1109 "lsp-server",
1110 "lsp-types",
1111 "parking_lot",
1112 "pico-args",
1113 "ra_cargo_watch",
1114 "ra_db",
1115 "ra_hir",
1116 "ra_hir_def",
1117 "ra_hir_ty",
1118 "ra_ide",
1119 "ra_prof",
1120 "ra_project_model",
1121 "ra_syntax",
1122 "ra_text_edit",
1123 "ra_vfs",
1124 "rand",
1125 "relative-path",
1126 "rustc-hash",
1127 "serde",
1128 "serde_json",
1129 "tempfile",
1130 "test_utils",
1131 "threadpool",
1132 "winapi 0.3.8",
1133]
1134
1135[[package]]
1136name = "ra_mbe" 1098name = "ra_mbe"
1137version = "0.1.0" 1099version = "0.1.0"
1138dependencies = [ 1100dependencies = [
@@ -1354,6 +1316,44 @@ dependencies = [
1354] 1316]
1355 1317
1356[[package]] 1318[[package]]
1319name = "rust-analyzer"
1320version = "0.1.0"
1321dependencies = [
1322 "anyhow",
1323 "crossbeam-channel",
1324 "either",
1325 "env_logger",
1326 "globset",
1327 "itertools",
1328 "jod-thread",
1329 "log",
1330 "lsp-server",
1331 "lsp-types",
1332 "parking_lot",
1333 "pico-args",
1334 "ra_cargo_watch",
1335 "ra_db",
1336 "ra_hir",
1337 "ra_hir_def",
1338 "ra_hir_ty",
1339 "ra_ide",
1340 "ra_prof",
1341 "ra_project_model",
1342 "ra_syntax",
1343 "ra_text_edit",
1344 "ra_vfs",
1345 "rand",
1346 "relative-path",
1347 "rustc-hash",
1348 "serde",
1349 "serde_json",
1350 "tempfile",
1351 "test_utils",
1352 "threadpool",
1353 "winapi 0.3.8",
1354]
1355
1356[[package]]
1357name = "rustc-demangle" 1357name = "rustc-demangle"
1358version = "0.1.16" 1358version = "0.1.16"
1359source = "registry+https://github.com/rust-lang/crates.io-index" 1359source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/README.md b/README.md
index fabb8479d..13d81d4ae 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@ $ git clone https://github.com/rust-analyzer/rust-analyzer && cd rust-analyzer
35# install both the language server and VS Code extension 35# install both the language server and VS Code extension
36$ cargo xtask install 36$ cargo xtask install
37 37
38# alternatively, install only the server. Binary name is `ra_lsp_server`. 38# alternatively, install only the server. Binary name is `rust-analyzer`.
39$ cargo xtask install --server 39$ cargo xtask install --server
40``` 40```
41 41
diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs
index 1f1dcea42..1b4b47215 100644
--- a/crates/ra_db/src/input.rs
+++ b/crates/ra_db/src/input.rs
@@ -3,7 +3,7 @@
3//! derived from this input. 3//! derived from this input.
4//! 4//!
5//! Note that neither this module, nor any other part of the analyzer's core do 5//! Note that neither this module, nor any other part of the analyzer's core do
6//! actual IO. See `vfs` and `project_model` in the `ra_lsp_server` crate for how 6//! actual IO. See `vfs` and `project_model` in the `rust-analyzer` crate for how
7//! actual IO is done and lowered to input. 7//! actual IO is done and lowered to input.
8 8
9use std::{fmt, str::FromStr}; 9use std::{fmt, str::FromStr};
diff --git a/crates/ra_ide_db/src/feature_flags.rs b/crates/ra_ide_db/src/feature_flags.rs
index 1b3cabf4d..76655f572 100644
--- a/crates/ra_ide_db/src/feature_flags.rs
+++ b/crates/ra_ide_db/src/feature_flags.rs
@@ -13,7 +13,7 @@ use rustc_hash::FxHashMap;
13/// checked at compile time, to keep things simple and flexible. 13/// checked at compile time, to keep things simple and flexible.
14/// 14///
15/// Also note that, at the moment, `FeatureFlags` also store features for 15/// Also note that, at the moment, `FeatureFlags` also store features for
16/// `ra_lsp_server`. This should be benign layering violation. 16/// `rust-analyzer`. This should be benign layering violation.
17#[derive(Debug)] 17#[derive(Debug)]
18pub struct FeatureFlags { 18pub struct FeatureFlags {
19 flags: FxHashMap<String, bool>, 19 flags: FxHashMap<String, bool>,
diff --git a/crates/ra_lsp_server/src/cargo_target_spec.rs b/crates/ra_lsp_server/src/cargo_target_spec.rs
deleted file mode 100644
index 5fd1e7b6b..000000000
--- a/crates/ra_lsp_server/src/cargo_target_spec.rs
+++ /dev/null
@@ -1,113 +0,0 @@
1//! FIXME: write short doc here
2
3use ra_ide::{FileId, RunnableKind, TestId};
4use ra_project_model::{self, ProjectWorkspace, TargetKind};
5
6use crate::{world::WorldSnapshot, Result};
7
8pub(crate) fn runnable_args(
9 world: &WorldSnapshot,
10 file_id: FileId,
11 kind: &RunnableKind,
12) -> Result<Vec<String>> {
13 let spec = CargoTargetSpec::for_file(world, file_id)?;
14 let mut res = Vec::new();
15 match kind {
16 RunnableKind::Test { test_id } => {
17 res.push("test".to_string());
18 if let Some(spec) = spec {
19 spec.push_to(&mut res);
20 }
21 res.push("--".to_string());
22 res.push(test_id.to_string());
23 if let TestId::Path(_) = test_id {
24 res.push("--exact".to_string());
25 }
26 res.push("--nocapture".to_string());
27 }
28 RunnableKind::TestMod { path } => {
29 res.push("test".to_string());
30 if let Some(spec) = spec {
31 spec.push_to(&mut res);
32 }
33 res.push("--".to_string());
34 res.push(path.to_string());
35 res.push("--nocapture".to_string());
36 }
37 RunnableKind::Bench { test_id } => {
38 res.push("bench".to_string());
39 if let Some(spec) = spec {
40 spec.push_to(&mut res);
41 }
42 res.push("--".to_string());
43 res.push(test_id.to_string());
44 if let TestId::Path(_) = test_id {
45 res.push("--exact".to_string());
46 }
47 res.push("--nocapture".to_string());
48 }
49 RunnableKind::Bin => {
50 res.push("run".to_string());
51 if let Some(spec) = spec {
52 spec.push_to(&mut res);
53 }
54 }
55 }
56 Ok(res)
57}
58
59pub struct CargoTargetSpec {
60 pub package: String,
61 pub target: String,
62 pub target_kind: TargetKind,
63}
64
65impl CargoTargetSpec {
66 pub fn for_file(world: &WorldSnapshot, file_id: FileId) -> Result<Option<CargoTargetSpec>> {
67 let &crate_id = match world.analysis().crate_for(file_id)?.first() {
68 Some(crate_id) => crate_id,
69 None => return Ok(None),
70 };
71 let file_id = world.analysis().crate_root(crate_id)?;
72 let path = world.file_id_to_path(file_id);
73 let res = world.workspaces.iter().find_map(|ws| match ws {
74 ProjectWorkspace::Cargo { cargo, .. } => {
75 let tgt = cargo.target_by_root(&path)?;
76 Some(CargoTargetSpec {
77 package: tgt.package(&cargo).name(&cargo).to_string(),
78 target: tgt.name(&cargo).to_string(),
79 target_kind: tgt.kind(&cargo),
80 })
81 }
82 ProjectWorkspace::Json { .. } => None,
83 });
84 Ok(res)
85 }
86
87 pub fn push_to(self, buf: &mut Vec<String>) {
88 buf.push("--package".to_string());
89 buf.push(self.package);
90 match self.target_kind {
91 TargetKind::Bin => {
92 buf.push("--bin".to_string());
93 buf.push(self.target);
94 }
95 TargetKind::Test => {
96 buf.push("--test".to_string());
97 buf.push(self.target);
98 }
99 TargetKind::Bench => {
100 buf.push("--bench".to_string());
101 buf.push(self.target);
102 }
103 TargetKind::Example => {
104 buf.push("--example".to_string());
105 buf.push(self.target);
106 }
107 TargetKind::Lib => {
108 buf.push("--lib".to_string());
109 }
110 TargetKind::Other => (),
111 }
112 }
113}
diff --git a/crates/ra_prof/src/lib.rs b/crates/ra_prof/src/lib.rs
index 7ff8db58a..c267bc85f 100644
--- a/crates/ra_prof/src/lib.rs
+++ b/crates/ra_prof/src/lib.rs
@@ -351,13 +351,13 @@ impl Drop for Scope {
351/// 2. Build with `cpu_profiler` feature. 351/// 2. Build with `cpu_profiler` feature.
352/// 3. Tun the code, the *raw* output would be in the `./out.profile` file. 352/// 3. Tun the code, the *raw* output would be in the `./out.profile` file.
353/// 4. Install pprof for visualization (https://github.com/google/pprof). 353/// 4. Install pprof for visualization (https://github.com/google/pprof).
354/// 5. Use something like `pprof -svg target/release/ra_lsp_server ./out.profile` to see the results. 354/// 5. Use something like `pprof -svg target/release/rust-analyzer ./out.profile` to see the results.
355/// 355///
356/// For example, here's how I run profiling on NixOS: 356/// For example, here's how I run profiling on NixOS:
357/// 357///
358/// ```bash 358/// ```bash
359/// $ nix-shell -p gperftools --run \ 359/// $ nix-shell -p gperftools --run \
360/// 'cargo run --release -p ra_lsp_server -- parse < ~/projects/rustbench/parser.rs > /dev/null' 360/// 'cargo run --release -p rust-analyzer -- parse < ~/projects/rustbench/parser.rs > /dev/null'
361/// ``` 361/// ```
362#[derive(Debug)] 362#[derive(Debug)]
363pub struct CpuProfiler { 363pub struct CpuProfiler {
diff --git a/crates/ra_project_model/src/sysroot.rs b/crates/ra_project_model/src/sysroot.rs
index 7b9cc899c..db779a2d2 100644
--- a/crates/ra_project_model/src/sysroot.rs
+++ b/crates/ra_project_model/src/sysroot.rs
@@ -1,10 +1,10 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use anyhow::{anyhow, bail, Context, Result}; 3use anyhow::{bail, Context, Result};
4use std::{ 4use std::{
5 env, 5 env,
6 path::{Path, PathBuf}, 6 path::{Path, PathBuf},
7 process::Command, 7 process::{Command, Output},
8}; 8};
9 9
10use ra_arena::{impl_arena_id, Arena, RawId}; 10use ra_arena::{impl_arena_id, Arena, RawId};
@@ -47,18 +47,7 @@ impl Sysroot {
47 } 47 }
48 48
49 pub fn discover(cargo_toml: &Path) -> Result<Sysroot> { 49 pub fn discover(cargo_toml: &Path) -> Result<Sysroot> {
50 let src = try_find_src_path(cargo_toml)?; 50 let src = get_or_install_rust_src(cargo_toml)?;
51
52 if !src.exists() {
53 Err(anyhow!(
54 "can't load standard library from sysroot\n\
55 {}\n\
56 (discovered via `rustc --print sysroot`)\n\
57 try running `rustup component add rust-src` or set `RUST_SRC_PATH`",
58 src.display(),
59 ))?;
60 }
61
62 let mut sysroot = Sysroot { crates: Arena::default() }; 51 let mut sysroot = Sysroot { crates: Arena::default() };
63 for name in SYSROOT_CRATES.trim().lines() { 52 for name in SYSROOT_CRATES.trim().lines() {
64 let root = src.join(format!("lib{}", name)).join("lib.rs"); 53 let root = src.join(format!("lib{}", name)).join("lib.rs");
@@ -90,27 +79,54 @@ impl Sysroot {
90 } 79 }
91} 80}
92 81
93fn try_find_src_path(cargo_toml: &Path) -> Result<PathBuf> { 82fn create_command_text(program: &str, args: &[&str]) -> String {
94 if let Ok(path) = env::var("RUST_SRC_PATH") { 83 format!("{} {}", program, args.join(" "))
95 return Ok(path.into()); 84}
96 }
97 85
98 let rustc_output = Command::new("rustc") 86fn run_command_in_cargo_dir(cargo_toml: &Path, program: &str, args: &[&str]) -> Result<Output> {
87 let output = Command::new(program)
99 .current_dir(cargo_toml.parent().unwrap()) 88 .current_dir(cargo_toml.parent().unwrap())
100 .args(&["--print", "sysroot"]) 89 .args(args)
101 .output() 90 .output()
102 .context("rustc --print sysroot failed")?; 91 .context(format!("{} failed", create_command_text(program, args)))?;
103 if !rustc_output.status.success() { 92 if !output.status.success() {
104 match rustc_output.status.code() { 93 match output.status.code() {
105 Some(code) => { 94 Some(code) => bail!(
106 bail!("failed to locate sysroot: rustc --print sysroot exited with code {}", code) 95 "failed to run the command: '{}' exited with code {}",
107 } 96 create_command_text(program, args),
108 None => bail!("failed to locate sysroot: rustc --print sysroot terminated by signal"), 97 code
98 ),
99 None => bail!(
100 "failed to run the command: '{}' terminated by signal",
101 create_command_text(program, args)
102 ),
109 }; 103 };
110 } 104 }
105 Ok(output)
106}
107
108fn get_or_install_rust_src(cargo_toml: &Path) -> Result<PathBuf> {
109 if let Ok(path) = env::var("RUST_SRC_PATH") {
110 return Ok(path.into());
111 }
112 let rustc_output = run_command_in_cargo_dir(cargo_toml, "rustc", &["--print", "sysroot"])?;
111 let stdout = String::from_utf8(rustc_output.stdout)?; 113 let stdout = String::from_utf8(rustc_output.stdout)?;
112 let sysroot_path = Path::new(stdout.trim()); 114 let sysroot_path = Path::new(stdout.trim());
113 Ok(sysroot_path.join("lib/rustlib/src/rust/src")) 115 let src_path = sysroot_path.join("lib/rustlib/src/rust/src");
116
117 if !src_path.exists() {
118 run_command_in_cargo_dir(cargo_toml, "rustup", &["component", "add", "rust-src"])?;
119 }
120 if !src_path.exists() {
121 bail!(
122 "can't load standard library from sysroot\n\
123 {}\n\
124 (discovered via `rustc --print sysroot`)\n\
125 try running `rustup component add rust-src` or set `RUST_SRC_PATH`",
126 src_path.display(),
127 )
128 }
129 Ok(src_path)
114} 130}
115 131
116impl SysrootCrate { 132impl SysrootCrate {
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index 83db943fe..cb72972c5 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -22,7 +22,7 @@ ra_text_edit = { path = "../ra_text_edit" }
22ra_parser = { path = "../ra_parser" } 22ra_parser = { path = "../ra_parser" }
23 23
24# This crate transitively depends on `smol_str` via `rowan`. 24# This crate transitively depends on `smol_str` via `rowan`.
25# ideally, `serde` should be enabled by `ra_lsp_server`, but we enable it here 25# ideally, `serde` should be enabled by `rust-analyzer`, but we enable it here
26# to reduce number of compilations 26# to reduce number of compilations
27smol_str = { version = "0.1.12", features = ["serde"] } 27smol_str = { version = "0.1.12", features = ["serde"] }
28serde = { version = "1", features = ["derive"] } 28serde = { version = "1", features = ["derive"] }
diff --git a/crates/ra_tt/Cargo.toml b/crates/ra_tt/Cargo.toml
index b8dceb92a..c9601fdcc 100644
--- a/crates/ra_tt/Cargo.toml
+++ b/crates/ra_tt/Cargo.toml
@@ -8,6 +8,6 @@ authors = ["rust-analyzer developers"]
8doctest = false 8doctest = false
9 9
10[dependencies] 10[dependencies]
11# ideally, `serde` should be enabled by `ra_lsp_server`, but we enable it here 11# ideally, `serde` should be enabled by `rust-analyzer`, but we enable it here
12# to reduce number of compilations 12# to reduce number of compilations
13smol_str = { version = "0.1.12", features = ["serde"] } 13smol_str = { version = "0.1.12", features = ["serde"] }
diff --git a/crates/ra_lsp_server/Cargo.toml b/crates/rust-analyzer/Cargo.toml
index da523ba8a..3dae43d2a 100644
--- a/crates/ra_lsp_server/Cargo.toml
+++ b/crates/rust-analyzer/Cargo.toml
@@ -1,12 +1,17 @@
1[package] 1[package]
2edition = "2018" 2edition = "2018"
3name = "ra_lsp_server" 3name = "rust-analyzer"
4version = "0.1.0" 4version = "0.1.0"
5authors = ["rust-analyzer developers"] 5authors = ["rust-analyzer developers"]
6autobins = false
6 7
7[lib] 8[lib]
8doctest = false 9doctest = false
9 10
11[[bin]]
12name = "rust-analyzer"
13path = "./src/bin/main.rs"
14
10[dependencies] 15[dependencies]
11anyhow = "1.0" 16anyhow = "1.0"
12crossbeam-channel = "0.4" 17crossbeam-channel = "0.4"
diff --git a/crates/ra_lsp_server/build.rs b/crates/rust-analyzer/build.rs
index 05f9772c0..05f9772c0 100644
--- a/crates/ra_lsp_server/build.rs
+++ b/crates/rust-analyzer/build.rs
diff --git a/crates/ra_lsp_server/src/args.rs b/crates/rust-analyzer/src/bin/args.rs
index 3890fe13a..5ad3963a2 100644
--- a/crates/ra_lsp_server/src/args.rs
+++ b/crates/rust-analyzer/src/bin/args.rs
@@ -5,7 +5,7 @@
5 5
6use anyhow::{bail, Result}; 6use anyhow::{bail, Result};
7use pico_args::Arguments; 7use pico_args::Arguments;
8use ra_lsp_server::cli::{BenchWhat, Position, Verbosity}; 8use rust_analyzer::cli::{BenchWhat, Position, Verbosity};
9 9
10use std::{fmt::Write, path::PathBuf}; 10use std::{fmt::Write, path::PathBuf};
11 11
@@ -74,7 +74,7 @@ impl Args {
74ra-cli-parse 74ra-cli-parse
75 75
76USAGE: 76USAGE:
77 ra_lsp_server parse [FLAGS] 77 rust-analyzer parse [FLAGS]
78 78
79FLAGS: 79FLAGS:
80 -h, --help Prints help inforamtion 80 -h, --help Prints help inforamtion
@@ -94,7 +94,7 @@ FLAGS:
94ra-cli-symbols 94ra-cli-symbols
95 95
96USAGE: 96USAGE:
97 ra_lsp_server highlight [FLAGS] 97 rust-analyzer highlight [FLAGS]
98 98
99FLAGS: 99FLAGS:
100 -h, --help Prints help inforamtion" 100 -h, --help Prints help inforamtion"
@@ -113,7 +113,7 @@ FLAGS:
113ra-cli-highlight 113ra-cli-highlight
114 114
115USAGE: 115USAGE:
116 ra_lsp_server highlight [FLAGS] 116 rust-analyzer highlight [FLAGS]
117 117
118FLAGS: 118FLAGS:
119 -h, --help Prints help information 119 -h, --help Prints help information
@@ -133,7 +133,7 @@ FLAGS:
133ra-cli-analysis-stats 133ra-cli-analysis-stats
134 134
135USAGE: 135USAGE:
136 ra_lsp_server analysis-stats [FLAGS] [OPTIONS] [PATH] 136 rust-analyzer analysis-stats [FLAGS] [OPTIONS] [PATH]
137 137
138FLAGS: 138FLAGS:
139 -h, --help Prints help information 139 -h, --help Prints help information
@@ -168,10 +168,10 @@ ARGS:
168 if matches.contains(["-h", "--help"]) { 168 if matches.contains(["-h", "--help"]) {
169 eprintln!( 169 eprintln!(
170 "\ 170 "\
171ra_lsp_server-analysis-bench 171rust-analyzer-analysis-bench
172 172
173USAGE: 173USAGE:
174 ra_lsp_server analysis-bench [FLAGS] [OPTIONS] [PATH] 174 rust-analyzer analysis-bench [FLAGS] [OPTIONS] [PATH]
175 175
176FLAGS: 176FLAGS:
177 -h, --help Prints help information 177 -h, --help Prints help information
@@ -207,7 +207,7 @@ ARGS:
207ra-cli 207ra-cli
208 208
209USAGE: 209USAGE:
210 ra_lsp_server <SUBCOMMAND> 210 rust-analyzer <SUBCOMMAND>
211 211
212FLAGS: 212FLAGS:
213 -h, --help Prints help information 213 -h, --help Prints help information
diff --git a/crates/ra_lsp_server/src/main.rs b/crates/rust-analyzer/src/bin/main.rs
index a549e5ff1..69e709a25 100644
--- a/crates/ra_lsp_server/src/main.rs
+++ b/crates/rust-analyzer/src/bin/main.rs
@@ -1,9 +1,11 @@
1//! `ra_lsp_server` binary 1//! Driver for rust-analyzer.
2//!
3//! Based on cli flags, either spawns an LSP server, or runs a batch analysis
2mod args; 4mod args;
3 5
4use lsp_server::Connection; 6use lsp_server::Connection;
5use ra_lsp_server::{cli, from_json, show_message, Result, ServerConfig};
6use ra_prof; 7use ra_prof;
8use rust_analyzer::{cli, from_json, show_message, Result, ServerConfig};
7 9
8use crate::args::HelpPrinted; 10use crate::args::HelpPrinted;
9 11
@@ -49,7 +51,7 @@ fn run_server() -> Result<()> {
49 log::info!("lifecycle: server started"); 51 log::info!("lifecycle: server started");
50 52
51 let (connection, io_threads) = Connection::stdio(); 53 let (connection, io_threads) = Connection::stdio();
52 let server_capabilities = serde_json::to_value(ra_lsp_server::server_capabilities()).unwrap(); 54 let server_capabilities = serde_json::to_value(rust_analyzer::server_capabilities()).unwrap();
53 55
54 let initialize_params = connection.initialize(server_capabilities)?; 56 let initialize_params = connection.initialize(server_capabilities)?;
55 let initialize_params = 57 let initialize_params =
@@ -82,7 +84,7 @@ fn run_server() -> Result<()> {
82 }) 84 })
83 .unwrap_or_default(); 85 .unwrap_or_default();
84 86
85 ra_lsp_server::main_loop( 87 rust_analyzer::main_loop(
86 workspace_roots, 88 workspace_roots,
87 initialize_params.capabilities, 89 initialize_params.capabilities,
88 server_config, 90 server_config,
diff --git a/crates/ra_lsp_server/src/caps.rs b/crates/rust-analyzer/src/caps.rs
index c4711076c..c4711076c 100644
--- a/crates/ra_lsp_server/src/caps.rs
+++ b/crates/rust-analyzer/src/caps.rs
diff --git a/crates/rust-analyzer/src/cargo_target_spec.rs b/crates/rust-analyzer/src/cargo_target_spec.rs
new file mode 100644
index 000000000..53751aafb
--- /dev/null
+++ b/crates/rust-analyzer/src/cargo_target_spec.rs
@@ -0,0 +1,118 @@
1//! See `CargoTargetSpec`
2
3use ra_ide::{FileId, RunnableKind, TestId};
4use ra_project_model::{self, ProjectWorkspace, TargetKind};
5
6use crate::{world::WorldSnapshot, Result};
7
8/// Abstract representation of Cargo target.
9///
10/// We use it to cook up the set of cli args we need to pass to Cargo to
11/// build/test/run the target.
12pub(crate) struct CargoTargetSpec {
13 pub(crate) package: String,
14 pub(crate) target: String,
15 pub(crate) target_kind: TargetKind,
16}
17
18impl CargoTargetSpec {
19 pub(crate) fn runnable_args(
20 spec: Option<CargoTargetSpec>,
21 kind: &RunnableKind,
22 ) -> Result<Vec<String>> {
23 let mut res = Vec::new();
24 match kind {
25 RunnableKind::Test { test_id } => {
26 res.push("test".to_string());
27 if let Some(spec) = spec {
28 spec.push_to(&mut res);
29 }
30 res.push("--".to_string());
31 res.push(test_id.to_string());
32 if let TestId::Path(_) = test_id {
33 res.push("--exact".to_string());
34 }
35 res.push("--nocapture".to_string());
36 }
37 RunnableKind::TestMod { path } => {
38 res.push("test".to_string());
39 if let Some(spec) = spec {
40 spec.push_to(&mut res);
41 }
42 res.push("--".to_string());
43 res.push(path.to_string());
44 res.push("--nocapture".to_string());
45 }
46 RunnableKind::Bench { test_id } => {
47 res.push("bench".to_string());
48 if let Some(spec) = spec {
49 spec.push_to(&mut res);
50 }
51 res.push("--".to_string());
52 res.push(test_id.to_string());
53 if let TestId::Path(_) = test_id {
54 res.push("--exact".to_string());
55 }
56 res.push("--nocapture".to_string());
57 }
58 RunnableKind::Bin => {
59 res.push("run".to_string());
60 if let Some(spec) = spec {
61 spec.push_to(&mut res);
62 }
63 }
64 }
65 Ok(res)
66 }
67
68 pub(crate) fn for_file(
69 world: &WorldSnapshot,
70 file_id: FileId,
71 ) -> Result<Option<CargoTargetSpec>> {
72 let &crate_id = match world.analysis().crate_for(file_id)?.first() {
73 Some(crate_id) => crate_id,
74 None => return Ok(None),
75 };
76 let file_id = world.analysis().crate_root(crate_id)?;
77 let path = world.file_id_to_path(file_id);
78 let res = world.workspaces.iter().find_map(|ws| match ws {
79 ProjectWorkspace::Cargo { cargo, .. } => {
80 let tgt = cargo.target_by_root(&path)?;
81 Some(CargoTargetSpec {
82 package: tgt.package(&cargo).name(&cargo).to_string(),
83 target: tgt.name(&cargo).to_string(),
84 target_kind: tgt.kind(&cargo),
85 })
86 }
87 ProjectWorkspace::Json { .. } => None,
88 });
89 Ok(res)
90 }
91
92 pub(crate) fn push_to(self, buf: &mut Vec<String>) {
93 buf.push("--package".to_string());
94 buf.push(self.package);
95 match self.target_kind {
96 TargetKind::Bin => {
97 buf.push("--bin".to_string());
98 buf.push(self.target);
99 }
100 TargetKind::Test => {
101 buf.push("--test".to_string());
102 buf.push(self.target);
103 }
104 TargetKind::Bench => {
105 buf.push("--bench".to_string());
106 buf.push(self.target);
107 }
108 TargetKind::Example => {
109 buf.push("--example".to_string());
110 buf.push(self.target);
111 }
112 TargetKind::Lib => {
113 buf.push("--lib".to_string());
114 }
115 TargetKind::Other => (),
116 }
117 }
118}
diff --git a/crates/ra_lsp_server/src/cli.rs b/crates/rust-analyzer/src/cli.rs
index 3c7b8e250..c9738d101 100644
--- a/crates/ra_lsp_server/src/cli.rs
+++ b/crates/rust-analyzer/src/cli.rs
@@ -1,4 +1,4 @@
1//! FIXME: write short doc here 1//! Various batch processing tasks, intended primarily for debugging.
2 2
3mod load_cargo; 3mod load_cargo;
4mod analysis_stats; 4mod analysis_stats;
diff --git a/crates/ra_lsp_server/src/cli/analysis_bench.rs b/crates/rust-analyzer/src/cli/analysis_bench.rs
index e00f81073..91855e592 100644
--- a/crates/ra_lsp_server/src/cli/analysis_bench.rs
+++ b/crates/rust-analyzer/src/cli/analysis_bench.rs
@@ -1,4 +1,4 @@
1//! FIXME: write short doc here 1//! Benchmark operations like highlighting or goto definition.
2 2
3use std::{ 3use std::{
4 path::{Path, PathBuf}, 4 path::{Path, PathBuf},
diff --git a/crates/ra_lsp_server/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index c27fabe3c..99ab6e443 100644
--- a/crates/ra_lsp_server/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -1,4 +1,5 @@
1//! FIXME: write short doc here 1//! Fully type-check project and print various stats, like the number of type
2//! errors.
2 3
3use std::{collections::HashSet, fmt::Write, path::Path, time::Instant}; 4use std::{collections::HashSet, fmt::Write, path::Path, time::Instant};
4 5
diff --git a/crates/ra_lsp_server/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs
index bb3e1513b..8cd08ecb6 100644
--- a/crates/ra_lsp_server/src/cli/load_cargo.rs
+++ b/crates/rust-analyzer/src/cli/load_cargo.rs
@@ -1,18 +1,18 @@
1//! FIXME: write short doc here 1//! Loads a Cargo project into a static instance of analysis, without support
2//! for incorporating changes.
2 3
3use std::{collections::HashSet, path::Path}; 4use std::path::Path;
4 5
6use anyhow::Result;
5use crossbeam_channel::{unbounded, Receiver}; 7use crossbeam_channel::{unbounded, Receiver};
6use ra_db::{CrateGraph, FileId, SourceRootId}; 8use ra_db::{CrateGraph, FileId, SourceRootId};
7use ra_ide::{AnalysisChange, AnalysisHost, FeatureFlags}; 9use ra_ide::{AnalysisChange, AnalysisHost, FeatureFlags};
8use ra_project_model::{get_rustc_cfg_options, PackageRoot, ProjectWorkspace}; 10use ra_project_model::{get_rustc_cfg_options, PackageRoot, ProjectWorkspace};
9use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch}; 11use ra_vfs::{RootEntry, Vfs, VfsChange, VfsTask, Watch};
10use rustc_hash::FxHashMap; 12use rustc_hash::{FxHashMap, FxHashSet};
11 13
12use crate::vfs_glob::RustPackageFilterBuilder; 14use crate::vfs_glob::RustPackageFilterBuilder;
13 15
14use anyhow::Result;
15
16fn vfs_file_to_id(f: ra_vfs::VfsFile) -> FileId { 16fn vfs_file_to_id(f: ra_vfs::VfsFile) -> FileId {
17 FileId(f.0) 17 FileId(f.0)
18} 18}
@@ -20,7 +20,9 @@ fn vfs_root_to_id(r: ra_vfs::VfsRoot) -> SourceRootId {
20 SourceRootId(r.0) 20 SourceRootId(r.0)
21} 21}
22 22
23pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, PackageRoot>)> { 23pub(crate) fn load_cargo(
24 root: &Path,
25) -> Result<(AnalysisHost, FxHashMap<SourceRootId, PackageRoot>)> {
24 let root = std::env::current_dir()?.join(root); 26 let root = std::env::current_dir()?.join(root);
25 let ws = ProjectWorkspace::discover(root.as_ref(), &Default::default())?; 27 let ws = ProjectWorkspace::discover(root.as_ref(), &Default::default())?;
26 let project_roots = ws.to_roots(); 28 let project_roots = ws.to_roots();
@@ -74,7 +76,7 @@ pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId,
74 Ok((host, source_roots)) 76 Ok((host, source_roots))
75} 77}
76 78
77pub fn load( 79pub(crate) fn load(
78 source_roots: &FxHashMap<SourceRootId, PackageRoot>, 80 source_roots: &FxHashMap<SourceRootId, PackageRoot>,
79 crate_graph: CrateGraph, 81 crate_graph: CrateGraph,
80 vfs: &mut Vfs, 82 vfs: &mut Vfs,
@@ -86,7 +88,7 @@ pub fn load(
86 analysis_change.set_crate_graph(crate_graph); 88 analysis_change.set_crate_graph(crate_graph);
87 89
88 // wait until Vfs has loaded all roots 90 // wait until Vfs has loaded all roots
89 let mut roots_loaded = HashSet::new(); 91 let mut roots_loaded = FxHashSet::default();
90 for task in receiver { 92 for task in receiver {
91 vfs.handle_task(task); 93 vfs.handle_task(task);
92 let mut done = false; 94 let mut done = false;
diff --git a/crates/ra_lsp_server/src/cli/progress_report.rs b/crates/rust-analyzer/src/cli/progress_report.rs
index 31867a1e9..31867a1e9 100644
--- a/crates/ra_lsp_server/src/cli/progress_report.rs
+++ b/crates/rust-analyzer/src/cli/progress_report.rs
diff --git a/crates/ra_lsp_server/src/config.rs b/crates/rust-analyzer/src/config.rs
index 3314269ec..3314269ec 100644
--- a/crates/ra_lsp_server/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/rust-analyzer/src/conv.rs
index 8af74b211..90ef74056 100644
--- a/crates/ra_lsp_server/src/conv.rs
+++ b/crates/rust-analyzer/src/conv.rs
@@ -1,4 +1,5 @@
1//! Convenience module responsible for translating between rust-analyzer's types and LSP types. 1//! Convenience module responsible for translating between rust-analyzer's types
2//! and LSP types.
2 3
3use lsp_types::{ 4use lsp_types::{
4 self, CreateFile, DiagnosticSeverity, DocumentChangeOperation, DocumentChanges, Documentation, 5 self, CreateFile, DiagnosticSeverity, DocumentChangeOperation, DocumentChanges, Documentation,
diff --git a/crates/ra_lsp_server/src/diagnostics.rs b/crates/rust-analyzer/src/diagnostics.rs
index ea08bce24..e7924f0a3 100644
--- a/crates/ra_lsp_server/src/diagnostics.rs
+++ b/crates/rust-analyzer/src/diagnostics.rs
@@ -1,7 +1,9 @@
1//! Book keeping for keeping diagnostics easily in sync with the client. 1//! Book keeping for keeping diagnostics easily in sync with the client.
2
3use std::{collections::HashMap, sync::Arc};
4
2use lsp_types::{CodeActionOrCommand, Diagnostic, Range}; 5use lsp_types::{CodeActionOrCommand, Diagnostic, Range};
3use ra_ide::FileId; 6use ra_ide::FileId;
4use std::{collections::HashMap, sync::Arc};
5 7
6pub type CheckFixes = Arc<HashMap<FileId, Vec<Fix>>>; 8pub type CheckFixes = Arc<HashMap<FileId, Vec<Fix>>>;
7 9
diff --git a/crates/ra_lsp_server/src/lib.rs b/crates/rust-analyzer/src/lib.rs
index 958c70fe5..0dae30e46 100644
--- a/crates/ra_lsp_server/src/lib.rs
+++ b/crates/rust-analyzer/src/lib.rs
@@ -1,10 +1,13 @@
1//! Implementation of the LSP for rust-analyzer. 1//! Implementation of the LSP for rust-analyzer.
2//! 2//!
3//! This crate takes Rust-specific analysis results from ra_ide and 3//! This crate takes Rust-specific analysis results from ra_ide and translates
4//! translates into LSP types. 4//! into LSP types.
5//! 5//!
6//! It also is the root of all state. `world` module defines the bulk of the 6//! It also is the root of all state. `world` module defines the bulk of the
7//! state, and `main_loop` module defines the rules for modifying it. 7//! state, and `main_loop` module defines the rules for modifying it.
8//!
9//! The `cli` submodule implements some batch-processing analysis, primarily as
10//! a debugging aid.
8#![recursion_limit = "512"] 11#![recursion_limit = "512"]
9 12
10pub mod cli; 13pub mod cli;
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 944074118..dc16a234d 100644
--- a/crates/ra_lsp_server/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -1,5 +1,5 @@
1//! The main loop of `ra_lsp_server` responsible for dispatching LSP requests/replies and 1//! The main loop of `rust-analyzer` responsible for dispatching LSP
2//! notifications back to the client. 2//! requests/replies and notifications back to the client.
3 3
4mod handlers; 4mod handlers;
5mod subscriptions; 5mod subscriptions;
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index ae51141cb..bb7bab372 100644
--- a/crates/ra_lsp_server/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -1,5 +1,6 @@
1//! This module is responsible for implementing handlers for Lanuage Server Protocol. 1//! This module is responsible for implementing handlers for Language Server
2//! The majority of requests are fulfilled by calling into the `ra_ide` crate. 2//! Protocol. The majority of requests are fulfilled by calling into the
3//! `ra_ide` crate.
3 4
4use std::{ 5use std::{
5 collections::hash_map::Entry, 6 collections::hash_map::Entry,
@@ -29,7 +30,7 @@ use serde::{Deserialize, Serialize};
29use serde_json::to_value; 30use serde_json::to_value;
30 31
31use crate::{ 32use crate::{
32 cargo_target_spec::{runnable_args, CargoTargetSpec}, 33 cargo_target_spec::CargoTargetSpec,
33 conv::{ 34 conv::{
34 to_call_hierarchy_item, to_location, Conv, ConvWith, FoldConvCtx, MapConvWith, TryConvWith, 35 to_call_hierarchy_item, to_location, Conv, ConvWith, FoldConvCtx, MapConvWith, TryConvWith,
35 TryConvWithToVec, 36 TryConvWithToVec,
@@ -921,7 +922,8 @@ fn to_lsp_runnable(
921 file_id: FileId, 922 file_id: FileId,
922 runnable: Runnable, 923 runnable: Runnable,
923) -> Result<req::Runnable> { 924) -> Result<req::Runnable> {
924 let args = runnable_args(world, file_id, &runnable.kind)?; 925 let spec = CargoTargetSpec::for_file(world, file_id)?;
926 let args = CargoTargetSpec::runnable_args(spec, &runnable.kind)?;
925 let line_index = world.analysis().file_line_index(file_id)?; 927 let line_index = world.analysis().file_line_index(file_id)?;
926 let label = match &runnable.kind { 928 let label = match &runnable.kind {
927 RunnableKind::Test { test_id } => format!("test {}", test_id), 929 RunnableKind::Test { test_id } => format!("test {}", test_id),
diff --git a/crates/ra_lsp_server/src/main_loop/pending_requests.rs b/crates/rust-analyzer/src/main_loop/pending_requests.rs
index 2d2213464..73b33e419 100644
--- a/crates/ra_lsp_server/src/main_loop/pending_requests.rs
+++ b/crates/rust-analyzer/src/main_loop/pending_requests.rs
@@ -1,4 +1,4 @@
1//! Datastructures that keep track of inflight requests. 1//! Data structures that keep track of inflight requests.
2 2
3use std::time::{Duration, Instant}; 3use std::time::{Duration, Instant};
4 4
diff --git a/crates/ra_lsp_server/src/main_loop/subscriptions.rs b/crates/rust-analyzer/src/main_loop/subscriptions.rs
index b0bae90f5..bee6437cf 100644
--- a/crates/ra_lsp_server/src/main_loop/subscriptions.rs
+++ b/crates/rust-analyzer/src/main_loop/subscriptions.rs
@@ -1,4 +1,5 @@
1//! Keeps track of file subscriptions. 1//! Keeps track of file subscriptions -- the set of currently opened files for
2//! which we want to publish diagnostics, syntax highlighting, etc.
2 3
3use ra_ide::FileId; 4use ra_ide::FileId;
4use rustc_hash::FxHashSet; 5use rustc_hash::FxHashSet;
diff --git a/crates/ra_lsp_server/src/markdown.rs b/crates/rust-analyzer/src/markdown.rs
index 76bef45cc..76bef45cc 100644
--- a/crates/ra_lsp_server/src/markdown.rs
+++ b/crates/rust-analyzer/src/markdown.rs
diff --git a/crates/ra_lsp_server/src/req.rs b/crates/rust-analyzer/src/req.rs
index 7ff7f60b3..7ff7f60b3 100644
--- a/crates/ra_lsp_server/src/req.rs
+++ b/crates/rust-analyzer/src/req.rs
diff --git a/crates/ra_lsp_server/src/vfs_glob.rs b/crates/rust-analyzer/src/vfs_glob.rs
index 12401d75a..91b33f94e 100644
--- a/crates/ra_lsp_server/src/vfs_glob.rs
+++ b/crates/rust-analyzer/src/vfs_glob.rs
@@ -1,4 +1,4 @@
1//! `ra_vfs_glob` crate implements exclusion rules for vfs. 1//! Exclusion rules for vfs.
2//! 2//!
3//! By default, we include only `.rs` files, and skip some know offenders like 3//! By default, we include only `.rs` files, and skip some know offenders like
4//! `/target` or `/node_modules` altogether. 4//! `/target` or `/node_modules` altogether.
diff --git a/crates/ra_lsp_server/src/world.rs b/crates/rust-analyzer/src/world.rs
index 71c95d4af..96efab844 100644
--- a/crates/ra_lsp_server/src/world.rs
+++ b/crates/rust-analyzer/src/world.rs
@@ -1,5 +1,5 @@
1//! The context or environment in which the language server functions. 1//! The context or environment in which the language server functions. In our
2//! In our server implementation this is know as the `WorldState`. 2//! server implementation this is know as the `WorldState`.
3//! 3//!
4//! Each tick provides an immutable snapshot of the state as `WorldSnapshot`. 4//! Each tick provides an immutable snapshot of the state as `WorldSnapshot`.
5 5
diff --git a/crates/ra_lsp_server/tests/heavy_tests/main.rs b/crates/rust-analyzer/tests/heavy_tests/main.rs
index 9ca31cbcc..3af63d9cf 100644
--- a/crates/ra_lsp_server/tests/heavy_tests/main.rs
+++ b/crates/rust-analyzer/tests/heavy_tests/main.rs
@@ -7,7 +7,7 @@ use lsp_types::{
7 PartialResultParams, Position, Range, TextDocumentItem, TextDocumentPositionParams, 7 PartialResultParams, Position, Range, TextDocumentItem, TextDocumentPositionParams,
8 WorkDoneProgressParams, 8 WorkDoneProgressParams,
9}; 9};
10use ra_lsp_server::req::{ 10use rust_analyzer::req::{
11 CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument, 11 CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument,
12 Formatting, OnEnter, Runnables, RunnablesParams, 12 Formatting, OnEnter, Runnables, RunnablesParams,
13}; 13};
diff --git a/crates/ra_lsp_server/tests/heavy_tests/support.rs b/crates/rust-analyzer/tests/heavy_tests/support.rs
index d5ea52fa9..5b90b3218 100644
--- a/crates/ra_lsp_server/tests/heavy_tests/support.rs
+++ b/crates/rust-analyzer/tests/heavy_tests/support.rs
@@ -19,7 +19,7 @@ use serde_json::{to_string_pretty, Value};
19use tempfile::TempDir; 19use tempfile::TempDir;
20use test_utils::{find_mismatch, parse_fixture}; 20use test_utils::{find_mismatch, parse_fixture};
21 21
22use ra_lsp_server::{main_loop, req, ServerConfig}; 22use rust_analyzer::{main_loop, req, ServerConfig};
23 23
24pub struct Project<'a> { 24pub struct Project<'a> {
25 fixture: &'a str, 25 fixture: &'a str,
diff --git a/docs/dev/README.md b/docs/dev/README.md
index ba24524f2..8d7e18010 100644
--- a/docs/dev/README.md
+++ b/docs/dev/README.md
@@ -80,7 +80,7 @@ In general, I use one of the following workflows for fixing bugs and
80implementing features. 80implementing features.
81 81
82If the problem concerns only internal parts of rust-analyzer (ie, I don't need 82If the problem concerns only internal parts of rust-analyzer (ie, I don't need
83to touch `ra_lsp_server` crate or typescript code), there is a unit-test for it. 83to touch `rust-analyzer` crate or typescript code), there is a unit-test for it.
84So, I use **Rust Analyzer: Run** action in VS Code to run this single test, and 84So, I use **Rust Analyzer: Run** action in VS Code to run this single test, and
85then just do printf-driven development/debugging. As a sanity check after I'm 85then just do printf-driven development/debugging. As a sanity check after I'm
86done, I use `cargo xtask install --server` and **Reload Window** action in VS 86done, I use `cargo xtask install --server` and **Reload Window** action in VS
@@ -88,17 +88,17 @@ Code to sanity check that the thing works as I expect.
88 88
89If the problem concerns only the VS Code extension, I use **Run Extension** 89If the problem concerns only the VS Code extension, I use **Run Extension**
90launch configuration from `launch.json`. Notably, this uses the usual 90launch configuration from `launch.json`. Notably, this uses the usual
91`ra_lsp_server` binary from `PATH`. For this it is important to have the following 91`rust-analyzer` binary from `PATH`. For this it is important to have the following
92in `setting.json` file: 92in `setting.json` file:
93```json 93```json
94{ 94{
95 "rust-analyzer.raLspServerPath": "ra_lsp_server" 95 "rust-analyzer.serverPath": "rust-analyzer"
96} 96}
97``` 97```
98After I am done with the fix, I use `cargo 98After I am done with the fix, I use `cargo
99xtask install --client-code` to try the new extension for real. 99xtask install --client-code` to try the new extension for real.
100 100
101If I need to fix something in the `ra_lsp_server` crate, I feel sad because it's 101If I need to fix something in the `rust-analyzer` crate, I feel sad because it's
102on the boundary between the two processes, and working there is slow. I usually 102on the boundary between the two processes, and working there is slow. I usually
103just `cargo xtask install --server` and poke changes from my live environment. 103just `cargo xtask install --server` and poke changes from my live environment.
104Note that this uses `--release`, which is usually faster overall, because 104Note that this uses `--release`, which is usually faster overall, because
@@ -113,7 +113,7 @@ communication, and `print!` would break it.
113If I need to fix something simultaneously in the server and in the client, I 113If I need to fix something simultaneously in the server and in the client, I
114feel even more sad. I don't have a specific workflow for this case. 114feel even more sad. I don't have a specific workflow for this case.
115 115
116Additionally, I use `cargo run --release -p ra_lsp_server -- analysis-stats 116Additionally, I use `cargo run --release -p rust-analyzer -- analysis-stats
117path/to/some/rust/crate` to run a batch analysis. This is primarily useful for 117path/to/some/rust/crate` to run a batch analysis. This is primarily useful for
118performance optimizations, or for bug minimization. 118performance optimizations, or for bug minimization.
119 119
@@ -148,7 +148,7 @@ There's also two VS Code commands which might be of interest:
148* `Rust Analyzer: Status` shows some memory-usage statistics. To take full 148* `Rust Analyzer: Status` shows some memory-usage statistics. To take full
149 advantage of it, you need to compile rust-analyzer with jemalloc support: 149 advantage of it, you need to compile rust-analyzer with jemalloc support:
150 ``` 150 ```
151 $ cargo install --path crates/ra_lsp_server --force --features jemalloc 151 $ cargo install --path crates/rust-analyzer --force --features jemalloc
152 ``` 152 ```
153 153
154 There's an alias for this: `cargo xtask install --server --jemalloc`. 154 There's an alias for this: `cargo xtask install --server --jemalloc`.
@@ -170,12 +170,12 @@ In particular, I have `export RA_PROFILE='*>10'` in my shell profile.
170To measure time for from-scratch analysis, use something like this: 170To measure time for from-scratch analysis, use something like this:
171 171
172``` 172```
173$ cargo run --release -p ra_lsp_server -- analysis-stats ../chalk/ 173$ cargo run --release -p rust-analyzer -- analysis-stats ../chalk/
174``` 174```
175 175
176For measuring time of incremental analysis, use either of these: 176For measuring time of incremental analysis, use either of these:
177 177
178``` 178```
179$ cargo run --release -p ra_lsp_server -- analysis-bench ../chalk/ --highlight ../chalk/chalk-engine/src/logic.rs 179$ cargo run --release -p rust-analyzer -- analysis-bench ../chalk/ --highlight ../chalk/chalk-engine/src/logic.rs
180$ cargo run --release -p ra_lsp_server -- analysis-bench ../chalk/ --complete ../chalk/chalk-engine/src/logic.rs:94:0 180$ cargo run --release -p rust-analyzer -- analysis-bench ../chalk/ --complete ../chalk/chalk-engine/src/logic.rs:94:0
181``` 181```
diff --git a/docs/dev/architecture.md b/docs/dev/architecture.md
index 41c3909f7..0343b6c81 100644
--- a/docs/dev/architecture.md
+++ b/docs/dev/architecture.md
@@ -134,7 +134,7 @@ APIs in this crate are IDE centric: they take text offsets as input and produce
134offsets and strings as output. This works on top of rich code model powered by 134offsets and strings as output. This works on top of rich code model powered by
135`hir`. 135`hir`.
136 136
137### `crates/ra_lsp_server` 137### `crates/rust-analyzer`
138 138
139An LSP implementation which wraps `ra_ide` into a language server protocol. 139An LSP implementation which wraps `ra_ide` into a language server protocol.
140 140
@@ -153,7 +153,7 @@ Rust Analyzer has three interesting [systems
153boundaries](https://www.tedinski.com/2018/04/10/making-tests-a-positive-influence-on-design.html) 153boundaries](https://www.tedinski.com/2018/04/10/making-tests-a-positive-influence-on-design.html)
154to concentrate tests on. 154to concentrate tests on.
155 155
156The outermost boundary is the `ra_lsp_server` crate, which defines an LSP 156The outermost boundary is the `rust-analyzer` crate, which defines an LSP
157interface in terms of stdio. We do integration testing of this component, by 157interface in terms of stdio. We do integration testing of this component, by
158feeding it with a stream of LSP requests and checking responses. These tests are 158feeding it with a stream of LSP requests and checking responses. These tests are
159known as "heavy", because they interact with Cargo and read real files from 159known as "heavy", because they interact with Cargo and read real files from
@@ -162,7 +162,7 @@ in a statically typed language, it's hard to make an error in the protocol
162itself if messages are themselves typed. 162itself if messages are themselves typed.
163 163
164The middle, and most important, boundary is `ra_ide`. Unlike 164The middle, and most important, boundary is `ra_ide`. Unlike
165`ra_lsp_server`, which exposes API, `ide` uses Rust API and is intended to 165`rust-analyzer`, which exposes API, `ide` uses Rust API and is intended to
166use by various tools. Typical test creates an `AnalysisHost`, calls some 166use by various tools. Typical test creates an `AnalysisHost`, calls some
167`Analysis` functions and compares the results against expectation. 167`Analysis` functions and compares the results against expectation.
168 168
diff --git a/docs/dev/debugging.md b/docs/dev/debugging.md
index e6b082156..bece6a572 100644
--- a/docs/dev/debugging.md
+++ b/docs/dev/debugging.md
@@ -22,8 +22,8 @@ where **only** the `rust-analyzer` extension being debugged is enabled.
22 22
23## Debug TypeScript VSCode extension 23## Debug TypeScript VSCode extension
24 24
25- `Run Extension` - runs the extension with the globally installed `ra_lsp_server` binary. 25- `Run Extension` - runs the extension with the globally installed `rust-analyzer` binary.
26- `Run Extension (Dev Server)` - runs extension with the locally built LSP server (`target/debug/ra_lsp_server`). 26- `Run Extension (Dev Server)` - runs extension with the locally built LSP server (`target/debug/rust-analyzer`).
27 27
28TypeScript debugging is configured to watch your source edits and recompile. 28TypeScript debugging is configured to watch your source edits and recompile.
29To apply changes to an already running debug process press <kbd>Ctrl+Shift+P</kbd> and run the following command in your `[Extension Development Host]` 29To apply changes to an already running debug process press <kbd>Ctrl+Shift+P</kbd> and run the following command in your `[Extension Development Host]`
@@ -47,13 +47,13 @@ To apply changes to an already running debug process press <kbd>Ctrl+Shift+P</kb
47 debug = 2 47 debug = 2
48 ``` 48 ```
49 49
50- Select `Run Extension (Dev Server)` to run your locally built `target/debug/ra_lsp_server`. 50- Select `Run Extension (Dev Server)` to run your locally built `target/debug/rust-analyzer`.
51 51
52- In the original VSCode window once again select the `Attach To Server` debug configuration. 52- In the original VSCode window once again select the `Attach To Server` debug configuration.
53 53
54- A list of running processes should appear. Select the `ra_lsp_server` from this repo. 54- A list of running processes should appear. Select the `rust-analyzer` from this repo.
55 55
56- Navigate to `crates/ra_lsp_server/src/main_loop.rs` and add a breakpoint to the `on_task` function. 56- Navigate to `crates/rust-analyzer/src/main_loop.rs` and add a breakpoint to the `on_task` function.
57 57
58- Go back to the `[Extension Development Host]` instance and hover over a Rust variable and your breakpoint should hit. 58- Go back to the `[Extension Development Host]` instance and hover over a Rust variable and your breakpoint should hit.
59 59
@@ -64,15 +64,15 @@ To apply changes to an already running debug process press <kbd>Ctrl+Shift+P</kb
64 64
65## Troubleshooting 65## Troubleshooting
66 66
67### Can't find the `ra_lsp_server` process 67### Can't find the `rust-analyzer` process
68 68
69It could be a case of just jumping the gun. 69It could be a case of just jumping the gun.
70 70
71The `ra_lsp_server` is only started once the `onLanguage:rust` activation. 71The `rust-analyzer` is only started once the `onLanguage:rust` activation.
72 72
73Make sure you open a rust file in the `[Extension Development Host]` and try again. 73Make sure you open a rust file in the `[Extension Development Host]` and try again.
74 74
75### Can't connect to `ra_lsp_server` 75### Can't connect to `rust-analyzer`
76 76
77Make sure you have run `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope`. 77Make sure you have run `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope`.
78 78
diff --git a/docs/user/readme.adoc b/docs/user/readme.adoc
index 57a8cbe31..74fda0abe 100644
--- a/docs/user/readme.adoc
+++ b/docs/user/readme.adoc
@@ -20,7 +20,9 @@ In theory, one should be able to just install the server binary and have it auto
20We are not there yet, so some editor specific setup is required. 20We are not there yet, so some editor specific setup is required.
21 21
22Additionally, rust-analyzer needs sources of the standard library. 22Additionally, rust-analyzer needs sources of the standard library.
23This commands adds them: 23If the source code is not present, rust-analyzer will attempt to install it automatically.
24
25To add the sources manually, run the following command:
24 26
25```bash 27```bash
26$ rustup component add rust-src 28$ rustup component add rust-src
@@ -62,16 +64,16 @@ To make VS Code use the freshly build server, add this to the settings:
62 64
63[source,json] 65[source,json]
64---- 66----
65{ "rust-analyzer.raLspServerPath": "ra_lsp_server" } 67{ "rust-analyzer.serverPath": "rust-analyzer" }
66---- 68----
67 69
68Note that installing via `xtask install` does not work for VS Code Remote, instead you'll need to install the `.vsix` manually. 70Note that installing via `xtask install` does not work for VS Code Remote, instead you'll need to install the `.vsix` manually.
69 71
70=== Language Server Binary 72=== Language Server Binary
71 73
72Other editors generally require `ra_lsp_server` binary to be in `$PATH`. 74Other editors generally require `rust-analyzer` binary to be in `$PATH`.
73You can download pre-build binary from 75You can download pre-build binary from
74https://github.com/rust-analyzer/rust-analyzer/releases[relases] 76https://github.com/rust-analyzer/rust-analyzer/releases[releases]
75page, or you can install it from source using the following command: 77page, or you can install it from source using the following command:
76 78
77[source,bash] 79[source,bash]
@@ -100,7 +102,7 @@ The are several LSP client implementations for vim:
1002. Run `:CocInstall coc-rust-analyzer` to install 1022. Run `:CocInstall coc-rust-analyzer` to install
101 https://github.com/fannheyward/coc-rust-analyzer[coc-rust-analyzer], 103 https://github.com/fannheyward/coc-rust-analyzer[coc-rust-analyzer],
102 this extension implements _most_ of the features supported in the VSCode extension: 104 this extension implements _most_ of the features supported in the VSCode extension:
103 * same configurations as VSCode extension, `rust-analyzer.raLspServerPath`, `rust-analyzer.enableCargoWatchOnStartup` etc. 105 * same configurations as VSCode extension, `rust-analyzer.serverPath`, `rust-analyzer.enableCargoWatchOnStartup` etc.
104 * same commands too, `rust-analyzer.analyzerStatus`, `rust-analyzer.startCargoWatch` etc. 106 * same commands too, `rust-analyzer.analyzerStatus`, `rust-analyzer.startCargoWatch` etc.
105 * highlighting and inlay_hints are not implemented yet 107 * highlighting and inlay_hints are not implemented yet
106 108
@@ -115,7 +117,7 @@ The are several LSP client implementations for vim:
115[source,vim] 117[source,vim]
116---- 118----
117let g:LanguageClient_serverCommands = { 119let g:LanguageClient_serverCommands = {
118\ 'rust': ['ra_lsp_server'], 120\ 'rust': ['rust-analyzer'],
119\ } 121\ }
120---- 122----
121 123
@@ -140,7 +142,7 @@ Installation:
140[source,json] 142[source,json]
141---- 143----
142"rust-analyzer": { 144"rust-analyzer": {
143 "command": ["ra_lsp_server"], 145 "command": ["rust-analyzer"],
144 "languageId": "rust", 146 "languageId": "rust",
145 "scopes": ["source.rust"], 147 "scopes": ["source.rust"],
146 "syntaxes": [ 148 "syntaxes": [
diff --git a/editors/code/.eslintrc.js b/editors/code/.eslintrc.js
new file mode 100644
index 000000000..113a8a78e
--- /dev/null
+++ b/editors/code/.eslintrc.js
@@ -0,0 +1,34 @@
1module.exports = {
2 "env": {
3 "es6": true,
4 "node": true
5 },
6 "parser": "@typescript-eslint/parser",
7 "parserOptions": {
8 "project": "tsconfig.json",
9 "sourceType": "module"
10 },
11 "plugins": [
12 "@typescript-eslint"
13 ],
14 "rules": {
15 "@typescript-eslint/member-delimiter-style": [
16 "error",
17 {
18 "multiline": {
19 "delimiter": "semi",
20 "requireLast": true
21 },
22 "singleline": {
23 "delimiter": "semi",
24 "requireLast": false
25 }
26 }
27 ],
28 "@typescript-eslint/semi": [
29 "error",
30 "always"
31 ],
32 "prefer-const": "error"
33 }
34};
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index 22aa63c9d..d7da47089 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -70,12 +70,24 @@
70 "estree-walker": "^1.0.1" 70 "estree-walker": "^1.0.1"
71 } 71 }
72 }, 72 },
73 "@types/eslint-visitor-keys": {
74 "version": "1.0.0",
75 "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
76 "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
77 "dev": true
78 },
73 "@types/estree": { 79 "@types/estree": {
74 "version": "0.0.39", 80 "version": "0.0.39",
75 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 81 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
76 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 82 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
77 "dev": true 83 "dev": true
78 }, 84 },
85 "@types/json-schema": {
86 "version": "7.0.4",
87 "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
88 "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
89 "dev": true
90 },
79 "@types/node": { 91 "@types/node": {
80 "version": "12.12.27", 92 "version": "12.12.27",
81 "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.27.tgz", 93 "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.27.tgz",
@@ -112,12 +124,118 @@
112 "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==", 124 "integrity": "sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw==",
113 "dev": true 125 "dev": true
114 }, 126 },
127 "@typescript-eslint/eslint-plugin": {
128 "version": "2.20.0",
129 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.20.0.tgz",
130 "integrity": "sha512-cimIdVDV3MakiGJqMXw51Xci6oEDEoPkvh8ggJe2IIzcc0fYqAxOXN6Vbeanahz6dLZq64W+40iUEc9g32FLDQ==",
131 "dev": true,
132 "requires": {
133 "@typescript-eslint/experimental-utils": "2.20.0",
134 "eslint-utils": "^1.4.3",
135 "functional-red-black-tree": "^1.0.1",
136 "regexpp": "^3.0.0",
137 "tsutils": "^3.17.1"
138 },
139 "dependencies": {
140 "tsutils": {
141 "version": "3.17.1",
142 "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
143 "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
144 "dev": true,
145 "requires": {
146 "tslib": "^1.8.1"
147 }
148 }
149 }
150 },
151 "@typescript-eslint/experimental-utils": {
152 "version": "2.20.0",
153 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.20.0.tgz",
154 "integrity": "sha512-fEBy9xYrwG9hfBLFEwGW2lKwDRTmYzH3DwTmYbT+SMycmxAoPl0eGretnBFj/s+NfYBG63w/5c3lsvqqz5mYag==",
155 "dev": true,
156 "requires": {
157 "@types/json-schema": "^7.0.3",
158 "@typescript-eslint/typescript-estree": "2.20.0",
159 "eslint-scope": "^5.0.0"
160 }
161 },
162 "@typescript-eslint/parser": {
163 "version": "2.20.0",
164 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.20.0.tgz",
165 "integrity": "sha512-o8qsKaosLh2qhMZiHNtaHKTHyCHc3Triq6aMnwnWj7budm3xAY9owSZzV1uon5T9cWmJRJGzTFa90aex4m77Lw==",
166 "dev": true,
167 "requires": {
168 "@types/eslint-visitor-keys": "^1.0.0",
169 "@typescript-eslint/experimental-utils": "2.20.0",
170 "@typescript-eslint/typescript-estree": "2.20.0",
171 "eslint-visitor-keys": "^1.1.0"
172 }
173 },
174 "@typescript-eslint/typescript-estree": {
175 "version": "2.20.0",
176 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.20.0.tgz",
177 "integrity": "sha512-WlFk8QtI8pPaE7JGQGxU7nGcnk1ccKAJkhbVookv94ZcAef3m6oCE/jEDL6dGte3JcD7reKrA0o55XhBRiVT3A==",
178 "dev": true,
179 "requires": {
180 "debug": "^4.1.1",
181 "eslint-visitor-keys": "^1.1.0",
182 "glob": "^7.1.6",
183 "is-glob": "^4.0.1",
184 "lodash": "^4.17.15",
185 "semver": "^6.3.0",
186 "tsutils": "^3.17.1"
187 },
188 "dependencies": {
189 "tsutils": {
190 "version": "3.17.1",
191 "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
192 "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
193 "dev": true,
194 "requires": {
195 "tslib": "^1.8.1"
196 }
197 }
198 }
199 },
115 "acorn": { 200 "acorn": {
116 "version": "7.1.0", 201 "version": "7.1.0",
117 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", 202 "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
118 "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", 203 "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
119 "dev": true 204 "dev": true
120 }, 205 },
206 "acorn-jsx": {
207 "version": "5.1.0",
208 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
209 "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
210 "dev": true
211 },
212 "ajv": {
213 "version": "6.11.0",
214 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
215 "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
216 "dev": true,
217 "requires": {
218 "fast-deep-equal": "^3.1.1",
219 "fast-json-stable-stringify": "^2.0.0",
220 "json-schema-traverse": "^0.4.1",
221 "uri-js": "^4.2.2"
222 }
223 },
224 "ansi-escapes": {
225 "version": "4.3.0",
226 "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
227 "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
228 "dev": true,
229 "requires": {
230 "type-fest": "^0.8.1"
231 }
232 },
233 "ansi-regex": {
234 "version": "5.0.0",
235 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
236 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
237 "dev": true
238 },
121 "ansi-styles": { 239 "ansi-styles": {
122 "version": "3.2.1", 240 "version": "3.2.1",
123 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 241 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -136,6 +254,12 @@
136 "sprintf-js": "~1.0.2" 254 "sprintf-js": "~1.0.2"
137 } 255 }
138 }, 256 },
257 "astral-regex": {
258 "version": "1.0.0",
259 "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
260 "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
261 "dev": true
262 },
139 "azure-devops-node-api": { 263 "azure-devops-node-api": {
140 "version": "7.2.0", 264 "version": "7.2.0",
141 "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz", 265 "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz",
@@ -182,6 +306,12 @@
182 "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", 306 "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
183 "dev": true 307 "dev": true
184 }, 308 },
309 "callsites": {
310 "version": "3.1.0",
311 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
312 "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
313 "dev": true
314 },
185 "chalk": { 315 "chalk": {
186 "version": "2.4.2", 316 "version": "2.4.2",
187 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 317 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -193,6 +323,12 @@
193 "supports-color": "^5.3.0" 323 "supports-color": "^5.3.0"
194 } 324 }
195 }, 325 },
326 "chardet": {
327 "version": "0.7.0",
328 "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
329 "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
330 "dev": true
331 },
196 "cheerio": { 332 "cheerio": {
197 "version": "1.0.0-rc.3", 333 "version": "1.0.0-rc.3",
198 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", 334 "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
@@ -207,6 +343,21 @@
207 "parse5": "^3.0.1" 343 "parse5": "^3.0.1"
208 } 344 }
209 }, 345 },
346 "cli-cursor": {
347 "version": "3.1.0",
348 "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
349 "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
350 "dev": true,
351 "requires": {
352 "restore-cursor": "^3.1.0"
353 }
354 },
355 "cli-width": {
356 "version": "2.2.0",
357 "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
358 "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
359 "dev": true
360 },
210 "color-convert": { 361 "color-convert": {
211 "version": "1.9.3", 362 "version": "1.9.3",
212 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 363 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -240,6 +391,27 @@
240 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 391 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
241 "dev": true 392 "dev": true
242 }, 393 },
394 "cross-spawn": {
395 "version": "6.0.5",
396 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
397 "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
398 "dev": true,
399 "requires": {
400 "nice-try": "^1.0.4",
401 "path-key": "^2.0.1",
402 "semver": "^5.5.0",
403 "shebang-command": "^1.2.0",
404 "which": "^1.2.9"
405 },
406 "dependencies": {
407 "semver": {
408 "version": "5.7.1",
409 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
410 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
411 "dev": true
412 }
413 }
414 },
243 "css-select": { 415 "css-select": {
244 "version": "1.2.0", 416 "version": "1.2.0",
245 "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 417 "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
@@ -258,6 +430,21 @@
258 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", 430 "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
259 "dev": true 431 "dev": true
260 }, 432 },
433 "debug": {
434 "version": "4.1.1",
435 "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
436 "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
437 "dev": true,
438 "requires": {
439 "ms": "^2.1.1"
440 }
441 },
442 "deep-is": {
443 "version": "0.1.3",
444 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
445 "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
446 "dev": true
447 },
261 "denodeify": { 448 "denodeify": {
262 "version": "1.2.1", 449 "version": "1.2.1",
263 "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", 450 "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz",
@@ -270,11 +457,14 @@
270 "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", 457 "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=",
271 "dev": true 458 "dev": true
272 }, 459 },
273 "diff": { 460 "doctrine": {
274 "version": "4.0.1", 461 "version": "3.0.0",
275 "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", 462 "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
276 "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", 463 "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
277 "dev": true 464 "dev": true,
465 "requires": {
466 "esutils": "^2.0.2"
467 }
278 }, 468 },
279 "dom-serializer": { 469 "dom-serializer": {
280 "version": "0.1.1", 470 "version": "0.1.1",
@@ -331,6 +521,12 @@
331 } 521 }
332 } 522 }
333 }, 523 },
524 "emoji-regex": {
525 "version": "8.0.0",
526 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
527 "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
528 "dev": true
529 },
334 "entities": { 530 "entities": {
335 "version": "1.1.2", 531 "version": "1.1.2",
336 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 532 "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
@@ -343,12 +539,125 @@
343 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 539 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
344 "dev": true 540 "dev": true
345 }, 541 },
542 "eslint": {
543 "version": "6.8.0",
544 "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
545 "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
546 "dev": true,
547 "requires": {
548 "@babel/code-frame": "^7.0.0",
549 "ajv": "^6.10.0",
550 "chalk": "^2.1.0",
551 "cross-spawn": "^6.0.5",
552 "debug": "^4.0.1",
553 "doctrine": "^3.0.0",
554 "eslint-scope": "^5.0.0",
555 "eslint-utils": "^1.4.3",
556 "eslint-visitor-keys": "^1.1.0",
557 "espree": "^6.1.2",
558 "esquery": "^1.0.1",
559 "esutils": "^2.0.2",
560 "file-entry-cache": "^5.0.1",
561 "functional-red-black-tree": "^1.0.1",
562 "glob-parent": "^5.0.0",
563 "globals": "^12.1.0",
564 "ignore": "^4.0.6",
565 "import-fresh": "^3.0.0",
566 "imurmurhash": "^0.1.4",
567 "inquirer": "^7.0.0",
568 "is-glob": "^4.0.0",
569 "js-yaml": "^3.13.1",
570 "json-stable-stringify-without-jsonify": "^1.0.1",
571 "levn": "^0.3.0",
572 "lodash": "^4.17.14",
573 "minimatch": "^3.0.4",
574 "mkdirp": "^0.5.1",
575 "natural-compare": "^1.4.0",
576 "optionator": "^0.8.3",
577 "progress": "^2.0.0",
578 "regexpp": "^2.0.1",
579 "semver": "^6.1.2",
580 "strip-ansi": "^5.2.0",
581 "strip-json-comments": "^3.0.1",
582 "table": "^5.2.3",
583 "text-table": "^0.2.0",
584 "v8-compile-cache": "^2.0.3"
585 },
586 "dependencies": {
587 "regexpp": {
588 "version": "2.0.1",
589 "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
590 "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
591 "dev": true
592 }
593 }
594 },
595 "eslint-scope": {
596 "version": "5.0.0",
597 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
598 "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
599 "dev": true,
600 "requires": {
601 "esrecurse": "^4.1.0",
602 "estraverse": "^4.1.1"
603 }
604 },
605 "eslint-utils": {
606 "version": "1.4.3",
607 "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
608 "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
609 "dev": true,
610 "requires": {
611 "eslint-visitor-keys": "^1.1.0"
612 }
613 },
614 "eslint-visitor-keys": {
615 "version": "1.1.0",
616 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
617 "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
618 "dev": true
619 },
620 "espree": {
621 "version": "6.1.2",
622 "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
623 "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
624 "dev": true,
625 "requires": {
626 "acorn": "^7.1.0",
627 "acorn-jsx": "^5.1.0",
628 "eslint-visitor-keys": "^1.1.0"
629 }
630 },
346 "esprima": { 631 "esprima": {
347 "version": "4.0.1", 632 "version": "4.0.1",
348 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 633 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
349 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 634 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
350 "dev": true 635 "dev": true
351 }, 636 },
637 "esquery": {
638 "version": "1.1.0",
639 "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
640 "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
641 "dev": true,
642 "requires": {
643 "estraverse": "^4.0.0"
644 }
645 },
646 "esrecurse": {
647 "version": "4.2.1",
648 "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
649 "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
650 "dev": true,
651 "requires": {
652 "estraverse": "^4.1.0"
653 }
654 },
655 "estraverse": {
656 "version": "4.3.0",
657 "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
658 "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
659 "dev": true
660 },
352 "estree-walker": { 661 "estree-walker": {
353 "version": "1.0.1", 662 "version": "1.0.1",
354 "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 663 "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
@@ -361,6 +670,46 @@
361 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 670 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
362 "dev": true 671 "dev": true
363 }, 672 },
673 "external-editor": {
674 "version": "3.1.0",
675 "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
676 "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
677 "dev": true,
678 "requires": {
679 "chardet": "^0.7.0",
680 "iconv-lite": "^0.4.24",
681 "tmp": "^0.0.33"
682 },
683 "dependencies": {
684 "tmp": {
685 "version": "0.0.33",
686 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
687 "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
688 "dev": true,
689 "requires": {
690 "os-tmpdir": "~1.0.2"
691 }
692 }
693 }
694 },
695 "fast-deep-equal": {
696 "version": "3.1.1",
697 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
698 "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
699 "dev": true
700 },
701 "fast-json-stable-stringify": {
702 "version": "2.1.0",
703 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
704 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
705 "dev": true
706 },
707 "fast-levenshtein": {
708 "version": "2.0.6",
709 "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
710 "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
711 "dev": true
712 },
364 "fd-slicer": { 713 "fd-slicer": {
365 "version": "1.1.0", 714 "version": "1.1.0",
366 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 715 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -370,12 +719,53 @@
370 "pend": "~1.2.0" 719 "pend": "~1.2.0"
371 } 720 }
372 }, 721 },
722 "figures": {
723 "version": "3.2.0",
724 "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
725 "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
726 "dev": true,
727 "requires": {
728 "escape-string-regexp": "^1.0.5"
729 }
730 },
731 "file-entry-cache": {
732 "version": "5.0.1",
733 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
734 "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
735 "dev": true,
736 "requires": {
737 "flat-cache": "^2.0.1"
738 }
739 },
740 "flat-cache": {
741 "version": "2.0.1",
742 "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
743 "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
744 "dev": true,
745 "requires": {
746 "flatted": "^2.0.0",
747 "rimraf": "2.6.3",
748 "write": "1.0.3"
749 }
750 },
751 "flatted": {
752 "version": "2.0.1",
753 "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
754 "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
755 "dev": true
756 },
373 "fs.realpath": { 757 "fs.realpath": {
374 "version": "1.0.0", 758 "version": "1.0.0",
375 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 759 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
376 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 760 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
377 "dev": true 761 "dev": true
378 }, 762 },
763 "functional-red-black-tree": {
764 "version": "1.0.1",
765 "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
766 "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
767 "dev": true
768 },
379 "glob": { 769 "glob": {
380 "version": "7.1.6", 770 "version": "7.1.6",
381 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 771 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -390,6 +780,24 @@
390 "path-is-absolute": "^1.0.0" 780 "path-is-absolute": "^1.0.0"
391 } 781 }
392 }, 782 },
783 "glob-parent": {
784 "version": "5.1.0",
785 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
786 "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
787 "dev": true,
788 "requires": {
789 "is-glob": "^4.0.1"
790 }
791 },
792 "globals": {
793 "version": "12.3.0",
794 "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz",
795 "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==",
796 "dev": true,
797 "requires": {
798 "type-fest": "^0.8.1"
799 }
800 },
393 "has-flag": { 801 "has-flag": {
394 "version": "3.0.0", 802 "version": "3.0.0",
395 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 803 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -410,6 +818,37 @@
410 "readable-stream": "^3.1.1" 818 "readable-stream": "^3.1.1"
411 } 819 }
412 }, 820 },
821 "iconv-lite": {
822 "version": "0.4.24",
823 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
824 "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
825 "dev": true,
826 "requires": {
827 "safer-buffer": ">= 2.1.2 < 3"
828 }
829 },
830 "ignore": {
831 "version": "4.0.6",
832 "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
833 "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
834 "dev": true
835 },
836 "import-fresh": {
837 "version": "3.2.1",
838 "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
839 "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
840 "dev": true,
841 "requires": {
842 "parent-module": "^1.0.0",
843 "resolve-from": "^4.0.0"
844 }
845 },
846 "imurmurhash": {
847 "version": "0.1.4",
848 "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
849 "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
850 "dev": true
851 },
413 "inflight": { 852 "inflight": {
414 "version": "1.0.6", 853 "version": "1.0.6",
415 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 854 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -426,12 +865,60 @@
426 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 865 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
427 "dev": true 866 "dev": true
428 }, 867 },
868 "inquirer": {
869 "version": "7.0.4",
870 "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz",
871 "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==",
872 "dev": true,
873 "requires": {
874 "ansi-escapes": "^4.2.1",
875 "chalk": "^2.4.2",
876 "cli-cursor": "^3.1.0",
877 "cli-width": "^2.0.0",
878 "external-editor": "^3.0.3",
879 "figures": "^3.0.0",
880 "lodash": "^4.17.15",
881 "mute-stream": "0.0.8",
882 "run-async": "^2.2.0",
883 "rxjs": "^6.5.3",
884 "string-width": "^4.1.0",
885 "strip-ansi": "^5.1.0",
886 "through": "^2.3.6"
887 }
888 },
889 "is-extglob": {
890 "version": "2.1.1",
891 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
892 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
893 "dev": true
894 },
895 "is-fullwidth-code-point": {
896 "version": "3.0.0",
897 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
898 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
899 "dev": true
900 },
901 "is-glob": {
902 "version": "4.0.1",
903 "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
904 "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
905 "dev": true,
906 "requires": {
907 "is-extglob": "^2.1.1"
908 }
909 },
429 "is-module": { 910 "is-module": {
430 "version": "1.0.0", 911 "version": "1.0.0",
431 "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 912 "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
432 "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 913 "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
433 "dev": true 914 "dev": true
434 }, 915 },
916 "is-promise": {
917 "version": "2.1.0",
918 "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
919 "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
920 "dev": true
921 },
435 "is-reference": { 922 "is-reference": {
436 "version": "1.1.4", 923 "version": "1.1.4",
437 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", 924 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz",
@@ -441,6 +928,12 @@
441 "@types/estree": "0.0.39" 928 "@types/estree": "0.0.39"
442 } 929 }
443 }, 930 },
931 "isexe": {
932 "version": "2.0.0",
933 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
934 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
935 "dev": true
936 },
444 "js-tokens": { 937 "js-tokens": {
445 "version": "4.0.0", 938 "version": "4.0.0",
446 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 939 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -457,11 +950,33 @@
457 "esprima": "^4.0.0" 950 "esprima": "^4.0.0"
458 } 951 }
459 }, 952 },
953 "json-schema-traverse": {
954 "version": "0.4.1",
955 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
956 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
957 "dev": true
958 },
959 "json-stable-stringify-without-jsonify": {
960 "version": "1.0.1",
961 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
962 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
963 "dev": true
964 },
460 "jsonc-parser": { 965 "jsonc-parser": {
461 "version": "2.2.0", 966 "version": "2.2.0",
462 "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.0.tgz", 967 "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.0.tgz",
463 "integrity": "sha512-4fLQxW1j/5fWj6p78vAlAafoCKtuBm6ghv+Ij5W2DrDx0qE+ZdEl2c6Ko1mgJNF5ftX1iEWQQ4Ap7+3GlhjkOA==" 968 "integrity": "sha512-4fLQxW1j/5fWj6p78vAlAafoCKtuBm6ghv+Ij5W2DrDx0qE+ZdEl2c6Ko1mgJNF5ftX1iEWQQ4Ap7+3GlhjkOA=="
464 }, 969 },
970 "levn": {
971 "version": "0.3.0",
972 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
973 "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
974 "dev": true,
975 "requires": {
976 "prelude-ls": "~1.1.2",
977 "type-check": "~0.3.2"
978 }
979 },
465 "linkify-it": { 980 "linkify-it": {
466 "version": "2.2.0", 981 "version": "2.2.0",
467 "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", 982 "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
@@ -521,6 +1036,12 @@
521 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1036 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
522 "dev": true 1037 "dev": true
523 }, 1038 },
1039 "mimic-fn": {
1040 "version": "2.1.0",
1041 "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1042 "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1043 "dev": true
1044 },
524 "minimatch": { 1045 "minimatch": {
525 "version": "3.0.4", 1046 "version": "3.0.4",
526 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1047 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -545,12 +1066,30 @@
545 "minimist": "0.0.8" 1066 "minimist": "0.0.8"
546 } 1067 }
547 }, 1068 },
1069 "ms": {
1070 "version": "2.1.2",
1071 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1072 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1073 "dev": true
1074 },
548 "mute-stream": { 1075 "mute-stream": {
549 "version": "0.0.8", 1076 "version": "0.0.8",
550 "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1077 "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
551 "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1078 "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
552 "dev": true 1079 "dev": true
553 }, 1080 },
1081 "natural-compare": {
1082 "version": "1.4.0",
1083 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1084 "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1085 "dev": true
1086 },
1087 "nice-try": {
1088 "version": "1.0.5",
1089 "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1090 "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1091 "dev": true
1092 },
554 "node-fetch": { 1093 "node-fetch": {
555 "version": "2.6.0", 1094 "version": "2.6.0",
556 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 1095 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
@@ -574,6 +1113,29 @@
574 "wrappy": "1" 1113 "wrappy": "1"
575 } 1114 }
576 }, 1115 },
1116 "onetime": {
1117 "version": "5.1.0",
1118 "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
1119 "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
1120 "dev": true,
1121 "requires": {
1122 "mimic-fn": "^2.1.0"
1123 }
1124 },
1125 "optionator": {
1126 "version": "0.8.3",
1127 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
1128 "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
1129 "dev": true,
1130 "requires": {
1131 "deep-is": "~0.1.3",
1132 "fast-levenshtein": "~2.0.6",
1133 "levn": "~0.3.0",
1134 "prelude-ls": "~1.1.2",
1135 "type-check": "~0.3.2",
1136 "word-wrap": "~1.2.3"
1137 }
1138 },
577 "os": { 1139 "os": {
578 "version": "0.1.1", 1140 "version": "0.1.1",
579 "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", 1141 "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
@@ -602,6 +1164,15 @@
602 "os-tmpdir": "^1.0.0" 1164 "os-tmpdir": "^1.0.0"
603 } 1165 }
604 }, 1166 },
1167 "parent-module": {
1168 "version": "1.0.1",
1169 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
1170 "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
1171 "dev": true,
1172 "requires": {
1173 "callsites": "^3.0.0"
1174 }
1175 },
605 "parse-semver": { 1176 "parse-semver": {
606 "version": "1.1.1", 1177 "version": "1.1.1",
607 "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", 1178 "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -634,6 +1205,12 @@
634 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1205 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
635 "dev": true 1206 "dev": true
636 }, 1207 },
1208 "path-key": {
1209 "version": "2.0.1",
1210 "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1211 "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1212 "dev": true
1213 },
637 "path-parse": { 1214 "path-parse": {
638 "version": "1.0.6", 1215 "version": "1.0.6",
639 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1216 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
@@ -646,12 +1223,30 @@
646 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 1223 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
647 "dev": true 1224 "dev": true
648 }, 1225 },
1226 "prelude-ls": {
1227 "version": "1.1.2",
1228 "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1229 "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1230 "dev": true
1231 },
1232 "progress": {
1233 "version": "2.0.3",
1234 "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1235 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1236 "dev": true
1237 },
649 "pseudomap": { 1238 "pseudomap": {
650 "version": "1.0.2", 1239 "version": "1.0.2",
651 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1240 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
652 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1241 "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
653 "dev": true 1242 "dev": true
654 }, 1243 },
1244 "punycode": {
1245 "version": "2.1.1",
1246 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1247 "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1248 "dev": true
1249 },
655 "read": { 1250 "read": {
656 "version": "1.0.7", 1251 "version": "1.0.7",
657 "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 1252 "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@@ -672,6 +1267,12 @@
672 "util-deprecate": "^1.0.1" 1267 "util-deprecate": "^1.0.1"
673 } 1268 }
674 }, 1269 },
1270 "regexpp": {
1271 "version": "3.0.0",
1272 "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz",
1273 "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==",
1274 "dev": true
1275 },
675 "resolve": { 1276 "resolve": {
676 "version": "1.14.1", 1277 "version": "1.14.1",
677 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", 1278 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
@@ -681,6 +1282,31 @@
681 "path-parse": "^1.0.6" 1282 "path-parse": "^1.0.6"
682 } 1283 }
683 }, 1284 },
1285 "resolve-from": {
1286 "version": "4.0.0",
1287 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
1288 "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
1289 "dev": true
1290 },
1291 "restore-cursor": {
1292 "version": "3.1.0",
1293 "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
1294 "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
1295 "dev": true,
1296 "requires": {
1297 "onetime": "^5.1.0",
1298 "signal-exit": "^3.0.2"
1299 }
1300 },
1301 "rimraf": {
1302 "version": "2.6.3",
1303 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1304 "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1305 "dev": true,
1306 "requires": {
1307 "glob": "^7.1.3"
1308 }
1309 },
684 "rollup": { 1310 "rollup": {
685 "version": "1.31.1", 1311 "version": "1.31.1",
686 "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.31.1.tgz", 1312 "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.31.1.tgz",
@@ -692,23 +1318,87 @@
692 "acorn": "^7.1.0" 1318 "acorn": "^7.1.0"
693 } 1319 }
694 }, 1320 },
1321 "run-async": {
1322 "version": "2.3.0",
1323 "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
1324 "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
1325 "dev": true,
1326 "requires": {
1327 "is-promise": "^2.1.0"
1328 }
1329 },
1330 "rxjs": {
1331 "version": "6.5.4",
1332 "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
1333 "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
1334 "dev": true,
1335 "requires": {
1336 "tslib": "^1.9.0"
1337 }
1338 },
695 "safe-buffer": { 1339 "safe-buffer": {
696 "version": "5.2.0", 1340 "version": "5.2.0",
697 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1341 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
698 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 1342 "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
699 "dev": true 1343 "dev": true
700 }, 1344 },
1345 "safer-buffer": {
1346 "version": "2.1.2",
1347 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1348 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1349 "dev": true
1350 },
701 "semver": { 1351 "semver": {
702 "version": "6.3.0", 1352 "version": "6.3.0",
703 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1353 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
704 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1354 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
705 }, 1355 },
1356 "shebang-command": {
1357 "version": "1.2.0",
1358 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1359 "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1360 "dev": true,
1361 "requires": {
1362 "shebang-regex": "^1.0.0"
1363 }
1364 },
1365 "shebang-regex": {
1366 "version": "1.0.0",
1367 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1368 "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1369 "dev": true
1370 },
706 "sigmund": { 1371 "sigmund": {
707 "version": "1.0.1", 1372 "version": "1.0.1",
708 "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1373 "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
709 "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 1374 "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
710 "dev": true 1375 "dev": true
711 }, 1376 },
1377 "signal-exit": {
1378 "version": "3.0.2",
1379 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1380 "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1381 "dev": true
1382 },
1383 "slice-ansi": {
1384 "version": "2.1.0",
1385 "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
1386 "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
1387 "dev": true,
1388 "requires": {
1389 "ansi-styles": "^3.2.0",
1390 "astral-regex": "^1.0.0",
1391 "is-fullwidth-code-point": "^2.0.0"
1392 },
1393 "dependencies": {
1394 "is-fullwidth-code-point": {
1395 "version": "2.0.0",
1396 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1397 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1398 "dev": true
1399 }
1400 }
1401 },
712 "sourcemap-codec": { 1402 "sourcemap-codec": {
713 "version": "1.4.8", 1403 "version": "1.4.8",
714 "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1404 "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
@@ -721,6 +1411,28 @@
721 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1411 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
722 "dev": true 1412 "dev": true
723 }, 1413 },
1414 "string-width": {
1415 "version": "4.2.0",
1416 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
1417 "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
1418 "dev": true,
1419 "requires": {
1420 "emoji-regex": "^8.0.0",
1421 "is-fullwidth-code-point": "^3.0.0",
1422 "strip-ansi": "^6.0.0"
1423 },
1424 "dependencies": {
1425 "strip-ansi": {
1426 "version": "6.0.0",
1427 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1428 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1429 "dev": true,
1430 "requires": {
1431 "ansi-regex": "^5.0.0"
1432 }
1433 }
1434 }
1435 },
724 "string_decoder": { 1436 "string_decoder": {
725 "version": "1.3.0", 1437 "version": "1.3.0",
726 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1438 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -730,6 +1442,29 @@
730 "safe-buffer": "~5.2.0" 1442 "safe-buffer": "~5.2.0"
731 } 1443 }
732 }, 1444 },
1445 "strip-ansi": {
1446 "version": "5.2.0",
1447 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1448 "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1449 "dev": true,
1450 "requires": {
1451 "ansi-regex": "^4.1.0"
1452 },
1453 "dependencies": {
1454 "ansi-regex": {
1455 "version": "4.1.0",
1456 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1457 "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1458 "dev": true
1459 }
1460 }
1461 },
1462 "strip-json-comments": {
1463 "version": "3.0.1",
1464 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
1465 "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
1466 "dev": true
1467 },
733 "supports-color": { 1468 "supports-color": {
734 "version": "5.5.0", 1469 "version": "5.5.0",
735 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1470 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -739,11 +1474,60 @@
739 "has-flag": "^3.0.0" 1474 "has-flag": "^3.0.0"
740 } 1475 }
741 }, 1476 },
1477 "table": {
1478 "version": "5.4.6",
1479 "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
1480 "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
1481 "dev": true,
1482 "requires": {
1483 "ajv": "^6.10.2",
1484 "lodash": "^4.17.14",
1485 "slice-ansi": "^2.1.0",
1486 "string-width": "^3.0.0"
1487 },
1488 "dependencies": {
1489 "emoji-regex": {
1490 "version": "7.0.3",
1491 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
1492 "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
1493 "dev": true
1494 },
1495 "is-fullwidth-code-point": {
1496 "version": "2.0.0",
1497 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1498 "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1499 "dev": true
1500 },
1501 "string-width": {
1502 "version": "3.1.0",
1503 "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1504 "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1505 "dev": true,
1506 "requires": {
1507 "emoji-regex": "^7.0.1",
1508 "is-fullwidth-code-point": "^2.0.0",
1509 "strip-ansi": "^5.1.0"
1510 }
1511 }
1512 }
1513 },
1514 "text-table": {
1515 "version": "0.2.0",
1516 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
1517 "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
1518 "dev": true
1519 },
742 "throttle-debounce": { 1520 "throttle-debounce": {
743 "version": "2.1.0", 1521 "version": "2.1.0",
744 "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz", 1522 "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz",
745 "integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg==" 1523 "integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg=="
746 }, 1524 },
1525 "through": {
1526 "version": "2.3.8",
1527 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1528 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1529 "dev": true
1530 },
747 "tmp": { 1531 "tmp": {
748 "version": "0.0.29", 1532 "version": "0.0.29",
749 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", 1533 "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
@@ -759,54 +1543,25 @@
759 "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", 1543 "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
760 "dev": true 1544 "dev": true
761 }, 1545 },
762 "tslint": { 1546 "tunnel": {
763 "version": "5.20.1", 1547 "version": "0.0.4",
764 "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", 1548 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
765 "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", 1549 "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
766 "dev": true, 1550 "dev": true
767 "requires": {
768 "@babel/code-frame": "^7.0.0",
769 "builtin-modules": "^1.1.1",
770 "chalk": "^2.3.0",
771 "commander": "^2.12.1",
772 "diff": "^4.0.1",
773 "glob": "^7.1.1",
774 "js-yaml": "^3.13.1",
775 "minimatch": "^3.0.4",
776 "mkdirp": "^0.5.1",
777 "resolve": "^1.3.2",
778 "semver": "^5.3.0",
779 "tslib": "^1.8.0",
780 "tsutils": "^2.29.0"
781 },
782 "dependencies": {
783 "builtin-modules": {
784 "version": "1.1.1",
785 "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
786 "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
787 "dev": true
788 },
789 "semver": {
790 "version": "5.7.1",
791 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
792 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
793 "dev": true
794 }
795 }
796 }, 1551 },
797 "tsutils": { 1552 "type-check": {
798 "version": "2.29.0", 1553 "version": "0.3.2",
799 "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 1554 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
800 "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 1555 "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
801 "dev": true, 1556 "dev": true,
802 "requires": { 1557 "requires": {
803 "tslib": "^1.8.1" 1558 "prelude-ls": "~1.1.2"
804 } 1559 }
805 }, 1560 },
806 "tunnel": { 1561 "type-fest": {
807 "version": "0.0.4", 1562 "version": "0.8.1",
808 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", 1563 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
809 "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", 1564 "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
810 "dev": true 1565 "dev": true
811 }, 1566 },
812 "typed-rest-client": { 1567 "typed-rest-client": {
@@ -847,6 +1602,15 @@
847 "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", 1602 "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
848 "dev": true 1603 "dev": true
849 }, 1604 },
1605 "uri-js": {
1606 "version": "4.2.2",
1607 "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1608 "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1609 "dev": true,
1610 "requires": {
1611 "punycode": "^2.1.0"
1612 }
1613 },
850 "url-join": { 1614 "url-join": {
851 "version": "1.1.0", 1615 "version": "1.1.0",
852 "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", 1616 "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz",
@@ -859,6 +1623,12 @@
859 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1623 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
860 "dev": true 1624 "dev": true
861 }, 1625 },
1626 "v8-compile-cache": {
1627 "version": "2.1.0",
1628 "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
1629 "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
1630 "dev": true
1631 },
862 "vsce": { 1632 "vsce": {
863 "version": "1.73.0", 1633 "version": "1.73.0",
864 "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.73.0.tgz", 1634 "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.73.0.tgz",
@@ -901,18 +1671,18 @@
901 "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==" 1671 "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A=="
902 }, 1672 },
903 "vscode-languageclient": { 1673 "vscode-languageclient": {
904 "version": "6.1.0", 1674 "version": "6.1.1",
905 "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.0.tgz", 1675 "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.1.tgz",
906 "integrity": "sha512-Tcp0VoOaa0YzxL4nEfK9tsmcy76Eo8jNLvFQZwh2c8oMm02luL8uGYPLQNAiZ3XGgegfcwiQFZMqbW7DNV0vxA==", 1676 "integrity": "sha512-mB6d8Tg+82l8EFUfR+SBu0+lCshyKVgC5E5+MQ0/BJa+9AgeBjtG5npoGaCo4/VvWzK0ZRGm85zU5iRp1RYPIA==",
907 "requires": { 1677 "requires": {
908 "semver": "^6.3.0", 1678 "semver": "^6.3.0",
909 "vscode-languageserver-protocol": "^3.15.2" 1679 "vscode-languageserver-protocol": "^3.15.3"
910 } 1680 }
911 }, 1681 },
912 "vscode-languageserver-protocol": { 1682 "vscode-languageserver-protocol": {
913 "version": "3.15.2", 1683 "version": "3.15.3",
914 "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.2.tgz", 1684 "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz",
915 "integrity": "sha512-GdL05JKOgZ76RDg3suiGCl9enESM7iQgGw4x93ibTh4sldvZmakHmTeZ4iUApPPGKf6O3OVBtrsksBXnHYaxNg==", 1685 "integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==",
916 "requires": { 1686 "requires": {
917 "vscode-jsonrpc": "^5.0.1", 1687 "vscode-jsonrpc": "^5.0.1",
918 "vscode-languageserver-types": "3.15.1" 1688 "vscode-languageserver-types": "3.15.1"
@@ -923,12 +1693,36 @@
923 "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", 1693 "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
924 "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" 1694 "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
925 }, 1695 },
1696 "which": {
1697 "version": "1.3.1",
1698 "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1699 "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1700 "dev": true,
1701 "requires": {
1702 "isexe": "^2.0.0"
1703 }
1704 },
1705 "word-wrap": {
1706 "version": "1.2.3",
1707 "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1708 "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1709 "dev": true
1710 },
926 "wrappy": { 1711 "wrappy": {
927 "version": "1.0.2", 1712 "version": "1.0.2",
928 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1713 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
929 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1714 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
930 "dev": true 1715 "dev": true
931 }, 1716 },
1717 "write": {
1718 "version": "1.0.3",
1719 "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
1720 "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
1721 "dev": true,
1722 "requires": {
1723 "mkdirp": "^0.5.1"
1724 }
1725 },
932 "yallist": { 1726 "yallist": {
933 "version": "2.1.2", 1727 "version": "2.1.2",
934 "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1728 "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
diff --git a/editors/code/package.json b/editors/code/package.json
index d54b1750a..c498c14b4 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -22,13 +22,13 @@
22 "vscode:prepublish": "tsc && rollup -c", 22 "vscode:prepublish": "tsc && rollup -c",
23 "package": "vsce package -o rust-analyzer.vsix", 23 "package": "vsce package -o rust-analyzer.vsix",
24 "watch": "tsc --watch", 24 "watch": "tsc --watch",
25 "fmt": "tsfmt -r && tslint -p tsconfig.json -c tslint.json 'src/**/*.ts' --fix" 25 "fmt": "tsfmt -r && eslint -c .eslintrc.js --ext ts ./src/ --fix"
26 }, 26 },
27 "dependencies": { 27 "dependencies": {
28 "jsonc-parser": "^2.1.0", 28 "jsonc-parser": "^2.1.0",
29 "node-fetch": "^2.6.0", 29 "node-fetch": "^2.6.0",
30 "throttle-debounce": "^2.1.0", 30 "throttle-debounce": "^2.1.0",
31 "vscode-languageclient": "^6.1.0" 31 "vscode-languageclient": "^6.1.1"
32 }, 32 },
33 "devDependencies": { 33 "devDependencies": {
34 "@rollup/plugin-commonjs": "^11.0.2", 34 "@rollup/plugin-commonjs": "^11.0.2",
@@ -37,9 +37,11 @@
37 "@types/node-fetch": "^2.5.4", 37 "@types/node-fetch": "^2.5.4",
38 "@types/throttle-debounce": "^2.1.0", 38 "@types/throttle-debounce": "^2.1.0",
39 "@types/vscode": "^1.42.0", 39 "@types/vscode": "^1.42.0",
40 "@typescript-eslint/eslint-plugin": "^2.20.0",
41 "@typescript-eslint/parser": "^2.20.0",
42 "eslint": "^6.8.0",
40 "rollup": "^1.31.1", 43 "rollup": "^1.31.1",
41 "tslib": "^1.10.0", 44 "tslib": "^1.10.0",
42 "tslint": "^5.20.1",
43 "typescript": "^3.7.5", 45 "typescript": "^3.7.5",
44 "typescript-formatter": "^7.2.2", 46 "typescript-formatter": "^7.2.2",
45 "vsce": "^1.73.0" 47 "vsce": "^1.73.0"
@@ -177,13 +179,13 @@
177 "default": {}, 179 "default": {},
178 "description": "Fine grained feature flags to disable annoying features" 180 "description": "Fine grained feature flags to disable annoying features"
179 }, 181 },
180 "rust-analyzer.raLspServerPath": { 182 "rust-analyzer.serverPath": {
181 "type": [ 183 "type": [
182 "null", 184 "null",
183 "string" 185 "string"
184 ], 186 ],
185 "default": null, 187 "default": null,
186 "description": "Path to ra_lsp_server executable (points to bundled binary by default)" 188 "description": "Path to rust-analyzer executable (points to bundled binary by default)"
187 }, 189 },
188 "rust-analyzer.excludeGlobs": { 190 "rust-analyzer.excludeGlobs": {
189 "type": "array", 191 "type": "array",
@@ -243,7 +245,7 @@
243 "Full log" 245 "Full log"
244 ], 246 ],
245 "default": "off", 247 "default": "off",
246 "description": "Trace requests to the ra_lsp_server" 248 "description": "Trace requests to the rust-analyzer"
247 }, 249 },
248 "rust-analyzer.lruCapacity": { 250 "rust-analyzer.lruCapacity": {
249 "type": [ 251 "type": [
diff --git a/editors/code/src/commands/index.ts b/editors/code/src/commands/index.ts
index d05f40d67..bebd99ca9 100644
--- a/editors/code/src/commands/index.ts
+++ b/editors/code/src/commands/index.ts
@@ -16,7 +16,7 @@ export * from './ssr';
16 16
17export function collectGarbage(ctx: Ctx): Cmd { 17export function collectGarbage(ctx: Ctx): Cmd {
18 return async () => { 18 return async () => {
19 ctx.client?.sendRequest<null>('rust-analyzer/collectGarbage', null); 19 await ctx.client?.sendRequest<null>('rust-analyzer/collectGarbage', null);
20 }; 20 };
21} 21}
22 22
diff --git a/editors/code/src/commands/ssr.ts b/editors/code/src/commands/ssr.ts
index 6287bf47b..9b814612a 100644
--- a/editors/code/src/commands/ssr.ts
+++ b/editors/code/src/commands/ssr.ts
@@ -14,9 +14,9 @@ export function ssr(ctx: Ctx): Cmd {
14 if (x.includes('==>>')) { 14 if (x.includes('==>>')) {
15 return null; 15 return null;
16 } 16 }
17 return "Enter request: pattern ==>> template" 17 return "Enter request: pattern ==>> template";
18 } 18 }
19 } 19 };
20 const request = await vscode.window.showInputBox(options); 20 const request = await vscode.window.showInputBox(options);
21 21
22 if (!request) return; 22 if (!request) return;
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index c3fa788c7..347c989c4 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -22,7 +22,7 @@ export class Config {
22 "cargoFeatures", 22 "cargoFeatures",
23 "cargo-watch", 23 "cargo-watch",
24 ] 24 ]
25 .map(opt => `${Config.rootSection}.${opt}`); 25 .map(opt => `${Config.rootSection}.${opt}`);
26 26
27 private static readonly extensionVersion: string = (() => { 27 private static readonly extensionVersion: string = (() => {
28 const packageJsonVersion = vscode 28 const packageJsonVersion = vscode
@@ -76,7 +76,7 @@ export class Config {
76 } 76 }
77 77
78 /** 78 /**
79 * Name of the binary artifact for `ra_lsp_server` that is published for 79 * Name of the binary artifact for `rust-analyzer` that is published for
80 * `platform` on GitHub releases. (It is also stored under the same name when 80 * `platform` on GitHub releases. (It is also stored under the same name when
81 * downloaded by the extension). 81 * downloaded by the extension).
82 */ 82 */
@@ -91,12 +91,12 @@ export class Config {
91 case "arm": 91 case "arm":
92 case "arm64": return null; 92 case "arm64": return null;
93 93
94 default: return "ra_lsp_server-linux"; 94 default: return "rust-analyzer-linux";
95 } 95 }
96 } 96 }
97 97
98 case "darwin": return "ra_lsp_server-mac"; 98 case "darwin": return "rust-analyzer-mac";
99 case "win32": return "ra_lsp_server-windows.exe"; 99 case "win32": return "rust-analyzer-windows.exe";
100 100
101 // Users on these platforms yet need to manually build from sources 101 // Users on these platforms yet need to manually build from sources
102 case "aix": 102 case "aix":
@@ -111,7 +111,7 @@ export class Config {
111 } 111 }
112 112
113 get serverSource(): null | BinarySource { 113 get serverSource(): null | BinarySource {
114 const serverPath = RA_LSP_DEBUG ?? this.cfg.get<null | string>("raLspServerPath"); 114 const serverPath = RA_LSP_DEBUG ?? this.cfg.get<null | string>("serverPath");
115 115
116 if (serverPath) { 116 if (serverPath) {
117 return { 117 return {
@@ -126,7 +126,7 @@ export class Config {
126 126
127 return { 127 return {
128 type: BinarySource.Type.GithubRelease, 128 type: BinarySource.Type.GithubRelease,
129 dir: this.ctx.globalStoragePath, 129 dir: this.ctx.globalStoragePath,
130 file: prebuiltBinaryName, 130 file: prebuiltBinaryName,
131 storage: this.ctx.globalState, 131 storage: this.ctx.globalState,
132 version: Config.extensionVersion, 132 version: Config.extensionVersion,
@@ -140,30 +140,30 @@ export class Config {
140 // We don't do runtime config validation here for simplicity. More on stackoverflow: 140 // We don't do runtime config validation here for simplicity. More on stackoverflow:
141 // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension 141 // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension
142 142
143 get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; } 143 get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; }
144 get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; } 144 get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; }
145 get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; } 145 get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; }
146 get displayInlayHints() { return this.cfg.get("displayInlayHints") as boolean; } 146 get displayInlayHints() { return this.cfg.get("displayInlayHints") as boolean; }
147 get maxInlayHintLength() { return this.cfg.get("maxInlayHintLength") as number; } 147 get maxInlayHintLength() { return this.cfg.get("maxInlayHintLength") as number; }
148 get excludeGlobs() { return this.cfg.get("excludeGlobs") as string[]; } 148 get excludeGlobs() { return this.cfg.get("excludeGlobs") as string[]; }
149 get useClientWatching() { return this.cfg.get("useClientWatching") as boolean; } 149 get useClientWatching() { return this.cfg.get("useClientWatching") as boolean; }
150 get featureFlags() { return this.cfg.get("featureFlags") as Record<string, boolean>; } 150 get featureFlags() { return this.cfg.get("featureFlags") as Record<string, boolean>; }
151 get rustfmtArgs() { return this.cfg.get("rustfmtArgs") as string[]; } 151 get rustfmtArgs() { return this.cfg.get("rustfmtArgs") as string[]; }
152 152
153 get cargoWatchOptions(): CargoWatchOptions { 153 get cargoWatchOptions(): CargoWatchOptions {
154 return { 154 return {
155 enable: this.cfg.get("cargo-watch.enable") as boolean, 155 enable: this.cfg.get("cargo-watch.enable") as boolean,
156 arguments: this.cfg.get("cargo-watch.arguments") as string[], 156 arguments: this.cfg.get("cargo-watch.arguments") as string[],
157 allTargets: this.cfg.get("cargo-watch.allTargets") as boolean, 157 allTargets: this.cfg.get("cargo-watch.allTargets") as boolean,
158 command: this.cfg.get("cargo-watch.command") as string, 158 command: this.cfg.get("cargo-watch.command") as string,
159 }; 159 };
160 } 160 }
161 161
162 get cargoFeatures(): CargoFeatures { 162 get cargoFeatures(): CargoFeatures {
163 return { 163 return {
164 noDefaultFeatures: this.cfg.get("cargoFeatures.noDefaultFeatures") as boolean, 164 noDefaultFeatures: this.cfg.get("cargoFeatures.noDefaultFeatures") as boolean,
165 allFeatures: this.cfg.get("cargoFeatures.allFeatures") as boolean, 165 allFeatures: this.cfg.get("cargoFeatures.allFeatures") as boolean,
166 features: this.cfg.get("cargoFeatures.features") as string[], 166 features: this.cfg.get("cargoFeatures.features") as string[],
167 }; 167 };
168 } 168 }
169 169
diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts
index a2db04de8..c4d286aef 100644
--- a/editors/code/src/highlighting.ts
+++ b/editors/code/src/highlighting.ts
@@ -29,7 +29,7 @@ export function activateHighlighting(ctx: Ctx) {
29 highlighter.setHighlights(targetEditor, params.decorations); 29 highlighter.setHighlights(targetEditor, params.decorations);
30 }, 30 },
31 ); 31 );
32 }; 32 }
33 33
34 vscode.workspace.onDidChangeConfiguration( 34 vscode.workspace.onDidChangeConfiguration(
35 _ => highlighter.removeHighlights(), 35 _ => highlighter.removeHighlights(),
diff --git a/editors/code/src/inlay_hints.ts b/editors/code/src/inlay_hints.ts
index f82df66ae..26705067a 100644
--- a/editors/code/src/inlay_hints.ts
+++ b/editors/code/src/inlay_hints.ts
@@ -29,13 +29,13 @@ export function activateInlayHints(ctx: Ctx) {
29 29
30 ctx.pushCleanup({ 30 ctx.pushCleanup({
31 dispose() { 31 dispose() {
32 hintsUpdater.clear() 32 hintsUpdater.clear();
33 } 33 }
34 }) 34 });
35 35
36 // XXX: we don't await this, thus Promise rejections won't be handled, but 36 // XXX: we don't await this, thus Promise rejections won't be handled, but
37 // this should never throw in fact... 37 // this should never throw in fact...
38 hintsUpdater.setEnabled(ctx.config.displayInlayHints) 38 void hintsUpdater.setEnabled(ctx.config.displayInlayHints);
39} 39}
40 40
41interface InlayHintsParams { 41interface InlayHintsParams {
@@ -57,7 +57,7 @@ const typeHintDecorationType = vscode.window.createTextEditorDecorationType({
57const parameterHintDecorationType = vscode.window.createTextEditorDecorationType({ 57const parameterHintDecorationType = vscode.window.createTextEditorDecorationType({
58 before: { 58 before: {
59 color: new vscode.ThemeColor('rust_analyzer.inlayHint'), 59 color: new vscode.ThemeColor('rust_analyzer.inlayHint'),
60 } 60 },
61}); 61});
62 62
63class HintsUpdater { 63class HintsUpdater {
diff --git a/editors/code/src/installation/download_artifact.ts b/editors/code/src/installation/download_artifact.ts
index de655f8f4..9996c556f 100644
--- a/editors/code/src/installation/download_artifact.ts
+++ b/editors/code/src/installation/download_artifact.ts
@@ -15,7 +15,7 @@ import { throttle } from "throttle-debounce";
15 * of the artifact as `displayName`. 15 * of the artifact as `displayName`.
16 */ 16 */
17export async function downloadArtifact( 17export async function downloadArtifact(
18 {downloadUrl, releaseName}: ArtifactReleaseInfo, 18 { downloadUrl, releaseName }: ArtifactReleaseInfo,
19 artifactFileName: string, 19 artifactFileName: string,
20 installationDir: string, 20 installationDir: string,
21 displayName: string, 21 displayName: string,
@@ -23,7 +23,7 @@ export async function downloadArtifact(
23 await fs.mkdir(installationDir).catch(err => assert.strictEqual( 23 await fs.mkdir(installationDir).catch(err => assert.strictEqual(
24 err?.code, 24 err?.code,
25 "EEXIST", 25 "EEXIST",
26 `Couldn't create directory "${installationDir}" to download `+ 26 `Couldn't create directory "${installationDir}" to download ` +
27 `${artifactFileName} artifact: ${err.message}` 27 `${artifactFileName} artifact: ${err.message}`
28 )); 28 ));
29 29
diff --git a/editors/code/src/installation/fetch_artifact_release_info.ts b/editors/code/src/installation/fetch_artifact_release_info.ts
index 7d497057a..71889e82a 100644
--- a/editors/code/src/installation/fetch_artifact_release_info.ts
+++ b/editors/code/src/installation/fetch_artifact_release_info.ts
@@ -14,7 +14,7 @@ export async function fetchArtifactReleaseInfo(
14): Promise<null | ArtifactReleaseInfo> { 14): Promise<null | ArtifactReleaseInfo> {
15 15
16 const repoOwner = encodeURIComponent(repo.owner); 16 const repoOwner = encodeURIComponent(repo.owner);
17 const repoName = encodeURIComponent(repo.name); 17 const repoName = encodeURIComponent(repo.name);
18 18
19 const apiEndpointPath = releaseTag 19 const apiEndpointPath = releaseTag
20 ? `/repos/${repoOwner}/${repoName}/releases/tags/${releaseTag}` 20 ? `/repos/${repoOwner}/${repoName}/releases/tags/${releaseTag}`
@@ -28,8 +28,8 @@ export async function fetchArtifactReleaseInfo(
28 28
29 // FIXME: handle non-ok response 29 // FIXME: handle non-ok response
30 const response: GithubRelease = await fetch(requestUrl, { 30 const response: GithubRelease = await fetch(requestUrl, {
31 headers: { Accept: "application/vnd.github.v3+json" } 31 headers: { Accept: "application/vnd.github.v3+json" }
32 }) 32 })
33 .then(res => res.json()); 33 .then(res => res.json());
34 34
35 const artifact = response.assets.find(artifact => artifact.name === artifactFileName); 35 const artifact = response.assets.find(artifact => artifact.name === artifactFileName);
diff --git a/editors/code/src/installation/server.ts b/editors/code/src/installation/server.ts
index 6f69af698..63ab104a1 100644
--- a/editors/code/src/installation/server.ts
+++ b/editors/code/src/installation/server.ts
@@ -29,7 +29,7 @@ export async function ensureServerBinary(source: null | BinarySource): Promise<n
29 29
30 vscode.window.showErrorMessage( 30 vscode.window.showErrorMessage(
31 `Unable to run ${source.path} binary. ` + 31 `Unable to run ${source.path} binary. ` +
32 `To use the pre-built language server, set "rust-analyzer.raLspServerPath" ` + 32 `To use the pre-built language server, set "rust-analyzer.serverPath" ` +
33 "value to `null` or remove it from the settings to use it by default." 33 "value to `null` or remove it from the settings to use it by default."
34 ); 34 );
35 return null; 35 return null;
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 0ad7ef1bb..a22e0bc66 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -11,7 +11,7 @@ import { Config } from './config';
11let ctx: Ctx | undefined; 11let ctx: Ctx | undefined;
12 12
13export async function activate(context: vscode.ExtensionContext) { 13export async function activate(context: vscode.ExtensionContext) {
14 const config = new Config(context) 14 const config = new Config(context);
15 15
16 const serverPath = await ensureServerBinary(config.serverSource); 16 const serverPath = await ensureServerBinary(config.serverSource);
17 if (serverPath == null) { 17 if (serverPath == null) {
@@ -33,7 +33,7 @@ export async function activate(context: vscode.ExtensionContext) {
33 vscode.window.showInformationMessage('Reloading rust-analyzer...'); 33 vscode.window.showInformationMessage('Reloading rust-analyzer...');
34 // @DanTup maneuver 34 // @DanTup maneuver
35 // https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895 35 // https://github.com/microsoft/vscode/issues/45774#issuecomment-373423895
36 await deactivate() 36 await deactivate();
37 for (const sub of ctx.subscriptions) { 37 for (const sub of ctx.subscriptions) {
38 try { 38 try {
39 sub.dispose(); 39 sub.dispose();
@@ -41,9 +41,9 @@ export async function activate(context: vscode.ExtensionContext) {
41 console.error(e); 41 console.error(e);
42 } 42 }
43 } 43 }
44 await activate(context) 44 await activate(context);
45 } 45 };
46 }) 46 });
47 47
48 ctx.registerCommand('analyzerStatus', commands.analyzerStatus); 48 ctx.registerCommand('analyzerStatus', commands.analyzerStatus);
49 ctx.registerCommand('collectGarbage', commands.collectGarbage); 49 ctx.registerCommand('collectGarbage', commands.collectGarbage);
@@ -54,7 +54,7 @@ export async function activate(context: vscode.ExtensionContext) {
54 ctx.registerCommand('expandMacro', commands.expandMacro); 54 ctx.registerCommand('expandMacro', commands.expandMacro);
55 ctx.registerCommand('run', commands.run); 55 ctx.registerCommand('run', commands.run);
56 ctx.registerCommand('onEnter', commands.onEnter); 56 ctx.registerCommand('onEnter', commands.onEnter);
57 ctx.registerCommand('ssr', commands.ssr) 57 ctx.registerCommand('ssr', commands.ssr);
58 58
59 // Internal commands which are invoked by the server. 59 // Internal commands which are invoked by the server.
60 ctx.registerCommand('runSingle', commands.runSingle); 60 ctx.registerCommand('runSingle', commands.runSingle);
diff --git a/editors/code/src/status_display.ts b/editors/code/src/status_display.ts
index ed0d82166..0f5f6ef99 100644
--- a/editors/code/src/status_display.ts
+++ b/editors/code/src/status_display.ts
@@ -15,7 +15,7 @@ export function activateStatusDisplay(ctx: Ctx) {
15 WorkDoneProgress.type, 15 WorkDoneProgress.type,
16 'rustAnalyzer/cargoWatcher', 16 'rustAnalyzer/cargoWatcher',
17 params => statusDisplay.handleProgressNotification(params) 17 params => statusDisplay.handleProgressNotification(params)
18 )) 18 ));
19 } 19 }
20} 20}
21 21
diff --git a/editors/code/tslint.json b/editors/code/tslint.json
deleted file mode 100644
index 333e2a321..000000000
--- a/editors/code/tslint.json
+++ /dev/null
@@ -1,10 +0,0 @@
1{
2 "rules": {
3 "semicolon": [
4 true,
5 "always"
6 ],
7 "prefer-const": true,
8 "no-floating-promises": true
9 }
10}
diff --git a/xtask/src/install.rs b/xtask/src/install.rs
index 91426377f..cc6fecc85 100644
--- a/xtask/src/install.rs
+++ b/xtask/src/install.rs
@@ -39,7 +39,7 @@ impl InstallCmd {
39 " 39 "
40 Installation complete. 40 Installation complete.
41 41
42 Add `\"rust-analyzer.raLspServerPath\": \"ra_lsp_server\",` to VS Code settings, 42 Add `\"rust-analyzer.serverPath\": \"rust-analyzer\",` to VS Code settings,
43 otherwise it will use the latest release from GitHub. 43 otherwise it will use the latest release from GitHub.
44" 44"
45 ) 45 )
@@ -142,7 +142,7 @@ fn install_server(opts: ServerOpt) -> Result<()> {
142 } 142 }
143 143
144 let jemalloc = if opts.jemalloc { "--features jemalloc" } else { "" }; 144 let jemalloc = if opts.jemalloc { "--features jemalloc" } else { "" };
145 let res = run!("cargo install --path crates/ra_lsp_server --locked --force {}", jemalloc); 145 let res = run!("cargo install --path crates/rust-analyzer --locked --force {}", jemalloc);
146 146
147 if res.is_err() && old_rust { 147 if res.is_err() && old_rust {
148 eprintln!( 148 eprintln!(
diff --git a/xtask/tests/tidy-tests/docs.rs b/xtask/tests/tidy-tests/docs.rs
index b2571df25..62c4f8441 100644
--- a/xtask/tests/tidy-tests/docs.rs
+++ b/xtask/tests/tidy-tests/docs.rs
@@ -77,7 +77,6 @@ fn no_docs_comments() {
77 "ra_hir", 77 "ra_hir",
78 "ra_hir_expand", 78 "ra_hir_expand",
79 "ra_ide", 79 "ra_ide",
80 "ra_lsp_server",
81 "ra_mbe", 80 "ra_mbe",
82 "ra_parser", 81 "ra_parser",
83 "ra_prof", 82 "ra_prof",