diff options
-rw-r--r-- | Cargo.lock | 264 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop.rs | 19 | ||||
-rw-r--r-- | crates/ra_vfs/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ra_vfs/src/lib.rs | 59 | ||||
-rw-r--r-- | crates/ra_vfs/src/watcher.rs | 96 |
5 files changed, 413 insertions, 27 deletions
diff --git a/Cargo.lock b/Cargo.lock index 3b8df0c8a..fccf8a65e 100644 --- a/Cargo.lock +++ b/Cargo.lock | |||
@@ -87,6 +87,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||
87 | 87 | ||
88 | [[package]] | 88 | [[package]] |
89 | name = "bitflags" | 89 | name = "bitflags" |
90 | version = "0.7.0" | ||
91 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
92 | |||
93 | [[package]] | ||
94 | name = "bitflags" | ||
90 | version = "1.0.4" | 95 | version = "1.0.4" |
91 | source = "registry+https://github.com/rust-lang/crates.io-index" | 96 | source = "registry+https://github.com/rust-lang/crates.io-index" |
92 | 97 | ||
@@ -110,6 +115,15 @@ version = "1.3.1" | |||
110 | source = "registry+https://github.com/rust-lang/crates.io-index" | 115 | source = "registry+https://github.com/rust-lang/crates.io-index" |
111 | 116 | ||
112 | [[package]] | 117 | [[package]] |
118 | name = "bytes" | ||
119 | version = "0.4.11" | ||
120 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
121 | dependencies = [ | ||
122 | "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
123 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
124 | ] | ||
125 | |||
126 | [[package]] | ||
113 | name = "cargo_metadata" | 127 | name = "cargo_metadata" |
114 | version = "0.7.1" | 128 | version = "0.7.1" |
115 | source = "registry+https://github.com/rust-lang/crates.io-index" | 129 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -336,6 +350,16 @@ version = "0.1.2" | |||
336 | source = "registry+https://github.com/rust-lang/crates.io-index" | 350 | source = "registry+https://github.com/rust-lang/crates.io-index" |
337 | 351 | ||
338 | [[package]] | 352 | [[package]] |
353 | name = "filetime" | ||
354 | version = "0.2.4" | ||
355 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
356 | dependencies = [ | ||
357 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
358 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
359 | "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", | ||
360 | ] | ||
361 | |||
362 | [[package]] | ||
339 | name = "flexi_logger" | 363 | name = "flexi_logger" |
340 | version = "0.10.5" | 364 | version = "0.10.5" |
341 | source = "registry+https://github.com/rust-lang/crates.io-index" | 365 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -352,6 +376,24 @@ version = "1.0.6" | |||
352 | source = "registry+https://github.com/rust-lang/crates.io-index" | 376 | source = "registry+https://github.com/rust-lang/crates.io-index" |
353 | 377 | ||
354 | [[package]] | 378 | [[package]] |
379 | name = "fsevent" | ||
380 | version = "0.2.17" | ||
381 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
382 | dependencies = [ | ||
383 | "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||
384 | "fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
385 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
386 | ] | ||
387 | |||
388 | [[package]] | ||
389 | name = "fsevent-sys" | ||
390 | version = "0.1.6" | ||
391 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
392 | dependencies = [ | ||
393 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
394 | ] | ||
395 | |||
396 | [[package]] | ||
355 | name = "fst" | 397 | name = "fst" |
356 | version = "0.3.3" | 398 | version = "0.3.3" |
357 | source = "registry+https://github.com/rust-lang/crates.io-index" | 399 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -375,6 +417,11 @@ version = "0.3.3" | |||
375 | source = "registry+https://github.com/rust-lang/crates.io-index" | 417 | source = "registry+https://github.com/rust-lang/crates.io-index" |
376 | 418 | ||
377 | [[package]] | 419 | [[package]] |
420 | name = "futures" | ||
421 | version = "0.1.25" | ||
422 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
423 | |||
424 | [[package]] | ||
378 | name = "gen_lsp_server" | 425 | name = "gen_lsp_server" |
379 | version = "0.1.0" | 426 | version = "0.1.0" |
380 | dependencies = [ | 427 | dependencies = [ |
@@ -437,6 +484,28 @@ version = "1.0.2" | |||
437 | source = "registry+https://github.com/rust-lang/crates.io-index" | 484 | source = "registry+https://github.com/rust-lang/crates.io-index" |
438 | 485 | ||
439 | [[package]] | 486 | [[package]] |
487 | name = "inotify" | ||
488 | version = "0.6.1" | ||
489 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
490 | dependencies = [ | ||
491 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", | ||
492 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", | ||
493 | "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||
494 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
495 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", | ||
496 | "tokio-io 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", | ||
497 | "tokio-reactor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
498 | ] | ||
499 | |||
500 | [[package]] | ||
501 | name = "inotify-sys" | ||
502 | version = "0.1.3" | ||
503 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
504 | dependencies = [ | ||
505 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
506 | ] | ||
507 | |||
508 | [[package]] | ||
440 | name = "insta" | 509 | name = "insta" |
441 | version = "0.5.2" | 510 | version = "0.5.2" |
442 | source = "registry+https://github.com/rust-lang/crates.io-index" | 511 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -456,6 +525,15 @@ dependencies = [ | |||
456 | ] | 525 | ] |
457 | 526 | ||
458 | [[package]] | 527 | [[package]] |
528 | name = "iovec" | ||
529 | version = "0.1.2" | ||
530 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
531 | dependencies = [ | ||
532 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
533 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
534 | ] | ||
535 | |||
536 | [[package]] | ||
459 | name = "itertools" | 537 | name = "itertools" |
460 | version = "0.8.0" | 538 | version = "0.8.0" |
461 | source = "registry+https://github.com/rust-lang/crates.io-index" | 539 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -474,11 +552,25 @@ version = "0.1.3" | |||
474 | source = "registry+https://github.com/rust-lang/crates.io-index" | 552 | source = "registry+https://github.com/rust-lang/crates.io-index" |
475 | 553 | ||
476 | [[package]] | 554 | [[package]] |
555 | name = "kernel32-sys" | ||
556 | version = "0.2.2" | ||
557 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
558 | dependencies = [ | ||
559 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
560 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
561 | ] | ||
562 | |||
563 | [[package]] | ||
477 | name = "lazy_static" | 564 | name = "lazy_static" |
478 | version = "1.2.0" | 565 | version = "1.2.0" |
479 | source = "registry+https://github.com/rust-lang/crates.io-index" | 566 | source = "registry+https://github.com/rust-lang/crates.io-index" |
480 | 567 | ||
481 | [[package]] | 568 | [[package]] |
569 | name = "lazycell" | ||
570 | version = "1.2.1" | ||
571 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
572 | |||
573 | [[package]] | ||
482 | name = "libc" | 574 | name = "libc" |
483 | version = "0.2.48" | 575 | version = "0.2.48" |
484 | source = "registry+https://github.com/rust-lang/crates.io-index" | 576 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -511,7 +603,7 @@ version = "0.55.1" | |||
511 | source = "registry+https://github.com/rust-lang/crates.io-index" | 603 | source = "registry+https://github.com/rust-lang/crates.io-index" |
512 | dependencies = [ | 604 | dependencies = [ |
513 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", | 605 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", |
514 | "num-derive 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", | 606 | "num-derive 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", |
515 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", | 607 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", |
516 | "serde 1.0.85 (registry+https://github.com/rust-lang/crates.io-index)", | 608 | "serde 1.0.85 (registry+https://github.com/rust-lang/crates.io-index)", |
517 | "serde_derive 1.0.85 (registry+https://github.com/rust-lang/crates.io-index)", | 609 | "serde_derive 1.0.85 (registry+https://github.com/rust-lang/crates.io-index)", |
@@ -554,16 +646,83 @@ version = "0.2.1" | |||
554 | source = "registry+https://github.com/rust-lang/crates.io-index" | 646 | source = "registry+https://github.com/rust-lang/crates.io-index" |
555 | 647 | ||
556 | [[package]] | 648 | [[package]] |
649 | name = "mio" | ||
650 | version = "0.6.16" | ||
651 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
652 | dependencies = [ | ||
653 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||
654 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||
655 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
656 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
657 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
658 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
659 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
660 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
661 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", | ||
662 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
663 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
664 | ] | ||
665 | |||
666 | [[package]] | ||
667 | name = "mio-extras" | ||
668 | version = "2.0.5" | ||
669 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
670 | dependencies = [ | ||
671 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
672 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
673 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", | ||
674 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
675 | ] | ||
676 | |||
677 | [[package]] | ||
678 | name = "miow" | ||
679 | version = "0.2.1" | ||
680 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
681 | dependencies = [ | ||
682 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
683 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", | ||
684 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
685 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
686 | ] | ||
687 | |||
688 | [[package]] | ||
689 | name = "net2" | ||
690 | version = "0.2.33" | ||
691 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
692 | dependencies = [ | ||
693 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
694 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
695 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
696 | ] | ||
697 | |||
698 | [[package]] | ||
557 | name = "nodrop" | 699 | name = "nodrop" |
558 | version = "0.1.13" | 700 | version = "0.1.13" |
559 | source = "registry+https://github.com/rust-lang/crates.io-index" | 701 | source = "registry+https://github.com/rust-lang/crates.io-index" |
560 | 702 | ||
561 | [[package]] | 703 | [[package]] |
704 | name = "notify" | ||
705 | version = "4.0.7" | ||
706 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
707 | dependencies = [ | ||
708 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", | ||
709 | "filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", | ||
710 | "fsevent 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", | ||
711 | "fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
712 | "inotify 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
713 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
714 | "libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)", | ||
715 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", | ||
716 | "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", | ||
717 | "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", | ||
718 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
719 | ] | ||
720 | |||
721 | [[package]] | ||
562 | name = "num-derive" | 722 | name = "num-derive" |
563 | version = "0.2.3" | 723 | version = "0.2.4" |
564 | source = "registry+https://github.com/rust-lang/crates.io-index" | 724 | source = "registry+https://github.com/rust-lang/crates.io-index" |
565 | dependencies = [ | 725 | dependencies = [ |
566 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
567 | "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", | 726 | "proc-macro2 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", |
568 | "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", | 727 | "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", |
569 | "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", | 728 | "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", |
@@ -726,7 +885,7 @@ dependencies = [ | |||
726 | "ra_syntax 0.1.0", | 885 | "ra_syntax 0.1.0", |
727 | "relative-path 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", | 886 | "relative-path 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
728 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", | 887 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", |
729 | "salsa 0.10.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", | 888 | "salsa 0.10.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)", |
730 | "test_utils 0.1.0", | 889 | "test_utils 0.1.0", |
731 | ] | 890 | ] |
732 | 891 | ||
@@ -849,7 +1008,9 @@ name = "ra_vfs" | |||
849 | version = "0.1.0" | 1008 | version = "0.1.0" |
850 | dependencies = [ | 1009 | dependencies = [ |
851 | "crossbeam-channel 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", | 1010 | "crossbeam-channel 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", |
1011 | "drop_bomb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", | ||
852 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | 1012 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", |
1013 | "notify 4.0.7 (registry+https://github.com/rust-lang/crates.io-index)", | ||
853 | "ra_arena 0.1.0", | 1014 | "ra_arena 0.1.0", |
854 | "relative-path 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", | 1015 | "relative-path 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", |
855 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", | 1016 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", |
@@ -1097,7 +1258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||
1097 | 1258 | ||
1098 | [[package]] | 1259 | [[package]] |
1099 | name = "salsa" | 1260 | name = "salsa" |
1100 | version = "0.10.0-alpha4" | 1261 | version = "0.10.0-alpha5" |
1101 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1102 | dependencies = [ | 1263 | dependencies = [ |
1103 | "derive-new 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", | 1264 | "derive-new 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", |
@@ -1106,13 +1267,13 @@ dependencies = [ | |||
1106 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | 1267 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", |
1107 | "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", | 1268 | "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", |
1108 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", | 1269 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", |
1109 | "salsa-macros 0.10.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)", | 1270 | "salsa-macros 0.10.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)", |
1110 | "smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", | 1271 | "smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", |
1111 | ] | 1272 | ] |
1112 | 1273 | ||
1113 | [[package]] | 1274 | [[package]] |
1114 | name = "salsa-macros" | 1275 | name = "salsa-macros" |
1115 | version = "0.10.0-alpha4" | 1276 | version = "0.10.0-alpha5" |
1116 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1117 | dependencies = [ | 1278 | dependencies = [ |
1118 | "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", | 1279 | "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", |
@@ -1199,6 +1360,11 @@ dependencies = [ | |||
1199 | ] | 1360 | ] |
1200 | 1361 | ||
1201 | [[package]] | 1362 | [[package]] |
1363 | name = "slab" | ||
1364 | version = "0.4.2" | ||
1365 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1366 | |||
1367 | [[package]] | ||
1202 | name = "slug" | 1368 | name = "slug" |
1203 | version = "0.1.4" | 1369 | version = "0.1.4" |
1204 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -1382,6 +1548,42 @@ dependencies = [ | |||
1382 | ] | 1548 | ] |
1383 | 1549 | ||
1384 | [[package]] | 1550 | [[package]] |
1551 | name = "tokio-executor" | ||
1552 | version = "0.1.6" | ||
1553 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1554 | dependencies = [ | ||
1555 | "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1556 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1557 | ] | ||
1558 | |||
1559 | [[package]] | ||
1560 | name = "tokio-io" | ||
1561 | version = "0.1.11" | ||
1562 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1563 | dependencies = [ | ||
1564 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1565 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1566 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1567 | ] | ||
1568 | |||
1569 | [[package]] | ||
1570 | name = "tokio-reactor" | ||
1571 | version = "0.1.8" | ||
1572 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1573 | dependencies = [ | ||
1574 | "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1575 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1576 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1577 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1578 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1579 | "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1580 | "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1581 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1582 | "tokio-executor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1583 | "tokio-io 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1584 | ] | ||
1585 | |||
1586 | [[package]] | ||
1385 | name = "tools" | 1587 | name = "tools" |
1386 | version = "0.1.0" | 1588 | version = "0.1.0" |
1387 | dependencies = [ | 1589 | dependencies = [ |
@@ -1557,6 +1759,11 @@ dependencies = [ | |||
1557 | 1759 | ||
1558 | [[package]] | 1760 | [[package]] |
1559 | name = "winapi" | 1761 | name = "winapi" |
1762 | version = "0.2.8" | ||
1763 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1764 | |||
1765 | [[package]] | ||
1766 | name = "winapi" | ||
1560 | version = "0.3.6" | 1767 | version = "0.3.6" |
1561 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1562 | dependencies = [ | 1769 | dependencies = [ |
@@ -1565,6 +1772,11 @@ dependencies = [ | |||
1565 | ] | 1772 | ] |
1566 | 1773 | ||
1567 | [[package]] | 1774 | [[package]] |
1775 | name = "winapi-build" | ||
1776 | version = "0.1.1" | ||
1777 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1778 | |||
1779 | [[package]] | ||
1568 | name = "winapi-i686-pc-windows-gnu" | 1780 | name = "winapi-i686-pc-windows-gnu" |
1569 | version = "0.4.0" | 1781 | version = "0.4.0" |
1570 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1782 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -1583,6 +1795,15 @@ version = "0.4.0" | |||
1583 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1795 | source = "registry+https://github.com/rust-lang/crates.io-index" |
1584 | 1796 | ||
1585 | [[package]] | 1797 | [[package]] |
1798 | name = "ws2_32-sys" | ||
1799 | version = "0.2.1" | ||
1800 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
1801 | dependencies = [ | ||
1802 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1803 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||
1804 | ] | ||
1805 | |||
1806 | [[package]] | ||
1586 | name = "yaml-rust" | 1807 | name = "yaml-rust" |
1587 | version = "0.4.2" | 1808 | version = "0.4.2" |
1588 | source = "registry+https://github.com/rust-lang/crates.io-index" | 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" |
@@ -1602,10 +1823,12 @@ dependencies = [ | |||
1602 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" | 1823 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" |
1603 | "checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a" | 1824 | "checksum bit-set 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f1efcc46c18245a69c38fcc5cc650f16d3a59d034f3106e9ed63748f695730a" |
1604 | "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf" | 1825 | "checksum bit-vec 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4440d5cb623bb7390ae27fec0bb6c61111969860f8e3ae198bfa0663645e67cf" |
1826 | "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" | ||
1605 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" | 1827 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" |
1606 | "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" | 1828 | "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" |
1607 | "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" | 1829 | "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" |
1608 | "checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" | 1830 | "checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" |
1831 | "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" | ||
1609 | "checksum cargo_metadata 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "585784cac9b05c93a53b17a0b24a5cdd1dfdda5256f030e089b549d2390cc720" | 1832 | "checksum cargo_metadata 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "585784cac9b05c93a53b17a0b24a5cdd1dfdda5256f030e089b549d2390cc720" |
1610 | "checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749" | 1833 | "checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749" |
1611 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" | 1834 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" |
@@ -1633,11 +1856,15 @@ dependencies = [ | |||
1633 | "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" | 1856 | "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" |
1634 | "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" | 1857 | "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" |
1635 | "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" | 1858 | "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" |
1859 | "checksum filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a2df5c1a8c4be27e7707789dc42ae65976e60b394afd293d1419ab915833e646" | ||
1636 | "checksum flexi_logger 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bbd731387787f54fa333fa426e173fe42ea3d1123636b2b27ad802025fc5d182" | 1860 | "checksum flexi_logger 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bbd731387787f54fa333fa426e173fe42ea3d1123636b2b27ad802025fc5d182" |
1637 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" | 1861 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" |
1862 | "checksum fsevent 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "c4bbbf71584aeed076100b5665ac14e3d85eeb31fdbb45fbd41ef9a682b5ec05" | ||
1863 | "checksum fsevent-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1a772d36c338d07a032d5375a36f15f9a7043bf0cb8ce7cee658e037c6032874" | ||
1638 | "checksum fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "db72126ca7dff566cdbbdd54af44668c544897d9d3862b198141f176f1238bdf" | 1864 | "checksum fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "db72126ca7dff566cdbbdd54af44668c544897d9d3862b198141f176f1238bdf" |
1639 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" | 1865 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" |
1640 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" | 1866 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" |
1867 | "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" | ||
1641 | "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" | 1868 | "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" |
1642 | "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" | 1869 | "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" |
1643 | "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" | 1870 | "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" |
@@ -1645,11 +1872,16 @@ dependencies = [ | |||
1645 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" | 1872 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" |
1646 | "checksum im 12.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0627d417829c1d763d602687634869f254fc79f7e22dea6c824dab993db857e4" | 1873 | "checksum im 12.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0627d417829c1d763d602687634869f254fc79f7e22dea6c824dab993db857e4" |
1647 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" | 1874 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" |
1875 | "checksum inotify 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40b54539f3910d6f84fbf9a643efd6e3aa6e4f001426c0329576128255994718" | ||
1876 | "checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0" | ||
1648 | "checksum insta 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6ff57d9cbc4664b54a972c321155c7703794bc0f5c9944f29c36f40d10d626f3" | 1877 | "checksum insta 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6ff57d9cbc4664b54a972c321155c7703794bc0f5c9944f29c36f40d10d626f3" |
1878 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" | ||
1649 | "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" | 1879 | "checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358" |
1650 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" | 1880 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" |
1651 | "checksum join_to_string 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc7a5290e8c2606ce2be49f456d50f69173cb96d1541e4f66e34ac8b331a98f" | 1881 | "checksum join_to_string 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc7a5290e8c2606ce2be49f456d50f69173cb96d1541e4f66e34ac8b331a98f" |
1882 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" | ||
1652 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" | 1883 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" |
1884 | "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" | ||
1653 | "checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047" | 1885 | "checksum libc 0.2.48 (registry+https://github.com/rust-lang/crates.io-index)" = "e962c7641008ac010fa60a7dfdc1712449f29c44ef2d4702394aea943ee75047" |
1654 | "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" | 1886 | "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" |
1655 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" | 1887 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" |
@@ -1660,8 +1892,13 @@ dependencies = [ | |||
1660 | "checksum memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e1dd4eaac298c32ce07eb6ed9242eda7d82955b9170b7d6db59b2e02cc63fcb8" | 1892 | "checksum memchr 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e1dd4eaac298c32ce07eb6ed9242eda7d82955b9170b7d6db59b2e02cc63fcb8" |
1661 | "checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff" | 1893 | "checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff" |
1662 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" | 1894 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" |
1895 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" | ||
1896 | "checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" | ||
1897 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" | ||
1898 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" | ||
1663 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" | 1899 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" |
1664 | "checksum num-derive 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8af1847c907c2f04d7bfd572fb25bbb4385c637fe5be163cf2f8c5d778fe1e7d" | 1900 | "checksum notify 4.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c968cf37cf949114b00d51b0b23536d1c3a4a3963767cf4c969c65a6af78dc7d" |
1901 | "checksum num-derive 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d9fe8fcafd1b86a37ce8a1cfa15ae504817e0c8c2e7ad42767371461ac1d316d" | ||
1665 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" | 1902 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" |
1666 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" | 1903 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" |
1667 | "checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238" | 1904 | "checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238" |
@@ -1704,8 +1941,8 @@ dependencies = [ | |||
1704 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" | 1941 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" |
1705 | "checksum rusty-fork 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9591f190d2852720b679c21f66ad929f9f1d7bb09d1193c26167586029d8489c" | 1942 | "checksum rusty-fork 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9591f190d2852720b679c21f66ad929f9f1d7bb09d1193c26167586029d8489c" |
1706 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" | 1943 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" |
1707 | "checksum salsa 0.10.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)" = "3f442595eae948da8fbb2aa1e13940d9d2d70031753a27a5d1434f91b706ff12" | 1944 | "checksum salsa 0.10.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)" = "8b5e2535d707dc5ced81106d3b71d806cfeef8a6e8a567472fde7ffd56b770dd" |
1708 | "checksum salsa-macros 0.10.0-alpha4 (registry+https://github.com/rust-lang/crates.io-index)" = "2e6c1a1bee4eb44881438e80c1a26db1c3b957b6cc51765615d429019babdec2" | 1945 | "checksum salsa-macros 0.10.0-alpha5 (registry+https://github.com/rust-lang/crates.io-index)" = "e7c5da4c649f6d4fc1864fcd9a379b1f7c6d570b278559c84a6e15981c949cc6" |
1709 | "checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" | 1946 | "checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" |
1710 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" | 1947 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" |
1711 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" | 1948 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" |
@@ -1715,6 +1952,7 @@ dependencies = [ | |||
1715 | "checksum serde_json 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "4b90a9fbe1211e57d3e1c15670f1cb00802988fb23a1a4aad7a2b63544f1920e" | 1952 | "checksum serde_json 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "4b90a9fbe1211e57d3e1c15670f1cb00802988fb23a1a4aad7a2b63544f1920e" |
1716 | "checksum serde_yaml 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0887a8e097a69559b56aa2526bf7aff7c3048cf627dff781f0b56a6001534593" | 1953 | "checksum serde_yaml 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0887a8e097a69559b56aa2526bf7aff7c3048cf627dff781f0b56a6001534593" |
1717 | "checksum sha-1 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9d1f3b5de8a167ab06834a7c883bd197f2191e1dda1a22d9ccfeedbf9aded" | 1954 | "checksum sha-1 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9d1f3b5de8a167ab06834a7c883bd197f2191e1dda1a22d9ccfeedbf9aded" |
1955 | "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" | ||
1718 | "checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" | 1956 | "checksum slug 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" |
1719 | "checksum smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "88aea073965ab29f6edb5493faf96ad662fb18aa9eeb186a3b7057951605ed15" | 1957 | "checksum smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "88aea073965ab29f6edb5493faf96ad662fb18aa9eeb186a3b7057951605ed15" |
1720 | "checksum smol_str 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9af1035bc5d742ab6b7ab16713e41cc2ffe78cb474f6f43cd696b2d16052007e" | 1958 | "checksum smol_str 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9af1035bc5d742ab6b7ab16713e41cc2ffe78cb474f6f43cd696b2d16052007e" |
@@ -1733,6 +1971,9 @@ dependencies = [ | |||
1733 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" | 1971 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" |
1734 | "checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" | 1972 | "checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" |
1735 | "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" | 1973 | "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" |
1974 | "checksum tokio-executor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30c6dbf2d1ad1de300b393910e8a3aa272b724a400b6531da03eed99e329fbf0" | ||
1975 | "checksum tokio-io 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b53aeb9d3f5ccf2ebb29e19788f96987fa1355f8fe45ea193928eaaaf3ae820f" | ||
1976 | "checksum tokio-reactor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "afbcdb0f0d2a1e4c440af82d7bbf0bf91a8a8c0575bcd20c05d15be7e9d3a02f" | ||
1736 | "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" | 1977 | "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" |
1737 | "checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" | 1978 | "checksum ucd-trie 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "71a9c5b1fe77426cf144cc30e49e955270f5086e31a6441dfa8b32efc09b9d77" |
1738 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" | 1979 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" |
@@ -1757,8 +1998,11 @@ dependencies = [ | |||
1757 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" | 1998 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" |
1758 | "checksum wait-timeout 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b9f3bf741a801531993db6478b95682117471f76916f5e690dd8d45395b09349" | 1999 | "checksum wait-timeout 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b9f3bf741a801531993db6478b95682117471f76916f5e690dd8d45395b09349" |
1759 | "checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" | 2000 | "checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" |
2001 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" | ||
1760 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" | 2002 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" |
2003 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" | ||
1761 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | 2004 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" |
1762 | "checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" | 2005 | "checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" |
1763 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | 2006 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" |
2007 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" | ||
1764 | "checksum yaml-rust 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "95acf0db5515d07da9965ec0e0ba6cc2d825e2caeb7303b66ca441729801254e" | 2008 | "checksum yaml-rust 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "95acf0db5515d07da9965ec0e0ba6cc2d825e2caeb7303b66ca441729801254e" |
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index ddd20a41f..e5a0603d1 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs | |||
@@ -11,7 +11,7 @@ use gen_lsp_server::{ | |||
11 | }; | 11 | }; |
12 | use lsp_types::NumberOrString; | 12 | use lsp_types::NumberOrString; |
13 | use ra_ide_api::{Canceled, FileId, LibraryData}; | 13 | use ra_ide_api::{Canceled, FileId, LibraryData}; |
14 | use ra_vfs::VfsTask; | 14 | use ra_vfs::{VfsTask, WatcherChange}; |
15 | use rustc_hash::FxHashSet; | 15 | use rustc_hash::FxHashSet; |
16 | use serde::{de::DeserializeOwned, Serialize}; | 16 | use serde::{de::DeserializeOwned, Serialize}; |
17 | use threadpool::ThreadPool; | 17 | use threadpool::ThreadPool; |
@@ -113,6 +113,7 @@ enum Event { | |||
113 | Msg(RawMessage), | 113 | Msg(RawMessage), |
114 | Task(Task), | 114 | Task(Task), |
115 | Vfs(VfsTask), | 115 | Vfs(VfsTask), |
116 | Watcher(WatcherChange), | ||
116 | Lib(LibraryData), | 117 | Lib(LibraryData), |
117 | } | 118 | } |
118 | 119 | ||
@@ -149,6 +150,7 @@ impl fmt::Debug for Event { | |||
149 | Event::Task(it) => fmt::Debug::fmt(it, f), | 150 | Event::Task(it) => fmt::Debug::fmt(it, f), |
150 | Event::Vfs(it) => fmt::Debug::fmt(it, f), | 151 | Event::Vfs(it) => fmt::Debug::fmt(it, f), |
151 | Event::Lib(it) => fmt::Debug::fmt(it, f), | 152 | Event::Lib(it) => fmt::Debug::fmt(it, f), |
153 | Event::Watcher(it) => fmt::Debug::fmt(it, f), | ||
152 | } | 154 | } |
153 | } | 155 | } |
154 | } | 156 | } |
@@ -183,6 +185,10 @@ fn main_loop_inner( | |||
183 | Ok(task) => Event::Vfs(task), | 185 | Ok(task) => Event::Vfs(task), |
184 | Err(RecvError) => bail!("vfs died"), | 186 | Err(RecvError) => bail!("vfs died"), |
185 | }, | 187 | }, |
188 | recv(state.vfs.read().change_receiver()) -> change => match change { | ||
189 | Ok(change) => Event::Watcher(change), | ||
190 | Err(RecvError) => bail!("vfs watcher died"), | ||
191 | }, | ||
186 | recv(libdata_receiver) -> data => Event::Lib(data.unwrap()) | 192 | recv(libdata_receiver) -> data => Event::Lib(data.unwrap()) |
187 | }; | 193 | }; |
188 | log::info!("loop_turn = {:?}", event); | 194 | log::info!("loop_turn = {:?}", event); |
@@ -194,6 +200,10 @@ fn main_loop_inner( | |||
194 | state.vfs.write().handle_task(task); | 200 | state.vfs.write().handle_task(task); |
195 | state_changed = true; | 201 | state_changed = true; |
196 | } | 202 | } |
203 | Event::Watcher(change) => { | ||
204 | state.vfs.write().handle_change(change); | ||
205 | state_changed = true; | ||
206 | } | ||
197 | Event::Lib(lib) => { | 207 | Event::Lib(lib) => { |
198 | feedback(internal_mode, "library loaded", msg_sender); | 208 | feedback(internal_mode, "library loaded", msg_sender); |
199 | state.add_lib(lib); | 209 | state.add_lib(lib); |
@@ -365,7 +375,7 @@ fn on_notification( | |||
365 | if let Some(file_id) = state | 375 | if let Some(file_id) = state |
366 | .vfs | 376 | .vfs |
367 | .write() | 377 | .write() |
368 | .add_file_overlay(&path, params.text_document.text) | 378 | .add_file_overlay(&path, Some(params.text_document.text)) |
369 | { | 379 | { |
370 | subs.add_sub(FileId(file_id.0.into())); | 380 | subs.add_sub(FileId(file_id.0.into())); |
371 | } | 381 | } |
@@ -384,7 +394,10 @@ fn on_notification( | |||
384 | .pop() | 394 | .pop() |
385 | .ok_or_else(|| format_err!("empty changes"))? | 395 | .ok_or_else(|| format_err!("empty changes"))? |
386 | .text; | 396 | .text; |
387 | state.vfs.write().change_file_overlay(path.as_path(), text); | 397 | state |
398 | .vfs | ||
399 | .write() | ||
400 | .change_file_overlay(path.as_path(), Some(text)); | ||
388 | return Ok(()); | 401 | return Ok(()); |
389 | } | 402 | } |
390 | Err(not) => not, | 403 | Err(not) => not, |
diff --git a/crates/ra_vfs/Cargo.toml b/crates/ra_vfs/Cargo.toml index e637063c9..f7a972e91 100644 --- a/crates/ra_vfs/Cargo.toml +++ b/crates/ra_vfs/Cargo.toml | |||
@@ -10,6 +10,8 @@ relative-path = "0.4.0" | |||
10 | rustc-hash = "1.0" | 10 | rustc-hash = "1.0" |
11 | crossbeam-channel = "0.3.5" | 11 | crossbeam-channel = "0.3.5" |
12 | log = "0.4.6" | 12 | log = "0.4.6" |
13 | notify = "4" | ||
14 | drop_bomb = "0.1.0" | ||
13 | 15 | ||
14 | thread_worker = { path = "../thread_worker" } | 16 | thread_worker = { path = "../thread_worker" } |
15 | ra_arena = { path = "../ra_arena" } | 17 | ra_arena = { path = "../ra_arena" } |
diff --git a/crates/ra_vfs/src/lib.rs b/crates/ra_vfs/src/lib.rs index cdea18d73..5336822b3 100644 --- a/crates/ra_vfs/src/lib.rs +++ b/crates/ra_vfs/src/lib.rs | |||
@@ -14,26 +14,26 @@ | |||
14 | //! which are watched for changes. Typically, there will be a root for each | 14 | //! which are watched for changes. Typically, there will be a root for each |
15 | //! Cargo package. | 15 | //! Cargo package. |
16 | mod io; | 16 | mod io; |
17 | mod watcher; | ||
17 | 18 | ||
18 | use std::{ | 19 | use std::{ |
19 | fmt, | ||
20 | mem, | ||
21 | thread, | ||
22 | cmp::Reverse, | 20 | cmp::Reverse, |
23 | path::{Path, PathBuf}, | ||
24 | ffi::OsStr, | 21 | ffi::OsStr, |
22 | fmt, fs, mem, | ||
23 | path::{Path, PathBuf}, | ||
25 | sync::Arc, | 24 | sync::Arc, |
26 | fs, | 25 | thread, |
27 | }; | 26 | }; |
28 | 27 | ||
29 | use rustc_hash::{FxHashMap, FxHashSet}; | ||
30 | use relative_path::RelativePathBuf; | ||
31 | use crossbeam_channel::Receiver; | 28 | use crossbeam_channel::Receiver; |
32 | use walkdir::DirEntry; | 29 | use ra_arena::{impl_arena_id, Arena, RawId}; |
30 | use relative_path::RelativePathBuf; | ||
31 | use rustc_hash::{FxHashMap, FxHashSet}; | ||
33 | use thread_worker::WorkerHandle; | 32 | use thread_worker::WorkerHandle; |
34 | use ra_arena::{Arena, RawId, impl_arena_id}; | 33 | use walkdir::DirEntry; |
35 | 34 | ||
36 | pub use crate::io::TaskResult as VfsTask; | 35 | pub use crate::io::TaskResult as VfsTask; |
36 | pub use crate::watcher::{Watcher, WatcherChange}; | ||
37 | 37 | ||
38 | /// `RootFilter` is a predicate that checks if a file can belong to a root. If | 38 | /// `RootFilter` is a predicate that checks if a file can belong to a root. If |
39 | /// several filters match a file (nested dirs), the most nested one wins. | 39 | /// several filters match a file (nested dirs), the most nested one wins. |
@@ -85,6 +85,7 @@ pub struct Vfs { | |||
85 | pending_changes: Vec<VfsChange>, | 85 | pending_changes: Vec<VfsChange>, |
86 | worker: io::Worker, | 86 | worker: io::Worker, |
87 | worker_handle: WorkerHandle, | 87 | worker_handle: WorkerHandle, |
88 | watcher: Watcher, | ||
88 | } | 89 | } |
89 | 90 | ||
90 | impl fmt::Debug for Vfs { | 91 | impl fmt::Debug for Vfs { |
@@ -97,12 +98,15 @@ impl Vfs { | |||
97 | pub fn new(mut roots: Vec<PathBuf>) -> (Vfs, Vec<VfsRoot>) { | 98 | pub fn new(mut roots: Vec<PathBuf>) -> (Vfs, Vec<VfsRoot>) { |
98 | let (worker, worker_handle) = io::start(); | 99 | let (worker, worker_handle) = io::start(); |
99 | 100 | ||
101 | let watcher = Watcher::new().unwrap(); // TODO return Result? | ||
102 | |||
100 | let mut res = Vfs { | 103 | let mut res = Vfs { |
101 | roots: Arena::default(), | 104 | roots: Arena::default(), |
102 | files: Arena::default(), | 105 | files: Arena::default(), |
103 | root2files: FxHashMap::default(), | 106 | root2files: FxHashMap::default(), |
104 | worker, | 107 | worker, |
105 | worker_handle, | 108 | worker_handle, |
109 | watcher, | ||
106 | pending_changes: Vec::new(), | 110 | pending_changes: Vec::new(), |
107 | }; | 111 | }; |
108 | 112 | ||
@@ -129,6 +133,7 @@ impl Vfs { | |||
129 | filter: Box::new(filter), | 133 | filter: Box::new(filter), |
130 | }; | 134 | }; |
131 | res.worker.inp.send(task).unwrap(); | 135 | res.worker.inp.send(task).unwrap(); |
136 | res.watcher.watch(path).unwrap(); | ||
132 | } | 137 | } |
133 | let roots = res.roots.iter().map(|(id, _)| id).collect(); | 138 | let roots = res.roots.iter().map(|(id, _)| id).collect(); |
134 | (res, roots) | 139 | (res, roots) |
@@ -183,6 +188,10 @@ impl Vfs { | |||
183 | &self.worker.out | 188 | &self.worker.out |
184 | } | 189 | } |
185 | 190 | ||
191 | pub fn change_receiver(&self) -> &Receiver<WatcherChange> { | ||
192 | &self.watcher.change_receiver() | ||
193 | } | ||
194 | |||
186 | pub fn handle_task(&mut self, task: io::TaskResult) { | 195 | pub fn handle_task(&mut self, task: io::TaskResult) { |
187 | let mut files = Vec::new(); | 196 | let mut files = Vec::new(); |
188 | // While we were scanning the root in the backgound, a file might have | 197 | // While we were scanning the root in the backgound, a file might have |
@@ -209,22 +218,41 @@ impl Vfs { | |||
209 | self.pending_changes.push(change); | 218 | self.pending_changes.push(change); |
210 | } | 219 | } |
211 | 220 | ||
212 | pub fn add_file_overlay(&mut self, path: &Path, text: String) -> Option<VfsFile> { | 221 | pub fn handle_change(&mut self, change: WatcherChange) { |
222 | match change { | ||
223 | WatcherChange::Create(path) => { | ||
224 | self.add_file_overlay(&path, None); | ||
225 | } | ||
226 | WatcherChange::Remove(path) => { | ||
227 | self.remove_file_overlay(&path); | ||
228 | } | ||
229 | WatcherChange::Rename(src, dst) => { | ||
230 | self.remove_file_overlay(&src); | ||
231 | self.add_file_overlay(&dst, None); | ||
232 | } | ||
233 | WatcherChange::Write(path) => { | ||
234 | self.change_file_overlay(&path, None); | ||
235 | } | ||
236 | } | ||
237 | } | ||
238 | |||
239 | pub fn add_file_overlay(&mut self, path: &Path, text: Option<String>) -> Option<VfsFile> { | ||
213 | let mut res = None; | 240 | let mut res = None; |
214 | if let Some((root, path, file)) = self.find_root(path) { | 241 | if let Some((root, rel_path, file)) = self.find_root(path) { |
242 | let text = text.unwrap_or_else(|| fs::read_to_string(&path).unwrap_or_default()); | ||
215 | let text = Arc::new(text); | 243 | let text = Arc::new(text); |
216 | let change = if let Some(file) = file { | 244 | let change = if let Some(file) = file { |
217 | res = Some(file); | 245 | res = Some(file); |
218 | self.change_file(file, Arc::clone(&text)); | 246 | self.change_file(file, Arc::clone(&text)); |
219 | VfsChange::ChangeFile { file, text } | 247 | VfsChange::ChangeFile { file, text } |
220 | } else { | 248 | } else { |
221 | let file = self.add_file(root, path.clone(), Arc::clone(&text)); | 249 | let file = self.add_file(root, rel_path.clone(), Arc::clone(&text)); |
222 | res = Some(file); | 250 | res = Some(file); |
223 | VfsChange::AddFile { | 251 | VfsChange::AddFile { |
224 | file, | 252 | file, |
225 | text, | 253 | text, |
226 | root, | 254 | root, |
227 | path, | 255 | path: rel_path, |
228 | } | 256 | } |
229 | }; | 257 | }; |
230 | self.pending_changes.push(change); | 258 | self.pending_changes.push(change); |
@@ -232,8 +260,10 @@ impl Vfs { | |||
232 | res | 260 | res |
233 | } | 261 | } |
234 | 262 | ||
235 | pub fn change_file_overlay(&mut self, path: &Path, new_text: String) { | 263 | pub fn change_file_overlay(&mut self, path: &Path, new_text: Option<String>) { |
236 | if let Some((_root, _path, file)) = self.find_root(path) { | 264 | if let Some((_root, _path, file)) = self.find_root(path) { |
265 | let new_text = | ||
266 | new_text.unwrap_or_else(|| fs::read_to_string(&path).unwrap_or_default()); | ||
237 | let file = file.expect("can't change a file which wasn't added"); | 267 | let file = file.expect("can't change a file which wasn't added"); |
238 | let text = Arc::new(new_text); | 268 | let text = Arc::new(new_text); |
239 | self.change_file(file, Arc::clone(&text)); | 269 | self.change_file(file, Arc::clone(&text)); |
@@ -267,6 +297,7 @@ impl Vfs { | |||
267 | 297 | ||
268 | /// Sutdown the VFS and terminate the background watching thread. | 298 | /// Sutdown the VFS and terminate the background watching thread. |
269 | pub fn shutdown(self) -> thread::Result<()> { | 299 | pub fn shutdown(self) -> thread::Result<()> { |
300 | let _ = self.watcher.shutdown(); | ||
270 | let _ = self.worker.shutdown(); | 301 | let _ = self.worker.shutdown(); |
271 | self.worker_handle.shutdown() | 302 | self.worker_handle.shutdown() |
272 | } | 303 | } |
diff --git a/crates/ra_vfs/src/watcher.rs b/crates/ra_vfs/src/watcher.rs new file mode 100644 index 000000000..cc05f949e --- /dev/null +++ b/crates/ra_vfs/src/watcher.rs | |||
@@ -0,0 +1,96 @@ | |||
1 | use std::{ | ||
2 | path::{Path, PathBuf}, | ||
3 | sync::mpsc, | ||
4 | thread, | ||
5 | time::Duration, | ||
6 | }; | ||
7 | |||
8 | use crossbeam_channel::Receiver; | ||
9 | use drop_bomb::DropBomb; | ||
10 | use notify::{DebouncedEvent, RecommendedWatcher, RecursiveMode, Watcher as NotifyWatcher}; | ||
11 | |||
12 | pub struct Watcher { | ||
13 | receiver: Receiver<WatcherChange>, | ||
14 | watcher: RecommendedWatcher, | ||
15 | thread: thread::JoinHandle<()>, | ||
16 | bomb: DropBomb, | ||
17 | } | ||
18 | |||
19 | #[derive(Debug)] | ||
20 | pub enum WatcherChange { | ||
21 | Create(PathBuf), | ||
22 | Write(PathBuf), | ||
23 | Remove(PathBuf), | ||
24 | Rename(PathBuf, PathBuf), | ||
25 | } | ||
26 | |||
27 | impl WatcherChange { | ||
28 | fn from_debounced_event(ev: DebouncedEvent) -> Option<WatcherChange> { | ||
29 | match ev { | ||
30 | DebouncedEvent::NoticeWrite(_) | ||
31 | | DebouncedEvent::NoticeRemove(_) | ||
32 | | DebouncedEvent::Chmod(_) | ||
33 | | DebouncedEvent::Rescan => { | ||
34 | // ignore | ||
35 | None | ||
36 | } | ||
37 | DebouncedEvent::Create(path) => Some(WatcherChange::Create(path)), | ||
38 | DebouncedEvent::Write(path) => Some(WatcherChange::Write(path)), | ||
39 | DebouncedEvent::Remove(path) => Some(WatcherChange::Remove(path)), | ||
40 | DebouncedEvent::Rename(src, dst) => Some(WatcherChange::Rename(src, dst)), | ||
41 | DebouncedEvent::Error(err, path) => { | ||
42 | // TODO | ||
43 | log::warn!("watch error {}, {:?}", err, path); | ||
44 | None | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | } | ||
49 | |||
50 | impl Watcher { | ||
51 | pub fn new() -> Result<Watcher, Box<std::error::Error>> { | ||
52 | let (input_sender, input_receiver) = mpsc::channel(); | ||
53 | let watcher = notify::watcher(input_sender, Duration::from_millis(250))?; | ||
54 | let (output_sender, output_receiver) = crossbeam_channel::unbounded(); | ||
55 | let thread = thread::spawn(move || loop { | ||
56 | match input_receiver.recv() { | ||
57 | Ok(ev) => { | ||
58 | // forward relevant events only | ||
59 | if let Some(change) = WatcherChange::from_debounced_event(ev) { | ||
60 | output_sender.send(change).unwrap(); | ||
61 | } | ||
62 | } | ||
63 | Err(err) => { | ||
64 | log::debug!("Watcher stopped ({})", err); | ||
65 | break; | ||
66 | } | ||
67 | } | ||
68 | }); | ||
69 | Ok(Watcher { | ||
70 | receiver: output_receiver, | ||
71 | watcher, | ||
72 | thread, | ||
73 | bomb: DropBomb::new(format!("Watcher was not shutdown")), | ||
74 | }) | ||
75 | } | ||
76 | |||
77 | pub fn watch(&mut self, root: impl AsRef<Path>) -> Result<(), Box<std::error::Error>> { | ||
78 | self.watcher.watch(root, RecursiveMode::Recursive)?; | ||
79 | Ok(()) | ||
80 | } | ||
81 | |||
82 | pub fn change_receiver(&self) -> &Receiver<WatcherChange> { | ||
83 | &self.receiver | ||
84 | } | ||
85 | |||
86 | pub fn shutdown(mut self) -> thread::Result<()> { | ||
87 | self.bomb.defuse(); | ||
88 | drop(self.watcher); | ||
89 | let res = self.thread.join(); | ||
90 | match &res { | ||
91 | Ok(()) => log::info!("... Watcher terminated with ok"), | ||
92 | Err(_) => log::error!("... Watcher terminated with err"), | ||
93 | } | ||
94 | res | ||
95 | } | ||
96 | } | ||