aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml3
-rw-r--r--crates/ra_hir/src/nameres/collector.rs148
-rw-r--r--crates/ra_hir/src/nameres/tests/mods.rs53
-rw-r--r--docs/dev/README.md2
-rw-r--r--docs/user/README.md3
-rw-r--r--editors/code/package-lock.json197
-rw-r--r--editors/code/package.json14
-rw-r--r--editors/code/src/commands/inlay_hints.ts17
8 files changed, 269 insertions, 168 deletions
diff --git a/.travis.yml b/.travis.yml
index d0d8311fe..87b546442 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,10 +41,9 @@ matrix:
41 - xvfb 41 - xvfb
42 before_install: cd editors/code 42 before_install: cd editors/code
43 install: 43 install:
44 - npm install 44 - npm ci
45 - npm run vscode:prepublish 45 - npm run vscode:prepublish
46 script: 46 script:
47 - npm ci
48 - npm run travis 47 - npm run travis
49 env: 48 env:
50 - CXX="g++-4.9", CC="gcc-4.9" 49 - CXX="g++-4.9", CC="gcc-4.9"
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs
index 7f765caf3..06b732215 100644
--- a/crates/ra_hir/src/nameres/collector.rs
+++ b/crates/ra_hir/src/nameres/collector.rs
@@ -1,7 +1,7 @@
1use std::borrow::Cow; 1use std::borrow::Cow;
2use std::sync::Arc;
2 3
3use arrayvec::ArrayVec; 4use ra_db::{FileId, SourceRoot};
4use ra_db::FileId;
5use ra_syntax::{ast, SmolStr}; 5use ra_syntax::{ast, SmolStr};
6use relative_path::RelativePathBuf; 6use relative_path::RelativePathBuf;
7use rustc_hash::FxHashMap; 7use rustc_hash::FxHashMap;
@@ -105,6 +105,7 @@ where
105 module_id, 105 module_id,
106 file_id: file_id.into(), 106 file_id: file_id.into(),
107 raw_items: &raw_items, 107 raw_items: &raw_items,
108 parent_module: None,
108 } 109 }
109 .collect(raw_items.items()); 110 .collect(raw_items.items());
110 111
@@ -455,8 +456,14 @@ where
455 if !self.macro_stack_monitor.is_poison(macro_def_id) { 456 if !self.macro_stack_monitor.is_poison(macro_def_id) {
456 let file_id: HirFileId = macro_call_id.as_file(MacroFileKind::Items); 457 let file_id: HirFileId = macro_call_id.as_file(MacroFileKind::Items);
457 let raw_items = self.db.raw_items(file_id); 458 let raw_items = self.db.raw_items(file_id);
458 ModCollector { def_collector: &mut *self, file_id, module_id, raw_items: &raw_items } 459 ModCollector {
459 .collect(raw_items.items()); 460 def_collector: &mut *self,
461 file_id,
462 module_id,
463 raw_items: &raw_items,
464 parent_module: None,
465 }
466 .collect(raw_items.items());
460 } else { 467 } else {
461 log::error!("Too deep macro expansion: {:?}", macro_call_id); 468 log::error!("Too deep macro expansion: {:?}", macro_call_id);
462 self.def_map.poison_macros.insert(macro_def_id); 469 self.def_map.poison_macros.insert(macro_def_id);
@@ -476,6 +483,7 @@ struct ModCollector<'a, D> {
476 module_id: CrateModuleId, 483 module_id: CrateModuleId,
477 file_id: HirFileId, 484 file_id: HirFileId,
478 raw_items: &'a raw::RawItems, 485 raw_items: &'a raw::RawItems,
486 parent_module: Option<&'a Name>,
479} 487}
480 488
481impl<DB> ModCollector<'_, &'_ mut DefCollector<&'_ DB>> 489impl<DB> ModCollector<'_, &'_ mut DefCollector<&'_ DB>>
@@ -508,6 +516,7 @@ where
508 module_id, 516 module_id,
509 file_id: self.file_id, 517 file_id: self.file_id,
510 raw_items: self.raw_items, 518 raw_items: self.raw_items,
519 parent_module: Some(name),
511 } 520 }
512 .collect(&*items); 521 .collect(&*items);
513 } 522 }
@@ -521,6 +530,7 @@ where
521 name, 530 name,
522 is_root, 531 is_root,
523 attr_path.as_ref(), 532 attr_path.as_ref(),
533 self.parent_module,
524 ) { 534 ) {
525 Ok(file_id) => { 535 Ok(file_id) => {
526 let module_id = self.push_child_module(name.clone(), ast_id, Some(file_id)); 536 let module_id = self.push_child_module(name.clone(), ast_id, Some(file_id));
@@ -530,6 +540,7 @@ where
530 module_id, 540 module_id,
531 file_id: file_id.into(), 541 file_id: file_id.into(),
532 raw_items: &raw_items, 542 raw_items: &raw_items,
543 parent_module: None,
533 } 544 }
534 .collect(raw_items.items()) 545 .collect(raw_items.items())
535 } 546 }
@@ -636,46 +647,47 @@ fn resolve_submodule(
636 name: &Name, 647 name: &Name,
637 is_root: bool, 648 is_root: bool,
638 attr_path: Option<&SmolStr>, 649 attr_path: Option<&SmolStr>,
650 parent_module: Option<&Name>,
639) -> Result<FileId, RelativePathBuf> { 651) -> Result<FileId, RelativePathBuf> {
640 // FIXME: handle submodules of inline modules properly
641 let file_id = file_id.original_file(db); 652 let file_id = file_id.original_file(db);
642 let source_root_id = db.file_source_root(file_id); 653 let source_root_id = db.file_source_root(file_id);
643 let path = db.file_relative_path(file_id); 654 let path = db.file_relative_path(file_id);
644 let root = RelativePathBuf::default(); 655 let root = RelativePathBuf::default();
645 let dir_path = path.parent().unwrap_or(&root); 656 let dir_path = path.parent().unwrap_or(&root);
646 let mod_name = path.file_stem().unwrap_or("unknown"); 657 let mod_name = path.file_stem().unwrap_or("unknown");
647 let is_dir_owner = is_root || mod_name == "mod"; 658
648 659 let resolve_mode = match (attr_path.filter(|p| !p.is_empty()), parent_module) {
649 let file_mod = dir_path.join(format!("{}.rs", name)); 660 (Some(file_path), Some(parent_name)) => {
650 let dir_mod = dir_path.join(format!("{}/mod.rs", name)); 661 let file_path = normalize_attribute_path(file_path);
651 let file_dir_mod = dir_path.join(format!("{}/{}.rs", mod_name, name)); 662 let path = dir_path.join(format!("{}/{}", parent_name, file_path)).normalize();
652 let mut candidates = ArrayVec::<[_; 3]>::new(); 663 ResolutionMode::InsideInlineModule(InsideInlineModuleMode::WithAttributePath(path))
653 let file_attr_mod = attr_path.map(|file_path| { 664 }
654 let file_path = normalize_attribute_path(file_path); 665 (Some(file_path), None) => {
655 let file_attr_mod = dir_path.join(file_path.as_ref()).normalize(); 666 let file_path = normalize_attribute_path(file_path);
656 candidates.push(file_attr_mod.clone()); 667 let path = dir_path.join(file_path.as_ref()).normalize();
657 668 ResolutionMode::OutOfLine(OutOfLineMode::WithAttributePath(path))
658 file_attr_mod 669 }
659 }); 670 (None, Some(parent_name)) => {
660 if is_dir_owner { 671 let path = dir_path.join(format!("{}/{}.rs", parent_name, name));
661 candidates.push(file_mod.clone()); 672 ResolutionMode::InsideInlineModule(InsideInlineModuleMode::File(path))
662 candidates.push(dir_mod); 673 }
663 } else { 674 _ => {
664 candidates.push(file_dir_mod.clone()); 675 let is_dir_owner = is_root || mod_name == "mod";
665 }; 676 if is_dir_owner {
666 let sr = db.source_root(source_root_id); 677 let file_mod = dir_path.join(format!("{}.rs", name));
667 let mut points_to = candidates.into_iter().filter_map(|path| sr.files.get(&path)).copied(); 678 let dir_mod = dir_path.join(format!("{}/mod.rs", name));
668 // FIXME: handle ambiguity 679 ResolutionMode::OutOfLine(OutOfLineMode::RootOrModRs {
669 match points_to.next() { 680 file: file_mod,
670 Some(file_id) => Ok(file_id), 681 directory: dir_mod,
671 None => { 682 })
672 if let Some(file_attr_mod) = file_attr_mod {
673 Err(file_attr_mod)
674 } else { 683 } else {
675 Err(if is_dir_owner { file_mod } else { file_dir_mod }) 684 let path = dir_path.join(format!("{}/{}.rs", mod_name, name));
685 ResolutionMode::OutOfLine(OutOfLineMode::FileInDirectory(path))
676 } 686 }
677 } 687 }
678 } 688 };
689
690 resolve_mode.resolve(db.source_root(source_root_id))
679} 691}
680 692
681fn normalize_attribute_path(file_path: &SmolStr) -> Cow<str> { 693fn normalize_attribute_path(file_path: &SmolStr) -> Cow<str> {
@@ -693,6 +705,74 @@ fn normalize_attribute_path(file_path: &SmolStr) -> Cow<str> {
693 } 705 }
694} 706}
695 707
708enum OutOfLineMode {
709 RootOrModRs { file: RelativePathBuf, directory: RelativePathBuf },
710 FileInDirectory(RelativePathBuf),
711 WithAttributePath(RelativePathBuf),
712}
713
714impl OutOfLineMode {
715 pub fn resolve(&self, source_root: Arc<SourceRoot>) -> Result<FileId, RelativePathBuf> {
716 match self {
717 OutOfLineMode::RootOrModRs { file, directory } => match source_root.files.get(file) {
718 None => resolve_simple_path(source_root, directory).map_err(|_| file.clone()),
719 file_id => resolve_find_result(file_id, file),
720 },
721 OutOfLineMode::FileInDirectory(path) => resolve_simple_path(source_root, path),
722 OutOfLineMode::WithAttributePath(path) => resolve_simple_path(source_root, path),
723 }
724 }
725}
726
727enum InsideInlineModuleMode {
728 File(RelativePathBuf),
729 WithAttributePath(RelativePathBuf),
730}
731
732impl InsideInlineModuleMode {
733 pub fn resolve(&self, source_root: Arc<SourceRoot>) -> Result<FileId, RelativePathBuf> {
734 match self {
735 InsideInlineModuleMode::File(path) => resolve_simple_path(source_root, path),
736 InsideInlineModuleMode::WithAttributePath(path) => {
737 resolve_simple_path(source_root, path)
738 }
739 }
740 }
741}
742
743enum ResolutionMode {
744 OutOfLine(OutOfLineMode),
745 InsideInlineModule(InsideInlineModuleMode),
746}
747
748impl ResolutionMode {
749 pub fn resolve(&self, source_root: Arc<SourceRoot>) -> Result<FileId, RelativePathBuf> {
750 use self::ResolutionMode::*;
751
752 match self {
753 OutOfLine(mode) => mode.resolve(source_root),
754 InsideInlineModule(mode) => mode.resolve(source_root),
755 }
756 }
757}
758
759fn resolve_simple_path(
760 source_root: Arc<SourceRoot>,
761 path: &RelativePathBuf,
762) -> Result<FileId, RelativePathBuf> {
763 resolve_find_result(source_root.files.get(path), path)
764}
765
766fn resolve_find_result(
767 file_id: Option<&FileId>,
768 path: &RelativePathBuf,
769) -> Result<FileId, RelativePathBuf> {
770 match file_id {
771 Some(file_id) => Ok(file_id.clone()),
772 None => Err(path.clone()),
773 }
774}
775
696#[cfg(test)] 776#[cfg(test)]
697mod tests { 777mod tests {
698 use ra_db::SourceDatabase; 778 use ra_db::SourceDatabase;
diff --git a/crates/ra_hir/src/nameres/tests/mods.rs b/crates/ra_hir/src/nameres/tests/mods.rs
index d714a3276..382728149 100644
--- a/crates/ra_hir/src/nameres/tests/mods.rs
+++ b/crates/ra_hir/src/nameres/tests/mods.rs
@@ -336,10 +336,10 @@ fn module_resolution_explicit_path_mod_rs_with_win_separator() {
336 "###); 336 "###);
337} 337}
338 338
339// FIXME: issue #1510. not support out-of-line modules inside inline. 339// FIXME: issue #1529. not support out-of-line modules inside inline.
340#[test] 340#[test]
341#[ignore] 341#[ignore]
342fn module_resolution_decl_inside_inline_module() { 342fn module_resolution_decl_inside_inline_module_with_path_attribute() {
343 let map = def_map_with_crate_graph( 343 let map = def_map_with_crate_graph(
344 r###" 344 r###"
345 //- /main.rs 345 //- /main.rs
@@ -368,10 +368,39 @@ fn module_resolution_decl_inside_inline_module() {
368 "###); 368 "###);
369} 369}
370 370
371// FIXME: issue #1510. not support out-of-line modules inside inline. 371#[test]
372fn module_resolution_decl_inside_inline_module() {
373 let map = def_map_with_crate_graph(
374 r###"
375 //- /main.rs
376 mod foo {
377 mod bar;
378 }
379
380 //- /foo/bar.rs
381 pub struct Baz;
382 "###,
383 crate_graph! {
384 "main": ("/main.rs", []),
385 },
386 );
387
388 assert_snapshot_matches!(map, @r###"
389 â‹®crate
390 â‹®foo: t
391 â‹®
392 â‹®crate::foo
393 â‹®bar: t
394 â‹®
395 â‹®crate::foo::bar
396 â‹®Baz: t v
397 "###);
398}
399
400// FIXME: issue #1529. not support out-of-line modules inside inline.
372#[test] 401#[test]
373#[ignore] 402#[ignore]
374fn module_resolution_decl_inside_inline_module_2() { 403fn module_resolution_decl_inside_inline_module_2_with_path_attribute() {
375 let map = def_map_with_crate_graph( 404 let map = def_map_with_crate_graph(
376 r###" 405 r###"
377 //- /main.rs 406 //- /main.rs
@@ -400,7 +429,7 @@ fn module_resolution_decl_inside_inline_module_2() {
400 "###); 429 "###);
401} 430}
402 431
403// FIXME: issue #1510. not support out-of-line modules inside inline. 432// FIXME: issue #1529. not support out-of-line modules inside inline.
404#[test] 433#[test]
405#[ignore] 434#[ignore]
406fn module_resolution_decl_inside_inline_module_3() { 435fn module_resolution_decl_inside_inline_module_3() {
@@ -433,7 +462,7 @@ fn module_resolution_decl_inside_inline_module_3() {
433 "###); 462 "###);
434} 463}
435 464
436// FIXME: issue #1510. not support out-of-line modules inside inline. 465// FIXME: issue #1529. not support out-of-line modules inside inline.
437#[test] 466#[test]
438#[ignore] 467#[ignore]
439fn module_resolution_decl_inside_inline_module_empty_path() { 468fn module_resolution_decl_inside_inline_module_empty_path() {
@@ -491,7 +520,7 @@ fn module_resolution_decl_empty_path() {
491 "###); 520 "###);
492} 521}
493 522
494// FIXME: issue #1510. not support out-of-line modules inside inline. 523// FIXME: issue #1529. not support out-of-line modules inside inline.
495#[test] 524#[test]
496#[ignore] 525#[ignore]
497fn module_resolution_decl_inside_inline_module_relative_path() { 526fn module_resolution_decl_inside_inline_module_relative_path() {
@@ -523,9 +552,7 @@ fn module_resolution_decl_inside_inline_module_relative_path() {
523 "###); 552 "###);
524} 553}
525 554
526// FIXME: issue #1510. not support out-of-line modules inside inline.
527#[test] 555#[test]
528#[ignore]
529fn module_resolution_decl_inside_inline_module_in_crate_root() { 556fn module_resolution_decl_inside_inline_module_in_crate_root() {
530 let map = def_map_with_crate_graph( 557 let map = def_map_with_crate_graph(
531 r###" 558 r###"
@@ -557,9 +584,7 @@ fn module_resolution_decl_inside_inline_module_in_crate_root() {
557 "###); 584 "###);
558} 585}
559 586
560// FIXME: issue #1510. not support out-of-line modules inside inline.
561#[test] 587#[test]
562#[ignore]
563fn module_resolution_decl_inside_inline_module_in_mod_rs() { 588fn module_resolution_decl_inside_inline_module_in_mod_rs() {
564 let map = def_map_with_crate_graph( 589 let map = def_map_with_crate_graph(
565 r###" 590 r###"
@@ -597,9 +622,7 @@ fn module_resolution_decl_inside_inline_module_in_mod_rs() {
597 "###); 622 "###);
598} 623}
599 624
600// FIXME: issue #1510. not support out-of-line modules inside inline.
601#[test] 625#[test]
602#[ignore]
603fn module_resolution_decl_inside_inline_module_in_non_crate_root() { 626fn module_resolution_decl_inside_inline_module_in_non_crate_root() {
604 let map = def_map_with_crate_graph( 627 let map = def_map_with_crate_graph(
605 r###" 628 r###"
@@ -613,7 +636,7 @@ fn module_resolution_decl_inside_inline_module_in_non_crate_root() {
613 } 636 }
614 use self::bar::baz::Baz; 637 use self::bar::baz::Baz;
615 638
616 //- /foo/bar/qwe.rs 639 //- /bar/qwe.rs
617 pub struct Baz; 640 pub struct Baz;
618 "###, 641 "###,
619 crate_graph! { 642 crate_graph! {
@@ -637,7 +660,7 @@ fn module_resolution_decl_inside_inline_module_in_non_crate_root() {
637 "###); 660 "###);
638} 661}
639 662
640// FIXME: issue #1510. not support out-of-line modules inside inline. 663// FIXME: issue #1529. not support out-of-line modules inside inline.
641#[test] 664#[test]
642#[ignore] 665#[ignore]
643fn module_resolution_decl_inside_inline_module_in_non_crate_root_2() { 666fn module_resolution_decl_inside_inline_module_in_non_crate_root_2() {
diff --git a/docs/dev/README.md b/docs/dev/README.md
index 74c58d4af..0db3e731e 100644
--- a/docs/dev/README.md
+++ b/docs/dev/README.md
@@ -116,6 +116,8 @@ Due to the requirements of running the tests inside VS Code they are **not run
116on CI**. When making changes to the extension please ensure the tests are not 116on CI**. When making changes to the extension please ensure the tests are not
117broken locally before opening a Pull Request. 117broken locally before opening a Pull Request.
118 118
119To install **only** the VS Code extension, use `cargo install-ra --client-code`.
120
119# Logging 121# Logging
120 122
121Logging is done by both rust-analyzer and VS Code, so it might be tricky to 123Logging is done by both rust-analyzer and VS Code, so it might be tricky to
diff --git a/docs/user/README.md b/docs/user/README.md
index 122388a42..a5e17f604 100644
--- a/docs/user/README.md
+++ b/docs/user/README.md
@@ -58,6 +58,9 @@ Beyond basic LSP features, there are some extension commands which you can
58invoke via <kbd>Ctrl+Shift+P</kbd> or bind to a shortcut. See [./features.md](./features.md) 58invoke via <kbd>Ctrl+Shift+P</kbd> or bind to a shortcut. See [./features.md](./features.md)
59for details. 59for details.
60 60
61For updates, pull the latest changes from the master branch, run `cargo install-ra` again, and **restart** VS Code instance.
62See https://github.com/microsoft/vscode/issues/72308[microsoft/vscode#72308] for why a full restart is needed.
63
61### Settings 64### Settings
62 65
63* `rust-analyzer.highlightingOn`: enables experimental syntax highlighting 66* `rust-analyzer.highlightingOn`: enables experimental syntax highlighting
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index fd4397e35..56cac1b49 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -5,18 +5,18 @@
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
7 "@babel/code-frame": { 7 "@babel/code-frame": {
8 "version": "7.0.0", 8 "version": "7.5.5",
9 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 9 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
10 "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 10 "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
11 "dev": true, 11 "dev": true,
12 "requires": { 12 "requires": {
13 "@babel/highlight": "^7.0.0" 13 "@babel/highlight": "^7.0.0"
14 } 14 }
15 }, 15 },
16 "@babel/highlight": { 16 "@babel/highlight": {
17 "version": "7.0.0", 17 "version": "7.5.0",
18 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 18 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
19 "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 19 "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
20 "dev": true, 20 "dev": true,
21 "requires": { 21 "requires": {
22 "chalk": "^2.0.0", 22 "chalk": "^2.0.0",
@@ -25,15 +25,15 @@
25 } 25 }
26 }, 26 },
27 "@types/mocha": { 27 "@types/mocha": {
28 "version": "5.2.6", 28 "version": "5.2.7",
29 "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", 29 "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
30 "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", 30 "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
31 "dev": true 31 "dev": true
32 }, 32 },
33 "@types/node": { 33 "@types/node": {
34 "version": "10.14.5", 34 "version": "10.14.13",
35 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.5.tgz", 35 "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz",
36 "integrity": "sha512-Ja7d4s0qyGFxjGeDq5S7Si25OFibSAHUi6i17UWnwNnpitADN7hah9q0Tl25gxuV5R1u2Bx+np6w4LHXfHyj/g==", 36 "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==",
37 "dev": true 37 "dev": true
38 }, 38 },
39 "@types/seedrandom": { 39 "@types/seedrandom": {
@@ -43,18 +43,18 @@
43 "dev": true 43 "dev": true
44 }, 44 },
45 "agent-base": { 45 "agent-base": {
46 "version": "4.2.1", 46 "version": "4.3.0",
47 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", 47 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
48 "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", 48 "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
49 "dev": true, 49 "dev": true,
50 "requires": { 50 "requires": {
51 "es6-promisify": "^5.0.0" 51 "es6-promisify": "^5.0.0"
52 } 52 }
53 }, 53 },
54 "ajv": { 54 "ajv": {
55 "version": "6.10.0", 55 "version": "6.10.2",
56 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 56 "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
57 "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 57 "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
58 "dev": true, 58 "dev": true,
59 "requires": { 59 "requires": {
60 "fast-deep-equal": "^2.0.1", 60 "fast-deep-equal": "^2.0.1",
@@ -158,9 +158,9 @@
158 } 158 }
159 }, 159 },
160 "browser-stdout": { 160 "browser-stdout": {
161 "version": "1.3.0", 161 "version": "1.3.1",
162 "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 162 "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
163 "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 163 "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
164 "dev": true 164 "dev": true
165 }, 165 },
166 "buffer-crc32": { 166 "buffer-crc32": {
@@ -228,9 +228,9 @@
228 "dev": true 228 "dev": true
229 }, 229 },
230 "combined-stream": { 230 "combined-stream": {
231 "version": "1.0.7", 231 "version": "1.0.8",
232 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 232 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
233 "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 233 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
234 "dev": true, 234 "dev": true,
235 "requires": { 235 "requires": {
236 "delayed-stream": "~1.0.0" 236 "delayed-stream": "~1.0.0"
@@ -372,9 +372,9 @@
372 "dev": true 372 "dev": true
373 }, 373 },
374 "es6-promise": { 374 "es6-promise": {
375 "version": "4.2.6", 375 "version": "4.2.8",
376 "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", 376 "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
377 "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", 377 "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
378 "dev": true 378 "dev": true
379 }, 379 },
380 "es6-promisify": { 380 "es6-promisify": {
@@ -484,9 +484,9 @@
484 } 484 }
485 }, 485 },
486 "growl": { 486 "growl": {
487 "version": "1.10.3", 487 "version": "1.10.5",
488 "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 488 "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
489 "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 489 "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
490 "dev": true 490 "dev": true
491 }, 491 },
492 "har-schema": { 492 "har-schema": {
@@ -553,12 +553,12 @@
553 } 553 }
554 }, 554 },
555 "https-proxy-agent": { 555 "https-proxy-agent": {
556 "version": "2.2.1", 556 "version": "2.2.2",
557 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", 557 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
558 "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", 558 "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
559 "dev": true, 559 "dev": true,
560 "requires": { 560 "requires": {
561 "agent-base": "^4.1.0", 561 "agent-base": "^4.3.0",
562 "debug": "^3.1.0" 562 "debug": "^3.1.0"
563 } 563 }
564 }, 564 },
@@ -728,33 +728,28 @@
728 } 728 }
729 }, 729 },
730 "mocha": { 730 "mocha": {
731 "version": "4.1.0", 731 "version": "5.2.0",
732 "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 732 "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
733 "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 733 "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
734 "dev": true, 734 "dev": true,
735 "requires": { 735 "requires": {
736 "browser-stdout": "1.3.0", 736 "browser-stdout": "1.3.1",
737 "commander": "2.11.0", 737 "commander": "2.15.1",
738 "debug": "3.1.0", 738 "debug": "3.1.0",
739 "diff": "3.3.1", 739 "diff": "3.5.0",
740 "escape-string-regexp": "1.0.5", 740 "escape-string-regexp": "1.0.5",
741 "glob": "7.1.2", 741 "glob": "7.1.2",
742 "growl": "1.10.3", 742 "growl": "1.10.5",
743 "he": "1.1.1", 743 "he": "1.1.1",
744 "minimatch": "3.0.4",
744 "mkdirp": "0.5.1", 745 "mkdirp": "0.5.1",
745 "supports-color": "4.4.0" 746 "supports-color": "5.4.0"
746 }, 747 },
747 "dependencies": { 748 "dependencies": {
748 "commander": { 749 "commander": {
749 "version": "2.11.0", 750 "version": "2.15.1",
750 "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 751 "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
751 "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 752 "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
752 "dev": true
753 },
754 "diff": {
755 "version": "3.3.1",
756 "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
757 "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
758 "dev": true 753 "dev": true
759 }, 754 },
760 "glob": { 755 "glob": {
@@ -771,19 +766,13 @@
771 "path-is-absolute": "^1.0.0" 766 "path-is-absolute": "^1.0.0"
772 } 767 }
773 }, 768 },
774 "has-flag": {
775 "version": "2.0.0",
776 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
777 "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
778 "dev": true
779 },
780 "supports-color": { 769 "supports-color": {
781 "version": "4.4.0", 770 "version": "5.4.0",
782 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 771 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
783 "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 772 "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
784 "dev": true, 773 "dev": true,
785 "requires": { 774 "requires": {
786 "has-flag": "^2.0.0" 775 "has-flag": "^3.0.0"
787 } 776 }
788 } 777 }
789 } 778 }
@@ -895,15 +884,15 @@
895 "dev": true 884 "dev": true
896 }, 885 },
897 "prettier": { 886 "prettier": {
898 "version": "1.17.0", 887 "version": "1.18.2",
899 "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.0.tgz", 888 "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
900 "integrity": "sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==", 889 "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
901 "dev": true 890 "dev": true
902 }, 891 },
903 "psl": { 892 "psl": {
904 "version": "1.1.31", 893 "version": "1.2.0",
905 "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 894 "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
906 "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", 895 "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==",
907 "dev": true 896 "dev": true
908 }, 897 },
909 "punycode": { 898 "punycode": {
@@ -1133,15 +1122,15 @@
1133 } 1122 }
1134 }, 1123 },
1135 "tslib": { 1124 "tslib": {
1136 "version": "1.9.3", 1125 "version": "1.10.0",
1137 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 1126 "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
1138 "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 1127 "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
1139 "dev": true 1128 "dev": true
1140 }, 1129 },
1141 "tslint": { 1130 "tslint": {
1142 "version": "5.16.0", 1131 "version": "5.18.0",
1143 "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", 1132 "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
1144 "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", 1133 "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
1145 "dev": true, 1134 "dev": true,
1146 "requires": { 1135 "requires": {
1147 "@babel/code-frame": "^7.0.0", 1136 "@babel/code-frame": "^7.0.0",
@@ -1150,7 +1139,7 @@
1150 "commander": "^2.12.1", 1139 "commander": "^2.12.1",
1151 "diff": "^3.2.0", 1140 "diff": "^3.2.0",
1152 "glob": "^7.1.1", 1141 "glob": "^7.1.1",
1153 "js-yaml": "^3.13.0", 1142 "js-yaml": "^3.13.1",
1154 "minimatch": "^3.0.4", 1143 "minimatch": "^3.0.4",
1155 "mkdirp": "^0.5.1", 1144 "mkdirp": "^0.5.1",
1156 "resolve": "^1.3.2", 1145 "resolve": "^1.3.2",
@@ -1206,9 +1195,9 @@
1206 } 1195 }
1207 }, 1196 },
1208 "typescript": { 1197 "typescript": {
1209 "version": "3.4.4", 1198 "version": "3.5.3",
1210 "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.4.tgz", 1199 "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
1211 "integrity": "sha512-xt5RsIRCEaf6+j9AyOBgvVuAec0i92rgCaS3S+UVf5Z/vF2Hvtsw08wtUTJqp4djwznoAgjSxeCcU4r+CcDBJA==", 1200 "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==",
1212 "dev": true 1201 "dev": true
1213 }, 1202 },
1214 "uc.micro": { 1203 "uc.micro": {
@@ -1239,12 +1228,12 @@
1239 "dev": true 1228 "dev": true
1240 }, 1229 },
1241 "url-parse": { 1230 "url-parse": {
1242 "version": "1.4.6", 1231 "version": "1.4.7",
1243 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.6.tgz", 1232 "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
1244 "integrity": "sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew==", 1233 "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
1245 "dev": true, 1234 "dev": true,
1246 "requires": { 1235 "requires": {
1247 "querystringify": "^2.0.0", 1236 "querystringify": "^2.1.1",
1248 "requires-port": "^1.0.0" 1237 "requires-port": "^1.0.0"
1249 } 1238 }
1250 }, 1239 },
@@ -1300,52 +1289,52 @@
1300 } 1289 }
1301 }, 1290 },
1302 "vscode": { 1291 "vscode": {
1303 "version": "1.1.33", 1292 "version": "1.1.35",
1304 "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.33.tgz", 1293 "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.35.tgz",
1305 "integrity": "sha512-sXedp2oF6y4ZvqrrFiZpeMzaCLSWV+PpYkIxjG/iYquNZ9KrLL2LujltGxPLvzn49xu2sZkyC+avVNFgcJD1Iw==", 1294 "integrity": "sha512-xPnxzQU40LOS2yPyzWW+WKpTV6qA3z16TcgpZ9O38UWLA157Zz4GxUx5H7Gd07pxzw0GqvusbF4D+5GBgNxvEQ==",
1306 "dev": true, 1295 "dev": true,
1307 "requires": { 1296 "requires": {
1308 "glob": "^7.1.2", 1297 "glob": "^7.1.2",
1309 "mocha": "^4.0.1", 1298 "mocha": "^5.2.0",
1310 "request": "^2.88.0", 1299 "request": "^2.88.0",
1311 "semver": "^5.4.1", 1300 "semver": "^5.4.1",
1312 "source-map-support": "^0.5.0", 1301 "source-map-support": "^0.5.0",
1313 "url-parse": "^1.4.4", 1302 "url-parse": "^1.4.4",
1314 "vscode-test": "^0.1.4" 1303 "vscode-test": "^0.4.1"
1315 } 1304 }
1316 }, 1305 },
1317 "vscode-jsonrpc": { 1306 "vscode-jsonrpc": {
1318 "version": "4.1.0-next.1", 1307 "version": "4.1.0-next.2",
1319 "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.1.0-next.1.tgz", 1308 "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.1.0-next.2.tgz",
1320 "integrity": "sha512-FzNkvHmg3GXpzZAlnGnpdRbQQX6LDRb0bvc+oxxjMUwIJ66kTO/DyeE2bwU0fsiOEGfsJTCzvjESVl368jZ0/g==" 1309 "integrity": "sha512-GsBLjP9DxQ42yl1mW9GEIlnSc0+R8mfzhaebwmmTPEJjezD5SPoAo3DFrIAFZha9yvQ1nzZfZlhtVpGQmgxtXg=="
1321 }, 1310 },
1322 "vscode-languageclient": { 1311 "vscode-languageclient": {
1323 "version": "5.3.0-next.4", 1312 "version": "5.3.0-next.6",
1324 "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-5.3.0-next.4.tgz", 1313 "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-5.3.0-next.6.tgz",
1325 "integrity": "sha512-RODuzXErVpJRSgHv+Xei8fwQtZ/iZOWPCqlLl07NTtkzgTAepJf9r4EioZVuTviGJ5DEJ9xs0bjrit8shKtW6Q==", 1314 "integrity": "sha512-DxT8+gkenjCjJV6ArcP75/AQfx6HP6m6kHIbacPCpffMeoE1YMLKj6ZixA9J87yr0fMtBmqumLmDeGe7MIF2bw==",
1326 "requires": { 1315 "requires": {
1327 "semver": "^5.5.0", 1316 "semver": "^5.5.0",
1328 "vscode-languageserver-protocol": "3.15.0-next.4" 1317 "vscode-languageserver-protocol": "^3.15.0-next.6"
1329 } 1318 }
1330 }, 1319 },
1331 "vscode-languageserver-protocol": { 1320 "vscode-languageserver-protocol": {
1332 "version": "3.15.0-next.4", 1321 "version": "3.15.0-next.6",
1333 "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.4.tgz", 1322 "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.6.tgz",
1334 "integrity": "sha512-4AgisQ8GWa3irdRu3/UNr3brcSSm0oobmoV1eSOnV7JM32lYyXDnSKB7RuTTXvaAjD/0xQJLEGhkyGHS5gbywA==", 1323 "integrity": "sha512-/yDpYlWyNs26mM23mT73xmOFsh1iRfgZfBdHmfAxwDKwpQKLoOSqVidtYfxlK/pD3IEKGcAVnT4WXTsguxxAMQ==",
1335 "requires": { 1324 "requires": {
1336 "vscode-jsonrpc": "^4.1.0-next.1", 1325 "vscode-jsonrpc": "^4.1.0-next.2",
1337 "vscode-languageserver-types": "3.15.0-next.1" 1326 "vscode-languageserver-types": "^3.15.0-next.2"
1338 } 1327 }
1339 }, 1328 },
1340 "vscode-languageserver-types": { 1329 "vscode-languageserver-types": {
1341 "version": "3.15.0-next.1", 1330 "version": "3.15.0-next.2",
1342 "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.1.tgz", 1331 "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.2.tgz",
1343 "integrity": "sha512-R0kzmaI8gOGEoU7b9huYQAzgZzRQ/5Q8HKjsIUdfz0MjXcBZ4tr1ik1So1p1O5kGrI1VTCd22Fw/wI7ECGoIPw==" 1332 "integrity": "sha512-2JkrMWWUi2rlVLSo9OFR2PIGUzdiowEM8NgNYiwLKnXTjpwpjjIrJbNNxDik7Rv4oo9KtikcFQZKXbrKilL/MQ=="
1344 }, 1333 },
1345 "vscode-test": { 1334 "vscode-test": {
1346 "version": "0.1.5", 1335 "version": "0.4.3",
1347 "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.1.5.tgz", 1336 "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz",
1348 "integrity": "sha512-s+lbF1Dtasc0yXVB9iQTexBe2JK6HJAUJe3fWezHKIjq+xRw5ZwCMEMBaonFIPy7s95qg2HPTRDR5W4h4kbxGw==", 1337 "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==",
1349 "dev": true, 1338 "dev": true,
1350 "requires": { 1339 "requires": {
1351 "http-proxy-agent": "^2.1.0", 1340 "http-proxy-agent": "^2.1.0",
diff --git a/editors/code/package.json b/editors/code/package.json
index 060a3a247..808dc5dc1 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -25,7 +25,7 @@
25 "lint": "tslint --project .", 25 "lint": "tslint --project .",
26 "test": "node node_modules/vscode/bin/test", 26 "test": "node node_modules/vscode/bin/test",
27 "prettier": "prettier **/*.{json,ts}", 27 "prettier": "prettier **/*.{json,ts}",
28 "travis": "npm run compile && npm run test && npm run lint && npm run prettier -- --check" 28 "travis": "npm run compile && npm run test && npm run lint && npm run prettier -- --write && git diff --exit-code"
29 }, 29 },
30 "prettier": { 30 "prettier": {
31 "tabWidth": 4, 31 "tabWidth": 4,
@@ -36,16 +36,16 @@
36 "vscode-languageclient": "^5.3.0-next.4" 36 "vscode-languageclient": "^5.3.0-next.4"
37 }, 37 },
38 "devDependencies": { 38 "devDependencies": {
39 "@types/mocha": "^5.2.6", 39 "@types/mocha": "^5.2.7",
40 "@types/node": "^10.14.5", 40 "@types/node": "^10.14.13",
41 "@types/seedrandom": "^2.4.28", 41 "@types/seedrandom": "^2.4.28",
42 "prettier": "^1.17.0", 42 "prettier": "^1.18.2",
43 "shx": "^0.3.1", 43 "shx": "^0.3.1",
44 "tslint": "^5.16.0", 44 "tslint": "^5.18.0",
45 "tslint-config-prettier": "^1.18.0", 45 "tslint-config-prettier": "^1.18.0",
46 "typescript": "^3.4.4", 46 "typescript": "^3.5.3",
47 "vsce": "^1.66.0", 47 "vsce": "^1.66.0",
48 "vscode": "^1.1.33" 48 "vscode": "^1.1.35"
49 }, 49 },
50 "activationEvents": [ 50 "activationEvents": [
51 "onLanguage:rust", 51 "onLanguage:rust",
diff --git a/editors/code/src/commands/inlay_hints.ts b/editors/code/src/commands/inlay_hints.ts
index 8154af8dc..3ba9da48b 100644
--- a/editors/code/src/commands/inlay_hints.ts
+++ b/editors/code/src/commands/inlay_hints.ts
@@ -79,12 +79,17 @@ export class HintsUpdater {
79 documentUri: string, 79 documentUri: string,
80 editor: TextEditor 80 editor: TextEditor
81 ): Promise<void> { 81 ): Promise<void> {
82 const newHints = (await this.queryHints(documentUri)) || []; 82 const newHints = await this.queryHints(documentUri);
83 const newDecorations = newHints.map(hint => ({ 83 if (newHints != null) {
84 range: hint.range, 84 const newDecorations = newHints.map(hint => ({
85 renderOptions: { after: { contentText: `: ${hint.label}` } } 85 range: hint.range,
86 })); 86 renderOptions: { after: { contentText: `: ${hint.label}` } }
87 return editor.setDecorations(typeHintDecorationType, newDecorations); 87 }));
88 return editor.setDecorations(
89 typeHintDecorationType,
90 newDecorations
91 );
92 }
88 } 93 }
89 94
90 private async queryHints(documentUri: string): Promise<InlayHint[] | null> { 95 private async queryHints(documentUri: string): Promise<InlayHint[] | null> {