diff --git a/.github/workflows/release_actions.yml b/.github/workflows/release_actions.yml
index 4ccab09cbe..71909ae177 100644
--- a/.github/workflows/release_actions.yml
+++ b/.github/workflows/release_actions.yml
@@ -16,8 +16,4 @@ jobs:
Restart your Zed or head to https://zed.dev/releases/stable/latest to grab it.
- ```md
- # Changelog
-
${{ github.event.release.body }}
- ```
diff --git a/Cargo.lock b/Cargo.lock
index cd92d0003a..fe6a104ef2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -318,9 +318,9 @@ dependencies = [
[[package]]
name = "async-channel"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
dependencies = [
"concurrent-queue",
"event-listener",
@@ -374,7 +374,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
dependencies = [
"async-lock",
- "autocfg 1.1.0",
+ "autocfg",
"blocking",
"futures-lite",
]
@@ -401,7 +401,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
dependencies = [
"async-lock",
- "autocfg 1.1.0",
+ "autocfg",
"cfg-if 1.0.0",
"concurrent-queue",
"futures-lite",
@@ -430,7 +430,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4051e67316bc7eff608fe723df5d32ed639946adcd69e07df41fd42a7b411f1f"
dependencies = [
"async-io",
- "autocfg 1.1.0",
+ "autocfg",
"blocking",
"futures-lite",
]
@@ -452,7 +452,7 @@ checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
dependencies = [
"async-io",
"async-lock",
- "autocfg 1.1.0",
+ "autocfg",
"blocking",
"cfg-if 1.0.0",
"event-listener",
@@ -481,7 +481,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -529,7 +529,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -572,7 +572,7 @@ checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -658,15 +658,6 @@ dependencies = [
"workspace",
]
-[[package]]
-name = "autocfg"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
-dependencies = [
- "autocfg 1.1.0",
-]
-
[[package]]
name = "autocfg"
version = "1.1.0"
@@ -839,7 +830,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
- "syn 2.0.23",
+ "syn 2.0.25",
"which",
]
@@ -1001,7 +992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
dependencies = [
"memchr",
- "regex-automata 0.3.1",
+ "regex-automata 0.3.2",
"serde",
]
@@ -1295,7 +1286,7 @@ dependencies = [
"heck 0.4.1",
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -1362,7 +1353,7 @@ dependencies = [
"sum_tree",
"tempfile",
"thiserror",
- "time 0.3.22",
+ "time 0.3.23",
"tiny_http",
"url",
"util",
@@ -1464,7 +1455,7 @@ dependencies = [
"sha-1 0.9.8",
"sqlx",
"theme",
- "time 0.3.22",
+ "time 0.3.23",
"tokio",
"tokio-tungstenite",
"toml",
@@ -1506,6 +1497,7 @@ dependencies = [
"theme",
"theme_selector",
"util",
+ "vcs_menu",
"workspace",
"zed-actions",
]
@@ -1905,7 +1897,7 @@ version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"cfg-if 1.0.0",
"crossbeam-utils",
"memoffset 0.9.0",
@@ -1994,12 +1986,12 @@ dependencies = [
[[package]]
name = "dashmap"
-version = "5.4.0"
+version = "5.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
+checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
dependencies = [
"cfg-if 1.0.0",
- "hashbrown 0.12.3",
+ "hashbrown 0.14.0",
"lock_api",
"once_cell",
"parking_lot_core 0.9.8",
@@ -2322,9 +2314,9 @@ dependencies = [
[[package]]
name = "equivalent"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "erased-serde"
@@ -2648,7 +2640,7 @@ dependencies = [
"smol",
"sum_tree",
"tempfile",
- "time 0.3.22",
+ "time 0.3.23",
"util",
]
@@ -2798,7 +2790,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -3038,7 +3030,7 @@ dependencies = [
"smol",
"sqlez",
"sum_tree",
- "time 0.3.22",
+ "time 0.3.23",
"tiny-skia",
"usvg",
"util",
@@ -3412,7 +3404,7 @@ version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"hashbrown 0.12.3",
"serde",
]
@@ -3537,7 +3529,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi 0.3.2",
- "rustix 0.38.3",
+ "rustix 0.38.4",
"windows-sys",
]
@@ -4023,7 +4015,7 @@ version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"scopeguard",
]
@@ -4127,7 +4119,7 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"rawpointer",
]
@@ -4190,7 +4182,7 @@ version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -4199,7 +4191,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -4251,7 +4243,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -4513,18 +4505,17 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-bigint-dig"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480"
+checksum = "f9bc3e36fd683e004fd59c64a425e0e991616f5a8b617c3b9a933a93c168facc"
dependencies = [
- "autocfg 0.1.8",
"byteorder",
"lazy_static",
"libm",
@@ -4553,7 +4544,7 @@ version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-traits",
]
@@ -4563,7 +4554,7 @@ version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-integer",
"num-traits",
]
@@ -4574,7 +4565,7 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-integer",
"num-traits",
]
@@ -4585,7 +4576,7 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"libm",
]
@@ -4742,7 +4733,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -5030,7 +5021,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -5059,16 +5050,16 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "plist"
-version = "1.4.3"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
+checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06"
dependencies = [
"base64 0.21.2",
"indexmap 1.9.3",
"line-wrap",
"quick-xml",
"serde",
- "time 0.3.22",
+ "time 0.3.23",
]
[[package]]
@@ -5127,7 +5118,7 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"bitflags 1.3.2",
"cfg-if 1.0.0",
"concurrent-queue",
@@ -5183,7 +5174,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92139198957b410250d43fad93e630d956499a625c527eda65175c8680f83387"
dependencies = [
"proc-macro2",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -5231,9 +5222,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.63"
+version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
dependencies = [
"unicode-ident",
]
@@ -5502,9 +5493,9 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.28.2"
+version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51"
dependencies = [
"memchr",
]
@@ -5742,8 +5733,8 @@ checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
dependencies = [
"aho-corasick 1.0.2",
"memchr",
- "regex-automata 0.3.1",
- "regex-syntax 0.7.3",
+ "regex-automata 0.3.2",
+ "regex-syntax 0.7.4",
]
[[package]]
@@ -5757,13 +5748,13 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9aaecc05d5c4b5f7da074b9a0d1a0867e71fd36e7fc0482d8bcfe8e8fc56290"
+checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf"
dependencies = [
"aho-corasick 1.0.2",
"memchr",
- "regex-syntax 0.7.3",
+ "regex-syntax 0.7.4",
]
[[package]]
@@ -5774,9 +5765,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
[[package]]
name = "region"
@@ -6054,7 +6045,7 @@ dependencies = [
"proc-macro2",
"quote",
"rust-embed-utils",
- "syn 2.0.23",
+ "syn 2.0.25",
"walkdir",
]
@@ -6140,9 +6131,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.3"
+version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
dependencies = [
"bitflags 2.3.3",
"errno 0.3.1",
@@ -6346,7 +6337,7 @@ dependencies = [
"serde_json",
"sqlx",
"thiserror",
- "time 0.3.22",
+ "time 0.3.23",
"tracing",
"url",
"uuid 1.4.0",
@@ -6374,7 +6365,7 @@ dependencies = [
"rust_decimal",
"sea-query-derive",
"serde_json",
- "time 0.3.22",
+ "time 0.3.23",
"uuid 1.4.0",
]
@@ -6389,7 +6380,7 @@ dependencies = [
"sea-query",
"serde_json",
"sqlx",
- "time 0.3.22",
+ "time 0.3.23",
"uuid 1.4.0",
]
@@ -6511,22 +6502,22 @@ checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99"
[[package]]
name = "serde"
-version = "1.0.167"
+version = "1.0.171"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7daf513456463b42aa1d94cff7e0c24d682b429f020b9afa4f5ba5c40a22b237"
+checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.167"
+version = "1.0.171"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b69b106b68bc8054f0e974e70d19984040f8a5cf9215ca82626ea4853f82c4b9"
+checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -6581,7 +6572,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -6807,7 +6798,7 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -7000,7 +6991,7 @@ dependencies = [
"sqlx-rt",
"stringprep",
"thiserror",
- "time 0.3.22",
+ "time 0.3.23",
"tokio-stream",
"url",
"uuid 1.4.0",
@@ -7249,9 +7240,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.23"
+version = "2.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737"
+checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
dependencies = [
"proc-macro2",
"quote",
@@ -7319,9 +7310,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "target-lexicon"
-version = "0.12.8"
+version = "0.12.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
+checksum = "df8e77cb757a61f51b947ec4a7e3646efd825b73561db1c232a8ccb639e611a0"
[[package]]
name = "tempdir"
@@ -7339,7 +7330,7 @@ version = "3.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"cfg-if 1.0.0",
"fastrand",
"redox_syscall 0.3.5",
@@ -7505,7 +7496,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -7578,9 +7569,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.22"
+version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
+checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
dependencies = [
"itoa 1.0.8",
"serde",
@@ -7596,9 +7587,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
[[package]]
name = "time-macros"
-version = "0.2.9"
+version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
dependencies = [
"time-core",
]
@@ -7651,7 +7642,7 @@ version = "1.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"backtrace",
"bytes 1.4.0",
"libc",
@@ -7694,7 +7685,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -7899,7 +7890,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
@@ -8483,6 +8474,19 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+[[package]]
+name = "vcs_menu"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "fuzzy",
+ "gpui",
+ "picker",
+ "theme",
+ "util",
+ "workspace",
+]
+
[[package]]
name = "vector_store"
version = "0.1.0"
@@ -8678,7 +8682,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
"wasm-bindgen-shared",
]
@@ -8712,7 +8716,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -8725,9 +8729,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "wasm-encoder"
-version = "0.29.0"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18c41dbd92eaebf3612a39be316540b8377c871cb9bde6b064af962984912881"
+checksum = "b2f8e9778e04cbf44f58acc301372577375a666b966c50b03ef46144f80436a8"
dependencies = [
"leb128",
]
@@ -8949,9 +8953,9 @@ dependencies = [
[[package]]
name = "wast"
-version = "60.0.0"
+version = "61.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd06cc744b536e30387e72a48fdd492105b9c938bb4f415c39c616a7a0a697ad"
+checksum = "dc6b347851b52fd500657d301155c79e8c67595501d179cef87b6f04ebd25ac4"
dependencies = [
"leb128",
"memchr",
@@ -8961,11 +8965,11 @@ dependencies = [
[[package]]
name = "wat"
-version = "1.0.66"
+version = "1.0.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5abe520f0ab205366e9ac7d3e6b2fc71de44e32a2b58f2ec871b6b575bdcea3b"
+checksum = "459e764d27c3ab7beba1ebd617cc025c7e76dea6e7c5ce3189989a970aea3491"
dependencies = [
- "wast 60.0.0",
+ "wast 61.0.0",
]
[[package]]
@@ -9295,9 +9299,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "winnow"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9482fe6ceabdf32f3966bfdd350ba69256a97c30253dc616fe0005af24f164e"
+checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529"
dependencies = [
"memchr",
]
@@ -9601,7 +9605,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.23",
+ "syn 2.0.25",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 2c82120780..983f91081a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -65,6 +65,7 @@ members = [
"crates/util",
"crates/vector_store",
"crates/vim",
+ "crates/vcs_menu",
"crates/workspace",
"crates/welcome",
"crates/xtask",
diff --git a/assets/icons/radix/maximize.svg b/assets/icons/radix/maximize.svg
new file mode 100644
index 0000000000..f37f6a2087
--- /dev/null
+++ b/assets/icons/radix/maximize.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/radix/minimize.svg b/assets/icons/radix/minimize.svg
new file mode 100644
index 0000000000..ec78f152e1
--- /dev/null
+++ b/assets/icons/radix/minimize.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json
index 6fc06198fe..8c3a1f407c 100644
--- a/assets/keymaps/default.json
+++ b/assets/keymaps/default.json
@@ -39,6 +39,7 @@
"cmd-shift-n": "workspace::NewWindow",
"cmd-o": "workspace::Open",
"alt-cmd-o": "projects::OpenRecent",
+ "alt-cmd-b": "branches::OpenRecent",
"ctrl-~": "workspace::NewTerminal",
"ctrl-`": "terminal_panel::ToggleFocus",
"shift-escape": "workspace::ToggleZoom"
diff --git a/assets/keymaps/textmate.json b/assets/keymaps/textmate.json
index 591d6e443f..1f28c05158 100644
--- a/assets/keymaps/textmate.json
+++ b/assets/keymaps/textmate.json
@@ -2,6 +2,7 @@
{
"bindings": {
"cmd-shift-o": "projects::OpenRecent",
+ "cmd-shift-b": "branches::OpenRecent",
"cmd-alt-tab": "project_panel::ToggleFocus"
}
},
diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json
index afee6fcd2e..639daef614 100644
--- a/assets/keymaps/vim.json
+++ b/assets/keymaps/vim.json
@@ -35,8 +35,11 @@
"l": "vim::Right",
"right": "vim::Right",
"$": "vim::EndOfLine",
+ "^": "vim::FirstNonWhitespace",
"shift-g": "vim::EndOfDocument",
"w": "vim::NextWordStart",
+ "{": "vim::StartOfParagraph",
+ "}": "vim::EndOfParagraph",
"shift-w": [
"vim::NextWordStart",
{
@@ -92,7 +95,10 @@
],
"ctrl-o": "pane::GoBack",
"ctrl-]": "editor::GoToDefinition",
- "escape": "editor::Cancel",
+ "escape": [
+ "vim::SwitchMode",
+ "Normal"
+ ],
"0": "vim::StartOfLine", // When no number operator present, use start of line motion
"1": [
"vim::Number",
@@ -165,7 +171,6 @@
"shift-a": "vim::InsertEndOfLine",
"x": "vim::DeleteRight",
"shift-x": "vim::DeleteLeft",
- "^": "vim::FirstNonWhitespace",
"o": "vim::InsertLineBelow",
"shift-o": "vim::InsertLineAbove",
"~": "vim::ChangeCase",
@@ -305,6 +310,10 @@
"vim::PushOperator",
"Replace"
],
+ "ctrl-c": [
+ "vim::SwitchMode",
+ "Normal"
+ ],
"> >": "editor::Indent",
"< <": "editor::Outdent"
}
@@ -321,7 +330,10 @@
"bindings": {
"tab": "vim::Tab",
"enter": "vim::Enter",
- "escape": "editor::Cancel"
+ "escape": [
+ "vim::SwitchMode",
+ "Normal"
+ ]
}
}
]
diff --git a/crates/ai/src/assistant.rs b/crates/ai/src/assistant.rs
index 4d300230e1..35c88486f7 100644
--- a/crates/ai/src/assistant.rs
+++ b/crates/ai/src/assistant.rs
@@ -2061,6 +2061,8 @@ impl ConversationEditor {
let remaining_tokens = self.conversation.read(cx).remaining_tokens()?;
let remaining_tokens_style = if remaining_tokens <= 0 {
&style.no_remaining_tokens
+ } else if remaining_tokens <= 500 {
+ &style.low_remaining_tokens
} else {
&style.remaining_tokens
};
diff --git a/crates/call/src/call.rs b/crates/call/src/call.rs
index 0a8f150194..ed5e560218 100644
--- a/crates/call/src/call.rs
+++ b/crates/call/src/call.rs
@@ -4,7 +4,7 @@ pub mod room;
use std::sync::Arc;
use anyhow::{anyhow, Result};
-use client::{proto, Client, TypedEnvelope, User, UserStore};
+use client::{proto, ClickhouseEvent, Client, TelemetrySettings, TypedEnvelope, User, UserStore};
use collections::HashSet;
use futures::{future::Shared, FutureExt};
use postage::watch;
@@ -198,6 +198,7 @@ impl ActiveCall {
let result = invite.await;
this.update(&mut cx, |this, cx| {
this.pending_invites.remove(&called_user_id);
+ this.report_call_event("invite", cx);
cx.notify();
});
result
@@ -243,21 +244,26 @@ impl ActiveCall {
};
let join = Room::join(&call, self.client.clone(), self.user_store.clone(), cx);
+
cx.spawn(|this, mut cx| async move {
let room = join.await?;
this.update(&mut cx, |this, cx| this.set_room(Some(room.clone()), cx))
.await?;
+ this.update(&mut cx, |this, cx| {
+ this.report_call_event("accept incoming", cx)
+ });
Ok(())
})
}
- pub fn decline_incoming(&mut self) -> Result<()> {
+ pub fn decline_incoming(&mut self, cx: &mut ModelContext) -> Result<()> {
let call = self
.incoming_call
.0
.borrow_mut()
.take()
.ok_or_else(|| anyhow!("no incoming call"))?;
+ self.report_call_event_for_room("decline incoming", call.room_id, cx);
self.client.send(proto::DeclineCall {
room_id: call.room_id,
})?;
@@ -266,6 +272,7 @@ impl ActiveCall {
pub fn hang_up(&mut self, cx: &mut ModelContext) -> Task> {
cx.notify();
+ self.report_call_event("hang up", cx);
if let Some((room, _)) = self.room.take() {
room.update(cx, |room, cx| room.leave(cx))
} else {
@@ -273,12 +280,28 @@ impl ActiveCall {
}
}
+ pub fn toggle_screen_sharing(&self, cx: &mut AppContext) {
+ if let Some(room) = self.room().cloned() {
+ let toggle_screen_sharing = room.update(cx, |room, cx| {
+ if room.is_screen_sharing() {
+ self.report_call_event("disable screen share", cx);
+ Task::ready(room.unshare_screen(cx))
+ } else {
+ self.report_call_event("enable screen share", cx);
+ room.share_screen(cx)
+ }
+ });
+ toggle_screen_sharing.detach_and_log_err(cx);
+ }
+ }
+
pub fn share_project(
&mut self,
project: ModelHandle,
cx: &mut ModelContext,
) -> Task> {
if let Some((room, _)) = self.room.as_ref() {
+ self.report_call_event("share project", cx);
room.update(cx, |room, cx| room.share_project(project, cx))
} else {
Task::ready(Err(anyhow!("no active call")))
@@ -291,6 +314,7 @@ impl ActiveCall {
cx: &mut ModelContext,
) -> Result<()> {
if let Some((room, _)) = self.room.as_ref() {
+ self.report_call_event("unshare project", cx);
room.update(cx, |room, cx| room.unshare_project(project, cx))
} else {
Err(anyhow!("no active call"))
@@ -352,4 +376,19 @@ impl ActiveCall {
pub fn pending_invites(&self) -> &HashSet {
&self.pending_invites
}
+
+ fn report_call_event(&self, operation: &'static str, cx: &AppContext) {
+ if let Some(room) = self.room() {
+ self.report_call_event_for_room(operation, room.read(cx).id(), cx)
+ }
+ }
+
+ fn report_call_event_for_room(&self, operation: &'static str, room_id: u64, cx: &AppContext) {
+ let telemetry = self.client.telemetry();
+ let telemetry_settings = *settings::get::(cx);
+
+ let event = ClickhouseEvent::Call { operation, room_id };
+
+ telemetry.report_clickhouse_event(event, telemetry_settings);
+ }
}
diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs
index bdf677512c..2f742814a8 100644
--- a/crates/cli/src/main.rs
+++ b/crates/cli/src/main.rs
@@ -201,6 +201,7 @@ impl Bundle {
self.zed_version_string()
);
}
+
Self::LocalPath { executable, .. } => {
let executable_parent = executable
.parent()
diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs
index 9c4e187dbc..959f4cc783 100644
--- a/crates/client/src/telemetry.rs
+++ b/crates/client/src/telemetry.rs
@@ -70,6 +70,10 @@ pub enum ClickhouseEvent {
suggestion_accepted: bool,
file_extension: Option,
},
+ Call {
+ operation: &'static str,
+ room_id: u64,
+ },
}
#[cfg(debug_assertions)]
diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs
index 66dc19d690..c32129818f 100644
--- a/crates/collab/src/tests/integration_tests.rs
+++ b/crates/collab/src/tests/integration_tests.rs
@@ -157,7 +157,7 @@ async fn test_basic_calls(
// User C receives the call, but declines it.
let call_c = incoming_call_c.next().await.unwrap().unwrap();
assert_eq!(call_c.calling_user.github_login, "user_b");
- active_call_c.update(cx_c, |call, _| call.decline_incoming().unwrap());
+ active_call_c.update(cx_c, |call, cx| call.decline_incoming(cx).unwrap());
assert!(incoming_call_c.next().await.unwrap().is_none());
deterministic.run_until_parked();
@@ -1080,7 +1080,7 @@ async fn test_calls_on_multiple_connections(
// User B declines the call on one of the two connections, causing both connections
// to stop ringing.
- active_call_b2.update(cx_b2, |call, _| call.decline_incoming().unwrap());
+ active_call_b2.update(cx_b2, |call, cx| call.decline_incoming(cx).unwrap());
deterministic.run_until_parked();
assert!(incoming_call_b1.next().await.unwrap().is_none());
assert!(incoming_call_b2.next().await.unwrap().is_none());
@@ -5945,7 +5945,7 @@ async fn test_contacts(
[("user_b".to_string(), "online", "busy")]
);
- active_call_b.update(cx_b, |call, _| call.decline_incoming().unwrap());
+ active_call_b.update(cx_b, |call, cx| call.decline_incoming(cx).unwrap());
deterministic.run_until_parked();
assert_eq!(
contacts(&client_a, cx_a),
diff --git a/crates/collab/src/tests/randomized_integration_tests.rs b/crates/collab/src/tests/randomized_integration_tests.rs
index f5dfe17d6f..8062a12b83 100644
--- a/crates/collab/src/tests/randomized_integration_tests.rs
+++ b/crates/collab/src/tests/randomized_integration_tests.rs
@@ -365,7 +365,7 @@ async fn apply_client_operation(
}
log::info!("{}: declining incoming call", client.username);
- active_call.update(cx, |call, _| call.decline_incoming())?;
+ active_call.update(cx, |call, cx| call.decline_incoming(cx))?;
}
ClientOperation::LeaveCall => {
diff --git a/crates/collab_ui/Cargo.toml b/crates/collab_ui/Cargo.toml
index f81885c07a..4a38c2691c 100644
--- a/crates/collab_ui/Cargo.toml
+++ b/crates/collab_ui/Cargo.toml
@@ -39,6 +39,7 @@ recent_projects = {path = "../recent_projects"}
settings = { path = "../settings" }
theme = { path = "../theme" }
theme_selector = { path = "../theme_selector" }
+vcs_menu = { path = "../vcs_menu" }
util = { path = "../util" }
workspace = { path = "../workspace" }
zed-actions = {path = "../zed-actions"}
diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs
index 73450e7c7d..6cfc9d8e30 100644
--- a/crates/collab_ui/src/collab_titlebar_item.rs
+++ b/crates/collab_ui/src/collab_titlebar_item.rs
@@ -1,8 +1,5 @@
use crate::{
- branch_list::{build_branch_list, BranchList},
- contact_notification::ContactNotification,
- contacts_popover,
- face_pile::FacePile,
+ contact_notification::ContactNotification, contacts_popover, face_pile::FacePile,
toggle_deafen, toggle_mute, toggle_screen_sharing, LeaveCall, ToggleDeafen, ToggleMute,
ToggleScreenSharing,
};
@@ -27,6 +24,7 @@ use recent_projects::{build_recent_projects, RecentProjects};
use std::{ops::Range, sync::Arc};
use theme::{AvatarStyle, Theme};
use util::ResultExt;
+use vcs_menu::{build_branch_list, BranchList, OpenRecent as ToggleVcsMenu};
use workspace::{FollowNextCollaborator, Workspace, WORKSPACE_DB};
const MAX_PROJECT_NAME_LENGTH: usize = 40;
@@ -37,7 +35,6 @@ actions!(
[
ToggleContactsMenu,
ToggleUserMenu,
- ToggleVcsMenu,
ToggleProjectMenu,
SwitchBranch,
ShareProject,
@@ -229,15 +226,23 @@ impl CollabTitlebarItem {
let mut ret = Flex::row().with_child(
Stack::new()
.with_child(
- MouseEventHandler::::new(0, cx, |mouse_state, _| {
+ MouseEventHandler::::new(0, cx, |mouse_state, cx| {
let style = project_style
.in_state(self.project_popover.is_some())
.style_for(mouse_state);
+ enum RecentProjectsTooltip {}
Label::new(name, style.text.clone())
.contained()
.with_style(style.container)
.aligned()
.left()
+ .with_tooltip::(
+ 0,
+ "Recent projects".into(),
+ Some(Box::new(recent_projects::OpenRecent)),
+ theme.tooltip.clone(),
+ cx,
+ )
.into_any_named("title-project-name")
})
.with_cursor_style(CursorStyle::PointingHand)
@@ -264,7 +269,8 @@ impl CollabTitlebarItem {
MouseEventHandler::::new(
0,
cx,
- |mouse_state, _| {
+ |mouse_state, cx| {
+ enum BranchPopoverTooltip {}
let style = git_style
.in_state(self.branch_popover.is_some())
.style_for(mouse_state);
@@ -274,6 +280,13 @@ impl CollabTitlebarItem {
.with_margin_right(item_spacing)
.aligned()
.left()
+ .with_tooltip::(
+ 0,
+ "Recent branches".into(),
+ Some(Box::new(ToggleVcsMenu)),
+ theme.tooltip.clone(),
+ cx,
+ )
.into_any_named("title-project-branch")
},
)
diff --git a/crates/collab_ui/src/collab_ui.rs b/crates/collab_ui/src/collab_ui.rs
index 26d9c70a43..3f5ca17a20 100644
--- a/crates/collab_ui/src/collab_ui.rs
+++ b/crates/collab_ui/src/collab_ui.rs
@@ -1,4 +1,3 @@
-mod branch_list;
mod collab_titlebar_item;
mod contact_finder;
mod contact_list;
@@ -12,7 +11,7 @@ mod sharing_status_indicator;
use call::{ActiveCall, Room};
pub use collab_titlebar_item::{CollabTitlebarItem, ToggleContactsMenu};
-use gpui::{actions, AppContext, Task};
+use gpui::{actions, AppContext};
use std::sync::Arc;
use util::ResultExt;
use workspace::AppState;
@@ -29,7 +28,7 @@ actions!(
);
pub fn init(app_state: &Arc, cx: &mut AppContext) {
- branch_list::init(cx);
+ vcs_menu::init(cx);
collab_titlebar_item::init(cx);
contact_list::init(cx);
contact_finder::init(cx);
@@ -45,16 +44,9 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) {
}
pub fn toggle_screen_sharing(_: &ToggleScreenSharing, cx: &mut AppContext) {
- if let Some(room) = ActiveCall::global(cx).read(cx).room().cloned() {
- let toggle_screen_sharing = room.update(cx, |room, cx| {
- if room.is_screen_sharing() {
- Task::ready(room.unshare_screen(cx))
- } else {
- room.share_screen(cx)
- }
- });
- toggle_screen_sharing.detach_and_log_err(cx);
- }
+ ActiveCall::global(cx).update(cx, |call, cx| {
+ call.toggle_screen_sharing(cx);
+ });
}
pub fn toggle_mute(_: &ToggleMute, cx: &mut AppContext) {
diff --git a/crates/collab_ui/src/incoming_call_notification.rs b/crates/collab_ui/src/incoming_call_notification.rs
index 12fad467e3..4066b5b229 100644
--- a/crates/collab_ui/src/incoming_call_notification.rs
+++ b/crates/collab_ui/src/incoming_call_notification.rs
@@ -99,8 +99,8 @@ impl IncomingCallNotification {
})
.detach_and_log_err(cx);
} else {
- active_call.update(cx, |active_call, _| {
- active_call.decline_incoming().log_err();
+ active_call.update(cx, |active_call, cx| {
+ active_call.decline_incoming(cx).log_err();
});
}
}
diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs
index 798dfbc17f..7b4aa74a80 100644
--- a/crates/db/src/db.rs
+++ b/crates/db/src/db.rs
@@ -41,8 +41,7 @@ const FALLBACK_DB_NAME: &'static str = "FALLBACK_MEMORY_DB";
const DB_FILE_NAME: &'static str = "db.sqlite";
lazy_static::lazy_static! {
- // !!!!!!! CHANGE BACK TO DEFAULT FALSE BEFORE SHIPPING
- static ref ZED_STATELESS: bool = std::env::var("ZED_STATELESS").map_or(false, |v| !v.is_empty());
+ pub static ref ZED_STATELESS: bool = std::env::var("ZED_STATELESS").map_or(false, |v| !v.is_empty());
pub static ref BACKUP_DB_PATH: RwLock