From a56d454a0760420899d8c6582bde60e851efcf27 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 10:10:24 -0400 Subject: [PATCH 001/120] added semantic search support for c --- crates/zed/src/languages/c/embedding.scm | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 crates/zed/src/languages/c/embedding.scm diff --git a/crates/zed/src/languages/c/embedding.scm b/crates/zed/src/languages/c/embedding.scm new file mode 100644 index 0000000000..cd1915f62b --- /dev/null +++ b/crates/zed/src/languages/c/embedding.scm @@ -0,0 +1,39 @@ +(declaration + (type_qualifier)? @context + type: (_)? @context + declarator: [ + (function_declarator + declarator: (_) @name) + (pointer_declarator + "*" @context + declarator: (function_declarator + declarator: (_) @name)) + (pointer_declarator + "*" @context + declarator: (pointer_declarator + "*" @context + declarator: (function_declarator + declarator: (_) @name))) + ] +) @item + +(function_definition + (type_qualifier)? @context + type: (_)? @context + declarator: [ + (function_declarator + declarator: (_) @name + ) + (pointer_declarator + "*" @context + declarator: (function_declarator + declarator: (_) @name + )) + (pointer_declarator + "*" @context + declarator: (pointer_declarator + "*" @context + declarator: (function_declarator + declarator: (_) @name))) + ] +) @item From 5eab62858004493879172ff4576ca32ced8e6bea Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 14:33:31 -0400 Subject: [PATCH 002/120] Added go parsing for semantic search, and added preceeding comments on go and rust. Co-authored-by: Alex Co-authored-by: maxbrunsfeld --- crates/language/src/language.rs | 4 -- crates/vector_store/src/parsing.rs | 23 ++++---- crates/zed/src/languages/go/embedding.scm | 24 +++++++++ crates/zed/src/languages/rust/embedding.scm | 58 ++++++++------------- 4 files changed, 55 insertions(+), 54 deletions(-) create mode 100644 crates/zed/src/languages/go/embedding.scm diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index dbd35f0e87..4ec5e88a7e 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -525,7 +525,6 @@ pub struct EmbeddingConfig { pub item_capture_ix: u32, pub name_capture_ix: u32, pub context_capture_ix: Option, - pub extra_context_capture_ix: Option, } struct InjectionConfig { @@ -1246,14 +1245,12 @@ impl Language { let mut item_capture_ix = None; let mut name_capture_ix = None; let mut context_capture_ix = None; - let mut extra_context_capture_ix = None; get_capture_indices( &query, &mut [ ("item", &mut item_capture_ix), ("name", &mut name_capture_ix), ("context", &mut context_capture_ix), - ("context.extra", &mut extra_context_capture_ix), ], ); if let Some((item_capture_ix, name_capture_ix)) = item_capture_ix.zip(name_capture_ix) { @@ -1262,7 +1259,6 @@ impl Language { item_capture_ix, name_capture_ix, context_capture_ix, - extra_context_capture_ix, }); } Ok(self) diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 91dcf699f8..3e697399b1 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -53,7 +53,7 @@ impl CodeContextRetriever { .ok_or_else(|| anyhow!("parsing failed"))?; let mut documents = Vec::new(); - let mut context_spans = Vec::new(); + let mut document_texts = Vec::new(); // Iterate through query matches for mat in self.cursor.matches( @@ -61,11 +61,10 @@ impl CodeContextRetriever { tree.root_node(), content.as_bytes(), ) { - // log::info!("-----MATCH-----"); - let mut name: Vec<&str> = vec![]; let mut item: Option<&str> = None; let mut offset: Option = None; + let mut context_spans: Vec<&str> = vec![]; for capture in mat.captures { if capture.index == embedding_config.item_capture_ix { offset = Some(capture.node.byte_range().start); @@ -79,25 +78,21 @@ impl CodeContextRetriever { if let Some(context_capture_ix) = embedding_config.context_capture_ix { if capture.index == context_capture_ix { if let Some(context) = content.get(capture.node.byte_range()) { - name.push(context); + context_spans.push(context); } } } } if item.is_some() && offset.is_some() && name.len() > 0 { - let context_span = CODE_CONTEXT_TEMPLATE + let item = format!("{}\n{}", context_spans.join("\n"), item.unwrap()); + + let document_text = CODE_CONTEXT_TEMPLATE .replace("", pending_file.relative_path.to_str().unwrap()) .replace("", &pending_file.language.name().to_lowercase()) - .replace("", item.unwrap()); + .replace("", item.as_str()); - let mut truncated_span = context_span.clone(); - truncated_span.truncate(100); - - // log::info!("Name: {:?}", name); - // log::info!("Span: {:?}", truncated_span); - - context_spans.push(context_span); + document_texts.push(document_text); documents.push(Document { name: name.join(" "), offset: offset.unwrap(), @@ -112,7 +107,7 @@ impl CodeContextRetriever { mtime: pending_file.modified_time, documents, }, - context_spans, + document_texts, )); } } diff --git a/crates/zed/src/languages/go/embedding.scm b/crates/zed/src/languages/go/embedding.scm new file mode 100644 index 0000000000..9d8700cdfb --- /dev/null +++ b/crates/zed/src/languages/go/embedding.scm @@ -0,0 +1,24 @@ +( + (comment)* @context + . + (type_declaration + (type_spec + name: (_) @name) + ) @item +) + +( + (comment)* @context + . + (function_declaration + name: (_) @name + ) @item +) + +( + (comment)* @context + . + (method_declaration + name: (_) @name + ) @item +) diff --git a/crates/zed/src/languages/rust/embedding.scm b/crates/zed/src/languages/rust/embedding.scm index ea8bab9f68..3aec101e9f 100644 --- a/crates/zed/src/languages/rust/embedding.scm +++ b/crates/zed/src/languages/rust/embedding.scm @@ -1,36 +1,22 @@ -(struct_item - (visibility_modifier)? @context - "struct" @context - name: (_) @name) @item - -(enum_item - (visibility_modifier)? @context - "enum" @context - name: (_) @name) @item - -(impl_item - "impl" @context - trait: (_)? @name - "for"? @context - type: (_) @name) @item - -(trait_item - (visibility_modifier)? @context - "trait" @context - name: (_) @name) @item - -(function_item - (visibility_modifier)? @context - (function_modifiers)? @context - "fn" @context - name: (_) @name) @item - -(function_signature_item - (visibility_modifier)? @context - (function_modifiers)? @context - "fn" @context - name: (_) @name) @item - -(macro_definition - . "macro_rules!" @context - name: (_) @name) @item +( + (line_comment)* @context + . + [ + (enum_item + name: (_) @name) @item + (struct_item + name: (_) @name) @item + (impl_item + trait: (_)? @name + "for"? @name + type: (_) @name) @item + (trait_item + name: (_) @name) @item + (function_item + name: (_) @name) @item + (macro_definition + name: (_) @name) @item + (function_signature_item + name: (_) @name) @item + ] +) From 0a0e40fb246b3f1e0e8751f24bf008387f223c4b Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 16:34:32 -0400 Subject: [PATCH 003/120] refactored code context retrieval and standardized database migration Co-authored-by: maxbrunsfeld --- Cargo.lock | 2 + crates/vector_store/Cargo.toml | 3 + crates/vector_store/src/db.rs | 134 +++++++++++------ crates/vector_store/src/modal.rs | 2 +- crates/vector_store/src/parsing.rs | 78 +++++----- crates/vector_store/src/vector_store.rs | 140 ++++++++++-------- crates/vector_store/src/vector_store_tests.rs | 21 ++- 7 files changed, 232 insertions(+), 148 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ac6a2ee89..4359659a53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8483,7 +8483,9 @@ dependencies = [ "anyhow", "async-trait", "bincode", + "ctor", "editor", + "env_logger 0.9.3", "futures 0.3.28", "gpui", "isahc", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index 40bff8b95c..8e1dea59fd 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -44,6 +44,9 @@ rpc = { path = "../rpc", features = ["test-support"] } workspace = { path = "../workspace", features = ["test-support"] } settings = { path = "../settings", features = ["test-support"]} tree-sitter-rust = "*" + rand.workspace = true unindent.workspace = true tempdir.workspace = true +ctor.workspace = true +env_logger.workspace = true diff --git a/crates/vector_store/src/db.rs b/crates/vector_store/src/db.rs index a91a1872b5..d3d05f8c62 100644 --- a/crates/vector_store/src/db.rs +++ b/crates/vector_store/src/db.rs @@ -1,20 +1,20 @@ -use std::{ - cmp::Ordering, - collections::HashMap, - path::{Path, PathBuf}, - rc::Rc, - time::SystemTime, -}; - +use crate::{parsing::Document, VECTOR_STORE_VERSION}; use anyhow::{anyhow, Result}; - -use crate::parsing::ParsedFile; -use crate::VECTOR_STORE_VERSION; +use project::Fs; use rpc::proto::Timestamp; use rusqlite::{ params, types::{FromSql, FromSqlResult, ValueRef}, }; +use std::{ + cmp::Ordering, + collections::HashMap, + ops::Range, + path::{Path, PathBuf}, + rc::Rc, + sync::Arc, + time::SystemTime, +}; #[derive(Debug)] pub struct FileRecord { @@ -42,48 +42,88 @@ pub struct VectorDatabase { } impl VectorDatabase { - pub fn new(path: String) -> Result { + pub async fn new(fs: Arc, path: Arc) -> Result { + if let Some(db_directory) = path.parent() { + fs.create_dir(db_directory).await?; + } + let this = Self { - db: rusqlite::Connection::open(path)?, + db: rusqlite::Connection::open(path.as_path())?, }; this.initialize_database()?; Ok(this) } + fn get_existing_version(&self) -> Result { + let mut version_query = self.db.prepare("SELECT version from vector_store_config")?; + version_query + .query_row([], |row| Ok(row.get::<_, i64>(0)?)) + .map_err(|err| anyhow!("version query failed: {err}")) + } + fn initialize_database(&self) -> Result<()> { rusqlite::vtab::array::load_module(&self.db)?; - // This will create the database if it doesnt exist + if self + .get_existing_version() + .map_or(false, |version| version == VECTOR_STORE_VERSION as i64) + { + return Ok(()); + } + + self.db + .execute( + " + DROP TABLE vector_store_config; + DROP TABLE worktrees; + DROP TABLE files; + DROP TABLE documents; + ", + [], + ) + .ok(); // Initialize Vector Databasing Tables self.db.execute( - "CREATE TABLE IF NOT EXISTS worktrees ( + "CREATE TABLE vector_store_config ( + version INTEGER NOT NULL + )", + [], + )?; + + self.db.execute( + "INSERT INTO vector_store_config (version) VALUES (?1)", + params![VECTOR_STORE_VERSION], + )?; + + self.db.execute( + "CREATE TABLE worktrees ( id INTEGER PRIMARY KEY AUTOINCREMENT, absolute_path VARCHAR NOT NULL ); - CREATE UNIQUE INDEX IF NOT EXISTS worktrees_absolute_path ON worktrees (absolute_path); + CREATE UNIQUE INDEX worktrees_absolute_path ON worktrees (absolute_path); ", [], )?; self.db.execute( - "CREATE TABLE IF NOT EXISTS files ( + "CREATE TABLE files ( id INTEGER PRIMARY KEY AUTOINCREMENT, worktree_id INTEGER NOT NULL, relative_path VARCHAR NOT NULL, mtime_seconds INTEGER NOT NULL, mtime_nanos INTEGER NOT NULL, - vector_store_version INTEGER NOT NULL, FOREIGN KEY(worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE )", [], )?; self.db.execute( - "CREATE TABLE IF NOT EXISTS documents ( + "CREATE TABLE documents ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_id INTEGER NOT NULL, - offset INTEGER NOT NULL, + start_byte INTEGER NOT NULL, + end_byte INTEGER NOT NULL, name VARCHAR NOT NULL, embedding BLOB NOT NULL, FOREIGN KEY(file_id) REFERENCES files(id) ON DELETE CASCADE @@ -102,43 +142,44 @@ impl VectorDatabase { Ok(()) } - pub fn insert_file(&self, worktree_id: i64, indexed_file: ParsedFile) -> Result<()> { + pub fn insert_file( + &self, + worktree_id: i64, + path: PathBuf, + mtime: SystemTime, + documents: Vec, + ) -> Result<()> { // Write to files table, and return generated id. self.db.execute( " DELETE FROM files WHERE worktree_id = ?1 AND relative_path = ?2; ", - params![worktree_id, indexed_file.path.to_str()], + params![worktree_id, path.to_str()], )?; - let mtime = Timestamp::from(indexed_file.mtime); + let mtime = Timestamp::from(mtime); self.db.execute( " INSERT INTO files - (worktree_id, relative_path, mtime_seconds, mtime_nanos, vector_store_version) + (worktree_id, relative_path, mtime_seconds, mtime_nanos) VALUES - (?1, ?2, $3, $4, $5); + (?1, ?2, $3, $4); ", - params![ - worktree_id, - indexed_file.path.to_str(), - mtime.seconds, - mtime.nanos, - VECTOR_STORE_VERSION - ], + params![worktree_id, path.to_str(), mtime.seconds, mtime.nanos], )?; let file_id = self.db.last_insert_rowid(); // Currently inserting at approximately 3400 documents a second // I imagine we can speed this up with a bulk insert of some kind. - for document in indexed_file.documents { + for document in documents { let embedding_blob = bincode::serialize(&document.embedding)?; self.db.execute( - "INSERT INTO documents (file_id, offset, name, embedding) VALUES (?1, ?2, ?3, ?4)", + "INSERT INTO documents (file_id, start_byte, end_byte, name, embedding) VALUES (?1, ?2, ?3, ?4, $5)", params![ file_id, - document.offset.to_string(), + document.range.start.to_string(), + document.range.end.to_string(), document.name, embedding_blob ], @@ -204,7 +245,7 @@ impl VectorDatabase { worktree_ids: &[i64], query_embedding: &Vec, limit: usize, - ) -> Result> { + ) -> Result, String)>> { let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); self.for_each_document(&worktree_ids, |id, embedding| { let similarity = dot(&embedding, &query_embedding); @@ -248,11 +289,18 @@ impl VectorDatabase { Ok(()) } - fn get_documents_by_ids(&self, ids: &[i64]) -> Result> { + fn get_documents_by_ids( + &self, + ids: &[i64], + ) -> Result, String)>> { let mut statement = self.db.prepare( " SELECT - documents.id, files.worktree_id, files.relative_path, documents.offset, documents.name + documents.id, + files.worktree_id, + files.relative_path, + documents.start_byte, + documents.end_byte, documents.name FROM documents, files WHERE @@ -266,15 +314,15 @@ impl VectorDatabase { row.get::<_, i64>(0)?, row.get::<_, i64>(1)?, row.get::<_, String>(2)?.into(), - row.get(3)?, - row.get(4)?, + row.get(3)?..row.get(4)?, + row.get(5)?, )) })?; - let mut values_by_id = HashMap::::default(); + let mut values_by_id = HashMap::, String)>::default(); for row in result_iter { - let (id, worktree_id, path, offset, name) = row?; - values_by_id.insert(id, (worktree_id, path, offset, name)); + let (id, worktree_id, path, range, name) = row?; + values_by_id.insert(id, (worktree_id, path, range, name)); } let mut results = Vec::with_capacity(ids.len()); diff --git a/crates/vector_store/src/modal.rs b/crates/vector_store/src/modal.rs index 9225fe8786..b797a20806 100644 --- a/crates/vector_store/src/modal.rs +++ b/crates/vector_store/src/modal.rs @@ -66,7 +66,7 @@ impl PickerDelegate for SemanticSearchDelegate { }); let workspace = self.workspace.clone(); - let position = search_result.clone().offset; + let position = search_result.clone().byte_range.start; cx.spawn(|_, mut cx| async move { let buffer = buffer.await?; workspace.update(&mut cx, |workspace, cx| { diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 3e697399b1..23dcf505c9 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -1,41 +1,39 @@ -use std::{path::PathBuf, sync::Arc, time::SystemTime}; - use anyhow::{anyhow, Ok, Result}; -use project::Fs; +use language::Language; +use std::{ops::Range, path::Path, sync::Arc}; use tree_sitter::{Parser, QueryCursor}; -use crate::PendingFile; - #[derive(Debug, PartialEq, Clone)] pub struct Document { - pub offset: usize, pub name: String, + pub range: Range, + pub content: String, pub embedding: Vec, } -#[derive(Debug, PartialEq, Clone)] -pub struct ParsedFile { - pub path: PathBuf, - pub mtime: SystemTime, - pub documents: Vec, -} - const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; pub struct CodeContextRetriever { pub parser: Parser, pub cursor: QueryCursor, - pub fs: Arc, } impl CodeContextRetriever { - pub async fn parse_file( + pub fn new() -> Self { + Self { + parser: Parser::new(), + cursor: QueryCursor::new(), + } + } + + pub fn parse_file( &mut self, - pending_file: PendingFile, - ) -> Result<(ParsedFile, Vec)> { - let grammar = pending_file - .language + relative_path: &Path, + content: &str, + language: Arc, + ) -> Result> { + let grammar = language .grammar() .ok_or_else(|| anyhow!("no grammar for language"))?; let embedding_config = grammar @@ -43,8 +41,6 @@ impl CodeContextRetriever { .as_ref() .ok_or_else(|| anyhow!("no embedding queries"))?; - let content = self.fs.load(&pending_file.absolute_path).await?; - self.parser.set_language(grammar.ts_language).unwrap(); let tree = self @@ -53,7 +49,6 @@ impl CodeContextRetriever { .ok_or_else(|| anyhow!("parsing failed"))?; let mut documents = Vec::new(); - let mut document_texts = Vec::new(); // Iterate through query matches for mat in self.cursor.matches( @@ -63,11 +58,11 @@ impl CodeContextRetriever { ) { let mut name: Vec<&str> = vec![]; let mut item: Option<&str> = None; - let mut offset: Option = None; + let mut byte_range: Option> = None; let mut context_spans: Vec<&str> = vec![]; for capture in mat.captures { if capture.index == embedding_config.item_capture_ix { - offset = Some(capture.node.byte_range().start); + byte_range = Some(capture.node.byte_range()); item = content.get(capture.node.byte_range()); } else if capture.index == embedding_config.name_capture_ix { if let Some(name_content) = content.get(capture.node.byte_range()) { @@ -84,30 +79,25 @@ impl CodeContextRetriever { } } - if item.is_some() && offset.is_some() && name.len() > 0 { - let item = format!("{}\n{}", context_spans.join("\n"), item.unwrap()); + if let Some((item, byte_range)) = item.zip(byte_range) { + if !name.is_empty() { + let item = format!("{}\n{}", context_spans.join("\n"), item); - let document_text = CODE_CONTEXT_TEMPLATE - .replace("", pending_file.relative_path.to_str().unwrap()) - .replace("", &pending_file.language.name().to_lowercase()) - .replace("", item.as_str()); + let document_text = CODE_CONTEXT_TEMPLATE + .replace("", relative_path.to_str().unwrap()) + .replace("", &language.name().to_lowercase()) + .replace("", item.as_str()); - document_texts.push(document_text); - documents.push(Document { - name: name.join(" "), - offset: offset.unwrap(), - embedding: Vec::new(), - }) + documents.push(Document { + range: byte_range, + content: document_text, + embedding: Vec::new(), + name: name.join(" ").to_string(), + }); + } } } - return Ok(( - ParsedFile { - path: pending_file.relative_path, - mtime: pending_file.modified_time, - documents, - }, - document_texts, - )); + return Ok(documents); } } diff --git a/crates/vector_store/src/vector_store.rs b/crates/vector_store/src/vector_store.rs index 0a197bc406..3d9c32875e 100644 --- a/crates/vector_store/src/vector_store.rs +++ b/crates/vector_store/src/vector_store.rs @@ -18,16 +18,16 @@ use gpui::{ }; use language::{Language, LanguageRegistry}; use modal::{SemanticSearch, SemanticSearchDelegate, Toggle}; -use parsing::{CodeContextRetriever, ParsedFile}; +use parsing::{CodeContextRetriever, Document}; use project::{Fs, PathChange, Project, ProjectEntryId, WorktreeId}; use smol::channel; use std::{ collections::HashMap, + ops::Range, path::{Path, PathBuf}, sync::Arc, time::{Duration, Instant, SystemTime}, }; -use tree_sitter::{Parser, QueryCursor}; use util::{ channel::{ReleaseChannel, RELEASE_CHANNEL, RELEASE_CHANNEL_NAME}, http::HttpClient, @@ -36,7 +36,7 @@ use util::{ }; use workspace::{Workspace, WorkspaceCreated}; -const VECTOR_STORE_VERSION: usize = 0; +const VECTOR_STORE_VERSION: usize = 1; const EMBEDDINGS_BATCH_SIZE: usize = 150; pub fn init( @@ -80,11 +80,11 @@ pub fn init( let vector_store = VectorStore::new( fs, db_file_path, - // Arc::new(embedding::DummyEmbeddings {}), - Arc::new(OpenAIEmbeddings { - client: http_client, - executor: cx.background(), - }), + Arc::new(embedding::DummyEmbeddings {}), + // Arc::new(OpenAIEmbeddings { + // client: http_client, + // executor: cx.background(), + // }), language_registry, cx.clone(), ) @@ -212,14 +212,16 @@ pub struct PendingFile { pub struct SearchResult { pub worktree_id: WorktreeId, pub name: String, - pub offset: usize, + pub byte_range: Range, pub file_path: PathBuf, } enum DbOperation { InsertFile { worktree_id: i64, - indexed_file: ParsedFile, + documents: Vec, + path: PathBuf, + mtime: SystemTime, }, Delete { worktree_id: i64, @@ -238,8 +240,9 @@ enum DbOperation { enum EmbeddingJob { Enqueue { worktree_id: i64, - parsed_file: ParsedFile, - document_spans: Vec, + path: PathBuf, + mtime: SystemTime, + documents: Vec, }, Flush, } @@ -256,18 +259,7 @@ impl VectorStore { let db = cx .background() - .spawn({ - let fs = fs.clone(); - let database_url = database_url.clone(); - async move { - if let Some(db_directory) = database_url.parent() { - fs.create_dir(db_directory).await.log_err(); - } - - let db = VectorDatabase::new(database_url.to_string_lossy().to_string())?; - anyhow::Ok(db) - } - }) + .spawn(VectorDatabase::new(fs.clone(), database_url.clone())) .await?; Ok(cx.add_model(|cx| { @@ -280,9 +272,12 @@ impl VectorStore { match job { DbOperation::InsertFile { worktree_id, - indexed_file, + documents, + path, + mtime, } => { - db.insert_file(worktree_id, indexed_file).log_err(); + db.insert_file(worktree_id, path, mtime, documents) + .log_err(); } DbOperation::Delete { worktree_id, path } => { db.delete_file(worktree_id, path).log_err(); @@ -304,35 +299,45 @@ impl VectorStore { // embed_tx/rx: Embed Batch and Send to Database let (embed_batch_tx, embed_batch_rx) = - channel::unbounded::)>>(); + channel::unbounded::, PathBuf, SystemTime)>>(); let _embed_batch_task = cx.background().spawn({ let db_update_tx = db_update_tx.clone(); let embedding_provider = embedding_provider.clone(); async move { while let Ok(mut embeddings_queue) = embed_batch_rx.recv().await { // Construct Batch - let mut document_spans = vec![]; - for (_, _, document_span) in embeddings_queue.iter() { - document_spans.extend(document_span.iter().map(|s| s.as_str())); + let mut batch_documents = vec![]; + for (_, documents, _, _) in embeddings_queue.iter() { + batch_documents + .extend(documents.iter().map(|document| document.content.as_str())); } - if let Ok(embeddings) = embedding_provider.embed_batch(document_spans).await + if let Ok(embeddings) = + embedding_provider.embed_batch(batch_documents).await { + log::trace!( + "created {} embeddings for {} files", + embeddings.len(), + embeddings_queue.len(), + ); + let mut i = 0; let mut j = 0; for embedding in embeddings.iter() { - while embeddings_queue[i].1.documents.len() == j { + while embeddings_queue[i].1.len() == j { i += 1; j = 0; } - embeddings_queue[i].1.documents[j].embedding = embedding.to_owned(); + embeddings_queue[i].1[j].embedding = embedding.to_owned(); j += 1; } - for (worktree_id, indexed_file, _) in embeddings_queue.into_iter() { - for document in indexed_file.documents.iter() { + for (worktree_id, documents, path, mtime) in + embeddings_queue.into_iter() + { + for document in documents.iter() { // TODO: Update this so it doesn't panic assert!( document.embedding.len() > 0, @@ -343,7 +348,9 @@ impl VectorStore { db_update_tx .send(DbOperation::InsertFile { worktree_id, - indexed_file, + documents, + path, + mtime, }) .await .unwrap(); @@ -362,12 +369,13 @@ impl VectorStore { while let Ok(job) = batch_files_rx.recv().await { let should_flush = match job { EmbeddingJob::Enqueue { - document_spans, + documents, worktree_id, - parsed_file, + path, + mtime, } => { - queue_len += &document_spans.len(); - embeddings_queue.push((worktree_id, parsed_file, document_spans)); + queue_len += &documents.len(); + embeddings_queue.push((worktree_id, documents, path, mtime)); queue_len >= EMBEDDINGS_BATCH_SIZE } EmbeddingJob::Flush => true, @@ -385,26 +393,38 @@ impl VectorStore { let (parsing_files_tx, parsing_files_rx) = channel::unbounded::(); let mut _parsing_files_tasks = Vec::new(); - // for _ in 0..cx.background().num_cpus() { - for _ in 0..1 { + for _ in 0..cx.background().num_cpus() { let fs = fs.clone(); let parsing_files_rx = parsing_files_rx.clone(); let batch_files_tx = batch_files_tx.clone(); _parsing_files_tasks.push(cx.background().spawn(async move { - let parser = Parser::new(); - let cursor = QueryCursor::new(); - let mut retriever = CodeContextRetriever { parser, cursor, fs }; + let mut retriever = CodeContextRetriever::new(); while let Ok(pending_file) = parsing_files_rx.recv().await { - if let Some((indexed_file, document_spans)) = - retriever.parse_file(pending_file.clone()).await.log_err() + if let Some(content) = fs.load(&pending_file.absolute_path).await.log_err() { - batch_files_tx - .try_send(EmbeddingJob::Enqueue { - worktree_id: pending_file.worktree_db_id, - parsed_file: indexed_file, - document_spans, - }) - .unwrap(); + if let Some(documents) = retriever + .parse_file( + &pending_file.relative_path, + &content, + pending_file.language, + ) + .log_err() + { + log::trace!( + "parsed path {:?}: {} documents", + pending_file.relative_path, + documents.len() + ); + + batch_files_tx + .try_send(EmbeddingJob::Enqueue { + worktree_id: pending_file.worktree_db_id, + path: pending_file.relative_path, + mtime: pending_file.modified_time, + documents, + }) + .unwrap(); + } } if parsing_files_rx.len() == 0 { @@ -543,6 +563,7 @@ impl VectorStore { }); if !already_stored { + log::trace!("sending for parsing: {:?}", path_buf); parsing_files_tx .try_send(PendingFile { worktree_db_id: db_ids_by_worktree_id @@ -565,8 +586,8 @@ impl VectorStore { .unwrap(); } } - log::info!( - "Parsing Worktree Completed in {:?}", + log::trace!( + "parsing worktree completed in {:?}", t0.elapsed().as_millis() ); } @@ -622,11 +643,12 @@ impl VectorStore { let embedding_provider = self.embedding_provider.clone(); let database_url = self.database_url.clone(); + let fs = self.fs.clone(); cx.spawn(|this, cx| async move { let documents = cx .background() .spawn(async move { - let database = VectorDatabase::new(database_url.to_string_lossy().into())?; + let database = VectorDatabase::new(fs, database_url).await?; let phrase_embedding = embedding_provider .embed_batch(vec![&phrase]) @@ -648,12 +670,12 @@ impl VectorStore { Ok(documents .into_iter() - .filter_map(|(worktree_db_id, file_path, offset, name)| { + .filter_map(|(worktree_db_id, file_path, byte_range, name)| { let worktree_id = project_state.worktree_id_for_db_id(worktree_db_id)?; Some(SearchResult { worktree_id, name, - offset, + byte_range, file_path, }) }) diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index b6e47e7a23..c4349c7280 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -12,6 +12,13 @@ use settings::SettingsStore; use std::sync::Arc; use unindent::Unindent; +#[ctor::ctor] +fn init_logger() { + if std::env::var("RUST_LOG").is_ok() { + env_logger::init(); + } +} + #[gpui::test] async fn test_vector_store(cx: &mut TestAppContext) { cx.update(|cx| { @@ -95,11 +102,23 @@ async fn test_vector_store(cx: &mut TestAppContext) { .await .unwrap(); - assert_eq!(search_results[0].offset, 0); + assert_eq!(search_results[0].byte_range.start, 0); assert_eq!(search_results[0].name, "aaa"); assert_eq!(search_results[0].worktree_id, worktree_id); } +#[gpui::test] +async fn test_code_context_retrieval(cx: &mut TestAppContext) { + // let mut retriever = CodeContextRetriever::new(fs); + + // retriever::parse_file( + // " + // // + // ", + // ); + // +} + #[gpui::test] fn test_dot_product(mut rng: StdRng) { assert_eq!(dot(&[1., 0., 0., 0., 0.], &[0., 1., 0., 0., 0.]), 0.); From 623cb9833c17aaac11d4a2d4bea03295ffa842c4 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 16:58:42 -0400 Subject: [PATCH 004/120] add tests for rust context parsing, and update rust embedding query Co-authored-by: maxbrunsfeld --- crates/vector_store/src/parsing.rs | 6 +- crates/vector_store/src/vector_store_tests.rs | 154 +++++++++++++++--- crates/zed/src/languages/rust/embedding.scm | 64 ++++++-- 3 files changed, 178 insertions(+), 46 deletions(-) diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 23dcf505c9..8d6e03d6eb 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -81,7 +81,11 @@ impl CodeContextRetriever { if let Some((item, byte_range)) = item.zip(byte_range) { if !name.is_empty() { - let item = format!("{}\n{}", context_spans.join("\n"), item); + let item = if context_spans.is_empty() { + item.to_string() + } else { + format!("{}\n{}", context_spans.join("\n"), item) + }; let document_text = CODE_CONTEXT_TEMPLATE .replace("", relative_path.to_str().unwrap()) diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index c4349c7280..ccdd9fdaf0 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -1,5 +1,9 @@ use crate::{ - db::dot, embedding::EmbeddingProvider, vector_store_settings::VectorStoreSettings, VectorStore, + db::dot, + embedding::EmbeddingProvider, + parsing::{CodeContextRetriever, Document}, + vector_store_settings::VectorStoreSettings, + VectorStore, }; use anyhow::Result; use async_trait::async_trait; @@ -9,7 +13,7 @@ use project::{project_settings::ProjectSettings, FakeFs, Project}; use rand::{rngs::StdRng, Rng}; use serde_json::json; use settings::SettingsStore; -use std::sync::Arc; +use std::{path::Path, sync::Arc}; use unindent::Unindent; #[ctor::ctor] @@ -52,24 +56,7 @@ async fn test_vector_store(cx: &mut TestAppContext) { .await; let languages = Arc::new(LanguageRegistry::new(Task::ready(()))); - let rust_language = Arc::new( - Language::new( - LanguageConfig { - name: "Rust".into(), - path_suffixes: vec!["rs".into()], - ..Default::default() - }, - Some(tree_sitter_rust::language()), - ) - .with_embedding_query( - r#" - (function_item - name: (identifier) @name - body: (block)) @item - "#, - ) - .unwrap(), - ); + let rust_language = rust_lang(); languages.add(rust_language); let db_dir = tempdir::TempDir::new("vector-store").unwrap(); @@ -109,14 +96,59 @@ async fn test_vector_store(cx: &mut TestAppContext) { #[gpui::test] async fn test_code_context_retrieval(cx: &mut TestAppContext) { - // let mut retriever = CodeContextRetriever::new(fs); + let language = rust_lang(); + let mut retriever = CodeContextRetriever::new(); - // retriever::parse_file( - // " - // // - // ", - // ); - // + let text = " + /// A doc comment + /// that spans multiple lines + fn a() { + b + } + + impl C for D { + } + " + .unindent(); + + let parsed_files = retriever + .parse_file(Path::new("foo.rs"), &text, language) + .unwrap(); + + assert_eq!( + parsed_files, + &[ + Document { + name: "a".into(), + range: text.find("fn a").unwrap()..(text.find("}").unwrap() + 1), + content: " + The below code snippet is from file 'foo.rs' + + ```rust + /// A doc comment + /// that spans multiple lines + fn a() { + b + } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "C for D".into(), + range: text.find("impl C").unwrap()..(text.rfind("}").unwrap() + 1), + content: " + The below code snippet is from file 'foo.rs' + + ```rust + impl C for D { + } + ```" + .unindent(), + embedding: vec![], + } + ] + ); } #[gpui::test] @@ -178,3 +210,71 @@ impl EmbeddingProvider for FakeEmbeddingProvider { .collect()) } } + +fn rust_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".into()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ) + .with_embedding_query( + r#" + ( + (line_comment)* @context + . + (enum_item + name: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (struct_item + name: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (impl_item + trait: (_)? @name + "for"? @name + type: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (trait_item + name: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (function_item + name: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (macro_definition + name: (_) @name) @item + ) + + ( + (line_comment)* @context + . + (function_signature_item + name: (_) @name) @item + ) + "#, + ) + .unwrap(), + ) +} diff --git a/crates/zed/src/languages/rust/embedding.scm b/crates/zed/src/languages/rust/embedding.scm index 3aec101e9f..66e4083de5 100644 --- a/crates/zed/src/languages/rust/embedding.scm +++ b/crates/zed/src/languages/rust/embedding.scm @@ -1,22 +1,50 @@ ( (line_comment)* @context . - [ - (enum_item - name: (_) @name) @item - (struct_item - name: (_) @name) @item - (impl_item - trait: (_)? @name - "for"? @name - type: (_) @name) @item - (trait_item - name: (_) @name) @item - (function_item - name: (_) @name) @item - (macro_definition - name: (_) @name) @item - (function_signature_item - name: (_) @name) @item - ] + (enum_item + name: (_) @name) @item +) + +( + (line_comment)* @context + . + (struct_item + name: (_) @name) @item +) + +( + (line_comment)* @context + . + (impl_item + trait: (_)? @name + "for"? @name + type: (_) @name) @item +) + +( + (line_comment)* @context + . + (trait_item + name: (_) @name) @item +) + +( + (line_comment)* @context + . + (function_item + name: (_) @name) @item +) + +( + (line_comment)* @context + . + (macro_definition + name: (_) @name) @item +) + +( + (line_comment)* @context + . + (function_signature_item + name: (_) @name) @item ) From d8fd0be59832d52ef7e21784a43c697c53e789e9 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 17:01:56 -0400 Subject: [PATCH 005/120] update vector store to remove dummy embeddings --- crates/vector_store/src/vector_store.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/vector_store/src/vector_store.rs b/crates/vector_store/src/vector_store.rs index 3d9c32875e..d35798a58d 100644 --- a/crates/vector_store/src/vector_store.rs +++ b/crates/vector_store/src/vector_store.rs @@ -80,11 +80,10 @@ pub fn init( let vector_store = VectorStore::new( fs, db_file_path, - Arc::new(embedding::DummyEmbeddings {}), - // Arc::new(OpenAIEmbeddings { - // client: http_client, - // executor: cx.background(), - // }), + Arc::new(OpenAIEmbeddings { + client: http_client, + executor: cx.background(), + }), language_registry, cx.clone(), ) From b38e3b804c7e1124c8a41ac3fb471c305e522639 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 13 Jul 2023 18:14:44 -0400 Subject: [PATCH 006/120] remove reindexing subscription, and add status methods for vector store Co-authored-by: maxbrunsfeld --- Cargo.lock | 1 + crates/vector_store/Cargo.toml | 1 + crates/vector_store/src/modal.rs | 2 +- crates/vector_store/src/vector_store.rs | 379 +++++++----------- crates/vector_store/src/vector_store_tests.rs | 78 +++- 5 files changed, 208 insertions(+), 253 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4359659a53..239aa6a302 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8493,6 +8493,7 @@ dependencies = [ "lazy_static", "log", "matrixmultiply", + "parking_lot 0.11.2", "picker", "project", "rand 0.8.5", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index 8e1dea59fd..bac9cdedfa 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -33,6 +33,7 @@ async-trait.workspace = true bincode = "1.3.3" matrixmultiply = "0.3.7" tiktoken-rs = "0.5.0" +parking_lot.workspace = true rand.workspace = true schemars.workspace = true diff --git a/crates/vector_store/src/modal.rs b/crates/vector_store/src/modal.rs index b797a20806..2981fa4e73 100644 --- a/crates/vector_store/src/modal.rs +++ b/crates/vector_store/src/modal.rs @@ -124,7 +124,7 @@ impl PickerDelegate for SemanticSearchDelegate { if let Some(retrieved) = retrieved_cached.log_err() { if !retrieved { let task = vector_store.update(&mut cx, |store, cx| { - store.search(project.clone(), query.to_string(), 10, cx) + store.search_project(project.clone(), query.to_string(), 10, cx) }); if let Some(results) = task.await.log_err() { diff --git a/crates/vector_store/src/vector_store.rs b/crates/vector_store/src/vector_store.rs index d35798a58d..3f7ab5c6cd 100644 --- a/crates/vector_store/src/vector_store.rs +++ b/crates/vector_store/src/vector_store.rs @@ -18,15 +18,19 @@ use gpui::{ }; use language::{Language, LanguageRegistry}; use modal::{SemanticSearch, SemanticSearchDelegate, Toggle}; +use parking_lot::Mutex; use parsing::{CodeContextRetriever, Document}; -use project::{Fs, PathChange, Project, ProjectEntryId, WorktreeId}; +use project::{Fs, Project, WorktreeId}; use smol::channel; use std::{ - collections::HashMap, + collections::{HashMap, HashSet}, ops::Range, path::{Path, PathBuf}, - sync::Arc, - time::{Duration, Instant, SystemTime}, + sync::{ + atomic::{self, AtomicUsize}, + Arc, Weak, + }, + time::{Instant, SystemTime}, }; use util::{ channel::{ReleaseChannel, RELEASE_CHANNEL, RELEASE_CHANNEL_NAME}, @@ -99,7 +103,7 @@ pub fn init( let project = workspace.read(cx).project().clone(); if project.read(cx).is_local() { vector_store.update(cx, |store, cx| { - store.add_project(project, cx).detach(); + store.index_project(project, cx).detach(); }); } } @@ -124,13 +128,20 @@ pub struct VectorStore { _embed_batch_task: Task<()>, _batch_files_task: Task<()>, _parsing_files_tasks: Vec>, + next_job_id: Arc, projects: HashMap, ProjectState>, } struct ProjectState { worktree_db_ids: Vec<(WorktreeId, i64)>, - pending_files: HashMap, - _subscription: gpui::Subscription, + outstanding_jobs: Arc>>, +} + +type JobId = usize; + +struct JobHandle { + id: JobId, + set: Weak>>, } impl ProjectState { @@ -157,54 +168,15 @@ impl ProjectState { } }) } - - fn update_pending_files(&mut self, pending_file: PendingFile, indexing_time: SystemTime) { - // If Pending File Already Exists, Replace it with the new one - // but keep the old indexing time - if let Some(old_file) = self - .pending_files - .remove(&pending_file.relative_path.clone()) - { - self.pending_files.insert( - pending_file.relative_path.clone(), - (pending_file, old_file.1), - ); - } else { - self.pending_files.insert( - pending_file.relative_path.clone(), - (pending_file, indexing_time), - ); - }; - } - - fn get_outstanding_files(&mut self) -> Vec { - let mut outstanding_files = vec![]; - let mut remove_keys = vec![]; - for key in self.pending_files.keys().into_iter() { - if let Some(pending_details) = self.pending_files.get(key) { - let (pending_file, index_time) = pending_details; - if index_time <= &SystemTime::now() { - outstanding_files.push(pending_file.clone()); - remove_keys.push(key.clone()); - } - } - } - - for key in remove_keys.iter() { - self.pending_files.remove(key); - } - - return outstanding_files; - } } -#[derive(Clone, Debug)] pub struct PendingFile { worktree_db_id: i64, relative_path: PathBuf, absolute_path: PathBuf, language: Arc, modified_time: SystemTime, + job_handle: JobHandle, } #[derive(Debug, Clone)] @@ -221,6 +193,7 @@ enum DbOperation { documents: Vec, path: PathBuf, mtime: SystemTime, + job_handle: JobHandle, }, Delete { worktree_id: i64, @@ -242,6 +215,7 @@ enum EmbeddingJob { path: PathBuf, mtime: SystemTime, documents: Vec, + job_handle: JobHandle, }, Flush, } @@ -274,9 +248,11 @@ impl VectorStore { documents, path, mtime, + job_handle, } => { db.insert_file(worktree_id, path, mtime, documents) .log_err(); + drop(job_handle) } DbOperation::Delete { worktree_id, path } => { db.delete_file(worktree_id, path).log_err(); @@ -298,7 +274,7 @@ impl VectorStore { // embed_tx/rx: Embed Batch and Send to Database let (embed_batch_tx, embed_batch_rx) = - channel::unbounded::, PathBuf, SystemTime)>>(); + channel::unbounded::, PathBuf, SystemTime, JobHandle)>>(); let _embed_batch_task = cx.background().spawn({ let db_update_tx = db_update_tx.clone(); let embedding_provider = embedding_provider.clone(); @@ -306,7 +282,7 @@ impl VectorStore { while let Ok(mut embeddings_queue) = embed_batch_rx.recv().await { // Construct Batch let mut batch_documents = vec![]; - for (_, documents, _, _) in embeddings_queue.iter() { + for (_, documents, _, _, _) in embeddings_queue.iter() { batch_documents .extend(documents.iter().map(|document| document.content.as_str())); } @@ -333,7 +309,7 @@ impl VectorStore { j += 1; } - for (worktree_id, documents, path, mtime) in + for (worktree_id, documents, path, mtime, job_handle) in embeddings_queue.into_iter() { for document in documents.iter() { @@ -350,6 +326,7 @@ impl VectorStore { documents, path, mtime, + job_handle, }) .await .unwrap(); @@ -372,9 +349,16 @@ impl VectorStore { worktree_id, path, mtime, + job_handle, } => { queue_len += &documents.len(); - embeddings_queue.push((worktree_id, documents, path, mtime)); + embeddings_queue.push(( + worktree_id, + documents, + path, + mtime, + job_handle, + )); queue_len >= EMBEDDINGS_BATCH_SIZE } EmbeddingJob::Flush => true, @@ -420,6 +404,7 @@ impl VectorStore { worktree_id: pending_file.worktree_db_id, path: pending_file.relative_path, mtime: pending_file.modified_time, + job_handle: pending_file.job_handle, documents, }) .unwrap(); @@ -439,6 +424,7 @@ impl VectorStore { embedding_provider, language_registry, db_update_tx, + next_job_id: Default::default(), parsing_files_tx, _db_update_task, _embed_batch_task, @@ -471,11 +457,11 @@ impl VectorStore { async move { rx.await? } } - fn add_project( + fn index_project( &mut self, project: ModelHandle, cx: &mut ModelContext, - ) -> Task> { + ) -> Task> { let worktree_scans_complete = project .read(cx) .worktrees(cx) @@ -494,21 +480,16 @@ impl VectorStore { }) .collect::>(); - let fs = self.fs.clone(); let language_registry = self.language_registry.clone(); - let database_url = self.database_url.clone(); let db_update_tx = self.db_update_tx.clone(); let parsing_files_tx = self.parsing_files_tx.clone(); + let next_job_id = self.next_job_id.clone(); cx.spawn(|this, mut cx| async move { futures::future::join_all(worktree_scans_complete).await; let worktree_db_ids = futures::future::join_all(worktree_db_ids).await; - if let Some(db_directory) = database_url.parent() { - fs.create_dir(db_directory).await.log_err(); - } - let worktrees = project.read_with(&cx, |project, cx| { project .worktrees(cx) @@ -516,109 +497,115 @@ impl VectorStore { .collect::>() }); - let mut worktree_file_times = HashMap::new(); + let mut worktree_file_mtimes = HashMap::new(); let mut db_ids_by_worktree_id = HashMap::new(); for (worktree, db_id) in worktrees.iter().zip(worktree_db_ids) { let db_id = db_id?; db_ids_by_worktree_id.insert(worktree.id(), db_id); - worktree_file_times.insert( + worktree_file_mtimes.insert( worktree.id(), this.read_with(&cx, |this, _| this.get_file_mtimes(db_id)) .await?, ); } - cx.background() - .spawn({ - let db_ids_by_worktree_id = db_ids_by_worktree_id.clone(); - let db_update_tx = db_update_tx.clone(); - let language_registry = language_registry.clone(); - let parsing_files_tx = parsing_files_tx.clone(); - async move { - let t0 = Instant::now(); - for worktree in worktrees.into_iter() { - let mut file_mtimes = - worktree_file_times.remove(&worktree.id()).unwrap(); - for file in worktree.files(false, 0) { - let absolute_path = worktree.absolutize(&file.path); - - if let Ok(language) = language_registry - .language_for_file(&absolute_path, None) - .await - { - if language - .grammar() - .and_then(|grammar| grammar.embedding_config.as_ref()) - .is_none() - { - continue; - } - - let path_buf = file.path.to_path_buf(); - let stored_mtime = file_mtimes.remove(&file.path.to_path_buf()); - let already_stored = stored_mtime - .map_or(false, |existing_mtime| { - existing_mtime == file.mtime - }); - - if !already_stored { - log::trace!("sending for parsing: {:?}", path_buf); - parsing_files_tx - .try_send(PendingFile { - worktree_db_id: db_ids_by_worktree_id - [&worktree.id()], - relative_path: path_buf, - absolute_path, - language, - modified_time: file.mtime, - }) - .unwrap(); - } - } - } - for file in file_mtimes.keys() { - db_update_tx - .try_send(DbOperation::Delete { - worktree_id: db_ids_by_worktree_id[&worktree.id()], - path: file.to_owned(), - }) - .unwrap(); - } - } - log::trace!( - "parsing worktree completed in {:?}", - t0.elapsed().as_millis() - ); - } - }) - .detach(); - // let mut pending_files: Vec<(PathBuf, ((i64, PathBuf, Arc, SystemTime), SystemTime))> = vec![]; - this.update(&mut cx, |this, cx| { - // The below is managing for updated on save - // Currently each time a file is saved, this code is run, and for all the files that were changed, if the current time is - // greater than the previous embedded time by the REINDEXING_DELAY variable, we will send the file off to be indexed. - let _subscription = cx.subscribe(&project, |this, project, event, cx| { - if let project::Event::WorktreeUpdatedEntries(worktree_id, changes) = event { - this.project_entries_changed(project, changes.clone(), cx, worktree_id); - } - }); - + let outstanding_jobs = Arc::new(Mutex::new(HashSet::new())); + this.update(&mut cx, |this, _| { this.projects.insert( project.downgrade(), ProjectState { - pending_files: HashMap::new(), - worktree_db_ids: db_ids_by_worktree_id.into_iter().collect(), - _subscription, + worktree_db_ids: db_ids_by_worktree_id + .iter() + .map(|(a, b)| (*a, *b)) + .collect(), + outstanding_jobs: outstanding_jobs.clone(), }, ); }); - anyhow::Ok(()) + cx.background() + .spawn(async move { + let mut count = 0; + let t0 = Instant::now(); + for worktree in worktrees.into_iter() { + let mut file_mtimes = worktree_file_mtimes.remove(&worktree.id()).unwrap(); + for file in worktree.files(false, 0) { + let absolute_path = worktree.absolutize(&file.path); + + if let Ok(language) = language_registry + .language_for_file(&absolute_path, None) + .await + { + if language + .grammar() + .and_then(|grammar| grammar.embedding_config.as_ref()) + .is_none() + { + continue; + } + + let path_buf = file.path.to_path_buf(); + let stored_mtime = file_mtimes.remove(&file.path.to_path_buf()); + let already_stored = stored_mtime + .map_or(false, |existing_mtime| existing_mtime == file.mtime); + + if !already_stored { + log::trace!("sending for parsing: {:?}", path_buf); + count += 1; + let job_id = next_job_id.fetch_add(1, atomic::Ordering::SeqCst); + let job_handle = JobHandle { + id: job_id, + set: Arc::downgrade(&outstanding_jobs), + }; + outstanding_jobs.lock().insert(job_id); + parsing_files_tx + .try_send(PendingFile { + worktree_db_id: db_ids_by_worktree_id[&worktree.id()], + relative_path: path_buf, + absolute_path, + language, + job_handle, + modified_time: file.mtime, + }) + .unwrap(); + } + } + } + for file in file_mtimes.keys() { + db_update_tx + .try_send(DbOperation::Delete { + worktree_id: db_ids_by_worktree_id[&worktree.id()], + path: file.to_owned(), + }) + .unwrap(); + } + } + log::trace!( + "parsing worktree completed in {:?}", + t0.elapsed().as_millis() + ); + + Ok(count) + }) + .await }) } - pub fn search( + pub fn remaining_files_to_index_for_project( + &self, + project: &ModelHandle, + ) -> Option { + Some( + self.projects + .get(&project.downgrade())? + .outstanding_jobs + .lock() + .len(), + ) + } + + pub fn search_project( &mut self, project: ModelHandle, phrase: String, @@ -682,110 +669,16 @@ impl VectorStore { }) }) } - - fn project_entries_changed( - &mut self, - project: ModelHandle, - changes: Arc<[(Arc, ProjectEntryId, PathChange)]>, - cx: &mut ModelContext<'_, VectorStore>, - worktree_id: &WorktreeId, - ) -> Option<()> { - let reindexing_delay = settings::get::(cx).reindexing_delay_seconds; - - let worktree = project - .read(cx) - .worktree_for_id(worktree_id.clone(), cx)? - .read(cx) - .snapshot(); - - let worktree_db_id = self - .projects - .get(&project.downgrade())? - .db_id_for_worktree_id(worktree.id())?; - let file_mtimes = self.get_file_mtimes(worktree_db_id); - - let language_registry = self.language_registry.clone(); - - cx.spawn(|this, mut cx| async move { - let file_mtimes = file_mtimes.await.log_err()?; - - for change in changes.into_iter() { - let change_path = change.0.clone(); - let absolute_path = worktree.absolutize(&change_path); - - // Skip if git ignored or symlink - if let Some(entry) = worktree.entry_for_id(change.1) { - if entry.is_ignored || entry.is_symlink || entry.is_external { - continue; - } - } - - match change.2 { - PathChange::Removed => this.update(&mut cx, |this, _| { - this.db_update_tx - .try_send(DbOperation::Delete { - worktree_id: worktree_db_id, - path: absolute_path, - }) - .unwrap(); - }), - _ => { - if let Ok(language) = language_registry - .language_for_file(&change_path.to_path_buf(), None) - .await - { - if language - .grammar() - .and_then(|grammar| grammar.embedding_config.as_ref()) - .is_none() - { - continue; - } - - let modified_time = - change_path.metadata().log_err()?.modified().log_err()?; - - let existing_time = file_mtimes.get(&change_path.to_path_buf()); - let already_stored = existing_time - .map_or(false, |existing_time| &modified_time != existing_time); - - if !already_stored { - this.update(&mut cx, |this, _| { - let reindex_time = modified_time - + Duration::from_secs(reindexing_delay as u64); - - let project_state = - this.projects.get_mut(&project.downgrade())?; - project_state.update_pending_files( - PendingFile { - relative_path: change_path.to_path_buf(), - absolute_path, - modified_time, - worktree_db_id, - language: language.clone(), - }, - reindex_time, - ); - - for file in project_state.get_outstanding_files() { - this.parsing_files_tx.try_send(file).unwrap(); - } - Some(()) - }); - } - } - } - } - } - - Some(()) - }) - .detach(); - - Some(()) - } } impl Entity for VectorStore { type Event = (); } + +impl Drop for JobHandle { + fn drop(&mut self) { + if let Some(set) = self.set.upgrade() { + set.lock().remove(&self.id); + } + } +} diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index ccdd9fdaf0..de82bc2f48 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -9,11 +9,17 @@ use anyhow::Result; use async_trait::async_trait; use gpui::{Task, TestAppContext}; use language::{Language, LanguageConfig, LanguageRegistry}; -use project::{project_settings::ProjectSettings, FakeFs, Project}; +use project::{project_settings::ProjectSettings, FakeFs, Fs, Project}; use rand::{rngs::StdRng, Rng}; use serde_json::json; use settings::SettingsStore; -use std::{path::Path, sync::Arc}; +use std::{ + path::Path, + sync::{ + atomic::{self, AtomicUsize}, + Arc, + }, +}; use unindent::Unindent; #[ctor::ctor] @@ -62,29 +68,37 @@ async fn test_vector_store(cx: &mut TestAppContext) { let db_dir = tempdir::TempDir::new("vector-store").unwrap(); let db_path = db_dir.path().join("db.sqlite"); + let embedding_provider = Arc::new(FakeEmbeddingProvider::default()); let store = VectorStore::new( fs.clone(), db_path, - Arc::new(FakeEmbeddingProvider), + embedding_provider.clone(), languages, cx.to_async(), ) .await .unwrap(); - let project = Project::test(fs, ["/the-root".as_ref()], cx).await; + let project = Project::test(fs.clone(), ["/the-root".as_ref()], cx).await; let worktree_id = project.read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() }); - store - .update(cx, |store, cx| store.add_project(project.clone(), cx)) + let file_count = store + .update(cx, |store, cx| store.index_project(project.clone(), cx)) .await .unwrap(); + assert_eq!(file_count, 2); cx.foreground().run_until_parked(); + store.update(cx, |store, _cx| { + assert_eq!( + store.remaining_files_to_index_for_project(&project), + Some(0) + ); + }); let search_results = store .update(cx, |store, cx| { - store.search(project.clone(), "aaaa".to_string(), 5, cx) + store.search_project(project.clone(), "aaaa".to_string(), 5, cx) }) .await .unwrap(); @@ -92,10 +106,45 @@ async fn test_vector_store(cx: &mut TestAppContext) { assert_eq!(search_results[0].byte_range.start, 0); assert_eq!(search_results[0].name, "aaa"); assert_eq!(search_results[0].worktree_id, worktree_id); + + fs.save( + "/the-root/src/file2.rs".as_ref(), + &" + fn dddd() { println!(\"ddddd!\"); } + struct pqpqpqp {} + " + .unindent() + .into(), + Default::default(), + ) + .await + .unwrap(); + + cx.foreground().run_until_parked(); + + let prev_embedding_count = embedding_provider.embedding_count(); + let file_count = store + .update(cx, |store, cx| store.index_project(project.clone(), cx)) + .await + .unwrap(); + assert_eq!(file_count, 1); + + cx.foreground().run_until_parked(); + store.update(cx, |store, _cx| { + assert_eq!( + store.remaining_files_to_index_for_project(&project), + Some(0) + ); + }); + + assert_eq!( + embedding_provider.embedding_count() - prev_embedding_count, + 2 + ); } #[gpui::test] -async fn test_code_context_retrieval(cx: &mut TestAppContext) { +async fn test_code_context_retrieval() { let language = rust_lang(); let mut retriever = CodeContextRetriever::new(); @@ -181,11 +230,22 @@ fn test_dot_product(mut rng: StdRng) { } } -struct FakeEmbeddingProvider; +#[derive(Default)] +struct FakeEmbeddingProvider { + embedding_count: AtomicUsize, +} + +impl FakeEmbeddingProvider { + fn embedding_count(&self) -> usize { + self.embedding_count.load(atomic::Ordering::SeqCst) + } +} #[async_trait] impl EmbeddingProvider for FakeEmbeddingProvider { async fn embed_batch(&self, spans: Vec<&str>) -> Result>> { + self.embedding_count + .fetch_add(spans.len(), atomic::Ordering::SeqCst); Ok(spans .iter() .map(|span| { From 3a625d15d30ba26c4500f88de7a16dc980bc0019 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Fri, 14 Jul 2023 11:33:49 -0400 Subject: [PATCH 007/120] update c embedding query for preceding comments --- crates/zed/src/languages/c/embedding.scm | 74 +++++++++++++----------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/crates/zed/src/languages/c/embedding.scm b/crates/zed/src/languages/c/embedding.scm index cd1915f62b..0178abeb18 100644 --- a/crates/zed/src/languages/c/embedding.scm +++ b/crates/zed/src/languages/c/embedding.scm @@ -1,39 +1,43 @@ -(declaration - (type_qualifier)? @context - type: (_)? @context - declarator: [ - (function_declarator - declarator: (_) @name) - (pointer_declarator - "*" @context - declarator: (function_declarator - declarator: (_) @name)) - (pointer_declarator - "*" @context - declarator: (pointer_declarator - "*" @context +( + (comment)* @context + . + (declaration + declarator: [ + (function_declarator + declarator: (_) @name) + (pointer_declarator + "*" @name declarator: (function_declarator - declarator: (_) @name))) - ] -) @item + declarator: (_) @name)) + (pointer_declarator + "*" @name + declarator: (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name))) + ] + ) @item + ) -(function_definition - (type_qualifier)? @context - type: (_)? @context - declarator: [ - (function_declarator - declarator: (_) @name - ) - (pointer_declarator - "*" @context - declarator: (function_declarator +( + (comment)* @context + . + (function_definition + declarator: [ + (function_declarator declarator: (_) @name - )) - (pointer_declarator - "*" @context - declarator: (pointer_declarator - "*" @context + ) + (pointer_declarator + "*" @name declarator: (function_declarator - declarator: (_) @name))) - ] -) @item + declarator: (_) @name + )) + (pointer_declarator + "*" @name + declarator: (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name))) + ] + ) @item + ) From d4971e9eadebc9e629ca413a0df309230f2d14fc Mon Sep 17 00:00:00 2001 From: KCaverly Date: Fri, 14 Jul 2023 13:47:10 -0400 Subject: [PATCH 008/120] update typescript parsing to manage for leading tsdoc comments --- crates/vector_store/src/parsing.rs | 8 +- .../src/languages/typescript/embedding.scm | 109 +++++++++--------- 2 files changed, 60 insertions(+), 57 deletions(-) diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 8d6e03d6eb..4ce8b6763a 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -51,6 +51,7 @@ impl CodeContextRetriever { let mut documents = Vec::new(); // Iterate through query matches + let mut name_ranges: Vec> = vec![]; for mat in self.cursor.matches( &embedding_config.query, tree.root_node(), @@ -65,7 +66,12 @@ impl CodeContextRetriever { byte_range = Some(capture.node.byte_range()); item = content.get(capture.node.byte_range()); } else if capture.index == embedding_config.name_capture_ix { - if let Some(name_content) = content.get(capture.node.byte_range()) { + let name_range = capture.node.byte_range(); + if name_ranges.contains(&name_range) { + continue; + } + name_ranges.push(name_range.clone()); + if let Some(name_content) = content.get(name_range.clone()) { name.push(name_content); } } diff --git a/crates/zed/src/languages/typescript/embedding.scm b/crates/zed/src/languages/typescript/embedding.scm index f261a0a565..d850f9b823 100644 --- a/crates/zed/src/languages/typescript/embedding.scm +++ b/crates/zed/src/languages/typescript/embedding.scm @@ -1,59 +1,56 @@ -; (internal_module -; "namespace" @context -; name: (_) @name) @item +( + (comment)* @context + . + (enum_declaration + "enum" @context + name: (_) @name) @item + ) -(enum_declaration - "enum" @context - name: (_) @name) @item - -; (type_alias_declaration -; "type" @context -; name: (_) @name) @item - -(function_declaration - "async"? @context - "function" @context - name: (_) @name) @item - -(interface_declaration - "interface" @context - name: (_) @name) @item - -; (export_statement -; (lexical_declaration -; ["let" "const"] @context -; (variable_declarator -; name: (_) @name) @item)) - -(program - (lexical_declaration - ["let" "const"] @context - (variable_declarator - name: (_) @name) @item)) - -(class_declaration - "class" @context - name: (_) @name) @item - -(method_definition +( + (comment)* @context + . [ - "get" - "set" - "async" - "*" - "readonly" - "static" - (override_modifier) - (accessibility_modifier) - ]* @context - name: (_) @name) @item + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name) + ) @item + (function_declaration + "async"? @name + "function" @name + name: (_) @name) @item + ]) -; (public_field_definition -; [ -; "declare" -; "readonly" -; "abstract" -; "static" -; (accessibility_modifier) -; ]* @context -; name: (_) @name) @item +( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (class_declaration + "class" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (method_definition + [ + "get" + "set" + "async" + "*" + "readonly" + "static" + (override_modifier) + (accessibility_modifier) + ]* @name + name: (_) @name) @item + ) From 2dae42b1ba49b4e10fe13826674610774078454f Mon Sep 17 00:00:00 2001 From: KCaverly Date: Fri, 14 Jul 2023 14:25:08 -0400 Subject: [PATCH 009/120] update embedding query for tsx to accomodate for leading comments --- crates/zed/src/languages/tsx/embedding.scm | 87 ++++++++++++++-------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/crates/zed/src/languages/tsx/embedding.scm b/crates/zed/src/languages/tsx/embedding.scm index 305f634e04..1c47a5a238 100644 --- a/crates/zed/src/languages/tsx/embedding.scm +++ b/crates/zed/src/languages/tsx/embedding.scm @@ -1,35 +1,56 @@ -(enum_declaration - "enum" @context - name: (_) @name) @item +( + (comment)* @context + . + (enum_declaration + "enum" @context + name: (_) @name) @item + ) -(function_declaration - "async"? @context - "function" @context - name: (_) @name) @item - -(interface_declaration - "interface" @context - name: (_) @name) @item - -(program - (lexical_declaration - ["let" "const"] @context - (variable_declarator - name: (_) @name) @item)) - -(class_declaration - "class" @context - name: (_) @name) @item - -(method_definition +( + (comment)* @context + . [ - "get" - "set" - "async" - "*" - "readonly" - "static" - (override_modifier) - (accessibility_modifier) - ]* @context - name: (_) @name) @item + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name) + ) @item + (function_declaration + "async"? @name + "function" @name + name: (_) @name) @item + ]) + +( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (class_declaration + "class" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (method_definition + [ + "get" + "set" + "async" + "*" + "readonly" + "static" + (override_modifier) + (accessibility_modifier) + ]* @name + name: (_) @name) @item + ) From 4bece54655980ac9c2f6ec5266e9bfc9306cc422 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 09:22:37 -0400 Subject: [PATCH 010/120] update jsx family of languages for preceeding comments and nested exports --- Cargo.lock | 2 + crates/vector_store/Cargo.toml | 5 +- crates/vector_store/src/vector_store_tests.rs | 242 +++++++++++++++++- .../src/languages/javascript/embedding.scm | 123 +++++---- crates/zed/src/languages/tsx/embedding.scm | 91 +++++-- .../src/languages/typescript/embedding.scm | 91 +++++-- 6 files changed, 456 insertions(+), 98 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 239aa6a302..b6049e611e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8508,7 +8508,9 @@ dependencies = [ "theme", "tiktoken-rs 0.5.0", "tree-sitter", + "tree-sitter-javascript", "tree-sitter-rust", + "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", "unindent", "util", "workspace", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index bac9cdedfa..6b2e77e904 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -44,10 +44,13 @@ project = { path = "../project", features = ["test-support"] } rpc = { path = "../rpc", features = ["test-support"] } workspace = { path = "../workspace", features = ["test-support"] } settings = { path = "../settings", features = ["test-support"]} -tree-sitter-rust = "*" rand.workspace = true unindent.workspace = true tempdir.workspace = true ctor.workspace = true env_logger.workspace = true + +tree-sitter-javascript = "*" +tree-sitter-typescript = "*" +tree-sitter-rust = "*" diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index de82bc2f48..76465b1aaf 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -144,7 +144,7 @@ async fn test_vector_store(cx: &mut TestAppContext) { } #[gpui::test] -async fn test_code_context_retrieval() { +async fn test_code_context_retrieval_rust() { let language = rust_lang(); let mut retriever = CodeContextRetriever::new(); @@ -200,6 +200,142 @@ async fn test_code_context_retrieval() { ); } +#[gpui::test] +async fn test_code_context_retrieval_javascript() { + let language = js_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = " +/* globals importScripts, backend */ +function _authorize() {} + +/** + * Sometimes the frontend build is way faster than backend. + */ +export async function authorizeBank() { + _authorize(pushModal, upgradingAccountId, {}); +} + +export class SettingsPage { + /* This is a test setting */ + constructor(page) { + this.page = page; + } +} + +/* This is a test comment */ +class TestClass {} + +/* Schema for editor_events in Clickhouse. */ +export interface ClickhouseEditorEvent { + installation_id: string + operation: string +} +"; + + let parsed_files = retriever + .parse_file(Path::new("foo.js"), &text, language) + .unwrap(); + + let test_documents = &[ + Document { + name: "function _authorize".into(), + range: text.find("function _authorize").unwrap()..(text.find("}").unwrap() + 1), + content: " + The below code snippet is from file 'foo.js' + + ```javascript + /* globals importScripts, backend */ + function _authorize() {} + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "async function authorizeBank".into(), + range: text.find("export async").unwrap()..224, + content: " + The below code snippet is from file 'foo.js' + + ```javascript + /** + * Sometimes the frontend build is way faster than backend. + */ + export async function authorizeBank() { + _authorize(pushModal, upgradingAccountId, {}); + } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "class SettingsPage".into(), + range: 226..344, + content: " + The below code snippet is from file 'foo.js' + + ```javascript + export class SettingsPage { + /* This is a test setting */ + constructor(page) { + this.page = page; + } + } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "constructor".into(), + range: 291..342, + content: " + The below code snippet is from file 'foo.js' + + ```javascript + /* This is a test setting */ + constructor(page) { + this.page = page; + } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "class TestClass".into(), + range: 375..393, + content: " + The below code snippet is from file 'foo.js' + + ```javascript + /* This is a test comment */ + class TestClass {} + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "interface ClickhouseEditorEvent".into(), + range: 441..533, + content: " + The below code snippet is from file 'foo.js' + + ```javascript + /* Schema for editor_events in Clickhouse. */ + export interface ClickhouseEditorEvent { + installation_id: string + operation: string + } + ```" + .unindent(), + embedding: vec![], + }, + ]; + + for idx in 0..test_documents.len() { + assert_eq!(test_documents[idx], parsed_files[idx]); + } +} + #[gpui::test] fn test_dot_product(mut rng: StdRng) { assert_eq!(dot(&[1., 0., 0., 0., 0.], &[0., 1., 0., 0., 0.]), 0.); @@ -271,6 +407,110 @@ impl EmbeddingProvider for FakeEmbeddingProvider { } } +fn js_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "Javascript".into(), + path_suffixes: vec!["js".into()], + ..Default::default() + }, + Some(tree_sitter_typescript::language_tsx()), + ) + .with_embedding_query( + &r#" + + ( + (comment)* @context + . + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) @item + ) + + ( + (comment)* @context + . + (function_declaration + "async"? @name + "function" @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (export_statement + (class_declaration + "class" @name + name: (_) @name)) @item + ) + + ( + (comment)* @context + . + (class_declaration + "class" @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (method_definition + [ + "get" + "set" + "async" + "*" + "static" + ]* @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) @item + ) + + ( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) @item + ) + + ( + (comment)* @context + . + (enum_declaration + "enum" @name + name: (_) @name) @item + ) + + "# + .unindent(), + ) + .unwrap(), + ) +} + fn rust_lang() -> Arc { Arc::new( Language::new( diff --git a/crates/zed/src/languages/javascript/embedding.scm b/crates/zed/src/languages/javascript/embedding.scm index ec6eb5ab1a..a214040031 100644 --- a/crates/zed/src/languages/javascript/embedding.scm +++ b/crates/zed/src/languages/javascript/embedding.scm @@ -1,56 +1,83 @@ -; (internal_module -; "namespace" @context -; name: (_) @name) @item +( + (comment)* @context + . + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) @item + ) -(enum_declaration - "enum" @context - name: (_) @name) @item +( + (comment)* @context + . + (function_declaration + "async"? @name + "function" @name + name: (_) @name) @item + ) -(function_declaration - "async"? @context - "function" @context - name: (_) @name) @item +( + (comment)* @context + . + (export_statement + (class_declaration + "class" @name + name: (_) @name)) @item + ) -(interface_declaration - "interface" @context - name: (_) @name) @item +( + (comment)* @context + . + (class_declaration + "class" @name + name: (_) @name) @item + ) -; (program -; (export_statement -; (lexical_declaration -; ["let" "const"] @context -; (variable_declarator -; name: (_) @name) @item))) +( + (comment)* @context + . + (method_definition + [ + "get" + "set" + "async" + "*" + "static" + ]* @name + name: (_) @name) @item + ) -(program - (lexical_declaration - ["let" "const"] @context - (variable_declarator - name: (_) @name) @item)) +( + (comment)* @context + . + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) @item + ) -(class_declaration - "class" @context - name: (_) @name) @item +( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) -(method_definition - [ - "get" - "set" - "async" - "*" - "readonly" - "static" - (override_modifier) - (accessibility_modifier) - ]* @context - name: (_) @name) @item +( + (comment)* @context + . + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) @item + ) -; (public_field_definition -; [ -; "declare" -; "readonly" -; "abstract" -; "static" -; (accessibility_modifier) -; ]* @context -; name: (_) @name) @item +( + (comment)* @context + . + (enum_declaration + "enum" @name + name: (_) @name) @item + ) diff --git a/crates/zed/src/languages/tsx/embedding.scm b/crates/zed/src/languages/tsx/embedding.scm index 1c47a5a238..4bb4fea254 100644 --- a/crates/zed/src/languages/tsx/embedding.scm +++ b/crates/zed/src/languages/tsx/embedding.scm @@ -1,33 +1,29 @@ ( (comment)* @context . - (enum_declaration - "enum" @context + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (function_declaration + "async"? @name + "function" @name name: (_) @name) @item ) ( (comment)* @context . - [ - (export_statement - (function_declaration - "async"? @name - "function" @name - name: (_) @name) - ) @item - (function_declaration - "async"? @name - "function" @name - name: (_) @name) @item - ]) - -( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item + (export_statement + (class_declaration + "class" @name + name: (_) @name)) @item ) ( @@ -47,10 +43,57 @@ "set" "async" "*" - "readonly" "static" - (override_modifier) - (accessibility_modifier) ]* @name name: (_) @name) @item ) + +( + (comment)* @context + . + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (enum_declaration + "enum" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (export_statement + (type_alias_declaration + "type" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (type_alias_declaration + "type" @name + name: (_) @name) @item) diff --git a/crates/zed/src/languages/typescript/embedding.scm b/crates/zed/src/languages/typescript/embedding.scm index d850f9b823..4bb4fea254 100644 --- a/crates/zed/src/languages/typescript/embedding.scm +++ b/crates/zed/src/languages/typescript/embedding.scm @@ -1,33 +1,29 @@ ( (comment)* @context . - (enum_declaration - "enum" @context + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (function_declaration + "async"? @name + "function" @name name: (_) @name) @item ) ( (comment)* @context . - [ - (export_statement - (function_declaration - "async"? @name - "function" @name - name: (_) @name) - ) @item - (function_declaration - "async"? @name - "function" @name - name: (_) @name) @item - ]) - -( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item + (export_statement + (class_declaration + "class" @name + name: (_) @name)) @item ) ( @@ -47,10 +43,57 @@ "set" "async" "*" - "readonly" "static" - (override_modifier) - (accessibility_modifier) ]* @name name: (_) @name) @item ) + +( + (comment)* @context + . + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (interface_declaration + "interface" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (enum_declaration + "enum" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (export_statement + (type_alias_declaration + "type" @name + name: (_) @name)) @item + ) + +( + (comment)* @context + . + (type_alias_declaration + "type" @name + name: (_) @name) @item) From cf0dd09b5cdd9fd18c06d43a6774121cb86ce544 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 10:04:32 -0400 Subject: [PATCH 011/120] update vector_store to accomodate for full file parsing for JSON, TOML and YAML files --- Cargo.lock | 14 ++++++++-- crates/vector_store/Cargo.toml | 2 +- crates/vector_store/src/parsing.rs | 26 +++++++++++++++++++ crates/vector_store/src/vector_store.rs | 11 ++++---- crates/vector_store/src/vector_store_tests.rs | 18 ++++++++++++- 5 files changed, 62 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b6049e611e..afd40fd308 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8134,6 +8134,16 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-toml" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca517f578a98b23d20780247cc2688407fa81effad5b627a5a364ec3339b53e8" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-typescript" version = "0.20.2" @@ -8508,8 +8518,8 @@ dependencies = [ "theme", "tiktoken-rs 0.5.0", "tree-sitter", - "tree-sitter-javascript", "tree-sitter-rust", + "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", "unindent", "util", @@ -9560,7 +9570,7 @@ dependencies = [ "tree-sitter-ruby", "tree-sitter-rust", "tree-sitter-scheme", - "tree-sitter-toml", + "tree-sitter-toml 0.5.1", "tree-sitter-typescript 0.20.2 (git+https://github.com/tree-sitter/tree-sitter-typescript?rev=5d20856f34315b068c41edaee2ac8a100081d259)", "tree-sitter-yaml", "unindent", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index 6b2e77e904..31119a1ba6 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -51,6 +51,6 @@ tempdir.workspace = true ctor.workspace = true env_logger.workspace = true -tree-sitter-javascript = "*" tree-sitter-typescript = "*" tree-sitter-rust = "*" +tree-sitter-toml = "*" diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 4ce8b6763a..216ef1b5e1 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -13,6 +13,9 @@ pub struct Document { const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; +const ENTIRE_FILE_TEMPLATE: &str = + "The below snippet is from file ''\n\n```\n\n```"; +pub const PARSEABLE_ENTIRE_FILE_TYPES: [&str; 3] = ["TOML", "YAML", "JSON"]; pub struct CodeContextRetriever { pub parser: Parser, @@ -27,12 +30,35 @@ impl CodeContextRetriever { } } + fn _parse_entire_file( + &self, + relative_path: &Path, + language_name: Arc, + content: &str, + ) -> Result> { + let document_span = ENTIRE_FILE_TEMPLATE + .replace("", relative_path.to_string_lossy().as_ref()) + .replace("", language_name.as_ref()) + .replace("item", &content); + + Ok(vec![Document { + range: 0..content.len(), + content: document_span, + embedding: Vec::new(), + name: language_name.to_string(), + }]) + } + pub fn parse_file( &mut self, relative_path: &Path, content: &str, language: Arc, ) -> Result> { + if PARSEABLE_ENTIRE_FILE_TYPES.contains(&language.name().as_ref()) { + return self._parse_entire_file(relative_path, language.name(), &content); + } + let grammar = language .grammar() .ok_or_else(|| anyhow!("no grammar for language"))?; diff --git a/crates/vector_store/src/vector_store.rs b/crates/vector_store/src/vector_store.rs index 3f7ab5c6cd..0f55bd9e63 100644 --- a/crates/vector_store/src/vector_store.rs +++ b/crates/vector_store/src/vector_store.rs @@ -19,7 +19,7 @@ use gpui::{ use language::{Language, LanguageRegistry}; use modal::{SemanticSearch, SemanticSearchDelegate, Toggle}; use parking_lot::Mutex; -use parsing::{CodeContextRetriever, Document}; +use parsing::{CodeContextRetriever, Document, PARSEABLE_ENTIRE_FILE_TYPES}; use project::{Fs, Project, WorktreeId}; use smol::channel; use std::{ @@ -537,10 +537,11 @@ impl VectorStore { .language_for_file(&absolute_path, None) .await { - if language - .grammar() - .and_then(|grammar| grammar.embedding_config.as_ref()) - .is_none() + if !PARSEABLE_ENTIRE_FILE_TYPES.contains(&language.name().as_ref()) + && language + .grammar() + .and_then(|grammar| grammar.embedding_config.as_ref()) + .is_none() { continue; } diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index 76465b1aaf..84c9962493 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -56,6 +56,9 @@ async fn test_vector_store(cx: &mut TestAppContext) { println!(\"bbbb!\"); } ".unindent(), + "file3.toml": " + ZZZZZZZ = 5 + ".unindent(), } }), ) @@ -63,7 +66,9 @@ async fn test_vector_store(cx: &mut TestAppContext) { let languages = Arc::new(LanguageRegistry::new(Task::ready(()))); let rust_language = rust_lang(); + let toml_language = toml_lang(); languages.add(rust_language); + languages.add(toml_language); let db_dir = tempdir::TempDir::new("vector-store").unwrap(); let db_path = db_dir.path().join("db.sqlite"); @@ -87,7 +92,7 @@ async fn test_vector_store(cx: &mut TestAppContext) { .update(cx, |store, cx| store.index_project(project.clone(), cx)) .await .unwrap(); - assert_eq!(file_count, 2); + assert_eq!(file_count, 3); cx.foreground().run_until_parked(); store.update(cx, |store, _cx| { assert_eq!( @@ -578,3 +583,14 @@ fn rust_lang() -> Arc { .unwrap(), ) } + +fn toml_lang() -> Arc { + Arc::new(Language::new( + LanguageConfig { + name: "TOML".into(), + path_suffixes: vec!["toml".into()], + ..Default::default() + }, + Some(tree_sitter_toml::language()), + )) +} From cb8762d855d27de1a422090fd4a1fabb8944152b Mon Sep 17 00:00:00 2001 From: Sergey Onufrienko Date: Mon, 17 Jul 2023 17:54:37 +0100 Subject: [PATCH 012/120] chore: add theme types docs --- docs/theme/generating-theme-types.md | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/theme/generating-theme-types.md diff --git a/docs/theme/generating-theme-types.md b/docs/theme/generating-theme-types.md new file mode 100644 index 0000000000..efebc8d21d --- /dev/null +++ b/docs/theme/generating-theme-types.md @@ -0,0 +1,29 @@ +[⬅ Back to Index](../index.md) + +# Generating Theme Types + + +## How to generate theme types: + +Run a script + +```bash +./script/build-theme-types +``` + +Types are generated in `styles/src/types/zed.ts` + + +## How it works: + +1. Rust types + + The `crates/theme` contains theme types. + Crate `schemars` used to generate a JSON schema from the theme structs. + Every struct that represent theme type has a `#[derive(JsonSchema)]` attribute. + + Task lotaked at `crates/xtask/src/main.rs` generates a JSON schema from the theme structs. + +2. TypeScript types + + Script `npm run build-types` from `styles` package generates TypeScript types from the JSON schema and saves them to `styles/src/types/zed.ts`. From 1362c5a3d9753702820bc615dcfd4a4b261f0a3f Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 14:43:29 -0400 Subject: [PATCH 013/120] add embedding treesitter query for cpp --- Cargo.lock | 1 + crates/vector_store/Cargo.toml | 1 + crates/vector_store/src/vector_store_tests.rs | 310 ++++++++++++++++-- crates/zed/src/languages/cpp/embedding.scm | 61 ++++ 4 files changed, 346 insertions(+), 27 deletions(-) create mode 100644 crates/zed/src/languages/cpp/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index afd40fd308..28a0e76d14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8518,6 +8518,7 @@ dependencies = [ "theme", "tiktoken-rs 0.5.0", "tree-sitter", + "tree-sitter-cpp", "tree-sitter-rust", "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index 31119a1ba6..0009665e26 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -54,3 +54,4 @@ env_logger.workspace = true tree-sitter-typescript = "*" tree-sitter-rust = "*" tree-sitter-toml = "*" +tree-sitter-cpp = "*" diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index 84c9962493..3a9e1748c5 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -211,32 +211,33 @@ async fn test_code_context_retrieval_javascript() { let mut retriever = CodeContextRetriever::new(); let text = " -/* globals importScripts, backend */ -function _authorize() {} + /* globals importScripts, backend */ + function _authorize() {} -/** - * Sometimes the frontend build is way faster than backend. - */ -export async function authorizeBank() { - _authorize(pushModal, upgradingAccountId, {}); -} + /** + * Sometimes the frontend build is way faster than backend. + */ + export async function authorizeBank() { + _authorize(pushModal, upgradingAccountId, {}); + } -export class SettingsPage { - /* This is a test setting */ - constructor(page) { - this.page = page; - } -} + export class SettingsPage { + /* This is a test setting */ + constructor(page) { + this.page = page; + } + } -/* This is a test comment */ -class TestClass {} + /* This is a test comment */ + class TestClass {} -/* Schema for editor_events in Clickhouse. */ -export interface ClickhouseEditorEvent { - installation_id: string - operation: string -} -"; + /* Schema for editor_events in Clickhouse. */ + export interface ClickhouseEditorEvent { + installation_id: string + operation: string + } + " + .unindent(); let parsed_files = retriever .parse_file(Path::new("foo.js"), &text, language) @@ -258,7 +259,7 @@ export interface ClickhouseEditorEvent { }, Document { name: "async function authorizeBank".into(), - range: text.find("export async").unwrap()..224, + range: text.find("export async").unwrap()..223, content: " The below code snippet is from file 'foo.js' @@ -275,7 +276,7 @@ export interface ClickhouseEditorEvent { }, Document { name: "class SettingsPage".into(), - range: 226..344, + range: 225..343, content: " The below code snippet is from file 'foo.js' @@ -292,7 +293,7 @@ export interface ClickhouseEditorEvent { }, Document { name: "constructor".into(), - range: 291..342, + range: 290..341, content: " The below code snippet is from file 'foo.js' @@ -307,7 +308,7 @@ export interface ClickhouseEditorEvent { }, Document { name: "class TestClass".into(), - range: 375..393, + range: 374..392, content: " The below code snippet is from file 'foo.js' @@ -320,7 +321,7 @@ export interface ClickhouseEditorEvent { }, Document { name: "interface ClickhouseEditorEvent".into(), - range: 441..533, + range: 440..532, content: " The below code snippet is from file 'foo.js' @@ -341,6 +342,181 @@ export interface ClickhouseEditorEvent { } } +#[gpui::test] +async fn test_code_context_retrieval_cpp() { + let language = cpp_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = " + /** + * @brief Main function + * @returns 0 on exit + */ + int main() { return 0; } + + /** + * This is a test comment + */ + class MyClass { // The class + public: // Access specifier + int myNum; // Attribute (int variable) + string myString; // Attribute (string variable) + }; + + // This is a test comment + enum Color { red, green, blue }; + + /** This is a preceeding block comment + * This is the second line + */ + struct { // Structure declaration + int myNum; // Member (int variable) + string myString; // Member (string variable) + } myStructure; + + /** + * @brief Matrix class. + */ + template ::value || std::is_floating_point::value, + bool>::type> + class Matrix2 { + std::vector> _mat; + + public: + /** + * @brief Constructor + * @tparam Integer ensuring integers are being evaluated and not other + * data types. + * @param size denoting the size of Matrix as size x size + */ + template ::value, + Integer>::type> + explicit Matrix(const Integer size) { + for (size_t i = 0; i < size; ++i) { + _mat.emplace_back(std::vector(size, 0)); + } + } + }" + .unindent(); + + let parsed_files = retriever + .parse_file(Path::new("foo.cpp"), &text, language) + .unwrap(); + + let test_documents = &[ + Document { + name: "int main".into(), + range: 54..78, + content: " + The below code snippet is from file 'foo.cpp' + + ```cpp + /** + * @brief Main function + * @returns 0 on exit + */ + int main() { return 0; } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "class MyClass".into(), + range: 112..295, + content: " + The below code snippet is from file 'foo.cpp' + + ```cpp + /** + * This is a test comment + */ + class MyClass { // The class + public: // Access specifier + int myNum; // Attribute (int variable) + string myString; // Attribute (string variable) + } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "enum Color".into(), + range: 324..355, + content: " + The below code snippet is from file 'foo.cpp' + + ```cpp + // This is a test comment + enum Color { red, green, blue } + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "struct myStructure".into(), + range: 428..581, + content: " + The below code snippet is from file 'foo.cpp' + + ```cpp + /** This is a preceeding block comment + * This is the second line + */ + struct { // Structure declaration + int myNum; // Member (int variable) + string myString; // Member (string variable) + } myStructure; + ```" + .unindent(), + embedding: vec![], + }, + Document { + name: "class Matrix2".into(), + range: 613..1342, + content: " + The below code snippet is from file 'foo.cpp' + + ```cpp + /** + * @brief Matrix class. + */ + template ::value || std::is_floating_point::value, + bool>::type> + class Matrix2 { + std::vector> _mat; + + public: + /** + * @brief Constructor + * @tparam Integer ensuring integers are being evaluated and not other + * data types. + * @param size denoting the size of Matrix as size x size + */ + template ::value, + Integer>::type> + explicit Matrix(const Integer size) { + for (size_t i = 0; i < size; ++i) { + _mat.emplace_back(std::vector(size, 0)); + } + } + } + ```" + .unindent(), + embedding: vec![], + }, + ]; + + for idx in 0..test_documents.len() { + assert_eq!(test_documents[idx], parsed_files[idx]); + } +} + #[gpui::test] fn test_dot_product(mut rng: StdRng) { assert_eq!(dot(&[1., 0., 0., 0., 0.], &[0., 1., 0., 0., 0.]), 0.); @@ -594,3 +770,83 @@ fn toml_lang() -> Arc { Some(tree_sitter_toml::language()), )) } + +fn cpp_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "CPP".into(), + path_suffixes: vec!["cpp".into()], + ..Default::default() + }, + Some(tree_sitter_cpp::language()), + ) + .with_embedding_query( + r#" + ( + (comment)* @context + . + (function_definition + (type_qualifier)? @name + type: (_)? @name + declarator: [ + (function_declarator + declarator: (_) @name) + (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name)) + (pointer_declarator + "*" @name + declarator: (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name))) + (reference_declarator + ["&" "&&"] @name + (function_declarator + declarator: (_) @name)) + ] + (type_qualifier)? @name) @item + ) + + ( + (comment)* @context + . + (template_declaration + (class_specifier + "class" @name + name: (_) @name) + ) @item + ) + + ( + (comment)* @context + . + (class_specifier + "class" @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (enum_specifier + "enum" @name + name: (_) @name) @item + ) + + ( + (comment)* @context + . + (declaration + type: (struct_specifier + "struct" @name) + declarator: (_) @name) @item + ) + + "#, + ) + .unwrap(), + ) +} diff --git a/crates/zed/src/languages/cpp/embedding.scm b/crates/zed/src/languages/cpp/embedding.scm new file mode 100644 index 0000000000..bbd93f20db --- /dev/null +++ b/crates/zed/src/languages/cpp/embedding.scm @@ -0,0 +1,61 @@ +( + (comment)* @context + . + (function_definition + (type_qualifier)? @name + type: (_)? @name + declarator: [ + (function_declarator + declarator: (_) @name) + (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name)) + (pointer_declarator + "*" @name + declarator: (pointer_declarator + "*" @name + declarator: (function_declarator + declarator: (_) @name))) + (reference_declarator + ["&" "&&"] @name + (function_declarator + declarator: (_) @name)) + ] + (type_qualifier)? @name) @item + ) + +( + (comment)* @context + . + (template_declaration + (class_specifier + "class" @name + name: (_) @name) + ) @item +) + +( + (comment)* @context + . + (class_specifier + "class" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (enum_specifier + "enum" @name + name: (_) @name) @item + ) + +( + (comment)* @context + . + (declaration + type: (struct_specifier + "struct" @name) + declarator: (_) @name) @item +) From f0bf60fdedc56ec594a5e60f4442e8eb5a998c0b Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 14:53:57 -0400 Subject: [PATCH 014/120] add css as a embeddable file type in which the entire file is embedded individually --- crates/vector_store/src/parsing.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vector_store/src/parsing.rs b/crates/vector_store/src/parsing.rs index 216ef1b5e1..663f0f473b 100644 --- a/crates/vector_store/src/parsing.rs +++ b/crates/vector_store/src/parsing.rs @@ -15,7 +15,7 @@ const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; const ENTIRE_FILE_TEMPLATE: &str = "The below snippet is from file ''\n\n```\n\n```"; -pub const PARSEABLE_ENTIRE_FILE_TYPES: [&str; 3] = ["TOML", "YAML", "JSON"]; +pub const PARSEABLE_ENTIRE_FILE_TYPES: [&str; 4] = ["TOML", "YAML", "JSON", "CSS"]; pub struct CodeContextRetriever { pub parser: Parser, From e630ff38c4f4099e4e9c8d926c6a75c3e364fc58 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 16:29:25 -0400 Subject: [PATCH 015/120] add embedding treesitter queries for elixir --- Cargo.lock | 13 +- crates/vector_store/Cargo.toml | 1 + crates/vector_store/src/vector_store_tests.rs | 182 ++++++++++++++++++ crates/zed/src/languages/elixir/embedding.scm | 27 +++ 4 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 crates/zed/src/languages/elixir/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index 28a0e76d14..8fcca507d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7982,6 +7982,16 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-elixir" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9916f3e1c80b3c8aab8582604e97e8720cb9b893489b347cf999f80f9d469e" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-elixir" version = "0.1.0" @@ -8519,6 +8529,7 @@ dependencies = [ "tiktoken-rs 0.5.0", "tree-sitter", "tree-sitter-cpp", + "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tree-sitter-rust", "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -9558,7 +9569,7 @@ dependencies = [ "tree-sitter-c", "tree-sitter-cpp", "tree-sitter-css", - "tree-sitter-elixir", + "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", "tree-sitter-embedded-template", "tree-sitter-go", "tree-sitter-heex", diff --git a/crates/vector_store/Cargo.toml b/crates/vector_store/Cargo.toml index 0009665e26..6808f6c630 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/vector_store/Cargo.toml @@ -55,3 +55,4 @@ tree-sitter-typescript = "*" tree-sitter-rust = "*" tree-sitter-toml = "*" tree-sitter-cpp = "*" +tree-sitter-elixir = "*" diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/vector_store/src/vector_store_tests.rs index 3a9e1748c5..d55dfcfc71 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/vector_store/src/vector_store_tests.rs @@ -342,6 +342,143 @@ async fn test_code_context_retrieval_javascript() { } } +#[gpui::test] +async fn test_code_context_retrieval_elixir() { + let language = elixir_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = r#" +defmodule File.Stream do + @moduledoc """ + Defines a `File.Stream` struct returned by `File.stream!/3`. + + The following fields are public: + + * `path` - the file path + * `modes` - the file modes + * `raw` - a boolean indicating if bin functions should be used + * `line_or_bytes` - if reading should read lines or a given number of bytes + * `node` - the node the file belongs to + + """ + + defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil + + @type t :: %__MODULE__{} + + @doc false + def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false + + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end + + false -> + modes + end + + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} + + end +"# + .unindent(); + + let parsed_files = retriever + .parse_file(Path::new("foo.ex"), &text, language) + .unwrap(); + + let test_documents = &[ + Document{ + name: "defmodule File.Stream".into(), + range: 0..1132, + content: r#" + The below code snippet is from file 'foo.ex' + + ```elixir + defmodule File.Stream do + @moduledoc """ + Defines a `File.Stream` struct returned by `File.stream!/3`. + + The following fields are public: + + * `path` - the file path + * `modes` - the file modes + * `raw` - a boolean indicating if bin functions should be used + * `line_or_bytes` - if reading should read lines or a given number of bytes + * `node` - the node the file belongs to + + """ + + defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil + + @type t :: %__MODULE__{} + + @doc false + def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false + + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end + + false -> + modes + end + + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} + + end + ```"#.unindent(), + embedding: vec![], + }, + Document { + name: "def __build__".into(), + range: 574..1132, + content: r#" +The below code snippet is from file 'foo.ex' + +```elixir +@doc false +def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false + + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end + + false -> + modes + end + + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} + + end +```"# + .unindent(), + embedding: vec![], + }]; + + for idx in 0..test_documents.len() { + assert_eq!(test_documents[idx], parsed_files[idx]); + } +} + #[gpui::test] async fn test_code_context_retrieval_cpp() { let language = cpp_lang(); @@ -850,3 +987,48 @@ fn cpp_lang() -> Arc { .unwrap(), ) } + +fn elixir_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "Elixir".into(), + path_suffixes: vec!["rs".into()], + ..Default::default() + }, + Some(tree_sitter_elixir::language()), + ) + .with_embedding_query( + r#" + ( + (unary_operator + operator: "@" + operand: (call + target: (identifier) @unary + (#match? @unary "^(doc)$")) + ) @context + . + (call + target: (identifier) @name + (arguments + [ + (identifier) @name + (call + target: (identifier) @name) + (binary_operator + left: (call + target: (identifier) @name) + operator: "when") + ]) + (#match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + ) + + (call + target: (identifier) @name + (arguments (alias) @name) + (#match? @name "^(defmodule|defprotocol)$")) @item + "#, + ) + .unwrap(), + ) +} diff --git a/crates/zed/src/languages/elixir/embedding.scm b/crates/zed/src/languages/elixir/embedding.scm new file mode 100644 index 0000000000..16ad20746d --- /dev/null +++ b/crates/zed/src/languages/elixir/embedding.scm @@ -0,0 +1,27 @@ +( + (unary_operator + operator: "@" + operand: (call + target: (identifier) @unary + (#match? @unary "^(doc)$")) + ) @context + . + (call + target: (identifier) @name + (arguments + [ + (identifier) @name + (call + target: (identifier) @name) + (binary_operator + left: (call + target: (identifier) @name) + operator: "when") + ]) + (#match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + ) + + (call + target: (identifier) @name + (arguments (alias) @name) + (#match? @name "^(defmodule|defprotocol)$")) @item From 8b42f5b1b379e175a599067654724b8d6ea48f35 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 17:06:10 -0400 Subject: [PATCH 016/120] rename vector_store crate to semantic_index --- Cargo.lock | 274 +++++++++--------- Cargo.toml | 2 +- assets/settings/default.json | 4 +- .../Cargo.toml | 4 +- .../README.md | 0 .../src/db.rs | 16 +- .../src/embedding.rs | 0 .../src/modal.rs | 12 +- .../src/parsing.rs | 0 .../src/semantic_index.rs} | 33 ++- .../src/semantic_index_settings.rs} | 10 +- .../src/semantic_index_tests.rs} | 10 +- crates/zed/Cargo.toml | 2 +- crates/zed/src/main.rs | 2 +- 14 files changed, 186 insertions(+), 183 deletions(-) rename crates/{vector_store => semantic_index}/Cargo.toml (96%) rename crates/{vector_store => semantic_index}/README.md (100%) rename crates/{vector_store => semantic_index}/src/db.rs (95%) rename crates/{vector_store => semantic_index}/src/embedding.rs (100%) rename crates/{vector_store => semantic_index}/src/modal.rs (95%) rename crates/{vector_store => semantic_index}/src/parsing.rs (100%) rename crates/{vector_store/src/vector_store.rs => semantic_index/src/semantic_index.rs} (96%) rename crates/{vector_store/src/vector_store_settings.rs => semantic_index/src/semantic_index_settings.rs} (71%) rename crates/{vector_store/src/vector_store_tests.rs => semantic_index/src/semantic_index_tests.rs} (99%) diff --git a/Cargo.lock b/Cargo.lock index 8fcca507d1..430a665f98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -179,9 +179,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "alsa" @@ -277,9 +277,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "arrayref" @@ -481,7 +481,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -529,7 +529,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -572,7 +572,7 @@ checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -680,7 +680,7 @@ dependencies = [ "http", "http-body", "hyper", - "itoa 1.0.8", + "itoa 1.0.9", "matchit", "memchr", "mime", @@ -830,7 +830,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.25", + "syn 2.0.26", "which", ] @@ -1243,20 +1243,20 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.11" +version = "4.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d" +checksum = "98330784c494e49850cb23b8e2afcca13587d2500b2e3f1f78ae20248059c9be" dependencies = [ "clap_builder", - "clap_derive 4.3.2", + "clap_derive 4.3.12", "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.11" +version = "4.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b" +checksum = "e182eb5f2562a67dda37e2c57af64d720a9e010c5e860ed87c056586aeafa52e" dependencies = [ "anstream", "anstyle", @@ -1279,14 +1279,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -1357,7 +1357,7 @@ dependencies = [ "tiny_http", "url", "util", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -2204,9 +2204,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" [[package]] name = "editor" @@ -2319,9 +2319,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f94c0e13118e7d7533271f754a168ae8400e6a1cc043f2bfd53cc7290f1a1de3" +checksum = "da96524cc884f6558f1769b6c46686af2fe8e8b4cd253bd5a3cdba8181b8e070" dependencies = [ "serde", ] @@ -2789,7 +2789,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -3033,7 +3033,7 @@ dependencies = [ "tiny-skia", "usvg", "util", - "uuid 1.4.0", + "uuid 1.4.1", "waker-fn", ] @@ -3235,7 +3235,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes 1.4.0", "fnv", - "itoa 1.0.8", + "itoa 1.0.9", ] [[package]] @@ -3294,7 +3294,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.8", + "itoa 1.0.9", "pin-project-lite 0.2.10", "socket2", "tokio", @@ -3499,7 +3499,7 @@ dependencies = [ "rand 0.7.3", "serde", "tempfile", - "uuid 1.4.0", + "uuid 1.4.1", "winapi 0.3.9", ] @@ -3576,9 +3576,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "ittapi-rs" @@ -4722,7 +4722,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -4886,9 +4886,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pathfinder_color" @@ -4952,9 +4952,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9" +checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5" dependencies = [ "thiserror", "ucd-trie", @@ -5010,7 +5010,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -5163,7 +5163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92139198957b410250d43fad93e630d956499a625c527eda65175c8680f83387" dependencies = [ "proc-macro2", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -5211,9 +5211,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -5491,9 +5491,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.29" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" dependencies = [ "proc-macro2", ] @@ -5879,7 +5879,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -6034,7 +6034,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.25", + "syn 2.0.26", "walkdir", ] @@ -6097,7 +6097,7 @@ dependencies = [ "bitflags 1.3.2", "errno 0.2.8", "io-lifetimes 0.5.3", - "itoa 1.0.8", + "itoa 1.0.9", "libc", "linux-raw-sys 0.0.42", "once_cell", @@ -6167,9 +6167,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rustybuzz" @@ -6189,9 +6189,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safe_arch" @@ -6267,9 +6267,9 @@ checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" @@ -6329,7 +6329,7 @@ dependencies = [ "time 0.3.23", "tracing", "url", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -6355,7 +6355,7 @@ dependencies = [ "sea-query-derive", "serde_json", "time 0.3.23", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -6370,7 +6370,7 @@ dependencies = [ "serde_json", "sqlx", "time 0.3.23", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -6465,6 +6465,48 @@ dependencies = [ "libc", ] +[[package]] +name = "semantic_index" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "ctor", + "editor", + "env_logger 0.9.3", + "futures 0.3.28", + "gpui", + "isahc", + "language", + "lazy_static", + "log", + "matrixmultiply", + "parking_lot 0.11.2", + "picker", + "project", + "rand 0.8.5", + "rpc", + "rusqlite", + "schemars", + "serde", + "serde_json", + "settings", + "smol", + "tempdir", + "theme", + "tiktoken-rs 0.5.0", + "tree-sitter", + "tree-sitter-cpp", + "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tree-sitter-rust", + "tree-sitter-toml 0.20.0", + "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unindent", + "util", + "workspace", +] + [[package]] name = "semver" version = "0.11.0" @@ -6506,7 +6548,7 @@ checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -6531,12 +6573,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5062a995d481b2308b6064e9af76011f2921c35f97b0468811ed9f6cd91dfed" +checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" dependencies = [ "indexmap 2.0.0", - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "serde", ] @@ -6561,7 +6603,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -6571,7 +6613,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "serde", ] @@ -6702,9 +6744,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +checksum = "b824b6e687aff278cdbf3b36f07aa52d4bd4099699324d5da86a2ebce3aa00b3" dependencies = [ "libc", "signal-hook-registry", @@ -6891,7 +6933,7 @@ dependencies = [ "parking_lot 0.11.2", "smol", "thread_local", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -6957,7 +6999,7 @@ dependencies = [ "hkdf", "hmac 0.12.1", "indexmap 1.9.3", - "itoa 1.0.8", + "itoa 1.0.9", "libc", "libsqlite3-sys", "log", @@ -6983,7 +7025,7 @@ dependencies = [ "time 0.3.23", "tokio-stream", "url", - "uuid 1.4.0", + "uuid 1.4.1", "webpki-roots 0.22.6", "whoami", ] @@ -7041,9 +7083,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stringprep" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -7103,7 +7145,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dc09e9364c2045ab5fa38f7b04d077b3359d30c4c2b3ec4bae67a358bd64326" dependencies = [ - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "sval", ] @@ -7114,7 +7156,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ada6f627e38cbb8860283649509d87bc4a5771141daa41c78fd31f2b9485888d" dependencies = [ - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "sval", ] @@ -7229,9 +7271,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.25" +version = "2.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2" +checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" dependencies = [ "proc-macro2", "quote", @@ -7485,7 +7527,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -7562,7 +7604,7 @@ version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" dependencies = [ - "itoa 1.0.8", + "itoa 1.0.9", "serde", "time-core", "time-macros", @@ -7674,7 +7716,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -7767,9 +7809,9 @@ checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap 2.0.0", "toml_datetime", @@ -7879,7 +7921,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] @@ -8285,9 +8327,9 @@ checksum = "7f9af028e052a610d99e066b33304625dea9613170a2563314490a4e6ec5cf7f" [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -8427,9 +8469,9 @@ checksum = "bcc7e3b898aa6f6c08e5295b6c89258d1331e9ac578cc992fb818759951bdc22" [[package]] name = "uuid" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.10", "serde", @@ -8496,48 +8538,6 @@ dependencies = [ "workspace", ] -[[package]] -name = "vector_store" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "ctor", - "editor", - "env_logger 0.9.3", - "futures 0.3.28", - "gpui", - "isahc", - "language", - "lazy_static", - "log", - "matrixmultiply", - "parking_lot 0.11.2", - "picker", - "project", - "rand 0.8.5", - "rpc", - "rusqlite", - "schemars", - "serde", - "serde_json", - "settings", - "smol", - "tempdir", - "theme", - "tiktoken-rs 0.5.0", - "tree-sitter", - "tree-sitter-cpp", - "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tree-sitter-rust", - "tree-sitter-toml 0.20.0", - "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unindent", - "util", - "workspace", -] - [[package]] name = "version_check" version = "0.9.4" @@ -8698,7 +8698,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", "wasm-bindgen-shared", ] @@ -8732,7 +8732,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -8745,9 +8745,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-encoder" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f8e9778e04cbf44f58acc301372577375a666b966c50b03ef46144f80436a8" +checksum = "06a3d1b4a575ffb873679402b2aedb3117555eb65c27b1b86c8a91e574bc2a2a" dependencies = [ "leb128", ] @@ -8969,9 +8969,9 @@ dependencies = [ [[package]] name = "wast" -version = "61.0.0" +version = "62.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6b347851b52fd500657d301155c79e8c67595501d179cef87b6f04ebd25ac4" +checksum = "c7f7ee878019d69436895f019b65f62c33da63595d8e857cbdc87c13ecb29a32" dependencies = [ "leb128", "memchr", @@ -8981,11 +8981,11 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459e764d27c3ab7beba1ebd617cc025c7e76dea6e7c5ce3189989a970aea3491" +checksum = "295572bf24aa5b685a971a83ad3e8b6e684aaad8a9be24bc7bf59bed84cc1c08" dependencies = [ - "wast 61.0.0", + "wast 62.0.0", ] [[package]] @@ -9315,9 +9315,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.9" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529" +checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7" dependencies = [ "memchr", ] @@ -9399,7 +9399,7 @@ dependencies = [ "terminal", "theme", "util", - "uuid 1.4.0", + "uuid 1.4.1", ] [[package]] @@ -9447,7 +9447,7 @@ name = "xtask" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.3.11", + "clap 4.3.14", "schemars", "serde_json", "theme", @@ -9548,6 +9548,7 @@ dependencies = [ "rsa", "rust-embed", "search", + "semantic_index", "serde", "serde_derive", "serde_json", @@ -9589,8 +9590,7 @@ dependencies = [ "url", "urlencoding", "util", - "uuid 1.4.0", - "vector_store", + "uuid 1.4.1", "vim", "welcome", "workspace", @@ -9621,7 +9621,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.25", + "syn 2.0.26", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 529f297f70..ce3dd9c462 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ members = [ "crates/theme", "crates/theme_selector", "crates/util", - "crates/vector_store", + "crates/semantic_index", "crates/vim", "crates/vcs_menu", "crates/workspace", diff --git a/assets/settings/default.json b/assets/settings/default.json index 1f8d12a3d9..b109b8d595 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -291,8 +291,8 @@ // the terminal will default to matching the buffer's font family. // "font_family": "Zed Mono" }, - // Difference settings for vector_store - "vector_store": { + // Difference settings for semantic_index + "semantic_index": { "enabled": false, "reindexing_delay_seconds": 600 }, diff --git a/crates/vector_store/Cargo.toml b/crates/semantic_index/Cargo.toml similarity index 96% rename from crates/vector_store/Cargo.toml rename to crates/semantic_index/Cargo.toml index 6808f6c630..5c5af072c8 100644 --- a/crates/vector_store/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -1,11 +1,11 @@ [package] -name = "vector_store" +name = "semantic_index" version = "0.1.0" edition = "2021" publish = false [lib] -path = "src/vector_store.rs" +path = "src/semantic_index.rs" doctest = false [dependencies] diff --git a/crates/vector_store/README.md b/crates/semantic_index/README.md similarity index 100% rename from crates/vector_store/README.md rename to crates/semantic_index/README.md diff --git a/crates/vector_store/src/db.rs b/crates/semantic_index/src/db.rs similarity index 95% rename from crates/vector_store/src/db.rs rename to crates/semantic_index/src/db.rs index d3d05f8c62..1d5a9a475e 100644 --- a/crates/vector_store/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -1,4 +1,4 @@ -use crate::{parsing::Document, VECTOR_STORE_VERSION}; +use crate::{parsing::Document, SEMANTIC_INDEX_VERSION}; use anyhow::{anyhow, Result}; use project::Fs; use rpc::proto::Timestamp; @@ -55,7 +55,9 @@ impl VectorDatabase { } fn get_existing_version(&self) -> Result { - let mut version_query = self.db.prepare("SELECT version from vector_store_config")?; + let mut version_query = self + .db + .prepare("SELECT version from semantic_index_config")?; version_query .query_row([], |row| Ok(row.get::<_, i64>(0)?)) .map_err(|err| anyhow!("version query failed: {err}")) @@ -66,7 +68,7 @@ impl VectorDatabase { if self .get_existing_version() - .map_or(false, |version| version == VECTOR_STORE_VERSION as i64) + .map_or(false, |version| version == SEMANTIC_INDEX_VERSION as i64) { return Ok(()); } @@ -74,7 +76,7 @@ impl VectorDatabase { self.db .execute( " - DROP TABLE vector_store_config; + DROP TABLE semantic_index_config; DROP TABLE worktrees; DROP TABLE files; DROP TABLE documents; @@ -85,15 +87,15 @@ impl VectorDatabase { // Initialize Vector Databasing Tables self.db.execute( - "CREATE TABLE vector_store_config ( + "CREATE TABLE semantic_index_config ( version INTEGER NOT NULL )", [], )?; self.db.execute( - "INSERT INTO vector_store_config (version) VALUES (?1)", - params![VECTOR_STORE_VERSION], + "INSERT INTO semantic_index_config (version) VALUES (?1)", + params![SEMANTIC_INDEX_VERSION], )?; self.db.execute( diff --git a/crates/vector_store/src/embedding.rs b/crates/semantic_index/src/embedding.rs similarity index 100% rename from crates/vector_store/src/embedding.rs rename to crates/semantic_index/src/embedding.rs diff --git a/crates/vector_store/src/modal.rs b/crates/semantic_index/src/modal.rs similarity index 95% rename from crates/vector_store/src/modal.rs rename to crates/semantic_index/src/modal.rs index 2981fa4e73..ffc64a195c 100644 --- a/crates/vector_store/src/modal.rs +++ b/crates/semantic_index/src/modal.rs @@ -1,4 +1,4 @@ -use crate::{SearchResult, VectorStore}; +use crate::{SearchResult, SemanticIndex}; use editor::{scroll::autoscroll::Autoscroll, Editor}; use gpui::{ actions, elements::*, AnyElement, AppContext, ModelHandle, MouseState, Task, ViewContext, @@ -20,7 +20,7 @@ pub type SemanticSearch = Picker; pub struct SemanticSearchDelegate { workspace: WeakViewHandle, project: ModelHandle, - vector_store: ModelHandle, + semantic_index: ModelHandle, selected_match_index: usize, matches: Vec, history: HashMap>, @@ -33,12 +33,12 @@ impl SemanticSearchDelegate { pub fn new( workspace: WeakViewHandle, project: ModelHandle, - vector_store: ModelHandle, + semantic_index: ModelHandle, ) -> Self { Self { workspace, project, - vector_store, + semantic_index, selected_match_index: 0, matches: vec![], history: HashMap::new(), @@ -105,7 +105,7 @@ impl PickerDelegate for SemanticSearchDelegate { return Task::ready(()); } - let vector_store = self.vector_store.clone(); + let semantic_index = self.semantic_index.clone(); let project = self.project.clone(); cx.spawn(|this, mut cx| async move { cx.background().timer(EMBEDDING_DEBOUNCE_INTERVAL).await; @@ -123,7 +123,7 @@ impl PickerDelegate for SemanticSearchDelegate { if let Some(retrieved) = retrieved_cached.log_err() { if !retrieved { - let task = vector_store.update(&mut cx, |store, cx| { + let task = semantic_index.update(&mut cx, |store, cx| { store.search_project(project.clone(), query.to_string(), 10, cx) }); diff --git a/crates/vector_store/src/parsing.rs b/crates/semantic_index/src/parsing.rs similarity index 100% rename from crates/vector_store/src/parsing.rs rename to crates/semantic_index/src/parsing.rs diff --git a/crates/vector_store/src/vector_store.rs b/crates/semantic_index/src/semantic_index.rs similarity index 96% rename from crates/vector_store/src/vector_store.rs rename to crates/semantic_index/src/semantic_index.rs index 0f55bd9e63..58ffa512ce 100644 --- a/crates/vector_store/src/vector_store.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -2,12 +2,12 @@ mod db; mod embedding; mod modal; mod parsing; -mod vector_store_settings; +mod semantic_index_settings; #[cfg(test)] -mod vector_store_tests; +mod semantic_index_tests; -use crate::vector_store_settings::VectorStoreSettings; +use crate::semantic_index_settings::SemanticIndexSettings; use anyhow::{anyhow, Result}; use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; @@ -40,7 +40,7 @@ use util::{ }; use workspace::{Workspace, WorkspaceCreated}; -const VECTOR_STORE_VERSION: usize = 1; +const SEMANTIC_INDEX_VERSION: usize = 1; const EMBEDDINGS_BATCH_SIZE: usize = 150; pub fn init( @@ -49,7 +49,7 @@ pub fn init( language_registry: Arc, cx: &mut AppContext, ) { - settings::register::(cx); + settings::register::(cx); let db_file_path = EMBEDDINGS_DIR .join(Path::new(RELEASE_CHANNEL_NAME.as_str())) @@ -58,14 +58,14 @@ pub fn init( SemanticSearch::init(cx); cx.add_action( |workspace: &mut Workspace, _: &Toggle, cx: &mut ViewContext| { - if cx.has_global::>() { - let vector_store = cx.global::>().clone(); + if cx.has_global::>() { + let semantic_index = cx.global::>().clone(); workspace.toggle_modal(cx, |workspace, cx| { let project = workspace.project().clone(); let workspace = cx.weak_handle(); cx.add_view(|cx| { SemanticSearch::new( - SemanticSearchDelegate::new(workspace, project, vector_store), + SemanticSearchDelegate::new(workspace, project, semantic_index), cx, ) }) @@ -75,13 +75,14 @@ pub fn init( ); if *RELEASE_CHANNEL == ReleaseChannel::Stable - || !settings::get::(cx).enabled + || !settings::get::(cx).enabled { + log::info!("NOT ENABLED"); return; } cx.spawn(move |mut cx| async move { - let vector_store = VectorStore::new( + let semantic_index = SemanticIndex::new( fs, db_file_path, Arc::new(OpenAIEmbeddings { @@ -94,15 +95,15 @@ pub fn init( .await?; cx.update(|cx| { - cx.set_global(vector_store.clone()); + cx.set_global(semantic_index.clone()); cx.subscribe_global::({ - let vector_store = vector_store.clone(); + let semantic_index = semantic_index.clone(); move |event, cx| { let workspace = &event.0; if let Some(workspace) = workspace.upgrade(cx) { let project = workspace.read(cx).project().clone(); if project.read(cx).is_local() { - vector_store.update(cx, |store, cx| { + semantic_index.update(cx, |store, cx| { store.index_project(project, cx).detach(); }); } @@ -117,7 +118,7 @@ pub fn init( .detach(); } -pub struct VectorStore { +pub struct SemanticIndex { fs: Arc, database_url: Arc, embedding_provider: Arc, @@ -220,7 +221,7 @@ enum EmbeddingJob { Flush, } -impl VectorStore { +impl SemanticIndex { async fn new( fs: Arc, database_url: PathBuf, @@ -672,7 +673,7 @@ impl VectorStore { } } -impl Entity for VectorStore { +impl Entity for SemanticIndex { type Event = (); } diff --git a/crates/vector_store/src/vector_store_settings.rs b/crates/semantic_index/src/semantic_index_settings.rs similarity index 71% rename from crates/vector_store/src/vector_store_settings.rs rename to crates/semantic_index/src/semantic_index_settings.rs index e1fa7cc05a..86872457f8 100644 --- a/crates/vector_store/src/vector_store_settings.rs +++ b/crates/semantic_index/src/semantic_index_settings.rs @@ -4,21 +4,21 @@ use serde::{Deserialize, Serialize}; use settings::Setting; #[derive(Deserialize, Debug)] -pub struct VectorStoreSettings { +pub struct SemanticIndexSettings { pub enabled: bool, pub reindexing_delay_seconds: usize, } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] -pub struct VectorStoreSettingsContent { +pub struct SemanticIndexSettingsContent { pub enabled: Option, pub reindexing_delay_seconds: Option, } -impl Setting for VectorStoreSettings { - const KEY: Option<&'static str> = Some("vector_store"); +impl Setting for SemanticIndexSettings { + const KEY: Option<&'static str> = Some("semantic_index"); - type FileContent = VectorStoreSettingsContent; + type FileContent = SemanticIndexSettingsContent; fn load( default_value: &Self::FileContent, diff --git a/crates/vector_store/src/vector_store_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs similarity index 99% rename from crates/vector_store/src/vector_store_tests.rs rename to crates/semantic_index/src/semantic_index_tests.rs index d55dfcfc71..ed48cf256b 100644 --- a/crates/vector_store/src/vector_store_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -2,8 +2,8 @@ use crate::{ db::dot, embedding::EmbeddingProvider, parsing::{CodeContextRetriever, Document}, - vector_store_settings::VectorStoreSettings, - VectorStore, + semantic_index_settings::SemanticIndexSettings, + SemanticIndex, }; use anyhow::Result; use async_trait::async_trait; @@ -30,10 +30,10 @@ fn init_logger() { } #[gpui::test] -async fn test_vector_store(cx: &mut TestAppContext) { +async fn test_semantic_index(cx: &mut TestAppContext) { cx.update(|cx| { cx.set_global(SettingsStore::test(cx)); - settings::register::(cx); + settings::register::(cx); settings::register::(cx); }); @@ -74,7 +74,7 @@ async fn test_vector_store(cx: &mut TestAppContext) { let db_path = db_dir.path().join("db.sqlite"); let embedding_provider = Arc::new(FakeEmbeddingProvider::default()); - let store = VectorStore::new( + let store = SemanticIndex::new( fs.clone(), db_path, embedding_provider.clone(), diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 597e40161f..265312bc9a 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -64,7 +64,7 @@ terminal_view = { path = "../terminal_view" } theme = { path = "../theme" } theme_selector = { path = "../theme_selector" } util = { path = "../util" } -vector_store = { path = "../vector_store" } +semantic_index = { path = "../semantic_index" } vim = { path = "../vim" } workspace = { path = "../workspace" } welcome = { path = "../welcome" } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 4c75d370d5..3598da5dee 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -157,7 +157,7 @@ fn main() { project_panel::init(cx); diagnostics::init(cx); search::init(cx); - vector_store::init(fs.clone(), http.clone(), languages.clone(), cx); + semantic_index::init(fs.clone(), http.clone(), languages.clone(), cx); vim::init(cx); terminal_view::init(cx); copilot::init(http.clone(), node_runtime, cx); From d83c4ffb072081d0b07f62f3c90f3bff5be48509 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 17 Jul 2023 17:09:51 -0400 Subject: [PATCH 017/120] remove debug logging for enabled settings --- crates/semantic_index/src/semantic_index.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 58ffa512ce..b59b20370a 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -77,7 +77,6 @@ pub fn init( if *RELEASE_CHANNEL == ReleaseChannel::Stable || !settings::get::(cx).enabled { - log::info!("NOT ENABLED"); return; } From afc4c10ec1162b151c33a9ffe051233dca10a5e5 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 17 Jul 2023 18:10:51 -0700 Subject: [PATCH 018/120] Start work on exposing semantic search via project search view Co-authored-by: Kyle --- Cargo.lock | 2 + crates/search/Cargo.toml | 1 + crates/search/src/project_search.rs | 156 +++++- crates/semantic_index/Cargo.toml | 1 + crates/semantic_index/src/db.rs | 12 +- crates/semantic_index/src/embedding.rs | 7 +- crates/semantic_index/src/modal.rs | 172 ------- crates/semantic_index/src/semantic_index.rs | 451 +++++++++--------- .../src/semantic_index_tests.rs | 18 +- 9 files changed, 397 insertions(+), 423 deletions(-) delete mode 100644 crates/semantic_index/src/modal.rs diff --git a/Cargo.lock b/Cargo.lock index 430a665f98..484ef3644b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6430,6 +6430,7 @@ dependencies = [ "menu", "postage", "project", + "semantic_index", "serde", "serde_derive", "serde_json", @@ -6484,6 +6485,7 @@ dependencies = [ "matrixmultiply", "parking_lot 0.11.2", "picker", + "postage", "project", "rand 0.8.5", "rpc", diff --git a/crates/search/Cargo.toml b/crates/search/Cargo.toml index 7ef388f7c0..f6ed6c3fef 100644 --- a/crates/search/Cargo.toml +++ b/crates/search/Cargo.toml @@ -19,6 +19,7 @@ settings = { path = "../settings" } theme = { path = "../theme" } util = { path = "../util" } workspace = { path = "../workspace" } +semantic_index = { path = "../semantic_index" } anyhow.workspace = true futures.workspace = true log.workspace = true diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index ebd504d02c..91d2b142ae 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -2,7 +2,7 @@ use crate::{ SearchOption, SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, ToggleWholeWord, }; -use anyhow::Result; +use anyhow::{Context, Result}; use collections::HashMap; use editor::{ items::active_match_index, scroll::autoscroll::Autoscroll, Anchor, Editor, MultiBuffer, @@ -18,7 +18,9 @@ use gpui::{ Task, View, ViewContext, ViewHandle, WeakModelHandle, WeakViewHandle, }; use menu::Confirm; +use postage::stream::Stream; use project::{search::SearchQuery, Project}; +use semantic_index::SemanticIndex; use smallvec::SmallVec; use std::{ any::{Any, TypeId}, @@ -36,7 +38,10 @@ use workspace::{ ItemNavHistory, Pane, ToolbarItemLocation, ToolbarItemView, Workspace, WorkspaceId, }; -actions!(project_search, [SearchInNew, ToggleFocus, NextField]); +actions!( + project_search, + [SearchInNew, ToggleFocus, NextField, ToggleSemanticSearch] +); #[derive(Default)] struct ActiveSearches(HashMap, WeakViewHandle>); @@ -92,6 +97,7 @@ pub struct ProjectSearchView { case_sensitive: bool, whole_word: bool, regex: bool, + semantic: Option, panels_with_errors: HashSet, active_match_index: Option, search_id: usize, @@ -100,6 +106,13 @@ pub struct ProjectSearchView { excluded_files_editor: ViewHandle, } +struct SemanticSearchState { + file_count: usize, + outstanding_file_count: usize, + _progress_task: Task<()>, + search_task: Option>>, +} + pub struct ProjectSearchBar { active_project_search: Option>, subscription: Option, @@ -198,12 +211,25 @@ impl View for ProjectSearchView { let theme = theme::current(cx).clone(); let text = if self.query_editor.read(cx).text(cx).is_empty() { - "" + Cow::Borrowed("") + } else if let Some(semantic) = &self.semantic { + if semantic.search_task.is_some() { + Cow::Borrowed("Searching...") + } else if semantic.outstanding_file_count > 0 { + Cow::Owned(format!( + "Indexing. {} of {}...", + semantic.file_count - semantic.outstanding_file_count, + semantic.file_count + )) + } else { + Cow::Borrowed("Indexing complete") + } } else if model.pending_search.is_some() { - "Searching..." + Cow::Borrowed("Searching...") } else { - "No results" + Cow::Borrowed("No results") }; + MouseEventHandler::::new(0, cx, |_, _| { Label::new(text, theme.search.results_status.clone()) .aligned() @@ -499,6 +525,7 @@ impl ProjectSearchView { case_sensitive, whole_word, regex, + semantic: None, panels_with_errors: HashSet::new(), active_match_index: None, query_editor_was_focused: false, @@ -563,6 +590,35 @@ impl ProjectSearchView { } fn search(&mut self, cx: &mut ViewContext) { + if let Some(semantic) = &mut self.semantic { + if semantic.outstanding_file_count > 0 { + return; + } + + let search_phrase = self.query_editor.read(cx).text(cx); + let project = self.model.read(cx).project.clone(); + if let Some(semantic_index) = SemanticIndex::global(cx) { + let search_task = semantic_index.update(cx, |semantic_index, cx| { + semantic_index.search_project(project, search_phrase, 10, cx) + }); + semantic.search_task = Some(cx.spawn(|this, mut cx| async move { + let results = search_task.await.context("search task")?; + + this.update(&mut cx, |this, cx| { + dbg!(&results); + // TODO: Update results + + if let Some(semantic) = &mut this.semantic { + semantic.search_task = None; + } + })?; + + anyhow::Ok(()) + })); + } + return; + } + if let Some(query) = self.build_search_query(cx) { self.model.update(cx, |model, cx| model.search(query, cx)); } @@ -876,6 +932,59 @@ impl ProjectSearchBar { } } + fn toggle_semantic_search(&mut self, cx: &mut ViewContext) -> bool { + if let Some(search_view) = self.active_project_search.as_ref() { + search_view.update(cx, |search_view, cx| { + if search_view.semantic.is_some() { + search_view.semantic = None; + } else if let Some(semantic_index) = SemanticIndex::global(cx) { + // TODO: confirm that it's ok to send this project + + let project = search_view.model.read(cx).project.clone(); + let index_task = semantic_index.update(cx, |semantic_index, cx| { + semantic_index.index_project(project, cx) + }); + + cx.spawn(|search_view, mut cx| async move { + let (files_to_index, mut files_remaining_rx) = index_task.await?; + + search_view.update(&mut cx, |search_view, cx| { + search_view.semantic = Some(SemanticSearchState { + file_count: files_to_index, + outstanding_file_count: files_to_index, + search_task: None, + _progress_task: cx.spawn(|search_view, mut cx| async move { + while let Some(count) = files_remaining_rx.recv().await { + search_view + .update(&mut cx, |search_view, cx| { + if let Some(semantic_search_state) = + &mut search_view.semantic + { + semantic_search_state.outstanding_file_count = + count; + cx.notify(); + if count == 0 { + return; + } + } + }) + .ok(); + } + }), + }); + })?; + anyhow::Ok(()) + }) + .detach_and_log_err(cx); + } + }); + cx.notify(); + true + } else { + false + } + } + fn render_nav_button( &self, icon: &'static str, @@ -953,6 +1062,42 @@ impl ProjectSearchBar { .into_any() } + fn render_semantic_search_button(&self, cx: &mut ViewContext) -> AnyElement { + let tooltip_style = theme::current(cx).tooltip.clone(); + let is_active = if let Some(search) = self.active_project_search.as_ref() { + let search = search.read(cx); + search.semantic.is_some() + } else { + false + }; + + let region_id = 3; + + MouseEventHandler::::new(region_id, cx, |state, cx| { + let theme = theme::current(cx); + let style = theme + .search + .option_button + .in_state(is_active) + .style_for(state); + Label::new("Semantic", style.text.clone()) + .contained() + .with_style(style.container) + }) + .on_click(MouseButton::Left, move |_, this, cx| { + this.toggle_semantic_search(cx); + }) + .with_cursor_style(CursorStyle::PointingHand) + .with_tooltip::( + region_id, + format!("Toggle Semantic Search"), + Some(Box::new(ToggleSemanticSearch)), + tooltip_style, + cx, + ) + .into_any() + } + fn is_option_enabled(&self, option: SearchOption, cx: &AppContext) -> bool { if let Some(search) = self.active_project_search.as_ref() { let search = search.read(cx); @@ -1049,6 +1194,7 @@ impl View for ProjectSearchBar { ) .with_child( Flex::row() + .with_child(self.render_semantic_search_button(cx)) .with_child(self.render_option_button( "Case", SearchOption::CaseSensitive, diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 5c5af072c8..2d21ff6c1c 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -20,6 +20,7 @@ editor = { path = "../editor" } rpc = { path = "../rpc" } settings = { path = "../settings" } anyhow.workspace = true +postage.workspace = true futures.workspace = true smol.workspace = true rusqlite = { version = "0.27.0", features = ["blob", "array", "modern_sqlite"] } diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index 1d5a9a475e..a667ff877c 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -1,5 +1,5 @@ use crate::{parsing::Document, SEMANTIC_INDEX_VERSION}; -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, Context, Result}; use project::Fs; use rpc::proto::Timestamp; use rusqlite::{ @@ -76,14 +76,14 @@ impl VectorDatabase { self.db .execute( " - DROP TABLE semantic_index_config; - DROP TABLE worktrees; - DROP TABLE files; - DROP TABLE documents; + DROP TABLE IF EXISTS documents; + DROP TABLE IF EXISTS files; + DROP TABLE IF EXISTS worktrees; + DROP TABLE IF EXISTS semantic_index_config; ", [], ) - .ok(); + .context("failed to drop tables")?; // Initialize Vector Databasing Tables self.db.execute( diff --git a/crates/semantic_index/src/embedding.rs b/crates/semantic_index/src/embedding.rs index ea349c8afa..4f49d66ce7 100644 --- a/crates/semantic_index/src/embedding.rs +++ b/crates/semantic_index/src/embedding.rs @@ -86,6 +86,7 @@ impl OpenAIEmbeddings { async fn send_request(&self, api_key: &str, spans: Vec<&str>) -> Result> { let request = Request::post("https://api.openai.com/v1/embeddings") .redirect_policy(isahc::config::RedirectPolicy::Follow) + .timeout(Duration::from_secs(4)) .header("Content-Type", "application/json") .header("Authorization", format!("Bearer {}", api_key)) .body( @@ -133,7 +134,11 @@ impl EmbeddingProvider for OpenAIEmbeddings { self.executor.timer(delay).await; } StatusCode::BAD_REQUEST => { - log::info!("BAD REQUEST: {:?}", &response.status()); + log::info!( + "BAD REQUEST: {:?} {:?}", + &response.status(), + response.body() + ); // Don't worry about delaying bad request, as we can assume // we haven't been rate limited yet. for span in spans.iter_mut() { diff --git a/crates/semantic_index/src/modal.rs b/crates/semantic_index/src/modal.rs deleted file mode 100644 index ffc64a195c..0000000000 --- a/crates/semantic_index/src/modal.rs +++ /dev/null @@ -1,172 +0,0 @@ -use crate::{SearchResult, SemanticIndex}; -use editor::{scroll::autoscroll::Autoscroll, Editor}; -use gpui::{ - actions, elements::*, AnyElement, AppContext, ModelHandle, MouseState, Task, ViewContext, - WeakViewHandle, -}; -use picker::{Picker, PickerDelegate, PickerEvent}; -use project::{Project, ProjectPath}; -use std::{collections::HashMap, sync::Arc, time::Duration}; -use util::ResultExt; -use workspace::Workspace; - -const MIN_QUERY_LEN: usize = 5; -const EMBEDDING_DEBOUNCE_INTERVAL: Duration = Duration::from_millis(500); - -actions!(semantic_search, [Toggle]); - -pub type SemanticSearch = Picker; - -pub struct SemanticSearchDelegate { - workspace: WeakViewHandle, - project: ModelHandle, - semantic_index: ModelHandle, - selected_match_index: usize, - matches: Vec, - history: HashMap>, -} - -impl SemanticSearchDelegate { - // This is currently searching on every keystroke, - // This is wildly overkill, and has the potential to get expensive - // We will need to update this to throttle searching - pub fn new( - workspace: WeakViewHandle, - project: ModelHandle, - semantic_index: ModelHandle, - ) -> Self { - Self { - workspace, - project, - semantic_index, - selected_match_index: 0, - matches: vec![], - history: HashMap::new(), - } - } -} - -impl PickerDelegate for SemanticSearchDelegate { - fn placeholder_text(&self) -> Arc { - "Search repository in natural language...".into() - } - - fn confirm(&mut self, cx: &mut ViewContext) { - if let Some(search_result) = self.matches.get(self.selected_match_index) { - // Open Buffer - let search_result = search_result.clone(); - let buffer = self.project.update(cx, |project, cx| { - project.open_buffer( - ProjectPath { - worktree_id: search_result.worktree_id, - path: search_result.file_path.clone().into(), - }, - cx, - ) - }); - - let workspace = self.workspace.clone(); - let position = search_result.clone().byte_range.start; - cx.spawn(|_, mut cx| async move { - let buffer = buffer.await?; - workspace.update(&mut cx, |workspace, cx| { - let editor = workspace.open_project_item::(buffer, cx); - editor.update(cx, |editor, cx| { - editor.change_selections(Some(Autoscroll::center()), cx, |s| { - s.select_ranges([position..position]) - }); - }); - })?; - Ok::<_, anyhow::Error>(()) - }) - .detach_and_log_err(cx); - cx.emit(PickerEvent::Dismiss); - } - } - - fn dismissed(&mut self, _cx: &mut ViewContext) {} - - fn match_count(&self) -> usize { - self.matches.len() - } - - fn selected_index(&self) -> usize { - self.selected_match_index - } - - fn set_selected_index(&mut self, ix: usize, _cx: &mut ViewContext) { - self.selected_match_index = ix; - } - - fn update_matches(&mut self, query: String, cx: &mut ViewContext) -> Task<()> { - log::info!("Searching for {:?}...", query); - if query.len() < MIN_QUERY_LEN { - log::info!("Query below minimum length"); - return Task::ready(()); - } - - let semantic_index = self.semantic_index.clone(); - let project = self.project.clone(); - cx.spawn(|this, mut cx| async move { - cx.background().timer(EMBEDDING_DEBOUNCE_INTERVAL).await; - - let retrieved_cached = this.update(&mut cx, |this, _| { - let delegate = this.delegate_mut(); - if delegate.history.contains_key(&query) { - let historic_results = delegate.history.get(&query).unwrap().to_owned(); - delegate.matches = historic_results.clone(); - true - } else { - false - } - }); - - if let Some(retrieved) = retrieved_cached.log_err() { - if !retrieved { - let task = semantic_index.update(&mut cx, |store, cx| { - store.search_project(project.clone(), query.to_string(), 10, cx) - }); - - if let Some(results) = task.await.log_err() { - log::info!("Not queried previously, searching..."); - this.update(&mut cx, |this, _| { - let delegate = this.delegate_mut(); - delegate.matches = results.clone(); - delegate.history.insert(query, results); - }) - .ok(); - } - } else { - log::info!("Already queried, retrieved directly from cached history"); - } - } - }) - } - - fn render_match( - &self, - ix: usize, - mouse_state: &mut MouseState, - selected: bool, - cx: &AppContext, - ) -> AnyElement> { - let theme = theme::current(cx); - let style = &theme.picker.item; - let current_style = style.in_state(selected).style_for(mouse_state); - - let search_result = &self.matches[ix]; - - let path = search_result.file_path.to_string_lossy(); - let name = search_result.name.clone(); - - Flex::column() - .with_child(Text::new(name, current_style.label.text.clone()).with_soft_wrap(false)) - .with_child(Label::new( - path.to_string(), - style.inactive_state().default.label.clone(), - )) - .contained() - .with_style(current_style.container) - .into_any() - } -} diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index b59b20370a..e6443870aa 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -1,6 +1,5 @@ mod db; mod embedding; -mod modal; mod parsing; mod semantic_index_settings; @@ -12,25 +11,20 @@ use anyhow::{anyhow, Result}; use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; use futures::{channel::oneshot, Future}; -use gpui::{ - AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, ViewContext, - WeakModelHandle, -}; +use gpui::{AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, WeakModelHandle}; use language::{Language, LanguageRegistry}; -use modal::{SemanticSearch, SemanticSearchDelegate, Toggle}; use parking_lot::Mutex; use parsing::{CodeContextRetriever, Document, PARSEABLE_ENTIRE_FILE_TYPES}; +use postage::watch; use project::{Fs, Project, WorktreeId}; use smol::channel; use std::{ - collections::{HashMap, HashSet}, + collections::HashMap, + mem, ops::Range, path::{Path, PathBuf}, - sync::{ - atomic::{self, AtomicUsize}, - Arc, Weak, - }, - time::{Instant, SystemTime}, + sync::{Arc, Weak}, + time::SystemTime, }; use util::{ channel::{ReleaseChannel, RELEASE_CHANNEL, RELEASE_CHANNEL_NAME}, @@ -38,9 +32,8 @@ use util::{ paths::EMBEDDINGS_DIR, ResultExt, }; -use workspace::{Workspace, WorkspaceCreated}; -const SEMANTIC_INDEX_VERSION: usize = 1; +const SEMANTIC_INDEX_VERSION: usize = 3; const EMBEDDINGS_BATCH_SIZE: usize = 150; pub fn init( @@ -55,25 +48,6 @@ pub fn init( .join(Path::new(RELEASE_CHANNEL_NAME.as_str())) .join("embeddings_db"); - SemanticSearch::init(cx); - cx.add_action( - |workspace: &mut Workspace, _: &Toggle, cx: &mut ViewContext| { - if cx.has_global::>() { - let semantic_index = cx.global::>().clone(); - workspace.toggle_modal(cx, |workspace, cx| { - let project = workspace.project().clone(); - let workspace = cx.weak_handle(); - cx.add_view(|cx| { - SemanticSearch::new( - SemanticSearchDelegate::new(workspace, project, semantic_index), - cx, - ) - }) - }); - } - }, - ); - if *RELEASE_CHANNEL == ReleaseChannel::Stable || !settings::get::(cx).enabled { @@ -95,21 +69,6 @@ pub fn init( cx.update(|cx| { cx.set_global(semantic_index.clone()); - cx.subscribe_global::({ - let semantic_index = semantic_index.clone(); - move |event, cx| { - let workspace = &event.0; - if let Some(workspace) = workspace.upgrade(cx) { - let project = workspace.read(cx).project().clone(); - if project.read(cx).is_local() { - semantic_index.update(cx, |store, cx| { - store.index_project(project, cx).detach(); - }); - } - } - } - }) - .detach(); }); anyhow::Ok(()) @@ -128,20 +87,17 @@ pub struct SemanticIndex { _embed_batch_task: Task<()>, _batch_files_task: Task<()>, _parsing_files_tasks: Vec>, - next_job_id: Arc, projects: HashMap, ProjectState>, } struct ProjectState { worktree_db_ids: Vec<(WorktreeId, i64)>, - outstanding_jobs: Arc>>, + outstanding_job_count_rx: watch::Receiver, + outstanding_job_count_tx: Arc>>, } -type JobId = usize; - struct JobHandle { - id: JobId, - set: Weak>>, + tx: Weak>>, } impl ProjectState { @@ -221,6 +177,14 @@ enum EmbeddingJob { } impl SemanticIndex { + pub fn global(cx: &AppContext) -> Option> { + if cx.has_global::>() { + Some(cx.global::>().clone()) + } else { + None + } + } + async fn new( fs: Arc, database_url: PathBuf, @@ -236,184 +200,69 @@ impl SemanticIndex { .await?; Ok(cx.add_model(|cx| { - // paths_tx -> embeddings_tx -> db_update_tx - - //db_update_tx/rx: Updating Database + // Perform database operations let (db_update_tx, db_update_rx) = channel::unbounded(); - let _db_update_task = cx.background().spawn(async move { - while let Ok(job) = db_update_rx.recv().await { - match job { - DbOperation::InsertFile { - worktree_id, - documents, - path, - mtime, - job_handle, - } => { - db.insert_file(worktree_id, path, mtime, documents) - .log_err(); - drop(job_handle) - } - DbOperation::Delete { worktree_id, path } => { - db.delete_file(worktree_id, path).log_err(); - } - DbOperation::FindOrCreateWorktree { path, sender } => { - let id = db.find_or_create_worktree(&path); - sender.send(id).ok(); - } - DbOperation::FileMTimes { - worktree_id: worktree_db_id, - sender, - } => { - let file_mtimes = db.get_file_mtimes(worktree_db_id); - sender.send(file_mtimes).ok(); - } + let _db_update_task = cx.background().spawn({ + async move { + while let Ok(job) = db_update_rx.recv().await { + Self::run_db_operation(&db, job) } } }); - // embed_tx/rx: Embed Batch and Send to Database + // Group documents into batches and send them to the embedding provider. let (embed_batch_tx, embed_batch_rx) = channel::unbounded::, PathBuf, SystemTime, JobHandle)>>(); let _embed_batch_task = cx.background().spawn({ let db_update_tx = db_update_tx.clone(); let embedding_provider = embedding_provider.clone(); async move { - while let Ok(mut embeddings_queue) = embed_batch_rx.recv().await { - // Construct Batch - let mut batch_documents = vec![]; - for (_, documents, _, _, _) in embeddings_queue.iter() { - batch_documents - .extend(documents.iter().map(|document| document.content.as_str())); - } - - if let Ok(embeddings) = - embedding_provider.embed_batch(batch_documents).await - { - log::trace!( - "created {} embeddings for {} files", - embeddings.len(), - embeddings_queue.len(), - ); - - let mut i = 0; - let mut j = 0; - - for embedding in embeddings.iter() { - while embeddings_queue[i].1.len() == j { - i += 1; - j = 0; - } - - embeddings_queue[i].1[j].embedding = embedding.to_owned(); - j += 1; - } - - for (worktree_id, documents, path, mtime, job_handle) in - embeddings_queue.into_iter() - { - for document in documents.iter() { - // TODO: Update this so it doesn't panic - assert!( - document.embedding.len() > 0, - "Document Embedding Not Complete" - ); - } - - db_update_tx - .send(DbOperation::InsertFile { - worktree_id, - documents, - path, - mtime, - job_handle, - }) - .await - .unwrap(); - } - } + while let Ok(embeddings_queue) = embed_batch_rx.recv().await { + Self::compute_embeddings_for_batch( + embeddings_queue, + &embedding_provider, + &db_update_tx, + ) + .await; } } }); - // batch_tx/rx: Batch Files to Send for Embeddings + // Group documents into batches and send them to the embedding provider. let (batch_files_tx, batch_files_rx) = channel::unbounded::(); let _batch_files_task = cx.background().spawn(async move { let mut queue_len = 0; let mut embeddings_queue = vec![]; - while let Ok(job) = batch_files_rx.recv().await { - let should_flush = match job { - EmbeddingJob::Enqueue { - documents, - worktree_id, - path, - mtime, - job_handle, - } => { - queue_len += &documents.len(); - embeddings_queue.push(( - worktree_id, - documents, - path, - mtime, - job_handle, - )); - queue_len >= EMBEDDINGS_BATCH_SIZE - } - EmbeddingJob::Flush => true, - }; - - if should_flush { - embed_batch_tx.try_send(embeddings_queue).unwrap(); - embeddings_queue = vec![]; - queue_len = 0; - } + Self::enqueue_documents_to_embed( + job, + &mut queue_len, + &mut embeddings_queue, + &embed_batch_tx, + ); } }); - // parsing_files_tx/rx: Parsing Files to Embeddable Documents + // Parse files into embeddable documents. let (parsing_files_tx, parsing_files_rx) = channel::unbounded::(); - let mut _parsing_files_tasks = Vec::new(); for _ in 0..cx.background().num_cpus() { let fs = fs.clone(); let parsing_files_rx = parsing_files_rx.clone(); let batch_files_tx = batch_files_tx.clone(); + let db_update_tx = db_update_tx.clone(); _parsing_files_tasks.push(cx.background().spawn(async move { let mut retriever = CodeContextRetriever::new(); while let Ok(pending_file) = parsing_files_rx.recv().await { - if let Some(content) = fs.load(&pending_file.absolute_path).await.log_err() - { - if let Some(documents) = retriever - .parse_file( - &pending_file.relative_path, - &content, - pending_file.language, - ) - .log_err() - { - log::trace!( - "parsed path {:?}: {} documents", - pending_file.relative_path, - documents.len() - ); - - batch_files_tx - .try_send(EmbeddingJob::Enqueue { - worktree_id: pending_file.worktree_db_id, - path: pending_file.relative_path, - mtime: pending_file.modified_time, - job_handle: pending_file.job_handle, - documents, - }) - .unwrap(); - } - } - - if parsing_files_rx.len() == 0 { - batch_files_tx.try_send(EmbeddingJob::Flush).unwrap(); - } + Self::parse_file( + &fs, + pending_file, + &mut retriever, + &batch_files_tx, + &parsing_files_rx, + &db_update_tx, + ) + .await; } })); } @@ -424,7 +273,6 @@ impl SemanticIndex { embedding_provider, language_registry, db_update_tx, - next_job_id: Default::default(), parsing_files_tx, _db_update_task, _embed_batch_task, @@ -435,6 +283,167 @@ impl SemanticIndex { })) } + fn run_db_operation(db: &VectorDatabase, job: DbOperation) { + match job { + DbOperation::InsertFile { + worktree_id, + documents, + path, + mtime, + job_handle, + } => { + db.insert_file(worktree_id, path, mtime, documents) + .log_err(); + drop(job_handle) + } + DbOperation::Delete { worktree_id, path } => { + db.delete_file(worktree_id, path).log_err(); + } + DbOperation::FindOrCreateWorktree { path, sender } => { + let id = db.find_or_create_worktree(&path); + sender.send(id).ok(); + } + DbOperation::FileMTimes { + worktree_id: worktree_db_id, + sender, + } => { + let file_mtimes = db.get_file_mtimes(worktree_db_id); + sender.send(file_mtimes).ok(); + } + } + } + + async fn compute_embeddings_for_batch( + mut embeddings_queue: Vec<(i64, Vec, PathBuf, SystemTime, JobHandle)>, + embedding_provider: &Arc, + db_update_tx: &channel::Sender, + ) { + let mut batch_documents = vec![]; + for (_, documents, _, _, _) in embeddings_queue.iter() { + batch_documents.extend(documents.iter().map(|document| document.content.as_str())); + } + + if let Ok(embeddings) = embedding_provider.embed_batch(batch_documents).await { + log::trace!( + "created {} embeddings for {} files", + embeddings.len(), + embeddings_queue.len(), + ); + + let mut i = 0; + let mut j = 0; + + for embedding in embeddings.iter() { + while embeddings_queue[i].1.len() == j { + i += 1; + j = 0; + } + + embeddings_queue[i].1[j].embedding = embedding.to_owned(); + j += 1; + } + + for (worktree_id, documents, path, mtime, job_handle) in embeddings_queue.into_iter() { + // for document in documents.iter() { + // // TODO: Update this so it doesn't panic + // assert!( + // document.embedding.len() > 0, + // "Document Embedding Not Complete" + // ); + // } + + db_update_tx + .send(DbOperation::InsertFile { + worktree_id, + documents, + path, + mtime, + job_handle, + }) + .await + .unwrap(); + } + } + } + + fn enqueue_documents_to_embed( + job: EmbeddingJob, + queue_len: &mut usize, + embeddings_queue: &mut Vec<(i64, Vec, PathBuf, SystemTime, JobHandle)>, + embed_batch_tx: &channel::Sender, PathBuf, SystemTime, JobHandle)>>, + ) { + let should_flush = match job { + EmbeddingJob::Enqueue { + documents, + worktree_id, + path, + mtime, + job_handle, + } => { + *queue_len += &documents.len(); + embeddings_queue.push((worktree_id, documents, path, mtime, job_handle)); + *queue_len >= EMBEDDINGS_BATCH_SIZE + } + EmbeddingJob::Flush => true, + }; + + if should_flush { + embed_batch_tx + .try_send(mem::take(embeddings_queue)) + .unwrap(); + *queue_len = 0; + } + } + + async fn parse_file( + fs: &Arc, + pending_file: PendingFile, + retriever: &mut CodeContextRetriever, + batch_files_tx: &channel::Sender, + parsing_files_rx: &channel::Receiver, + db_update_tx: &channel::Sender, + ) { + if let Some(content) = fs.load(&pending_file.absolute_path).await.log_err() { + if let Some(documents) = retriever + .parse_file(&pending_file.relative_path, &content, pending_file.language) + .log_err() + { + log::trace!( + "parsed path {:?}: {} documents", + pending_file.relative_path, + documents.len() + ); + + if documents.len() == 0 { + db_update_tx + .send(DbOperation::InsertFile { + worktree_id: pending_file.worktree_db_id, + documents, + path: pending_file.relative_path, + mtime: pending_file.modified_time, + job_handle: pending_file.job_handle, + }) + .await + .unwrap(); + } else { + batch_files_tx + .try_send(EmbeddingJob::Enqueue { + worktree_id: pending_file.worktree_db_id, + path: pending_file.relative_path, + mtime: pending_file.modified_time, + job_handle: pending_file.job_handle, + documents, + }) + .unwrap(); + } + } + } + + if parsing_files_rx.len() == 0 { + batch_files_tx.try_send(EmbeddingJob::Flush).unwrap(); + } + } + fn find_or_create_worktree(&self, path: PathBuf) -> impl Future> { let (tx, rx) = oneshot::channel(); self.db_update_tx @@ -457,11 +466,11 @@ impl SemanticIndex { async move { rx.await? } } - fn index_project( + pub fn index_project( &mut self, project: ModelHandle, cx: &mut ModelContext, - ) -> Task> { + ) -> Task)>> { let worktree_scans_complete = project .read(cx) .worktrees(cx) @@ -483,7 +492,6 @@ impl SemanticIndex { let language_registry = self.language_registry.clone(); let db_update_tx = self.db_update_tx.clone(); let parsing_files_tx = self.parsing_files_tx.clone(); - let next_job_id = self.next_job_id.clone(); cx.spawn(|this, mut cx| async move { futures::future::join_all(worktree_scans_complete).await; @@ -509,8 +517,8 @@ impl SemanticIndex { ); } - // let mut pending_files: Vec<(PathBuf, ((i64, PathBuf, Arc, SystemTime), SystemTime))> = vec![]; - let outstanding_jobs = Arc::new(Mutex::new(HashSet::new())); + let (job_count_tx, job_count_rx) = watch::channel_with(0); + let job_count_tx = Arc::new(Mutex::new(job_count_tx)); this.update(&mut cx, |this, _| { this.projects.insert( project.downgrade(), @@ -519,7 +527,8 @@ impl SemanticIndex { .iter() .map(|(a, b)| (*a, *b)) .collect(), - outstanding_jobs: outstanding_jobs.clone(), + outstanding_job_count_rx: job_count_rx.clone(), + outstanding_job_count_tx: job_count_tx.clone(), }, ); }); @@ -527,7 +536,6 @@ impl SemanticIndex { cx.background() .spawn(async move { let mut count = 0; - let t0 = Instant::now(); for worktree in worktrees.into_iter() { let mut file_mtimes = worktree_file_mtimes.remove(&worktree.id()).unwrap(); for file in worktree.files(false, 0) { @@ -552,14 +560,11 @@ impl SemanticIndex { .map_or(false, |existing_mtime| existing_mtime == file.mtime); if !already_stored { - log::trace!("sending for parsing: {:?}", path_buf); count += 1; - let job_id = next_job_id.fetch_add(1, atomic::Ordering::SeqCst); + *job_count_tx.lock().borrow_mut() += 1; let job_handle = JobHandle { - id: job_id, - set: Arc::downgrade(&outstanding_jobs), + tx: Arc::downgrade(&job_count_tx), }; - outstanding_jobs.lock().insert(job_id); parsing_files_tx .try_send(PendingFile { worktree_db_id: db_ids_by_worktree_id[&worktree.id()], @@ -582,27 +587,22 @@ impl SemanticIndex { .unwrap(); } } - log::trace!( - "parsing worktree completed in {:?}", - t0.elapsed().as_millis() - ); - Ok(count) + anyhow::Ok((count, job_count_rx)) }) .await }) } - pub fn remaining_files_to_index_for_project( + pub fn outstanding_job_count_rx( &self, project: &ModelHandle, - ) -> Option { + ) -> Option> { Some( self.projects .get(&project.downgrade())? - .outstanding_jobs - .lock() - .len(), + .outstanding_job_count_rx + .clone(), ) } @@ -678,8 +678,9 @@ impl Entity for SemanticIndex { impl Drop for JobHandle { fn drop(&mut self) { - if let Some(set) = self.set.upgrade() { - set.lock().remove(&self.id); + if let Some(tx) = self.tx.upgrade() { + let mut tx = tx.lock(); + *tx.borrow_mut() -= 1; } } } diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index ed48cf256b..2ccc52d64b 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -88,18 +88,13 @@ async fn test_semantic_index(cx: &mut TestAppContext) { let worktree_id = project.read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() }); - let file_count = store + let (file_count, outstanding_file_count) = store .update(cx, |store, cx| store.index_project(project.clone(), cx)) .await .unwrap(); assert_eq!(file_count, 3); cx.foreground().run_until_parked(); - store.update(cx, |store, _cx| { - assert_eq!( - store.remaining_files_to_index_for_project(&project), - Some(0) - ); - }); + assert_eq!(*outstanding_file_count.borrow(), 0); let search_results = store .update(cx, |store, cx| { @@ -128,19 +123,14 @@ async fn test_semantic_index(cx: &mut TestAppContext) { cx.foreground().run_until_parked(); let prev_embedding_count = embedding_provider.embedding_count(); - let file_count = store + let (file_count, outstanding_file_count) = store .update(cx, |store, cx| store.index_project(project.clone(), cx)) .await .unwrap(); assert_eq!(file_count, 1); cx.foreground().run_until_parked(); - store.update(cx, |store, _cx| { - assert_eq!( - store.remaining_files_to_index_for_project(&project), - Some(0) - ); - }); + assert_eq!(*outstanding_file_count.borrow(), 0); assert_eq!( embedding_provider.embedding_count() - prev_embedding_count, From ed1b1a5ccd58610111eba38373b6ff42a1e05792 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 18 Jul 2023 11:00:21 -0400 Subject: [PATCH 019/120] update logging for open ai embedding and remove redundant truncation --- crates/semantic_index/src/embedding.rs | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/crates/semantic_index/src/embedding.rs b/crates/semantic_index/src/embedding.rs index 5e2025b644..d41350f321 100644 --- a/crates/semantic_index/src/embedding.rs +++ b/crates/semantic_index/src/embedding.rs @@ -67,13 +67,17 @@ impl EmbeddingProvider for DummyEmbeddings { } } -const INPUT_LIMIT: usize = 8190; +const OPENAI_INPUT_LIMIT: usize = 8190; impl OpenAIEmbeddings { + pub fn new(client: Arc, executor: Arc) -> Self { + Self { client, executor } + } + fn truncate(span: String) -> String { let mut tokens = OPENAI_BPE_TOKENIZER.encode_with_special_tokens(span.as_ref()); - if tokens.len() > INPUT_LIMIT { - tokens.truncate(INPUT_LIMIT); + if tokens.len() > OPENAI_INPUT_LIMIT { + tokens.truncate(OPENAI_INPUT_LIMIT); let result = OPENAI_BPE_TOKENIZER.decode(tokens.clone()); if result.is_ok() { let transformed = result.unwrap(); @@ -115,6 +119,7 @@ impl EmbeddingProvider for OpenAIEmbeddings { .ok_or_else(|| anyhow!("no api key"))?; let mut request_number = 0; + let mut truncated = false; let mut response: Response; let mut spans: Vec = spans.iter().map(|x| x.to_string()).collect(); while request_number < MAX_RETRIES { @@ -136,15 +141,18 @@ impl EmbeddingProvider for OpenAIEmbeddings { self.executor.timer(delay).await; } StatusCode::BAD_REQUEST => { - log::info!( - "BAD REQUEST: {:?} {:?}", - &response.status(), - response.body() - ); - // Don't worry about delaying bad request, as we can assume - // we haven't been rate limited yet. - for span in spans.iter_mut() { - *span = Self::truncate(span.to_string()); + // Only truncate if it hasnt been truncated before + if !truncated { + for span in spans.iter_mut() { + *span = Self::truncate(span.clone()); + } + truncated = true; + } else { + // If failing once already truncated, log the error and break the loop + let mut body = String::new(); + response.body_mut().read_to_string(&mut body).await?; + log::trace!("open ai bad request: {:?} {:?}", &response.status(), body); + break; } } StatusCode::OK => { @@ -152,7 +160,7 @@ impl EmbeddingProvider for OpenAIEmbeddings { response.body_mut().read_to_string(&mut body).await?; let response: OpenAIEmbeddingResponse = serde_json::from_str(&body)?; - log::info!( + log::trace!( "openai embedding completed. tokens: {:?}", response.usage.total_tokens ); From 80ef92a3e158618d9dcc255fe8689b8597aacb4d Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 18 Jul 2023 11:14:13 -0400 Subject: [PATCH 020/120] fix db schema update process to ensure all tables are dropped --- crates/semantic_index/src/db.rs | 25 ++++++++++++--------- crates/semantic_index/src/semantic_index.rs | 10 +-------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index a667ff877c..74e1021b15 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -66,24 +66,28 @@ impl VectorDatabase { fn initialize_database(&self) -> Result<()> { rusqlite::vtab::array::load_module(&self.db)?; + // Delete existing tables, if SEMANTIC_INDEX_VERSION is bumped if self .get_existing_version() .map_or(false, |version| version == SEMANTIC_INDEX_VERSION as i64) { + log::trace!("vector database schema up to date"); return Ok(()); } + log::trace!("vector database schema out of date. updating..."); self.db - .execute( - " - DROP TABLE IF EXISTS documents; - DROP TABLE IF EXISTS files; - DROP TABLE IF EXISTS worktrees; - DROP TABLE IF EXISTS semantic_index_config; - ", - [], - ) - .context("failed to drop tables")?; + .execute("DROP TABLE IF EXISTS documents", []) + .context("failed to drop 'documents' table")?; + self.db + .execute("DROP TABLE IF EXISTS files", []) + .context("failed to drop 'files' table")?; + self.db + .execute("DROP TABLE IF EXISTS worktrees", []) + .context("failed to drop 'worktrees' table")?; + self.db + .execute("DROP TABLE IF EXISTS semantic_index_config", []) + .context("failed to drop 'semantic_index_config' table")?; // Initialize Vector Databasing Tables self.db.execute( @@ -133,6 +137,7 @@ impl VectorDatabase { [], )?; + log::trace!("vector database initialized with updated schema."); Ok(()) } diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index e6443870aa..f6575f6ad7 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -33,7 +33,7 @@ use util::{ ResultExt, }; -const SEMANTIC_INDEX_VERSION: usize = 3; +const SEMANTIC_INDEX_VERSION: usize = 4; const EMBEDDINGS_BATCH_SIZE: usize = 150; pub fn init( @@ -344,14 +344,6 @@ impl SemanticIndex { } for (worktree_id, documents, path, mtime, job_handle) in embeddings_queue.into_iter() { - // for document in documents.iter() { - // // TODO: Update this so it doesn't panic - // assert!( - // document.embedding.len() > 0, - // "Document Embedding Not Complete" - // ); - // } - db_update_tx .send(DbOperation::InsertFile { worktree_id, From 8d0614ce741a7cd279777bd16dcff6349105f077 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 18 Jul 2023 11:44:58 -0700 Subject: [PATCH 021/120] Populate project search results multi-buffer from semantic search Co-authored-by: Kyle --- crates/search/src/project_search.rs | 73 +++++++++++++------ crates/semantic_index/src/db.rs | 16 ++-- crates/semantic_index/src/embedding.rs | 5 -- crates/semantic_index/src/semantic_index.rs | 66 ++++++++++------- .../src/semantic_index_tests.rs | 15 ++-- 5 files changed, 103 insertions(+), 72 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 91d2b142ae..1097969c00 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -2,7 +2,7 @@ use crate::{ SearchOption, SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, ToggleWholeWord, }; -use anyhow::{Context, Result}; +use anyhow::Result; use collections::HashMap; use editor::{ items::active_match_index, scroll::autoscroll::Autoscroll, Anchor, Editor, MultiBuffer, @@ -187,6 +187,53 @@ impl ProjectSearch { })); cx.notify(); } + + fn semantic_search(&mut self, query: String, cx: &mut ModelContext) -> Option<()> { + let project = self.project.clone(); + let semantic_index = SemanticIndex::global(cx)?; + let search_task = semantic_index.update(cx, |semantic_index, cx| { + semantic_index.search_project(project, query.clone(), 10, cx) + }); + + self.search_id += 1; + // self.active_query = Some(query); + self.match_ranges.clear(); + self.pending_search = Some(cx.spawn(|this, mut cx| async move { + let results = search_task.await.log_err()?; + + let (_task, mut match_ranges) = this.update(&mut cx, |this, cx| { + this.excerpts.update(cx, |excerpts, cx| { + excerpts.clear(cx); + + let matches = results + .into_iter() + .map(|result| (result.buffer, vec![result.range])) + .collect(); + + excerpts.stream_excerpts_with_context_lines(matches, 3, cx) + }) + }); + + while let Some(match_range) = match_ranges.next().await { + this.update(&mut cx, |this, cx| { + this.match_ranges.push(match_range); + while let Ok(Some(match_range)) = match_ranges.try_next() { + this.match_ranges.push(match_range); + } + cx.notify(); + }); + } + + this.update(&mut cx, |this, cx| { + this.pending_search.take(); + cx.notify(); + }); + + None + })); + + Some(()) + } } pub enum ViewEvent { @@ -595,27 +642,9 @@ impl ProjectSearchView { return; } - let search_phrase = self.query_editor.read(cx).text(cx); - let project = self.model.read(cx).project.clone(); - if let Some(semantic_index) = SemanticIndex::global(cx) { - let search_task = semantic_index.update(cx, |semantic_index, cx| { - semantic_index.search_project(project, search_phrase, 10, cx) - }); - semantic.search_task = Some(cx.spawn(|this, mut cx| async move { - let results = search_task.await.context("search task")?; - - this.update(&mut cx, |this, cx| { - dbg!(&results); - // TODO: Update results - - if let Some(semantic) = &mut this.semantic { - semantic.search_task = None; - } - })?; - - anyhow::Ok(()) - })); - } + let query = self.query_editor.read(cx).text(cx); + self.model + .update(cx, |model, cx| model.semantic_search(query, cx)); return; } diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index 74e1021b15..fd99594aab 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -252,7 +252,7 @@ impl VectorDatabase { worktree_ids: &[i64], query_embedding: &Vec, limit: usize, - ) -> Result, String)>> { + ) -> Result)>> { let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); self.for_each_document(&worktree_ids, |id, embedding| { let similarity = dot(&embedding, &query_embedding); @@ -296,10 +296,7 @@ impl VectorDatabase { Ok(()) } - fn get_documents_by_ids( - &self, - ids: &[i64], - ) -> Result, String)>> { + fn get_documents_by_ids(&self, ids: &[i64]) -> Result)>> { let mut statement = self.db.prepare( " SELECT @@ -307,7 +304,7 @@ impl VectorDatabase { files.worktree_id, files.relative_path, documents.start_byte, - documents.end_byte, documents.name + documents.end_byte FROM documents, files WHERE @@ -322,14 +319,13 @@ impl VectorDatabase { row.get::<_, i64>(1)?, row.get::<_, String>(2)?.into(), row.get(3)?..row.get(4)?, - row.get(5)?, )) })?; - let mut values_by_id = HashMap::, String)>::default(); + let mut values_by_id = HashMap::)>::default(); for row in result_iter { - let (id, worktree_id, path, range, name) = row?; - values_by_id.insert(id, (worktree_id, path, range, name)); + let (id, worktree_id, path, range) = row?; + values_by_id.insert(id, (worktree_id, path, range)); } let mut results = Vec::with_capacity(ids.len()); diff --git a/crates/semantic_index/src/embedding.rs b/crates/semantic_index/src/embedding.rs index d41350f321..728fc9283a 100644 --- a/crates/semantic_index/src/embedding.rs +++ b/crates/semantic_index/src/embedding.rs @@ -70,10 +70,6 @@ impl EmbeddingProvider for DummyEmbeddings { const OPENAI_INPUT_LIMIT: usize = 8190; impl OpenAIEmbeddings { - pub fn new(client: Arc, executor: Arc) -> Self { - Self { client, executor } - } - fn truncate(span: String) -> String { let mut tokens = OPENAI_BPE_TOKENIZER.encode_with_special_tokens(span.as_ref()); if tokens.len() > OPENAI_INPUT_LIMIT { @@ -81,7 +77,6 @@ impl OpenAIEmbeddings { let result = OPENAI_BPE_TOKENIZER.decode(tokens.clone()); if result.is_ok() { let transformed = result.unwrap(); - // assert_ne!(transformed, span); return transformed; } } diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index f6575f6ad7..5c6919d4fd 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -12,7 +12,7 @@ use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; use futures::{channel::oneshot, Future}; use gpui::{AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, WeakModelHandle}; -use language::{Language, LanguageRegistry}; +use language::{Anchor, Buffer, Language, LanguageRegistry}; use parking_lot::Mutex; use parsing::{CodeContextRetriever, Document, PARSEABLE_ENTIRE_FILE_TYPES}; use postage::watch; @@ -93,7 +93,7 @@ pub struct SemanticIndex { struct ProjectState { worktree_db_ids: Vec<(WorktreeId, i64)>, outstanding_job_count_rx: watch::Receiver, - outstanding_job_count_tx: Arc>>, + _outstanding_job_count_tx: Arc>>, } struct JobHandle { @@ -135,12 +135,9 @@ pub struct PendingFile { job_handle: JobHandle, } -#[derive(Debug, Clone)] pub struct SearchResult { - pub worktree_id: WorktreeId, - pub name: String, - pub byte_range: Range, - pub file_path: PathBuf, + pub buffer: ModelHandle, + pub range: Range, } enum DbOperation { @@ -520,7 +517,7 @@ impl SemanticIndex { .map(|(a, b)| (*a, *b)) .collect(), outstanding_job_count_rx: job_count_rx.clone(), - outstanding_job_count_tx: job_count_tx.clone(), + _outstanding_job_count_tx: job_count_tx.clone(), }, ); }); @@ -623,7 +620,7 @@ impl SemanticIndex { let embedding_provider = self.embedding_provider.clone(); let database_url = self.database_url.clone(); let fs = self.fs.clone(); - cx.spawn(|this, cx| async move { + cx.spawn(|this, mut cx| async move { let documents = cx .background() .spawn(async move { @@ -640,26 +637,39 @@ impl SemanticIndex { }) .await?; - this.read_with(&cx, |this, _| { - let project_state = if let Some(state) = this.projects.get(&project.downgrade()) { - state - } else { - return Err(anyhow!("project not added")); - }; + let mut tasks = Vec::new(); + let mut ranges = Vec::new(); + let weak_project = project.downgrade(); + project.update(&mut cx, |project, cx| { + for (worktree_db_id, file_path, byte_range) in documents { + let project_state = + if let Some(state) = this.read(cx).projects.get(&weak_project) { + state + } else { + return Err(anyhow!("project not added")); + }; + if let Some(worktree_id) = project_state.worktree_id_for_db_id(worktree_db_id) { + tasks.push(project.open_buffer((worktree_id, file_path), cx)); + ranges.push(byte_range); + } + } - Ok(documents - .into_iter() - .filter_map(|(worktree_db_id, file_path, byte_range, name)| { - let worktree_id = project_state.worktree_id_for_db_id(worktree_db_id)?; - Some(SearchResult { - worktree_id, - name, - byte_range, - file_path, - }) - }) - .collect()) - }) + Ok(()) + })?; + + let buffers = futures::future::join_all(tasks).await; + + Ok(buffers + .into_iter() + .zip(ranges) + .filter_map(|(buffer, range)| { + let buffer = buffer.log_err()?; + let range = buffer.read_with(&cx, |buffer, _| { + buffer.anchor_before(range.start)..buffer.anchor_after(range.end) + }); + Some(SearchResult { buffer, range }) + }) + .collect::>()) }) } } diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 2ccc52d64b..63b28798ad 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -8,7 +8,7 @@ use crate::{ use anyhow::Result; use async_trait::async_trait; use gpui::{Task, TestAppContext}; -use language::{Language, LanguageConfig, LanguageRegistry}; +use language::{Language, LanguageConfig, LanguageRegistry, ToOffset}; use project::{project_settings::ProjectSettings, FakeFs, Fs, Project}; use rand::{rngs::StdRng, Rng}; use serde_json::json; @@ -85,9 +85,6 @@ async fn test_semantic_index(cx: &mut TestAppContext) { .unwrap(); let project = Project::test(fs.clone(), ["/the-root".as_ref()], cx).await; - let worktree_id = project.read_with(cx, |project, cx| { - project.worktrees(cx).next().unwrap().read(cx).id() - }); let (file_count, outstanding_file_count) = store .update(cx, |store, cx| store.index_project(project.clone(), cx)) .await @@ -103,9 +100,13 @@ async fn test_semantic_index(cx: &mut TestAppContext) { .await .unwrap(); - assert_eq!(search_results[0].byte_range.start, 0); - assert_eq!(search_results[0].name, "aaa"); - assert_eq!(search_results[0].worktree_id, worktree_id); + search_results[0].buffer.read_with(cx, |buffer, _cx| { + assert_eq!(search_results[0].range.start.to_offset(buffer), 0); + assert_eq!( + buffer.file().unwrap().path().as_ref(), + Path::new("file1.rs") + ); + }); fs.save( "/the-root/src/file2.rs".as_ref(), From 342dbc69459d771f802d7e77fdd7fb20f7445d1f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 18 Jul 2023 12:01:42 -0700 Subject: [PATCH 022/120] Fix rendering of project search while semantic index is indexing or running Co-authored-by: Kyle --- crates/search/src/project_search.rs | 32 +++++++++++++---------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 1097969c00..5feb94426e 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -110,7 +110,6 @@ struct SemanticSearchState { file_count: usize, outstanding_file_count: usize, _progress_task: Task<()>, - search_task: Option>>, } pub struct ProjectSearchBar { @@ -188,18 +187,17 @@ impl ProjectSearch { cx.notify(); } - fn semantic_search(&mut self, query: String, cx: &mut ModelContext) -> Option<()> { - let project = self.project.clone(); - let semantic_index = SemanticIndex::global(cx)?; - let search_task = semantic_index.update(cx, |semantic_index, cx| { - semantic_index.search_project(project, query.clone(), 10, cx) + fn semantic_search(&mut self, query: String, cx: &mut ModelContext) { + let search = SemanticIndex::global(cx).map(|index| { + index.update(cx, |semantic_index, cx| { + semantic_index.search_project(self.project.clone(), query.clone(), 10, cx) + }) }); - self.search_id += 1; // self.active_query = Some(query); self.match_ranges.clear(); self.pending_search = Some(cx.spawn(|this, mut cx| async move { - let results = search_task.await.log_err()?; + let results = search?.await.log_err()?; let (_task, mut match_ranges) = this.update(&mut cx, |this, cx| { this.excerpts.update(cx, |excerpts, cx| { @@ -231,8 +229,7 @@ impl ProjectSearch { None })); - - Some(()) + cx.notify(); } } @@ -257,12 +254,10 @@ impl View for ProjectSearchView { enum Status {} let theme = theme::current(cx).clone(); - let text = if self.query_editor.read(cx).text(cx).is_empty() { - Cow::Borrowed("") + let text = if model.pending_search.is_some() { + Cow::Borrowed("Searching...") } else if let Some(semantic) = &self.semantic { - if semantic.search_task.is_some() { - Cow::Borrowed("Searching...") - } else if semantic.outstanding_file_count > 0 { + if semantic.outstanding_file_count > 0 { Cow::Owned(format!( "Indexing. {} of {}...", semantic.file_count - semantic.outstanding_file_count, @@ -271,8 +266,8 @@ impl View for ProjectSearchView { } else { Cow::Borrowed("Indexing complete") } - } else if model.pending_search.is_some() { - Cow::Borrowed("Searching...") + } else if self.query_editor.read(cx).text(cx).is_empty() { + Cow::Borrowed("") } else { Cow::Borrowed("No results") }; @@ -978,10 +973,10 @@ impl ProjectSearchBar { let (files_to_index, mut files_remaining_rx) = index_task.await?; search_view.update(&mut cx, |search_view, cx| { + cx.notify(); search_view.semantic = Some(SemanticSearchState { file_count: files_to_index, outstanding_file_count: files_to_index, - search_task: None, _progress_task: cx.spawn(|search_view, mut cx| async move { while let Some(count) = files_remaining_rx.recv().await { search_view @@ -1006,6 +1001,7 @@ impl ProjectSearchBar { }) .detach_and_log_err(cx); } + cx.notify(); }); cx.notify(); true From 0e071919a07967f781f87c060c5c94168a844ba6 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 18 Jul 2023 16:09:44 -0400 Subject: [PATCH 023/120] parellelize embedding api calls --- crates/semantic_index/src/embedding.rs | 6 ++- crates/semantic_index/src/semantic_index.rs | 54 ++++++++++++++------- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/crates/semantic_index/src/embedding.rs b/crates/semantic_index/src/embedding.rs index 728fc9283a..77457ec7f6 100644 --- a/crates/semantic_index/src/embedding.rs +++ b/crates/semantic_index/src/embedding.rs @@ -106,7 +106,7 @@ impl OpenAIEmbeddings { #[async_trait] impl EmbeddingProvider for OpenAIEmbeddings { async fn embed_batch(&self, spans: Vec<&str>) -> Result>> { - const BACKOFF_SECONDS: [usize; 3] = [65, 180, 360]; + const BACKOFF_SECONDS: [usize; 3] = [45, 75, 125]; const MAX_RETRIES: usize = 3; let api_key = OPENAI_API_KEY @@ -133,6 +133,10 @@ impl EmbeddingProvider for OpenAIEmbeddings { match response.status() { StatusCode::TOO_MANY_REQUESTS => { let delay = Duration::from_secs(BACKOFF_SECONDS[request_number - 1] as u64); + log::trace!( + "open ai rate limiting, delaying request by {:?} seconds", + delay.as_secs() + ); self.executor.timer(delay).await; } StatusCode::BAD_REQUEST => { diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 5c6919d4fd..44ce45f457 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -24,7 +24,7 @@ use std::{ ops::Range, path::{Path, PathBuf}, sync::{Arc, Weak}, - time::SystemTime, + time::{Instant, SystemTime}, }; use util::{ channel::{ReleaseChannel, RELEASE_CHANNEL, RELEASE_CHANNEL_NAME}, @@ -34,7 +34,7 @@ use util::{ }; const SEMANTIC_INDEX_VERSION: usize = 4; -const EMBEDDINGS_BATCH_SIZE: usize = 150; +const EMBEDDINGS_BATCH_SIZE: usize = 80; pub fn init( fs: Arc, @@ -84,7 +84,7 @@ pub struct SemanticIndex { db_update_tx: channel::Sender, parsing_files_tx: channel::Sender, _db_update_task: Task<()>, - _embed_batch_task: Task<()>, + _embed_batch_tasks: Vec>, _batch_files_task: Task<()>, _parsing_files_tasks: Vec>, projects: HashMap, ProjectState>, @@ -189,6 +189,7 @@ impl SemanticIndex { language_registry: Arc, mut cx: AsyncAppContext, ) -> Result> { + let t0 = Instant::now(); let database_url = Arc::new(database_url); let db = cx @@ -196,7 +197,13 @@ impl SemanticIndex { .spawn(VectorDatabase::new(fs.clone(), database_url.clone())) .await?; + log::trace!( + "db initialization took {:?} milliseconds", + t0.elapsed().as_millis() + ); + Ok(cx.add_model(|cx| { + let t0 = Instant::now(); // Perform database operations let (db_update_tx, db_update_rx) = channel::unbounded(); let _db_update_task = cx.background().spawn({ @@ -210,20 +217,24 @@ impl SemanticIndex { // Group documents into batches and send them to the embedding provider. let (embed_batch_tx, embed_batch_rx) = channel::unbounded::, PathBuf, SystemTime, JobHandle)>>(); - let _embed_batch_task = cx.background().spawn({ - let db_update_tx = db_update_tx.clone(); - let embedding_provider = embedding_provider.clone(); - async move { - while let Ok(embeddings_queue) = embed_batch_rx.recv().await { - Self::compute_embeddings_for_batch( - embeddings_queue, - &embedding_provider, - &db_update_tx, - ) - .await; + let mut _embed_batch_tasks = Vec::new(); + for _ in 0..cx.background().num_cpus() { + let embed_batch_rx = embed_batch_rx.clone(); + _embed_batch_tasks.push(cx.background().spawn({ + let db_update_tx = db_update_tx.clone(); + let embedding_provider = embedding_provider.clone(); + async move { + while let Ok(embeddings_queue) = embed_batch_rx.recv().await { + Self::compute_embeddings_for_batch( + embeddings_queue, + &embedding_provider, + &db_update_tx, + ) + .await; + } } - } - }); + })); + } // Group documents into batches and send them to the embedding provider. let (batch_files_tx, batch_files_rx) = channel::unbounded::(); @@ -264,6 +275,10 @@ impl SemanticIndex { })); } + log::trace!( + "semantic index task initialization took {:?} milliseconds", + t0.elapsed().as_millis() + ); Self { fs, database_url, @@ -272,7 +287,7 @@ impl SemanticIndex { db_update_tx, parsing_files_tx, _db_update_task, - _embed_batch_task, + _embed_batch_tasks, _batch_files_task, _parsing_files_tasks, projects: HashMap::new(), @@ -460,6 +475,7 @@ impl SemanticIndex { project: ModelHandle, cx: &mut ModelContext, ) -> Task)>> { + let t0 = Instant::now(); let worktree_scans_complete = project .read(cx) .worktrees(cx) @@ -577,6 +593,10 @@ impl SemanticIndex { } } + log::trace!( + "walking worktree took {:?} milliseconds", + t0.elapsed().as_millis() + ); anyhow::Ok((count, job_count_rx)) }) .await From 9809ec3d706a19cd409a8a7494fabc06803e0ed7 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 19 Jul 2023 15:47:05 -0400 Subject: [PATCH 024/120] update treesitter parsing to accomodate for collapsed nested functions Co-authored-by: maxbrunsfeld --- Cargo.lock | 3 +- Cargo.toml | 2 +- crates/language/src/language.rs | 22 + crates/semantic_index/Cargo.toml | 1 + crates/semantic_index/src/parsing.rs | 269 +++-- crates/semantic_index/src/semantic_index.rs | 8 +- .../src/semantic_index_tests.rs | 987 +++++++++--------- crates/zed/src/languages/rust/config.toml | 1 + crates/zed/src/languages/rust/embedding.scm | 64 +- 9 files changed, 773 insertions(+), 584 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7719eb24c2..8ea6f61da0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6486,6 +6486,7 @@ dependencies = [ "parking_lot 0.11.2", "picker", "postage", + "pretty_assertions", "project", "rand 0.8.5", "rpc", @@ -7991,7 +7992,7 @@ dependencies = [ [[package]] name = "tree-sitter" version = "0.20.10" -source = "git+https://github.com/tree-sitter/tree-sitter?rev=49226023693107fba9a1191136a4f47f38cdca73#49226023693107fba9a1191136a4f47f38cdca73" +source = "git+https://github.com/tree-sitter/tree-sitter?rev=1c65ca24bc9a734ab70115188f465e12eecf224e#1c65ca24bc9a734ab70115188f465e12eecf224e" dependencies = [ "cc", "regex", diff --git a/Cargo.toml b/Cargo.toml index 4b65745348..04f2147431 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -130,7 +130,7 @@ tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml", tree-sitter-lua = "0.0.14" [patch.crates-io] -tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "49226023693107fba9a1191136a4f47f38cdca73" } +tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "1c65ca24bc9a734ab70115188f465e12eecf224e" } async-task = { git = "https://github.com/zed-industries/async-task", rev = "341b57d6de98cdfd7b418567b8de2022ca993a6e" } # TODO - Remove when a version is released with this PR: https://github.com/servo/core-foundation-rs/pull/457 diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 8c6d6e9c09..ec233716d6 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -339,6 +339,8 @@ pub struct LanguageConfig { #[serde(default)] pub line_comment: Option>, #[serde(default)] + pub collapsed_placeholder: String, + #[serde(default)] pub block_comment: Option<(Arc, Arc)>, #[serde(default)] pub overrides: HashMap, @@ -408,6 +410,7 @@ impl Default for LanguageConfig { line_comment: Default::default(), block_comment: Default::default(), overrides: Default::default(), + collapsed_placeholder: Default::default(), } } } @@ -525,6 +528,8 @@ pub struct EmbeddingConfig { pub item_capture_ix: u32, pub name_capture_ix: u32, pub context_capture_ix: Option, + pub collapse_capture_ix: Option, + pub keep_capture_ix: Option, } struct InjectionConfig { @@ -1246,12 +1251,16 @@ impl Language { let mut item_capture_ix = None; let mut name_capture_ix = None; let mut context_capture_ix = None; + let mut collapse_capture_ix = None; + let mut keep_capture_ix = None; get_capture_indices( &query, &mut [ ("item", &mut item_capture_ix), ("name", &mut name_capture_ix), ("context", &mut context_capture_ix), + ("keep", &mut keep_capture_ix), + ("collapse", &mut collapse_capture_ix), ], ); if let Some((item_capture_ix, name_capture_ix)) = item_capture_ix.zip(name_capture_ix) { @@ -1260,6 +1269,8 @@ impl Language { item_capture_ix, name_capture_ix, context_capture_ix, + collapse_capture_ix, + keep_capture_ix, }); } Ok(self) @@ -1544,9 +1555,20 @@ impl Language { pub fn grammar(&self) -> Option<&Arc> { self.grammar.as_ref() } + + pub fn default_scope(self: &Arc) -> LanguageScope { + LanguageScope { + language: self.clone(), + override_id: None, + } + } } impl LanguageScope { + pub fn collapsed_placeholder(&self) -> &str { + self.language.config.collapsed_placeholder.as_ref() + } + pub fn line_comment_prefix(&self) -> Option<&Arc> { Override::as_option( self.config_override().map(|o| &o.line_comment), diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 2d21ff6c1c..1b3169bfe4 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -46,6 +46,7 @@ rpc = { path = "../rpc", features = ["test-support"] } workspace = { path = "../workspace", features = ["test-support"] } settings = { path = "../settings", features = ["test-support"]} +pretty_assertions.workspace = true rand.workspace = true unindent.workspace = true tempdir.workspace = true diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index 663f0f473b..0d2aeb60fb 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -1,6 +1,6 @@ use anyhow::{anyhow, Ok, Result}; -use language::Language; -use std::{ops::Range, path::Path, sync::Arc}; +use language::{Grammar, Language}; +use std::{cmp, collections::HashSet, ops::Range, path::Path, sync::Arc}; use tree_sitter::{Parser, QueryCursor}; #[derive(Debug, PartialEq, Clone)] @@ -22,6 +22,20 @@ pub struct CodeContextRetriever { pub cursor: QueryCursor, } +// Every match has an item, this represents the fundamental treesitter symbol and anchors the search +// Every match has one or more 'name' captures. These indicate the display range of the item for deduplication. +// If there are preceeding comments, we track this with a context capture +// If there is a piece that should be collapsed in hierarchical queries, we capture it with a collapse capture +// If there is a piece that should be kept inside a collapsed node, we capture it with a keep capture +#[derive(Debug, Clone)] +pub struct CodeContextMatch { + pub start_col: usize, + pub item_range: Range, + pub name_range: Range, + pub context_ranges: Vec>, + pub collapse_ranges: Vec>, +} + impl CodeContextRetriever { pub fn new() -> Self { Self { @@ -49,6 +63,82 @@ impl CodeContextRetriever { }]) } + fn get_matches_in_file( + &mut self, + content: &str, + grammar: &Arc, + ) -> Result> { + let embedding_config = grammar + .embedding_config + .as_ref() + .ok_or_else(|| anyhow!("no embedding queries"))?; + self.parser.set_language(grammar.ts_language).unwrap(); + + let tree = self + .parser + .parse(&content, None) + .ok_or_else(|| anyhow!("parsing failed"))?; + + let mut captures: Vec = Vec::new(); + let mut collapse_ranges: Vec> = Vec::new(); + let mut keep_ranges: Vec> = Vec::new(); + for mat in self.cursor.matches( + &embedding_config.query, + tree.root_node(), + content.as_bytes(), + ) { + let mut start_col = 0; + let mut item_range: Option> = None; + let mut name_range: Option> = None; + let mut context_ranges: Vec> = Vec::new(); + collapse_ranges.clear(); + keep_ranges.clear(); + for capture in mat.captures { + if capture.index == embedding_config.item_capture_ix { + item_range = Some(capture.node.byte_range()); + start_col = capture.node.start_position().column; + } else if capture.index == embedding_config.name_capture_ix { + name_range = Some(capture.node.byte_range()); + } else if Some(capture.index) == embedding_config.context_capture_ix { + context_ranges.push(capture.node.byte_range()); + } else if Some(capture.index) == embedding_config.collapse_capture_ix { + collapse_ranges.push(capture.node.byte_range()); + } else if Some(capture.index) == embedding_config.keep_capture_ix { + keep_ranges.push(capture.node.byte_range()); + } + } + + if item_range.is_some() && name_range.is_some() { + let item_range = item_range.unwrap(); + captures.push(CodeContextMatch { + start_col, + item_range, + name_range: name_range.unwrap(), + context_ranges, + collapse_ranges: subtract_ranges(&collapse_ranges, &keep_ranges), + }); + } + } + Ok(captures) + } + + pub fn parse_file_with_template( + &mut self, + relative_path: &Path, + content: &str, + language: Arc, + ) -> Result> { + let language_name = language.name(); + let mut documents = self.parse_file(relative_path, content, language)?; + for document in &mut documents { + document.content = CODE_CONTEXT_TEMPLATE + .replace("", relative_path.to_string_lossy().as_ref()) + .replace("", language_name.as_ref()) + .replace("item", &document.content); + } + Ok(documents) + } + pub fn parse_file( &mut self, relative_path: &Path, @@ -62,78 +152,131 @@ impl CodeContextRetriever { let grammar = language .grammar() .ok_or_else(|| anyhow!("no grammar for language"))?; - let embedding_config = grammar - .embedding_config - .as_ref() - .ok_or_else(|| anyhow!("no embedding queries"))?; - - self.parser.set_language(grammar.ts_language).unwrap(); - - let tree = self - .parser - .parse(&content, None) - .ok_or_else(|| anyhow!("parsing failed"))?; - - let mut documents = Vec::new(); // Iterate through query matches - let mut name_ranges: Vec> = vec![]; - for mat in self.cursor.matches( - &embedding_config.query, - tree.root_node(), - content.as_bytes(), - ) { - let mut name: Vec<&str> = vec![]; - let mut item: Option<&str> = None; - let mut byte_range: Option> = None; - let mut context_spans: Vec<&str> = vec![]; - for capture in mat.captures { - if capture.index == embedding_config.item_capture_ix { - byte_range = Some(capture.node.byte_range()); - item = content.get(capture.node.byte_range()); - } else if capture.index == embedding_config.name_capture_ix { - let name_range = capture.node.byte_range(); - if name_ranges.contains(&name_range) { - continue; - } - name_ranges.push(name_range.clone()); - if let Some(name_content) = content.get(name_range.clone()) { - name.push(name_content); - } - } + let matches = self.get_matches_in_file(content, grammar)?; - if let Some(context_capture_ix) = embedding_config.context_capture_ix { - if capture.index == context_capture_ix { - if let Some(context) = content.get(capture.node.byte_range()) { - context_spans.push(context); - } - } + let language_scope = language.default_scope(); + let placeholder = language_scope.collapsed_placeholder(); + + let mut documents = Vec::new(); + let mut collapsed_ranges_within = Vec::new(); + let mut parsed_name_ranges = HashSet::new(); + for (i, context_match) in matches.iter().enumerate() { + if parsed_name_ranges.contains(&context_match.name_range) { + continue; + } + + collapsed_ranges_within.clear(); + for remaining_match in &matches[(i + 1)..] { + if context_match + .item_range + .contains(&remaining_match.item_range.start) + && context_match + .item_range + .contains(&remaining_match.item_range.end) + { + collapsed_ranges_within.extend(remaining_match.collapse_ranges.iter().cloned()); + } else { + break; } } - if let Some((item, byte_range)) = item.zip(byte_range) { - if !name.is_empty() { - let item = if context_spans.is_empty() { - item.to_string() - } else { - format!("{}\n{}", context_spans.join("\n"), item) - }; + let mut document_content = String::new(); + for context_range in &context_match.context_ranges { + document_content.push_str(&content[context_range.clone()]); + document_content.push_str("\n"); + } - let document_text = CODE_CONTEXT_TEMPLATE - .replace("", relative_path.to_str().unwrap()) - .replace("", &language.name().to_lowercase()) - .replace("", item.as_str()); - - documents.push(Document { - range: byte_range, - content: document_text, - embedding: Vec::new(), - name: name.join(" ").to_string(), - }); + let mut offset = context_match.item_range.start; + for collapsed_range in &collapsed_ranges_within { + if collapsed_range.start > offset { + add_content_from_range( + &mut document_content, + content, + offset..collapsed_range.start, + context_match.start_col, + ); } + document_content.push_str(placeholder); + offset = collapsed_range.end; + } + + if offset < context_match.item_range.end { + add_content_from_range( + &mut document_content, + content, + offset..context_match.item_range.end, + context_match.start_col, + ); + } + + if let Some(name) = content.get(context_match.name_range.clone()) { + parsed_name_ranges.insert(context_match.name_range.clone()); + documents.push(Document { + name: name.to_string(), + content: document_content, + range: context_match.item_range.clone(), + embedding: vec![], + }) } } return Ok(documents); } } + +pub(crate) fn subtract_ranges( + ranges: &[Range], + ranges_to_subtract: &[Range], +) -> Vec> { + let mut result = Vec::new(); + + let mut ranges_to_subtract = ranges_to_subtract.iter().peekable(); + + for range in ranges { + let mut offset = range.start; + + while offset < range.end { + if let Some(range_to_subtract) = ranges_to_subtract.peek() { + if offset < range_to_subtract.start { + let next_offset = cmp::min(range_to_subtract.start, range.end); + result.push(offset..next_offset); + offset = next_offset; + } else { + let next_offset = cmp::min(range_to_subtract.end, range.end); + offset = next_offset; + } + + if offset >= range_to_subtract.end { + ranges_to_subtract.next(); + } + } else { + result.push(offset..range.end); + offset = range.end; + } + } + } + + result +} + +fn add_content_from_range( + output: &mut String, + content: &str, + range: Range, + start_col: usize, +) { + for mut line in content.get(range.clone()).unwrap_or("").lines() { + for _ in 0..start_col { + if line.starts_with(' ') { + line = &line[1..]; + } else { + break; + } + } + output.push_str(line); + output.push('\n'); + } + output.pop(); +} diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 44ce45f457..271fd741a6 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -409,7 +409,11 @@ impl SemanticIndex { ) { if let Some(content) = fs.load(&pending_file.absolute_path).await.log_err() { if let Some(documents) = retriever - .parse_file(&pending_file.relative_path, &content, pending_file.language) + .parse_file_with_template( + &pending_file.relative_path, + &content, + pending_file.language, + ) .log_err() { log::trace!( @@ -657,6 +661,8 @@ impl SemanticIndex { }) .await?; + dbg!(&documents); + let mut tasks = Vec::new(); let mut ranges = Vec::new(); let weak_project = project.downgrade(); diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 63b28798ad..c54d5079d3 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -1,7 +1,7 @@ use crate::{ db::dot, embedding::EmbeddingProvider, - parsing::{CodeContextRetriever, Document}, + parsing::{subtract_ranges, CodeContextRetriever, Document}, semantic_index_settings::SemanticIndexSettings, SemanticIndex, }; @@ -9,6 +9,7 @@ use anyhow::Result; use async_trait::async_trait; use gpui::{Task, TestAppContext}; use language::{Language, LanguageConfig, LanguageRegistry, ToOffset}; +use pretty_assertions::assert_eq; use project::{project_settings::ProjectSettings, FakeFs, Fs, Project}; use rand::{rngs::StdRng, Rng}; use serde_json::json; @@ -104,7 +105,7 @@ async fn test_semantic_index(cx: &mut TestAppContext) { assert_eq!(search_results[0].range.start.to_offset(buffer), 0); assert_eq!( buffer.file().unwrap().path().as_ref(), - Path::new("file1.rs") + Path::new("src/file1.rs") ); }); @@ -147,503 +148,548 @@ async fn test_code_context_retrieval_rust() { let text = " /// A doc comment /// that spans multiple lines + #[gpui::test] fn a() { b } impl C for D { } + + impl E { + // This is also a preceding comment + pub fn function_1() -> Option<()> { + todo!(); + } + + // This is a preceding comment + fn function_2() -> Result<()> { + todo!(); + } + } " .unindent(); - let parsed_files = retriever + let documents = retriever .parse_file(Path::new("foo.rs"), &text, language) .unwrap(); - assert_eq!( - parsed_files, + assert_documents_eq( + &documents, &[ - Document { - name: "a".into(), - range: text.find("fn a").unwrap()..(text.find("}").unwrap() + 1), - content: " - The below code snippet is from file 'foo.rs' - - ```rust - /// A doc comment - /// that spans multiple lines - fn a() { - b - } - ```" + ( + " + /// A doc comment + /// that spans multiple lines + #[gpui::test] + fn a() { + b + }" .unindent(), - embedding: vec![], - }, - Document { - name: "C for D".into(), - range: text.find("impl C").unwrap()..(text.rfind("}").unwrap() + 1), - content: " - The below code snippet is from file 'foo.rs' - - ```rust - impl C for D { - } - ```" + text.find("fn a").unwrap(), + ), + ( + " + impl C for D { + }" .unindent(), - embedding: vec![], - } - ] + text.find("impl C").unwrap(), + ), + ( + " + impl E { + // This is also a preceding comment + pub fn function_1() -> Option<()> { /* ... */ } + + // This is a preceding comment + fn function_2() -> Result<()> { /* ... */ } + }" + .unindent(), + text.find("impl E").unwrap(), + ), + ( + " + // This is also a preceding comment + pub fn function_1() -> Option<()> { + todo!(); + }" + .unindent(), + text.find("pub fn function_1").unwrap(), + ), + ( + " + // This is a preceding comment + fn function_2() -> Result<()> { + todo!(); + }" + .unindent(), + text.find("fn function_2").unwrap(), + ), + ], ); } -#[gpui::test] -async fn test_code_context_retrieval_javascript() { - let language = js_lang(); - let mut retriever = CodeContextRetriever::new(); - - let text = " - /* globals importScripts, backend */ - function _authorize() {} - - /** - * Sometimes the frontend build is way faster than backend. - */ - export async function authorizeBank() { - _authorize(pushModal, upgradingAccountId, {}); - } - - export class SettingsPage { - /* This is a test setting */ - constructor(page) { - this.page = page; - } - } - - /* This is a test comment */ - class TestClass {} - - /* Schema for editor_events in Clickhouse. */ - export interface ClickhouseEditorEvent { - installation_id: string - operation: string - } - " - .unindent(); - - let parsed_files = retriever - .parse_file(Path::new("foo.js"), &text, language) - .unwrap(); - - let test_documents = &[ - Document { - name: "function _authorize".into(), - range: text.find("function _authorize").unwrap()..(text.find("}").unwrap() + 1), - content: " - The below code snippet is from file 'foo.js' - - ```javascript - /* globals importScripts, backend */ - function _authorize() {} - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "async function authorizeBank".into(), - range: text.find("export async").unwrap()..223, - content: " - The below code snippet is from file 'foo.js' - - ```javascript - /** - * Sometimes the frontend build is way faster than backend. - */ - export async function authorizeBank() { - _authorize(pushModal, upgradingAccountId, {}); - } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "class SettingsPage".into(), - range: 225..343, - content: " - The below code snippet is from file 'foo.js' - - ```javascript - export class SettingsPage { - /* This is a test setting */ - constructor(page) { - this.page = page; - } - } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "constructor".into(), - range: 290..341, - content: " - The below code snippet is from file 'foo.js' - - ```javascript - /* This is a test setting */ - constructor(page) { - this.page = page; - } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "class TestClass".into(), - range: 374..392, - content: " - The below code snippet is from file 'foo.js' - - ```javascript - /* This is a test comment */ - class TestClass {} - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "interface ClickhouseEditorEvent".into(), - range: 440..532, - content: " - The below code snippet is from file 'foo.js' - - ```javascript - /* Schema for editor_events in Clickhouse. */ - export interface ClickhouseEditorEvent { - installation_id: string - operation: string - } - ```" - .unindent(), - embedding: vec![], - }, - ]; - - for idx in 0..test_documents.len() { - assert_eq!(test_documents[idx], parsed_files[idx]); - } +fn assert_documents_eq( + documents: &[Document], + expected_contents_and_start_offsets: &[(String, usize)], +) { + assert_eq!( + documents + .iter() + .map(|document| (document.content.clone(), document.range.start)) + .collect::>(), + expected_contents_and_start_offsets + ); } -#[gpui::test] -async fn test_code_context_retrieval_elixir() { - let language = elixir_lang(); - let mut retriever = CodeContextRetriever::new(); +// #[gpui::test] +// async fn test_code_context_retrieval_javascript() { +// let language = js_lang(); +// let mut retriever = CodeContextRetriever::new(); - let text = r#" -defmodule File.Stream do - @moduledoc """ - Defines a `File.Stream` struct returned by `File.stream!/3`. +// let text = " +// /* globals importScripts, backend */ +// function _authorize() {} - The following fields are public: +// /** +// * Sometimes the frontend build is way faster than backend. +// */ +// export async function authorizeBank() { +// _authorize(pushModal, upgradingAccountId, {}); +// } - * `path` - the file path - * `modes` - the file modes - * `raw` - a boolean indicating if bin functions should be used - * `line_or_bytes` - if reading should read lines or a given number of bytes - * `node` - the node the file belongs to +// export class SettingsPage { +// /* This is a test setting */ +// constructor(page) { +// this.page = page; +// } +// } - """ +// /* This is a test comment */ +// class TestClass {} - defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil +// /* Schema for editor_events in Clickhouse. */ +// export interface ClickhouseEditorEvent { +// installation_id: string +// operation: string +// } +// " +// .unindent(); - @type t :: %__MODULE__{} +// let parsed_files = retriever +// .parse_file(Path::new("foo.js"), &text, language) +// .unwrap(); - @doc false - def __build__(path, modes, line_or_bytes) do - raw = :lists.keyfind(:encoding, 1, modes) == false +// let test_documents = &[ +// Document { +// name: "function _authorize".into(), +// range: text.find("function _authorize").unwrap()..(text.find("}").unwrap() + 1), +// content: " +// The below code snippet is from file 'foo.js' - modes = - case raw do - true -> - case :lists.keyfind(:read_ahead, 1, modes) do - {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] - {:read_ahead, _} -> [:raw | modes] - false -> [:raw, :read_ahead | modes] - end +// ```javascript +// /* globals importScripts, backend */ +// function _authorize() {} +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "async function authorizeBank".into(), +// range: text.find("export async").unwrap()..223, +// content: " +// The below code snippet is from file 'foo.js' - false -> - modes - end +// ```javascript +// /** +// * Sometimes the frontend build is way faster than backend. +// */ +// export async function authorizeBank() { +// _authorize(pushModal, upgradingAccountId, {}); +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "class SettingsPage".into(), +// range: 225..343, +// content: " +// The below code snippet is from file 'foo.js' - %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} +// ```javascript +// export class SettingsPage { +// /* This is a test setting */ +// constructor(page) { +// this.page = page; +// } +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "constructor".into(), +// range: 290..341, +// content: " +// The below code snippet is from file 'foo.js' - end -"# - .unindent(); +// ```javascript +// /* This is a test setting */ +// constructor(page) { +// this.page = page; +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "class TestClass".into(), +// range: 374..392, +// content: " +// The below code snippet is from file 'foo.js' - let parsed_files = retriever - .parse_file(Path::new("foo.ex"), &text, language) - .unwrap(); +// ```javascript +// /* This is a test comment */ +// class TestClass {} +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "interface ClickhouseEditorEvent".into(), +// range: 440..532, +// content: " +// The below code snippet is from file 'foo.js' - let test_documents = &[ - Document{ - name: "defmodule File.Stream".into(), - range: 0..1132, - content: r#" - The below code snippet is from file 'foo.ex' +// ```javascript +// /* Schema for editor_events in Clickhouse. */ +// export interface ClickhouseEditorEvent { +// installation_id: string +// operation: string +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// ]; - ```elixir - defmodule File.Stream do - @moduledoc """ - Defines a `File.Stream` struct returned by `File.stream!/3`. +// for idx in 0..test_documents.len() { +// assert_eq!(test_documents[idx], parsed_files[idx]); +// } +// } - The following fields are public: +// #[gpui::test] +// async fn test_code_context_retrieval_elixir() { +// let language = elixir_lang(); +// let mut retriever = CodeContextRetriever::new(); - * `path` - the file path - * `modes` - the file modes - * `raw` - a boolean indicating if bin functions should be used - * `line_or_bytes` - if reading should read lines or a given number of bytes - * `node` - the node the file belongs to +// let text = r#" +// defmodule File.Stream do +// @moduledoc """ +// Defines a `File.Stream` struct returned by `File.stream!/3`. - """ +// The following fields are public: - defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil +// * `path` - the file path +// * `modes` - the file modes +// * `raw` - a boolean indicating if bin functions should be used +// * `line_or_bytes` - if reading should read lines or a given number of bytes +// * `node` - the node the file belongs to - @type t :: %__MODULE__{} +// """ - @doc false - def __build__(path, modes, line_or_bytes) do - raw = :lists.keyfind(:encoding, 1, modes) == false +// defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil - modes = - case raw do - true -> - case :lists.keyfind(:read_ahead, 1, modes) do - {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] - {:read_ahead, _} -> [:raw | modes] - false -> [:raw, :read_ahead | modes] - end +// @type t :: %__MODULE__{} - false -> - modes - end +// @doc false +// def __build__(path, modes, line_or_bytes) do +// raw = :lists.keyfind(:encoding, 1, modes) == false - %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} +// modes = +// case raw do +// true -> +// case :lists.keyfind(:read_ahead, 1, modes) do +// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] +// {:read_ahead, _} -> [:raw | modes] +// false -> [:raw, :read_ahead | modes] +// end - end - ```"#.unindent(), - embedding: vec![], - }, - Document { - name: "def __build__".into(), - range: 574..1132, - content: r#" -The below code snippet is from file 'foo.ex' +// false -> +// modes +// end -```elixir -@doc false -def __build__(path, modes, line_or_bytes) do - raw = :lists.keyfind(:encoding, 1, modes) == false +// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} - modes = - case raw do - true -> - case :lists.keyfind(:read_ahead, 1, modes) do - {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] - {:read_ahead, _} -> [:raw | modes] - false -> [:raw, :read_ahead | modes] - end +// end +// "# +// .unindent(); - false -> - modes - end +// let parsed_files = retriever +// .parse_file(Path::new("foo.ex"), &text, language) +// .unwrap(); - %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} +// let test_documents = &[ +// Document{ +// name: "defmodule File.Stream".into(), +// range: 0..1132, +// content: r#" +// The below code snippet is from file 'foo.ex' - end -```"# - .unindent(), - embedding: vec![], - }]; +// ```elixir +// defmodule File.Stream do +// @moduledoc """ +// Defines a `File.Stream` struct returned by `File.stream!/3`. - for idx in 0..test_documents.len() { - assert_eq!(test_documents[idx], parsed_files[idx]); - } -} +// The following fields are public: -#[gpui::test] -async fn test_code_context_retrieval_cpp() { - let language = cpp_lang(); - let mut retriever = CodeContextRetriever::new(); +// * `path` - the file path +// * `modes` - the file modes +// * `raw` - a boolean indicating if bin functions should be used +// * `line_or_bytes` - if reading should read lines or a given number of bytes +// * `node` - the node the file belongs to - let text = " - /** - * @brief Main function - * @returns 0 on exit - */ - int main() { return 0; } +// """ - /** - * This is a test comment - */ - class MyClass { // The class - public: // Access specifier - int myNum; // Attribute (int variable) - string myString; // Attribute (string variable) - }; +// defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil - // This is a test comment - enum Color { red, green, blue }; +// @type t :: %__MODULE__{} - /** This is a preceeding block comment - * This is the second line - */ - struct { // Structure declaration - int myNum; // Member (int variable) - string myString; // Member (string variable) - } myStructure; +// @doc false +// def __build__(path, modes, line_or_bytes) do +// raw = :lists.keyfind(:encoding, 1, modes) == false - /** - * @brief Matrix class. - */ - template ::value || std::is_floating_point::value, - bool>::type> - class Matrix2 { - std::vector> _mat; +// modes = +// case raw do +// true -> +// case :lists.keyfind(:read_ahead, 1, modes) do +// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] +// {:read_ahead, _} -> [:raw | modes] +// false -> [:raw, :read_ahead | modes] +// end - public: - /** - * @brief Constructor - * @tparam Integer ensuring integers are being evaluated and not other - * data types. - * @param size denoting the size of Matrix as size x size - */ - template ::value, - Integer>::type> - explicit Matrix(const Integer size) { - for (size_t i = 0; i < size; ++i) { - _mat.emplace_back(std::vector(size, 0)); - } - } - }" - .unindent(); +// false -> +// modes +// end - let parsed_files = retriever - .parse_file(Path::new("foo.cpp"), &text, language) - .unwrap(); +// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} - let test_documents = &[ - Document { - name: "int main".into(), - range: 54..78, - content: " - The below code snippet is from file 'foo.cpp' +// end +// ```"#.unindent(), +// embedding: vec![], +// }, +// Document { +// name: "def __build__".into(), +// range: 574..1132, +// content: r#" +// The below code snippet is from file 'foo.ex' - ```cpp - /** - * @brief Main function - * @returns 0 on exit - */ - int main() { return 0; } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "class MyClass".into(), - range: 112..295, - content: " - The below code snippet is from file 'foo.cpp' +// ```elixir +// @doc false +// def __build__(path, modes, line_or_bytes) do +// raw = :lists.keyfind(:encoding, 1, modes) == false - ```cpp - /** - * This is a test comment - */ - class MyClass { // The class - public: // Access specifier - int myNum; // Attribute (int variable) - string myString; // Attribute (string variable) - } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "enum Color".into(), - range: 324..355, - content: " - The below code snippet is from file 'foo.cpp' +// modes = +// case raw do +// true -> +// case :lists.keyfind(:read_ahead, 1, modes) do +// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] +// {:read_ahead, _} -> [:raw | modes] +// false -> [:raw, :read_ahead | modes] +// end - ```cpp - // This is a test comment - enum Color { red, green, blue } - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "struct myStructure".into(), - range: 428..581, - content: " - The below code snippet is from file 'foo.cpp' +// false -> +// modes +// end - ```cpp - /** This is a preceeding block comment - * This is the second line - */ - struct { // Structure declaration - int myNum; // Member (int variable) - string myString; // Member (string variable) - } myStructure; - ```" - .unindent(), - embedding: vec![], - }, - Document { - name: "class Matrix2".into(), - range: 613..1342, - content: " - The below code snippet is from file 'foo.cpp' +// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} - ```cpp - /** - * @brief Matrix class. - */ - template ::value || std::is_floating_point::value, - bool>::type> - class Matrix2 { - std::vector> _mat; +// end +// ```"# +// .unindent(), +// embedding: vec![], +// }]; - public: - /** - * @brief Constructor - * @tparam Integer ensuring integers are being evaluated and not other - * data types. - * @param size denoting the size of Matrix as size x size - */ - template ::value, - Integer>::type> - explicit Matrix(const Integer size) { - for (size_t i = 0; i < size; ++i) { - _mat.emplace_back(std::vector(size, 0)); - } - } - } - ```" - .unindent(), - embedding: vec![], - }, - ]; +// for idx in 0..test_documents.len() { +// assert_eq!(test_documents[idx], parsed_files[idx]); +// } +// } - for idx in 0..test_documents.len() { - assert_eq!(test_documents[idx], parsed_files[idx]); - } -} +// #[gpui::test] +// async fn test_code_context_retrieval_cpp() { +// let language = cpp_lang(); +// let mut retriever = CodeContextRetriever::new(); + +// let text = " +// /** +// * @brief Main function +// * @returns 0 on exit +// */ +// int main() { return 0; } + +// /** +// * This is a test comment +// */ +// class MyClass { // The class +// public: // Access specifier +// int myNum; // Attribute (int variable) +// string myString; // Attribute (string variable) +// }; + +// // This is a test comment +// enum Color { red, green, blue }; + +// /** This is a preceding block comment +// * This is the second line +// */ +// struct { // Structure declaration +// int myNum; // Member (int variable) +// string myString; // Member (string variable) +// } myStructure; + +// /** +// * @brief Matrix class. +// */ +// template ::value || std::is_floating_point::value, +// bool>::type> +// class Matrix2 { +// std::vector> _mat; + +// public: +// /** +// * @brief Constructor +// * @tparam Integer ensuring integers are being evaluated and not other +// * data types. +// * @param size denoting the size of Matrix as size x size +// */ +// template ::value, +// Integer>::type> +// explicit Matrix(const Integer size) { +// for (size_t i = 0; i < size; ++i) { +// _mat.emplace_back(std::vector(size, 0)); +// } +// } +// }" +// .unindent(); + +// let parsed_files = retriever +// .parse_file(Path::new("foo.cpp"), &text, language) +// .unwrap(); + +// let test_documents = &[ +// Document { +// name: "int main".into(), +// range: 54..78, +// content: " +// The below code snippet is from file 'foo.cpp' + +// ```cpp +// /** +// * @brief Main function +// * @returns 0 on exit +// */ +// int main() { return 0; } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "class MyClass".into(), +// range: 112..295, +// content: " +// The below code snippet is from file 'foo.cpp' + +// ```cpp +// /** +// * This is a test comment +// */ +// class MyClass { // The class +// public: // Access specifier +// int myNum; // Attribute (int variable) +// string myString; // Attribute (string variable) +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "enum Color".into(), +// range: 324..355, +// content: " +// The below code snippet is from file 'foo.cpp' + +// ```cpp +// // This is a test comment +// enum Color { red, green, blue } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "struct myStructure".into(), +// range: 428..581, +// content: " +// The below code snippet is from file 'foo.cpp' + +// ```cpp +// /** This is a preceding block comment +// * This is the second line +// */ +// struct { // Structure declaration +// int myNum; // Member (int variable) +// string myString; // Member (string variable) +// } myStructure; +// ```" +// .unindent(), +// embedding: vec![], +// }, +// Document { +// name: "class Matrix2".into(), +// range: 613..1342, +// content: " +// The below code snippet is from file 'foo.cpp' + +// ```cpp +// /** +// * @brief Matrix class. +// */ +// template ::value || std::is_floating_point::value, +// bool>::type> +// class Matrix2 { +// std::vector> _mat; + +// public: +// /** +// * @brief Constructor +// * @tparam Integer ensuring integers are being evaluated and not other +// * data types. +// * @param size denoting the size of Matrix as size x size +// */ +// template ::value, +// Integer>::type> +// explicit Matrix(const Integer size) { +// for (size_t i = 0; i < size; ++i) { +// _mat.emplace_back(std::vector(size, 0)); +// } +// } +// } +// ```" +// .unindent(), +// embedding: vec![], +// }, +// ]; + +// for idx in 0..test_documents.len() { +// assert_eq!(test_documents[idx], parsed_files[idx]); +// } +// } #[gpui::test] fn test_dot_product(mut rng: StdRng) { @@ -826,6 +872,7 @@ fn rust_lang() -> Arc { LanguageConfig { name: "Rust".into(), path_suffixes: vec!["rs".into()], + collapsed_placeholder: " /* ... */ ".to_string(), ..Default::default() }, Some(tree_sitter_rust::language()), @@ -833,54 +880,32 @@ fn rust_lang() -> Arc { .with_embedding_query( r#" ( - (line_comment)* @context + [(line_comment) (attribute_item)]* @context . - (enum_item - name: (_) @name) @item - ) + [ + (struct_item + name: (_) @name) - ( - (line_comment)* @context - . - (struct_item - name: (_) @name) @item - ) + (enum_item + name: (_) @name) - ( - (line_comment)* @context - . - (impl_item - trait: (_)? @name - "for"? @name - type: (_) @name) @item - ) + (impl_item + trait: (_)? @name + "for"? @name + type: (_) @name) - ( - (line_comment)* @context - . - (trait_item - name: (_) @name) @item - ) + (trait_item + name: (_) @name) - ( - (line_comment)* @context - . - (function_item - name: (_) @name) @item - ) + (function_item + name: (_) @name + body: (block + "{" @keep + "}" @keep) @collapse) - ( - (line_comment)* @context - . - (macro_definition - name: (_) @name) @item - ) - - ( - (line_comment)* @context - . - (function_signature_item - name: (_) @name) @item + (macro_definition + name: (_) @name) + ] @item ) "#, ) @@ -1023,3 +1048,15 @@ fn elixir_lang() -> Arc { .unwrap(), ) } + +#[gpui::test] +fn test_subtract_ranges() { + // collapsed_ranges: Vec>, keep_ranges: Vec> + + assert_eq!( + subtract_ranges(&[0..5, 10..21], &[0..1, 4..5]), + vec![1..4, 10..21] + ); + + assert_eq!(subtract_ranges(&[0..5], &[1..2]), &[0..1, 2..5]); +} diff --git a/crates/zed/src/languages/rust/config.toml b/crates/zed/src/languages/rust/config.toml index 705287f0a7..8216ba0a74 100644 --- a/crates/zed/src/languages/rust/config.toml +++ b/crates/zed/src/languages/rust/config.toml @@ -10,3 +10,4 @@ brackets = [ { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] +collapsed_placeholder = " /* ... */ " diff --git a/crates/zed/src/languages/rust/embedding.scm b/crates/zed/src/languages/rust/embedding.scm index 66e4083de5..e4218382a9 100644 --- a/crates/zed/src/languages/rust/embedding.scm +++ b/crates/zed/src/languages/rust/embedding.scm @@ -1,50 +1,28 @@ ( - (line_comment)* @context + [(line_comment) (attribute_item)]* @context . - (enum_item - name: (_) @name) @item -) + [ + (struct_item + name: (_) @name) -( - (line_comment)* @context - . - (struct_item - name: (_) @name) @item -) + (enum_item + name: (_) @name) -( - (line_comment)* @context - . - (impl_item - trait: (_)? @name - "for"? @name - type: (_) @name) @item -) + (impl_item + trait: (_)? @name + "for"? @name + type: (_) @name) -( - (line_comment)* @context - . - (trait_item - name: (_) @name) @item -) + (trait_item + name: (_) @name) -( - (line_comment)* @context - . - (function_item - name: (_) @name) @item -) + (function_item + name: (_) @name + body: (block + "{" @keep + "}" @keep) @collapse) -( - (line_comment)* @context - . - (macro_definition - name: (_) @name) @item -) - -( - (line_comment)* @context - . - (function_signature_item - name: (_) @name) @item -) + (macro_definition + name: (_) @name) + ] @item + ) From efe973ebe2f6c4c92159542eb4d8e1bc12455df4 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 19 Jul 2023 16:52:44 -0400 Subject: [PATCH 025/120] add embedding query for json with nested arrays and strings Co-authored-by: maxbrunsfeld --- Cargo.lock | 1 + crates/language/src/language.rs | 4 +- crates/semantic_index/Cargo.toml | 1 + crates/semantic_index/src/parsing.rs | 123 ++++++++++-------- crates/semantic_index/src/semantic_index.rs | 2 +- .../src/semantic_index_tests.rs | 103 ++++++++++++++- crates/zed/src/languages/json/embedding.scm | 14 ++ 7 files changed, 189 insertions(+), 59 deletions(-) create mode 100644 crates/zed/src/languages/json/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index 8ea6f61da0..75f66163e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6502,6 +6502,7 @@ dependencies = [ "tree-sitter", "tree-sitter-cpp", "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tree-sitter-json 0.19.0", "tree-sitter-rust", "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index ec233716d6..e34358c7c5 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -526,7 +526,7 @@ pub struct OutlineConfig { pub struct EmbeddingConfig { pub query: Query, pub item_capture_ix: u32, - pub name_capture_ix: u32, + pub name_capture_ix: Option, pub context_capture_ix: Option, pub collapse_capture_ix: Option, pub keep_capture_ix: Option, @@ -1263,7 +1263,7 @@ impl Language { ("collapse", &mut collapse_capture_ix), ], ); - if let Some((item_capture_ix, name_capture_ix)) = item_capture_ix.zip(name_capture_ix) { + if let Some(item_capture_ix) = item_capture_ix { grammar.embedding_config = Some(EmbeddingConfig { query, item_capture_ix, diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 1b3169bfe4..35b9724512 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -54,6 +54,7 @@ ctor.workspace = true env_logger.workspace = true tree-sitter-typescript = "*" +tree-sitter-json = "*" tree-sitter-rust = "*" tree-sitter-toml = "*" tree-sitter-cpp = "*" diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index 0d2aeb60fb..c952ef3a4e 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -1,6 +1,12 @@ use anyhow::{anyhow, Ok, Result}; use language::{Grammar, Language}; -use std::{cmp, collections::HashSet, ops::Range, path::Path, sync::Arc}; +use std::{ + cmp::{self, Reverse}, + collections::HashSet, + ops::Range, + path::Path, + sync::Arc, +}; use tree_sitter::{Parser, QueryCursor}; #[derive(Debug, PartialEq, Clone)] @@ -15,7 +21,7 @@ const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; const ENTIRE_FILE_TEMPLATE: &str = "The below snippet is from file ''\n\n```\n\n```"; -pub const PARSEABLE_ENTIRE_FILE_TYPES: [&str; 4] = ["TOML", "YAML", "JSON", "CSS"]; +pub const PARSEABLE_ENTIRE_FILE_TYPES: &[&str] = &["TOML", "YAML", "CSS"]; pub struct CodeContextRetriever { pub parser: Parser, @@ -30,8 +36,8 @@ pub struct CodeContextRetriever { #[derive(Debug, Clone)] pub struct CodeContextMatch { pub start_col: usize, - pub item_range: Range, - pub name_range: Range, + pub item_range: Option>, + pub name_range: Option>, pub context_ranges: Vec>, pub collapse_ranges: Vec>, } @@ -44,7 +50,7 @@ impl CodeContextRetriever { } } - fn _parse_entire_file( + fn parse_entire_file( &self, relative_path: &Path, language_name: Arc, @@ -97,7 +103,7 @@ impl CodeContextRetriever { if capture.index == embedding_config.item_capture_ix { item_range = Some(capture.node.byte_range()); start_col = capture.node.start_position().column; - } else if capture.index == embedding_config.name_capture_ix { + } else if Some(capture.index) == embedding_config.name_capture_ix { name_range = Some(capture.node.byte_range()); } else if Some(capture.index) == embedding_config.context_capture_ix { context_ranges.push(capture.node.byte_range()); @@ -108,16 +114,13 @@ impl CodeContextRetriever { } } - if item_range.is_some() && name_range.is_some() { - let item_range = item_range.unwrap(); - captures.push(CodeContextMatch { - start_col, - item_range, - name_range: name_range.unwrap(), - context_ranges, - collapse_ranges: subtract_ranges(&collapse_ranges, &keep_ranges), - }); - } + captures.push(CodeContextMatch { + start_col, + item_range, + name_range, + context_ranges, + collapse_ranges: subtract_ranges(&collapse_ranges, &keep_ranges), + }); } Ok(captures) } @@ -129,7 +132,12 @@ impl CodeContextRetriever { language: Arc, ) -> Result> { let language_name = language.name(); - let mut documents = self.parse_file(relative_path, content, language)?; + + if PARSEABLE_ENTIRE_FILE_TYPES.contains(&language_name.as_ref()) { + return self.parse_entire_file(relative_path, language_name, &content); + } + + let mut documents = self.parse_file(content, language)?; for document in &mut documents { document.content = CODE_CONTEXT_TEMPLATE .replace("", relative_path.to_string_lossy().as_ref()) @@ -139,16 +147,7 @@ impl CodeContextRetriever { Ok(documents) } - pub fn parse_file( - &mut self, - relative_path: &Path, - content: &str, - language: Arc, - ) -> Result> { - if PARSEABLE_ENTIRE_FILE_TYPES.contains(&language.name().as_ref()) { - return self._parse_entire_file(relative_path, language.name(), &content); - } - + pub fn parse_file(&mut self, content: &str, language: Arc) -> Result> { let grammar = language .grammar() .ok_or_else(|| anyhow!("no grammar for language"))?; @@ -163,32 +162,49 @@ impl CodeContextRetriever { let mut collapsed_ranges_within = Vec::new(); let mut parsed_name_ranges = HashSet::new(); for (i, context_match) in matches.iter().enumerate() { - if parsed_name_ranges.contains(&context_match.name_range) { + // Items which are collapsible but not embeddable have no item range + let item_range = if let Some(item_range) = context_match.item_range.clone() { + item_range + } else { continue; + }; + + // Checks for deduplication + let name; + if let Some(name_range) = context_match.name_range.clone() { + name = content + .get(name_range.clone()) + .map_or(String::new(), |s| s.to_string()); + if parsed_name_ranges.contains(&name_range) { + continue; + } + parsed_name_ranges.insert(name_range); + } else { + name = String::new(); } collapsed_ranges_within.clear(); - for remaining_match in &matches[(i + 1)..] { - if context_match - .item_range - .contains(&remaining_match.item_range.start) - && context_match - .item_range - .contains(&remaining_match.item_range.end) - { - collapsed_ranges_within.extend(remaining_match.collapse_ranges.iter().cloned()); - } else { - break; + 'outer: for remaining_match in &matches[(i + 1)..] { + for collapsed_range in &remaining_match.collapse_ranges { + if item_range.start <= collapsed_range.start + && item_range.end >= collapsed_range.end + { + collapsed_ranges_within.push(collapsed_range.clone()); + } else { + break 'outer; + } } } + collapsed_ranges_within.sort_by_key(|r| (r.start, Reverse(r.end))); + let mut document_content = String::new(); for context_range in &context_match.context_ranges { document_content.push_str(&content[context_range.clone()]); document_content.push_str("\n"); } - let mut offset = context_match.item_range.start; + let mut offset = item_range.start; for collapsed_range in &collapsed_ranges_within { if collapsed_range.start > offset { add_content_from_range( @@ -197,29 +213,30 @@ impl CodeContextRetriever { offset..collapsed_range.start, context_match.start_col, ); + offset = collapsed_range.start; + } + + if collapsed_range.end > offset { + document_content.push_str(placeholder); + offset = collapsed_range.end; } - document_content.push_str(placeholder); - offset = collapsed_range.end; } - if offset < context_match.item_range.end { + if offset < item_range.end { add_content_from_range( &mut document_content, content, - offset..context_match.item_range.end, + offset..item_range.end, context_match.start_col, ); } - if let Some(name) = content.get(context_match.name_range.clone()) { - parsed_name_ranges.insert(context_match.name_range.clone()); - documents.push(Document { - name: name.to_string(), - content: document_content, - range: context_match.item_range.clone(), - embedding: vec![], - }) - } + documents.push(Document { + name, + content: document_content, + range: item_range.clone(), + embedding: vec![], + }) } return Ok(documents); diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 271fd741a6..6e04774915 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -33,7 +33,7 @@ use util::{ ResultExt, }; -const SEMANTIC_INDEX_VERSION: usize = 4; +const SEMANTIC_INDEX_VERSION: usize = 5; const EMBEDDINGS_BATCH_SIZE: usize = 80; pub fn init( diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index c54d5079d3..31c96ca207 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -170,9 +170,7 @@ async fn test_code_context_retrieval_rust() { " .unindent(); - let documents = retriever - .parse_file(Path::new("foo.rs"), &text, language) - .unwrap(); + let documents = retriever.parse_file(&text, language).unwrap(); assert_documents_eq( &documents, @@ -229,6 +227,76 @@ async fn test_code_context_retrieval_rust() { ); } +#[gpui::test] +async fn test_code_context_retrieval_json() { + let language = json_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = r#" + { + "array": [1, 2, 3, 4], + "string": "abcdefg", + "nested_object": { + "array_2": [5, 6, 7, 8], + "string_2": "hijklmnop", + "boolean": true, + "none": null + } + } + "# + .unindent(); + + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[( + r#" + { + "array": [], + "string": "", + "nested_object": { + "array_2": [], + "string_2": "", + "boolean": true, + "none": null + } + }"# + .unindent(), + text.find("{").unwrap(), + )], + ); + + let text = r#" + [ + { + "name": "somebody", + "age": 42 + }, + { + "name": "somebody else", + "age": 43 + } + ] + "# + .unindent(); + + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[( + r#" + [{ + "name": "", + "age": 42 + }]"# + .unindent(), + text.find("[").unwrap(), + )], + ); +} + fn assert_documents_eq( documents: &[Document], expected_contents_and_start_offsets: &[(String, usize)], @@ -913,6 +981,35 @@ fn rust_lang() -> Arc { ) } +fn json_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "JSON".into(), + path_suffixes: vec!["json".into()], + ..Default::default() + }, + Some(tree_sitter_json::language()), + ) + .with_embedding_query( + r#" + (document) @item + + (array + "[" @keep + . + (object)? @keep + "]" @keep) @collapse + + (pair value: (string + "\"" @keep + "\"" @keep) @collapse) + "#, + ) + .unwrap(), + ) +} + fn toml_lang() -> Arc { Arc::new(Language::new( LanguageConfig { diff --git a/crates/zed/src/languages/json/embedding.scm b/crates/zed/src/languages/json/embedding.scm new file mode 100644 index 0000000000..fa286e3880 --- /dev/null +++ b/crates/zed/src/languages/json/embedding.scm @@ -0,0 +1,14 @@ +; Only produce one embedding for the entire file. +(document) @item + +; Collapse arrays, except for the first object. +(array + "[" @keep + . + (object)? @keep + "]" @keep) @collapse + +; Collapse string values (but not keys). +(pair value: (string + "\"" @keep + "\"" @keep) @collapse) From e02d6bc0d41fe5006307833f5e4c2cd62ba7add1 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Thu, 20 Jul 2023 13:46:27 -0400 Subject: [PATCH 026/120] add glob filtering functionality to semantic search --- Cargo.lock | 1 + crates/search/src/project_search.rs | 60 +++++++++++++++++-- crates/semantic_index/Cargo.toml | 1 + crates/semantic_index/src/db.rs | 39 ++++++++---- crates/semantic_index/src/semantic_index.rs | 13 +++- .../src/semantic_index_tests.rs | 57 +++++++++++++++++- 6 files changed, 149 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 75f66163e3..f534a4fe7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6477,6 +6477,7 @@ dependencies = [ "editor", "env_logger 0.9.3", "futures 0.3.28", + "globset", "gpui", "isahc", "language", diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 5feb94426e..25fc897707 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -187,14 +187,26 @@ impl ProjectSearch { cx.notify(); } - fn semantic_search(&mut self, query: String, cx: &mut ModelContext) { + fn semantic_search( + &mut self, + query: String, + include_files: Vec, + exclude_files: Vec, + cx: &mut ModelContext, + ) { let search = SemanticIndex::global(cx).map(|index| { index.update(cx, |semantic_index, cx| { - semantic_index.search_project(self.project.clone(), query.clone(), 10, cx) + semantic_index.search_project( + self.project.clone(), + query.clone(), + 10, + include_files, + exclude_files, + cx, + ) }) }); self.search_id += 1; - // self.active_query = Some(query); self.match_ranges.clear(); self.pending_search = Some(cx.spawn(|this, mut cx| async move { let results = search?.await.log_err()?; @@ -638,8 +650,13 @@ impl ProjectSearchView { } let query = self.query_editor.read(cx).text(cx); - self.model - .update(cx, |model, cx| model.semantic_search(query, cx)); + if let Some((included_files, exclude_files)) = + self.get_included_and_excluded_globsets(cx) + { + self.model.update(cx, |model, cx| { + model.semantic_search(query, included_files, exclude_files, cx) + }); + } return; } @@ -648,6 +665,39 @@ impl ProjectSearchView { } } + fn get_included_and_excluded_globsets( + &mut self, + cx: &mut ViewContext, + ) -> Option<(Vec, Vec)> { + let text = self.query_editor.read(cx).text(cx); + let included_files = + match Self::load_glob_set(&self.included_files_editor.read(cx).text(cx)) { + Ok(included_files) => { + self.panels_with_errors.remove(&InputPanel::Include); + included_files + } + Err(_e) => { + self.panels_with_errors.insert(InputPanel::Include); + cx.notify(); + return None; + } + }; + let excluded_files = + match Self::load_glob_set(&self.excluded_files_editor.read(cx).text(cx)) { + Ok(excluded_files) => { + self.panels_with_errors.remove(&InputPanel::Exclude); + excluded_files + } + Err(_e) => { + self.panels_with_errors.insert(InputPanel::Exclude); + cx.notify(); + return None; + } + }; + + Some((included_files, excluded_files)) + } + fn build_search_query(&mut self, cx: &mut ViewContext) -> Option { let text = self.query_editor.read(cx).text(cx); let included_files = diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 35b9724512..a1f126bfb8 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -37,6 +37,7 @@ tiktoken-rs = "0.5.0" parking_lot.workspace = true rand.workspace = true schemars.workspace = true +globset.workspace = true [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index fd99594aab..3ba85a275d 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -1,5 +1,6 @@ use crate::{parsing::Document, SEMANTIC_INDEX_VERSION}; use anyhow::{anyhow, Context, Result}; +use globset::{Glob, GlobMatcher}; use project::Fs; use rpc::proto::Timestamp; use rusqlite::{ @@ -252,18 +253,30 @@ impl VectorDatabase { worktree_ids: &[i64], query_embedding: &Vec, limit: usize, + include_globs: Vec, + exclude_globs: Vec, ) -> Result)>> { let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); - self.for_each_document(&worktree_ids, |id, embedding| { - let similarity = dot(&embedding, &query_embedding); - let ix = match results - .binary_search_by(|(_, s)| similarity.partial_cmp(&s).unwrap_or(Ordering::Equal)) + self.for_each_document(&worktree_ids, |relative_path, id, embedding| { + if (include_globs.is_empty() + || include_globs + .iter() + .any(|include_glob| include_glob.is_match(relative_path.clone()))) + && (exclude_globs.is_empty() + || !exclude_globs + .iter() + .any(|exclude_glob| exclude_glob.is_match(relative_path.clone()))) { - Ok(ix) => ix, - Err(ix) => ix, - }; - results.insert(ix, (id, similarity)); - results.truncate(limit); + let similarity = dot(&embedding, &query_embedding); + let ix = match results.binary_search_by(|(_, s)| { + similarity.partial_cmp(&s).unwrap_or(Ordering::Equal) + }) { + Ok(ix) => ix, + Err(ix) => ix, + }; + results.insert(ix, (id, similarity)); + results.truncate(limit); + } })?; let ids = results.into_iter().map(|(id, _)| id).collect::>(); @@ -273,12 +286,12 @@ impl VectorDatabase { fn for_each_document( &self, worktree_ids: &[i64], - mut f: impl FnMut(i64, Vec), + mut f: impl FnMut(String, i64, Vec), ) -> Result<()> { let mut query_statement = self.db.prepare( " SELECT - documents.id, documents.embedding + files.relative_path, documents.id, documents.embedding FROM documents, files WHERE @@ -289,10 +302,10 @@ impl VectorDatabase { query_statement .query_map(params![ids_to_sql(worktree_ids)], |row| { - Ok((row.get(0)?, row.get::<_, Embedding>(1)?)) + Ok((row.get(0)?, row.get(1)?, row.get::<_, Embedding>(2)?)) })? .filter_map(|row| row.ok()) - .for_each(|(id, embedding)| f(id, embedding.0)); + .for_each(|(relative_path, id, embedding)| f(relative_path, id, embedding.0)); Ok(()) } diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 6e04774915..32a11a42eb 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -11,6 +11,7 @@ use anyhow::{anyhow, Result}; use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; use futures::{channel::oneshot, Future}; +use globset::{Glob, GlobMatcher}; use gpui::{AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, WeakModelHandle}; use language::{Anchor, Buffer, Language, LanguageRegistry}; use parking_lot::Mutex; @@ -624,6 +625,8 @@ impl SemanticIndex { project: ModelHandle, phrase: String, limit: usize, + include_globs: Vec, + exclude_globs: Vec, cx: &mut ModelContext, ) -> Task>> { let project_state = if let Some(state) = self.projects.get(&project.downgrade()) { @@ -657,12 +660,16 @@ impl SemanticIndex { .next() .unwrap(); - database.top_k_search(&worktree_db_ids, &phrase_embedding, limit) + database.top_k_search( + &worktree_db_ids, + &phrase_embedding, + limit, + include_globs, + exclude_globs, + ) }) .await?; - dbg!(&documents); - let mut tasks = Vec::new(); let mut ranges = Vec::new(); let weak_project = project.downgrade(); diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 31c96ca207..366d634ddb 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -7,6 +7,7 @@ use crate::{ }; use anyhow::Result; use async_trait::async_trait; +use globset::Glob; use gpui::{Task, TestAppContext}; use language::{Language, LanguageConfig, LanguageRegistry, ToOffset}; use pretty_assertions::assert_eq; @@ -96,7 +97,7 @@ async fn test_semantic_index(cx: &mut TestAppContext) { let search_results = store .update(cx, |store, cx| { - store.search_project(project.clone(), "aaaa".to_string(), 5, cx) + store.search_project(project.clone(), "aaaa".to_string(), 5, vec![], vec![], cx) }) .await .unwrap(); @@ -109,6 +110,60 @@ async fn test_semantic_index(cx: &mut TestAppContext) { ); }); + // Test Include Files Functonality + let include_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; + let exclude_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; + let search_results = store + .update(cx, |store, cx| { + store.search_project( + project.clone(), + "aaaa".to_string(), + 5, + include_files, + vec![], + cx, + ) + }) + .await + .unwrap(); + + for res in &search_results { + res.buffer.read_with(cx, |buffer, _cx| { + assert!(buffer + .file() + .unwrap() + .path() + .to_str() + .unwrap() + .ends_with("rs")); + }); + } + + let search_results = store + .update(cx, |store, cx| { + store.search_project( + project.clone(), + "aaaa".to_string(), + 5, + vec![], + exclude_files, + cx, + ) + }) + .await + .unwrap(); + + for res in &search_results { + res.buffer.read_with(cx, |buffer, _cx| { + assert!(!buffer + .file() + .unwrap() + .path() + .to_str() + .unwrap() + .ends_with("rs")); + }); + } fs.save( "/the-root/src/file2.rs".as_ref(), &" From 81b05f2a083e999751646f53b72212ceedf3b6d9 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 20 Jul 2023 14:23:11 -0700 Subject: [PATCH 027/120] Optimize glob filtering of semantic search Co-authored-by: Kyle --- crates/search/src/project_search.rs | 1 - crates/semantic_index/src/db.rs | 66 +++++++---- crates/semantic_index/src/semantic_index.rs | 2 +- .../src/semantic_index_tests.rs | 103 +++++++++++------- 4 files changed, 109 insertions(+), 63 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 25fc897707..28085f59fe 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -669,7 +669,6 @@ impl ProjectSearchView { &mut self, cx: &mut ViewContext, ) -> Option<(Vec, Vec)> { - let text = self.query_editor.read(cx).text(cx); let included_files = match Self::load_glob_set(&self.included_files_editor.read(cx).text(cx)) { Ok(included_files) => { diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index 3ba85a275d..b1e78b7aff 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -1,6 +1,6 @@ use crate::{parsing::Document, SEMANTIC_INDEX_VERSION}; use anyhow::{anyhow, Context, Result}; -use globset::{Glob, GlobMatcher}; +use globset::GlobMatcher; use project::Fs; use rpc::proto::Timestamp; use rusqlite::{ @@ -257,16 +257,11 @@ impl VectorDatabase { exclude_globs: Vec, ) -> Result)>> { let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); - self.for_each_document(&worktree_ids, |relative_path, id, embedding| { - if (include_globs.is_empty() - || include_globs - .iter() - .any(|include_glob| include_glob.is_match(relative_path.clone()))) - && (exclude_globs.is_empty() - || !exclude_globs - .iter() - .any(|exclude_glob| exclude_glob.is_match(relative_path.clone()))) - { + self.for_each_document( + &worktree_ids, + include_globs, + exclude_globs, + |id, embedding| { let similarity = dot(&embedding, &query_embedding); let ix = match results.binary_search_by(|(_, s)| { similarity.partial_cmp(&s).unwrap_or(Ordering::Equal) @@ -276,8 +271,8 @@ impl VectorDatabase { }; results.insert(ix, (id, similarity)); results.truncate(limit); - } - })?; + }, + )?; let ids = results.into_iter().map(|(id, _)| id).collect::>(); self.get_documents_by_ids(&ids) @@ -286,26 +281,55 @@ impl VectorDatabase { fn for_each_document( &self, worktree_ids: &[i64], - mut f: impl FnMut(String, i64, Vec), + include_globs: Vec, + exclude_globs: Vec, + mut f: impl FnMut(i64, Vec), ) -> Result<()> { + let mut file_query = self.db.prepare( + " + SELECT + id, relative_path + FROM + files + WHERE + worktree_id IN rarray(?) + ", + )?; + + let mut file_ids = Vec::::new(); + let mut rows = file_query.query([ids_to_sql(worktree_ids)])?; + while let Some(row) = rows.next()? { + let file_id = row.get(0)?; + let relative_path = row.get_ref(1)?.as_str()?; + let included = include_globs.is_empty() + || include_globs + .iter() + .any(|glob| glob.is_match(relative_path)); + let excluded = exclude_globs + .iter() + .any(|glob| glob.is_match(relative_path)); + if included && !excluded { + file_ids.push(file_id); + } + } + let mut query_statement = self.db.prepare( " SELECT - files.relative_path, documents.id, documents.embedding + id, embedding FROM - documents, files + documents WHERE - documents.file_id = files.id AND - files.worktree_id IN rarray(?) + file_id IN rarray(?) ", )?; query_statement - .query_map(params![ids_to_sql(worktree_ids)], |row| { - Ok((row.get(0)?, row.get(1)?, row.get::<_, Embedding>(2)?)) + .query_map(params![ids_to_sql(&file_ids)], |row| { + Ok((row.get(0)?, row.get::<_, Embedding>(1)?)) })? .filter_map(|row| row.ok()) - .for_each(|(relative_path, id, embedding)| f(relative_path, id, embedding.0)); + .for_each(|(id, embedding)| f(id, embedding.0)); Ok(()) } diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 32a11a42eb..215ca38a28 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -11,7 +11,7 @@ use anyhow::{anyhow, Result}; use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; use futures::{channel::oneshot, Future}; -use globset::{Glob, GlobMatcher}; +use globset::GlobMatcher; use gpui::{AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, WeakModelHandle}; use language::{Anchor, Buffer, Language, LanguageRegistry}; use parking_lot::Mutex; diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 366d634ddb..432f6b5b53 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -3,7 +3,7 @@ use crate::{ embedding::EmbeddingProvider, parsing::{subtract_ranges, CodeContextRetriever, Document}, semantic_index_settings::SemanticIndexSettings, - SemanticIndex, + SearchResult, SemanticIndex, }; use anyhow::Result; use async_trait::async_trait; @@ -46,21 +46,21 @@ async fn test_semantic_index(cx: &mut TestAppContext) { "src": { "file1.rs": " fn aaa() { - println!(\"aaaa!\"); + println!(\"aaaaaaaaaaaa!\"); } - fn zzzzzzzzz() { + fn zzzzz() { println!(\"SLEEPING\"); } ".unindent(), "file2.rs": " fn bbb() { - println!(\"bbbb!\"); + println!(\"bbbbbbbbbbbbb!\"); } ".unindent(), "file3.toml": " - ZZZZZZZ = 5 - ".unindent(), + ZZZZZZZZZZZZZZZZZZ = 5 + ".unindent(), } }), ) @@ -97,27 +97,37 @@ async fn test_semantic_index(cx: &mut TestAppContext) { let search_results = store .update(cx, |store, cx| { - store.search_project(project.clone(), "aaaa".to_string(), 5, vec![], vec![], cx) + store.search_project( + project.clone(), + "aaaaaabbbbzz".to_string(), + 5, + vec![], + vec![], + cx, + ) }) .await .unwrap(); - search_results[0].buffer.read_with(cx, |buffer, _cx| { - assert_eq!(search_results[0].range.start.to_offset(buffer), 0); - assert_eq!( - buffer.file().unwrap().path().as_ref(), - Path::new("src/file1.rs") - ); - }); + assert_search_results( + &search_results, + &[ + (Path::new("src/file1.rs").into(), 0), + (Path::new("src/file2.rs").into(), 0), + (Path::new("src/file3.toml").into(), 0), + (Path::new("src/file1.rs").into(), 45), + ], + cx, + ); // Test Include Files Functonality let include_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; let exclude_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; - let search_results = store + let rust_only_search_results = store .update(cx, |store, cx| { store.search_project( project.clone(), - "aaaa".to_string(), + "aaaaaabbbbzz".to_string(), 5, include_files, vec![], @@ -127,23 +137,21 @@ async fn test_semantic_index(cx: &mut TestAppContext) { .await .unwrap(); - for res in &search_results { - res.buffer.read_with(cx, |buffer, _cx| { - assert!(buffer - .file() - .unwrap() - .path() - .to_str() - .unwrap() - .ends_with("rs")); - }); - } + assert_search_results( + &rust_only_search_results, + &[ + (Path::new("src/file1.rs").into(), 0), + (Path::new("src/file2.rs").into(), 0), + (Path::new("src/file1.rs").into(), 45), + ], + cx, + ); - let search_results = store + let no_rust_search_results = store .update(cx, |store, cx| { store.search_project( project.clone(), - "aaaa".to_string(), + "aaaaaabbbbzz".to_string(), 5, vec![], exclude_files, @@ -153,17 +161,12 @@ async fn test_semantic_index(cx: &mut TestAppContext) { .await .unwrap(); - for res in &search_results { - res.buffer.read_with(cx, |buffer, _cx| { - assert!(!buffer - .file() - .unwrap() - .path() - .to_str() - .unwrap() - .ends_with("rs")); - }); - } + assert_search_results( + &no_rust_search_results, + &[(Path::new("src/file3.toml").into(), 0)], + cx, + ); + fs.save( "/the-root/src/file2.rs".as_ref(), &" @@ -195,6 +198,26 @@ async fn test_semantic_index(cx: &mut TestAppContext) { ); } +#[track_caller] +fn assert_search_results( + actual: &[SearchResult], + expected: &[(Arc, usize)], + cx: &TestAppContext, +) { + let actual = actual + .iter() + .map(|search_result| { + search_result.buffer.read_with(cx, |buffer, _cx| { + ( + buffer.file().unwrap().path().clone(), + search_result.range.start.to_offset(buffer), + ) + }) + }) + .collect::>(); + assert_eq!(actual, expected); +} + #[gpui::test] async fn test_code_context_retrieval_rust() { let language = rust_lang(); From 1610e270d6422271bd39006214c2a5410bc320c9 Mon Sep 17 00:00:00 2001 From: Alex Viscreanu Date: Fri, 21 Jul 2023 13:16:00 +0200 Subject: [PATCH 028/120] feat(workspace): add action for closing inactive editors on all panes --- assets/keymaps/default.json | 1 + crates/workspace/src/workspace.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 883b0c1872..5c841d19b2 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -22,6 +22,7 @@ "alt-cmd-right": "pane::ActivateNextItem", "cmd-w": "pane::CloseActiveItem", "alt-cmd-t": "pane::CloseInactiveItems", + "ctrl-alt-cmd-w": "workspace::CloseInactiveEditors", "cmd-k u": "pane::CloseCleanItems", "cmd-k cmd-w": "pane::CloseAllItems", "cmd-shift-w": "workspace::CloseWindow", diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 0ebd01e1f7..6694cc06a3 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -122,6 +122,7 @@ actions!( NewFile, NewWindow, CloseWindow, + CloseInactiveEditors, AddFolderToProject, Unfollow, Save, @@ -239,6 +240,7 @@ pub fn init(app_state: Arc, cx: &mut AppContext) { cx.add_async_action(Workspace::follow_next_collaborator); cx.add_async_action(Workspace::close); + cx.add_async_action(Workspace::close_inactive_editors); cx.add_global_action(Workspace::close_global); cx.add_global_action(restart); cx.add_async_action(Workspace::save_all); @@ -1633,6 +1635,34 @@ impl Workspace { } } + pub fn close_inactive_editors( + &mut self, + _: &CloseInactiveEditors, + cx: &mut ViewContext, + ) -> Option>> { + let current_pane = self.active_pane(); + + // let mut tasks: Vec>> = Vec::new(); + current_pane + .update(cx, |pane, cx| { + pane.close_inactive_items(&CloseInactiveItems, cx).unwrap() + }) + .detach_and_log_err(cx); + + for pane in self.panes() { + if pane.id() == current_pane.id() { + continue; + } + + pane.update(cx, |pane: &mut Pane, cx| { + pane.close_all_items(&CloseAllItems, cx).unwrap() + }) + .detach_and_log_err(cx); + } + + Some(Task::ready(Ok(()))) + } + pub fn toggle_dock(&mut self, dock_side: DockPosition, cx: &mut ViewContext) { let dock = match dock_side { DockPosition::Left => &self.left_dock, From 458916409c5455a0b6df6494aa235e1d03e15bde Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 20 Jul 2023 12:32:27 -0600 Subject: [PATCH 029/120] Add a mode indicator for vim This is the second most common remaining complaint (after :w not working). Fixes: zed-industries/community#409 --- Cargo.lock | 1 + crates/theme/src/theme.rs | 1 + crates/vim/Cargo.toml | 2 + crates/vim/src/mode_indicator.rs | 68 +++++++++++++++++++++++++++++ crates/vim/src/vim.rs | 2 + crates/zed/src/zed.rs | 2 + styles/src/style_tree/status_bar.ts | 1 + 7 files changed, 77 insertions(+) create mode 100644 crates/vim/src/mode_indicator.rs diff --git a/Cargo.lock b/Cargo.lock index f0c8917aa2..e805a87230 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8523,6 +8523,7 @@ dependencies = [ "serde_derive", "serde_json", "settings", + "theme", "tokio", "util", "workspace", diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 81ae7a65ca..de0701a343 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -402,6 +402,7 @@ pub struct StatusBar { pub height: f32, pub item_spacing: f32, pub cursor_position: TextStyle, + pub vim_mode: TextStyle, pub active_language: Interactive, pub auto_update_progress_message: TextStyle, pub auto_update_done_message: TextStyle, diff --git a/crates/vim/Cargo.toml b/crates/vim/Cargo.toml index 47a85f4ed3..3a5974d6c9 100644 --- a/crates/vim/Cargo.toml +++ b/crates/vim/Cargo.toml @@ -32,6 +32,7 @@ language = { path = "../language" } search = { path = "../search" } settings = { path = "../settings" } workspace = { path = "../workspace" } +theme = { path = "../theme" } [dev-dependencies] indoc.workspace = true @@ -44,3 +45,4 @@ project = { path = "../project", features = ["test-support"] } util = { path = "../util", features = ["test-support"] } settings = { path = "../settings" } workspace = { path = "../workspace", features = ["test-support"] } +theme = { path = "../theme", features = ["test-support"] } diff --git a/crates/vim/src/mode_indicator.rs b/crates/vim/src/mode_indicator.rs new file mode 100644 index 0000000000..ef8d159018 --- /dev/null +++ b/crates/vim/src/mode_indicator.rs @@ -0,0 +1,68 @@ +use gpui::{ + elements::{Empty, Label}, + AnyElement, Element, Entity, View, ViewContext, +}; +use workspace::{item::ItemHandle, StatusItemView}; + +use crate::{state::Mode, Vim}; + +pub struct ModeIndicator { + mode: Option, +} + +impl ModeIndicator { + pub fn new(cx: &mut ViewContext) -> Self { + cx.observe_global::(|this, cx| { + let vim = Vim::read(cx); + if vim.enabled { + this.set_mode(Some(Vim::read(cx).state.mode), cx) + } else { + this.set_mode(None, cx) + } + }) + .detach(); + Self { mode: None } + } + + pub fn set_mode(&mut self, mode: Option, cx: &mut ViewContext) { + if mode != self.mode { + self.mode = mode; + cx.notify(); + } + } +} + +impl Entity for ModeIndicator { + type Event = (); +} + +impl View for ModeIndicator { + fn ui_name() -> &'static str { + "ModeIndicator" + } + + fn render(&mut self, cx: &mut ViewContext) -> AnyElement { + if let Some(mode) = self.mode { + let theme = &theme::current(cx).workspace.status_bar; + let text = match mode { + Mode::Normal => "", + Mode::Insert => "--- INSERT ---", + Mode::Visual { line: false } => "--- VISUAL ---", + Mode::Visual { line: true } => "--- VISUAL LINE ---", + }; + Label::new(text, theme.vim_mode.clone()).into_any() + } else { + Empty::new().into_any() + } + } +} + +impl StatusItemView for ModeIndicator { + fn set_active_pane_item( + &mut self, + _active_pane_item: Option<&dyn ItemHandle>, + _cx: &mut ViewContext, + ) { + // nothing to do. + } +} diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 69b94428dd..8ab110ba1e 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -3,6 +3,7 @@ mod test; mod editor_events; mod insert; +mod mode_indicator; mod motion; mod normal; mod object; @@ -18,6 +19,7 @@ use gpui::{ ViewHandle, WeakViewHandle, WindowContext, }; use language::CursorShape; +pub use mode_indicator::ModeIndicator; use motion::Motion; use normal::normal_replace; use serde::Deserialize; diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 6bbba0bd02..645371d419 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -312,8 +312,10 @@ pub fn initialize_workspace( feedback::deploy_feedback_button::DeployFeedbackButton::new(workspace) }); let cursor_position = cx.add_view(|_| editor::items::CursorPosition::new()); + let vim_mode = cx.add_view(|cx| vim::ModeIndicator::new(cx)); workspace.status_bar().update(cx, |status_bar, cx| { status_bar.add_left_item(diagnostic_summary, cx); + status_bar.add_left_item(vim_mode, cx); status_bar.add_left_item(activity_indicator, cx); status_bar.add_right_item(feedback_button, cx); status_bar.add_right_item(copilot, cx); diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 9aeea866f3..b4273cbf99 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -27,6 +27,7 @@ export default function status_bar(): any { }, border: border(layer, { top: true, overlay: true }), cursor_position: text(layer, "sans", "variant"), + vim_mode: text(layer, "sans", "variant"), active_language: interactive({ base: { padding: { left: 6, right: 6 }, From d14a484a20d731511db502a7eacad4dcfbab9383 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 21 Jul 2023 13:19:26 -0600 Subject: [PATCH 030/120] Add support for adding/removing status items --- crates/workspace/src/status_bar.rs | 55 ++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/crates/workspace/src/status_bar.rs b/crates/workspace/src/status_bar.rs index 6fc1467566..6fd3bd5310 100644 --- a/crates/workspace/src/status_bar.rs +++ b/crates/workspace/src/status_bar.rs @@ -1,4 +1,4 @@ -use std::ops::Range; +use std::{any::TypeId, ops::Range}; use crate::{ItemHandle, Pane}; use gpui::{ @@ -27,6 +27,7 @@ trait StatusItemViewHandle { active_pane_item: Option<&dyn ItemHandle>, cx: &mut WindowContext, ); + fn ui_name(&self) -> &'static str; } pub struct StatusBar { @@ -57,7 +58,6 @@ impl View for StatusBar { .with_margin_right(theme.item_spacing) })) .into_any(), - right: Flex::row() .with_children(self.right_items.iter().rev().map(|i| { ChildView::new(i.as_any(), cx) @@ -96,6 +96,53 @@ impl StatusBar { cx.notify(); } + pub fn position_of_item(&mut self) -> Option + where + T: StatusItemView, + { + self.position_of_named_item(T::ui_name()) + } + + pub fn position_of_named_item(&mut self, name: &str) -> Option { + for (index, item) in self.left_items.iter().enumerate() { + if item.as_ref().ui_name() == name { + return Some(index); + } + } + for (index, item) in self.right_items.iter().enumerate() { + if item.as_ref().ui_name() == name { + return Some(index + self.left_items.len()); + } + } + return None; + } + + pub fn insert_item_after( + &mut self, + position: usize, + item: ViewHandle, + cx: &mut ViewContext, + ) where + T: 'static + StatusItemView, + { + if position < self.left_items.len() { + self.left_items.insert(position, Box::new(item)) + } else { + self.right_items + .insert(position - self.left_items.len(), Box::new(item)) + } + cx.notify() + } + + pub fn remove_item_at(&mut self, position: usize, cx: &mut ViewContext) { + if position < self.left_items.len() { + self.left_items.remove(position); + } else { + self.right_items.remove(position - self.left_items.len()); + } + cx.notify(); + } + pub fn add_right_item(&mut self, item: ViewHandle, cx: &mut ViewContext) where T: 'static + StatusItemView, @@ -133,6 +180,10 @@ impl StatusItemViewHandle for ViewHandle { this.set_active_pane_item(active_pane_item, cx) }); } + + fn ui_name(&self) -> &'static str { + T::ui_name() + } } impl From<&dyn StatusItemViewHandle> for AnyViewHandle { From b4b53eb5f19a49fa2659b41e3c10d48bbbf73447 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Sat, 22 Jul 2023 21:48:45 -0700 Subject: [PATCH 031/120] Refactor resize handle code to be amenable to cascading resizes --- crates/workspace/src/pane_group.rs | 74 ++++++++++++++++++------------ 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index e60f6deb2f..8d95465388 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -780,6 +780,11 @@ mod element { let mut bounding_boxes = self.bounding_boxes.borrow_mut(); bounding_boxes.clear(); + let sizes = self + .children + .iter() + .map(|child| child.size()) + .collect::>(); let mut children_iter = self.children.iter_mut().enumerate().peekable(); while let Some((ix, child)) = children_iter.next() { let child_start = child_origin.clone(); @@ -792,8 +797,7 @@ mod element { Axis::Vertical => child_origin += vec2f(0.0, child.size().y()), } - if let Some(Some((next_ix, next_child))) = can_resize.then(|| children_iter.peek()) - { + if can_resize && children_iter.peek().is_some() { scene.push_stacking_context(None, None); let handle_origin = match self.axis { @@ -823,14 +827,7 @@ mod element { }); let axis = self.axis; - let child_size = child.size(); - let next_child_size = next_child.size(); let drag_bounds = visible_bounds.clone(); - let flexes = self.flexes.borrow(); - let current_flex = flexes[ix]; - let next_ix = *next_ix; - let next_flex = flexes[next_ix]; - drop(flexes); enum ResizeHandle {} let mut mouse_region = MouseRegion::new::( cx.view_id(), @@ -840,50 +837,69 @@ mod element { mouse_region = mouse_region .on_drag(MouseButton::Left, { let flexes = self.flexes.clone(); + let sizes = sizes.clone(); move |drag, workspace: &mut Workspace, cx| { let min_size = match axis { Axis::Horizontal => HORIZONTAL_MIN_SIZE, Axis::Vertical => VERTICAL_MIN_SIZE, }; // Don't allow resizing to less than the minimum size, if elements are already too small - if min_size - 1. > child_size.along(axis) - || min_size - 1. > next_child_size.along(axis) - { + if min_size - 1. > sizes[ix].along(axis) { return; } + let mut flexes = flexes.borrow_mut(); + let mut current_target_size = (drag.position - child_start).along(axis); - let proposed_current_pixel_change = - current_target_size - child_size.along(axis); + let mut proposed_current_pixel_change = + current_target_size - sizes[ix].along(axis); + + let flex_changes = |target_size, target_ix| { + let current_pixel_change = target_size - sizes[ix].along(axis); + let flex_change = + current_pixel_change / drag_bounds.length_along(axis); + let current_target_flex = flexes[target_ix] + flex_change; + let next_target_flex = flexes[target_ix + 1] - flex_change; + (current_target_flex, next_target_flex) + }; if proposed_current_pixel_change < 0. { current_target_size = f32::max(current_target_size, min_size); + let (current_target_flex, next_target_flex) = + flex_changes(current_target_size, ix); + + *flexes.get_mut(ix).unwrap() = current_target_flex; + *flexes.get_mut(ix + 1).unwrap() = next_target_flex; } else if proposed_current_pixel_change > 0. { - // TODO: cascade this change to other children if current item is at min size - let next_target_size = f32::max( - next_child_size.along(axis) - proposed_current_pixel_change, + let mut next_target_size = f32::max( + sizes[ix + 1].along(axis) - proposed_current_pixel_change, min_size, ); + current_target_size = f32::min( current_target_size, - child_size.along(axis) + next_child_size.along(axis) + sizes[ix].along(axis) + sizes[ix + 1].along(axis) - next_target_size, ); + + let (current_target_flex, next_target_flex) = + flex_changes(current_target_size, ix); + + // TODO: make this into a loop + *flexes.get_mut(ix).unwrap() = current_target_flex; + *flexes.get_mut(ix + 1).unwrap() = next_target_flex; + + // let mut ix_offset = 0; + + // while proposed_current_pixel_change > 0. + // && ix + 1 + ix_offset < flexes.len() + // { + + // } } - let current_pixel_change = - current_target_size - child_size.along(axis); - let flex_change = - current_pixel_change / drag_bounds.length_along(axis); - let current_target_flex = current_flex + flex_change; - let next_target_flex = next_flex - flex_change; - - let mut borrow = flexes.borrow_mut(); - *borrow.get_mut(ix).unwrap() = current_target_flex; - *borrow.get_mut(next_ix).unwrap() = next_target_flex; - workspace.schedule_serialize(cx); cx.notify(); } From 28ee05b3240bc27eb951187fcff00e727dbb7a18 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Sun, 23 Jul 2023 01:00:52 -0700 Subject: [PATCH 032/120] WIP: cascade split resizes --- crates/workspace/src/pane_group.rs | 176 ++++++++++++++++------------- 1 file changed, 98 insertions(+), 78 deletions(-) diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index 8d95465388..bed99d6cc4 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -587,14 +587,16 @@ mod element { use std::{cell::RefCell, ops::Range, rc::Rc}; use gpui::{ + elements::MouseEventHandler, geometry::{ rect::RectF, vector::{vec2f, Vector2F}, }, json::{self, ToJson}, platform::{CursorStyle, MouseButton}, - AnyElement, Axis, CursorRegion, Element, LayoutContext, MouseRegion, RectFExt, - SceneBuilder, SizeConstraint, Vector2FExt, ViewContext, + scene::MouseDrag, + AnyElement, Axis, CursorRegion, Element, EventContext, LayoutContext, MouseRegion, + RectFExt, SceneBuilder, SizeConstraint, Vector2FExt, ViewContext, }; use crate::{ @@ -682,6 +684,90 @@ mod element { *cross_axis_max = cross_axis_max.max(child_size.along(cross_axis)); } } + + fn handle_resize( + flexes: Rc>>, + axis: Axis, + ix: usize, + child_start: Vector2F, + drag_bounds: RectF, + ) -> impl Fn(MouseDrag, &mut Workspace, &mut EventContext) { + let size = move |ix, flexes: &[f32]| { + drag_bounds.length_along(axis) * (flexes[ix] / flexes.len() as f32) + }; + + move |drag, workspace: &mut Workspace, cx| { + let min_size = match axis { + Axis::Horizontal => HORIZONTAL_MIN_SIZE, + Axis::Vertical => VERTICAL_MIN_SIZE, + }; + let mut flexes = flexes.borrow_mut(); + + // Don't allow resizing to less than the minimum size, if elements are already too small + if min_size - 1. > size(ix, flexes.as_slice()) { + return; + } + + let mut current_target_size = (drag.position - child_start).along(axis); + + let mut proposed_current_pixel_change = + current_target_size - size(ix, flexes.as_slice()); + + let flex_changes = |pixel_dx, target_ix, flexes: &[f32]| { + let flex_change = pixel_dx / drag_bounds.length_along(axis); + let current_target_flex = flexes[target_ix] + flex_change; + let next_target_flex = flexes[target_ix + 1] - flex_change; + (current_target_flex, next_target_flex) + }; + + if proposed_current_pixel_change < 0. { + current_target_size = f32::max(current_target_size, min_size); + let current_pixel_change = current_target_size - size(ix, flexes.as_slice()); + + let (current_target_flex, next_target_flex) = + flex_changes(current_pixel_change, ix, flexes.as_slice()); + + flexes[ix] = current_target_flex; + flexes[ix + 1] = next_target_flex; + } else if proposed_current_pixel_change > 0. { + let mut ix_offset = 0; + while proposed_current_pixel_change > 0.01 && ix + 1 + ix_offset < flexes.len() + { + let next_target_size = f32::max( + size(ix + 1, flexes.as_slice()) - proposed_current_pixel_change, + min_size, + ); + + current_target_size = f32::min( + current_target_size, + size(ix, flexes.as_slice()) + size(ix + 1, flexes.as_slice()) + - next_target_size, + ); + + let current_pixel_change = + current_target_size - size(ix, flexes.as_slice()); + + let (current_target_flex, next_target_flex) = + flex_changes(current_pixel_change, ix, flexes.as_slice()); + + flexes[ix_offset + ix] = current_target_flex; + flexes[ix_offset + ix + 1] = next_target_flex; + + dbg!( + current_pixel_change, + proposed_current_pixel_change, + proposed_current_pixel_change - current_pixel_change + ); + proposed_current_pixel_change -= current_pixel_change; + ix_offset += 1; + } + dbg!("done"); + } + + workspace.schedule_serialize(cx); + cx.notify(); + } + } } impl Extend> for PaneAxisElement { @@ -780,11 +866,6 @@ mod element { let mut bounding_boxes = self.bounding_boxes.borrow_mut(); bounding_boxes.clear(); - let sizes = self - .children - .iter() - .map(|child| child.size()) - .collect::>(); let mut children_iter = self.children.iter_mut().enumerate().peekable(); while let Some((ix, child)) = children_iter.next() { let child_start = child_origin.clone(); @@ -826,8 +907,6 @@ mod element { style, }); - let axis = self.axis; - let drag_bounds = visible_bounds.clone(); enum ResizeHandle {} let mut mouse_region = MouseRegion::new::( cx.view_id(), @@ -835,75 +914,16 @@ mod element { handle_bounds, ); mouse_region = mouse_region - .on_drag(MouseButton::Left, { - let flexes = self.flexes.clone(); - let sizes = sizes.clone(); - move |drag, workspace: &mut Workspace, cx| { - let min_size = match axis { - Axis::Horizontal => HORIZONTAL_MIN_SIZE, - Axis::Vertical => VERTICAL_MIN_SIZE, - }; - // Don't allow resizing to less than the minimum size, if elements are already too small - if min_size - 1. > sizes[ix].along(axis) { - return; - } - - let mut flexes = flexes.borrow_mut(); - - let mut current_target_size = - (drag.position - child_start).along(axis); - - let mut proposed_current_pixel_change = - current_target_size - sizes[ix].along(axis); - - let flex_changes = |target_size, target_ix| { - let current_pixel_change = target_size - sizes[ix].along(axis); - let flex_change = - current_pixel_change / drag_bounds.length_along(axis); - let current_target_flex = flexes[target_ix] + flex_change; - let next_target_flex = flexes[target_ix + 1] - flex_change; - (current_target_flex, next_target_flex) - }; - - if proposed_current_pixel_change < 0. { - current_target_size = f32::max(current_target_size, min_size); - let (current_target_flex, next_target_flex) = - flex_changes(current_target_size, ix); - - *flexes.get_mut(ix).unwrap() = current_target_flex; - *flexes.get_mut(ix + 1).unwrap() = next_target_flex; - } else if proposed_current_pixel_change > 0. { - let mut next_target_size = f32::max( - sizes[ix + 1].along(axis) - proposed_current_pixel_change, - min_size, - ); - - current_target_size = f32::min( - current_target_size, - sizes[ix].along(axis) + sizes[ix + 1].along(axis) - - next_target_size, - ); - - let (current_target_flex, next_target_flex) = - flex_changes(current_target_size, ix); - - // TODO: make this into a loop - *flexes.get_mut(ix).unwrap() = current_target_flex; - *flexes.get_mut(ix + 1).unwrap() = next_target_flex; - - // let mut ix_offset = 0; - - // while proposed_current_pixel_change > 0. - // && ix + 1 + ix_offset < flexes.len() - // { - - // } - } - - workspace.schedule_serialize(cx); - cx.notify(); - } - }) + .on_drag( + MouseButton::Left, + Self::handle_resize( + self.flexes.clone(), + self.axis, + ix, + child_start, + visible_bounds.clone(), + ), + ) .on_click(MouseButton::Left, { let flexes = self.flexes.clone(); move |e, v: &mut Workspace, cx| { From 429a2fc623bb1b56f9d67b2d48f20fad629b04b2 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Sun, 23 Jul 2023 13:28:30 -0700 Subject: [PATCH 033/120] Add drag end events Fix left dragging cascade WIP: Implement right dragging, WIP: use drag end events to set and reset state around initial flex orientation --- crates/gpui/src/app/window.rs | 20 ++++++++++++++++ crates/gpui/src/scene/mouse_event.rs | 1 + crates/workspace/src/pane_group.rs | 34 +++++++++++++++------------- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 1dc88d2e71..e4beb58873 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -518,6 +518,18 @@ impl<'a> WindowContext<'a> { // NOTE: The order of event pushes is important! MouseUp events MUST be fired // before click events, and so the MouseUp events need to be pushed before // MouseClick events. + + // Synthesize one last drag event to end the drag + mouse_events.push(MouseEvent::Drag(MouseDrag { + region: Default::default(), + prev_mouse_position: self.window.mouse_position, + platform_event: MouseMovedEvent { + position: e.position, + pressed_button: Some(e.button), + modifiers: e.modifiers, + }, + end: true, + })); mouse_events.push(MouseEvent::Up(MouseUp { region: Default::default(), platform_event: e.clone(), @@ -565,8 +577,16 @@ impl<'a> WindowContext<'a> { region: Default::default(), prev_mouse_position: self.window.mouse_position, platform_event: e.clone(), + end: false, })); } else if let Some((_, clicked_button)) = self.window.clicked_region { + mouse_events.push(MouseEvent::Drag(MouseDrag { + region: Default::default(), + prev_mouse_position: self.window.mouse_position, + platform_event: e.clone(), + end: true, + })); + // Mouse up event happened outside the current window. Simulate mouse up button event let button_event = e.to_button_event(clicked_button); mouse_events.push(MouseEvent::Up(MouseUp { diff --git a/crates/gpui/src/scene/mouse_event.rs b/crates/gpui/src/scene/mouse_event.rs index a492da771b..21d3716aa6 100644 --- a/crates/gpui/src/scene/mouse_event.rs +++ b/crates/gpui/src/scene/mouse_event.rs @@ -32,6 +32,7 @@ pub struct MouseDrag { pub region: RectF, pub prev_mouse_position: Vector2F, pub platform_event: MouseMovedEvent, + pub end: bool } impl Deref for MouseDrag { diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index bed99d6cc4..05684229cc 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -587,7 +587,6 @@ mod element { use std::{cell::RefCell, ops::Range, rc::Rc}; use gpui::{ - elements::MouseEventHandler, geometry::{ rect::RectF, vector::{vec2f, Vector2F}, @@ -697,6 +696,10 @@ mod element { }; move |drag, workspace: &mut Workspace, cx| { + if drag.end { + dbg!("FINISHED"); + return; + } let min_size = match axis { Axis::Horizontal => HORIZONTAL_MIN_SIZE, Axis::Vertical => VERTICAL_MIN_SIZE, @@ -713,10 +716,10 @@ mod element { let mut proposed_current_pixel_change = current_target_size - size(ix, flexes.as_slice()); - let flex_changes = |pixel_dx, target_ix, flexes: &[f32]| { + let flex_changes = |pixel_dx, target_ix, next: isize, flexes: &[f32]| { let flex_change = pixel_dx / drag_bounds.length_along(axis); let current_target_flex = flexes[target_ix] + flex_change; - let next_target_flex = flexes[target_ix + 1] - flex_change; + let next_target_flex = flexes[(target_ix as isize + next) as usize] - flex_change; (current_target_flex, next_target_flex) }; @@ -725,7 +728,7 @@ mod element { let current_pixel_change = current_target_size - size(ix, flexes.as_slice()); let (current_target_flex, next_target_flex) = - flex_changes(current_pixel_change, ix, flexes.as_slice()); + flex_changes(current_pixel_change, ix, 1, flexes.as_slice()); flexes[ix] = current_target_flex; flexes[ix + 1] = next_target_flex; @@ -733,35 +736,31 @@ mod element { let mut ix_offset = 0; while proposed_current_pixel_change > 0.01 && ix + 1 + ix_offset < flexes.len() { + let current_ix = ix_offset + ix; let next_target_size = f32::max( - size(ix + 1, flexes.as_slice()) - proposed_current_pixel_change, + size(current_ix + 1, flexes.as_slice()) - proposed_current_pixel_change, min_size, ); current_target_size = f32::min( current_target_size, - size(ix, flexes.as_slice()) + size(ix + 1, flexes.as_slice()) + size(current_ix, flexes.as_slice()) + + size(current_ix + 1, flexes.as_slice()) - next_target_size, ); let current_pixel_change = - current_target_size - size(ix, flexes.as_slice()); + current_target_size - size(current_ix, flexes.as_slice()); let (current_target_flex, next_target_flex) = - flex_changes(current_pixel_change, ix, flexes.as_slice()); + flex_changes(current_pixel_change, current_ix, 1, flexes.as_slice()); - flexes[ix_offset + ix] = current_target_flex; - flexes[ix_offset + ix + 1] = next_target_flex; + flexes[current_ix] = current_target_flex; + flexes[current_ix + 1] = next_target_flex; - dbg!( - current_pixel_change, - proposed_current_pixel_change, - proposed_current_pixel_change - current_pixel_change - ); proposed_current_pixel_change -= current_pixel_change; ix_offset += 1; } - dbg!("done"); } workspace.schedule_serialize(cx); @@ -924,6 +923,9 @@ mod element { visible_bounds.clone(), ), ) + .on_down(MouseButton::Left, |_, _: &mut Workspace, _| { + dbg!("INITIATE"); + }) .on_click(MouseButton::Left, { let flexes = self.flexes.clone(); move |e, v: &mut Workspace, cx| { From fe388ed71ef9d8877fbef216061ac807acc1ba3d Mon Sep 17 00:00:00 2001 From: Quinn Wilton Date: Sun, 23 Jul 2023 14:39:43 -0700 Subject: [PATCH 034/120] Add tree-sitter-nix --- Cargo.lock | 10 +++ Cargo.toml | 1 + crates/zed/Cargo.toml | 1 + crates/zed/src/languages.rs | 1 + crates/zed/src/languages/nix/config.toml | 11 +++ crates/zed/src/languages/nix/highlights.scm | 95 +++++++++++++++++++++ 6 files changed, 119 insertions(+) create mode 100644 crates/zed/src/languages/nix/config.toml create mode 100644 crates/zed/src/languages/nix/highlights.scm diff --git a/Cargo.lock b/Cargo.lock index f0c8917aa2..175b3d9315 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8065,6 +8065,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-nix" +version = "0.0.1" +source = "git+https://github.com/nix-community/tree-sitter-nix?rev=66e3e9ce9180ae08fc57372061006ef83f0abde7#66e3e9ce9180ae08fc57372061006ef83f0abde7" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-php" version = "0.19.1" @@ -9550,6 +9559,7 @@ dependencies = [ "tree-sitter-json 0.20.0", "tree-sitter-lua", "tree-sitter-markdown", + "tree-sitter-nix", "tree-sitter-php", "tree-sitter-python", "tree-sitter-racket", diff --git a/Cargo.toml b/Cargo.toml index fa824115cb..ca13a4eb2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -129,6 +129,7 @@ tree-sitter-svelte = { git = "https://github.com/Himujjal/tree-sitter-svelte", r tree-sitter-racket = { git = "https://github.com/zed-industries/tree-sitter-racket", rev = "eb010cf2c674c6fd9a6316a84e28ef90190fe51a"} tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml", rev = "f545a41f57502e1b5ddf2a6668896c1b0620f930"} tree-sitter-lua = "0.0.14" +tree-sitter-nix = { git = "https://github.com/nix-community/tree-sitter-nix", rev = "66e3e9ce9180ae08fc57372061006ef83f0abde7" } [patch.crates-io] tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "49226023693107fba9a1191136a4f47f38cdca73" } diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index c5bf313701..88185acfc2 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -126,6 +126,7 @@ tree-sitter-svelte.workspace = true tree-sitter-racket.workspace = true tree-sitter-yaml.workspace = true tree-sitter-lua.workspace = true +tree-sitter-nix.workspace = true url = "2.2" urlencoding = "2.1.2" diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 365e8a3023..9ba0f27552 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -152,6 +152,7 @@ pub fn init(languages: Arc, node_runtime: Arc) { tree_sitter_php::language(), vec![Arc::new(php::IntelephenseLspAdapter::new(node_runtime))], ); + language("nix", tree_sitter_nix::language(), vec![]) } #[cfg(any(test, feature = "test-support"))] diff --git a/crates/zed/src/languages/nix/config.toml b/crates/zed/src/languages/nix/config.toml new file mode 100644 index 0000000000..778f0a6f05 --- /dev/null +++ b/crates/zed/src/languages/nix/config.toml @@ -0,0 +1,11 @@ +name = "Nix" +path_suffixes = ["nix"] +line_comment = "# " +block_comment = ["/* ", " */"] +autoclose_before = ";:.,=}])>` \n\t\"" +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, + { start = "<", end = ">", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/nix/highlights.scm b/crates/zed/src/languages/nix/highlights.scm new file mode 100644 index 0000000000..d63a46411a --- /dev/null +++ b/crates/zed/src/languages/nix/highlights.scm @@ -0,0 +1,95 @@ +(comment) @comment + +[ + "if" + "then" + "else" + "let" + "inherit" + "in" + "rec" + "with" + "assert" + "or" +] @keyword + +[ + (string_expression) + (indented_string_expression) +] @string + +[ + (path_expression) + (hpath_expression) + (spath_expression) +] @string.special.path + +(uri_expression) @link_uri + +[ + (integer_expression) + (float_expression) +] @number + +(interpolation + "${" @punctuation.special + "}" @punctuation.special) @embedded + +(escape_sequence) @escape +(dollar_escape) @escape + +(function_expression + universal: (identifier) @parameter +) + +(formal + name: (identifier) @parameter + "?"? @punctuation.delimiter) + +(select_expression + attrpath: (attrpath (identifier)) @property) + +(apply_expression + function: [ + (variable_expression (identifier)) @function + (select_expression + attrpath: (attrpath + attr: (identifier) @function .))]) + +(unary_expression + operator: _ @operator) + +(binary_expression + operator: _ @operator) + +(variable_expression (identifier) @variable) + +(binding + attrpath: (attrpath (identifier)) @property) + +"=" @operator + +[ + ";" + "." + "," +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +(identifier) @variable + +((identifier) @function.builtin + (#match? @function.builtin "^(__add|__addErrorContext|__all|__any|__appendContext|__attrNames|__attrValues|__bitAnd|__bitOr|__bitXor|__catAttrs|__compareVersions|__concatLists|__concatMap|__concatStringsSep|__deepSeq|__div|__elem|__elemAt|__fetchurl|__filter|__filterSource|__findFile|__foldl'|__fromJSON|__functionArgs|__genList|__genericClosure|__getAttr|__getContext|__getEnv|__hasAttr|__hasContext|__hashFile|__hashString|__head|__intersectAttrs|__isAttrs|__isBool|__isFloat|__isFunction|__isInt|__isList|__isPath|__isString|__langVersion|__length|__lessThan|__listToAttrs|__mapAttrs|__match|__mul|__parseDrvName|__partition|__path|__pathExists|__readDir|__readFile|__replaceStrings|__seq|__sort|__split|__splitVersion|__storePath|__stringLength|__sub|__substring|__tail|__toFile|__toJSON|__toPath|__toXML|__trace|__tryEval|__typeOf|__unsafeDiscardOutputDependency|__unsafeDiscardStringContext|__unsafeGetAttrPos|__valueSize|abort|baseNameOf|derivation|derivationStrict|dirOf|fetchGit|fetchMercurial|fetchTarball|fromTOML|import|isNull|map|placeholder|removeAttrs|scopedImport|throw|toString)$") + (#is-not? local)) + +((identifier) @variable.builtin + (#match? @variable.builtin "^(__currentSystem|__currentTime|__nixPath|__nixVersion|__storeDir|builtins|false|null|true)$") + (#is-not? local)) From 25e4bcea7f8154afdea7de62b66b4fd025bb6f5f Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 24 Jul 2023 08:04:46 -0700 Subject: [PATCH 035/120] Implement cascading resize algorithm --- crates/workspace/src/pane_group.rs | 94 ++++++++++++++++-------------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index 05684229cc..22435b56f0 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -584,7 +584,7 @@ impl SplitDirection { } mod element { - use std::{cell::RefCell, ops::Range, rc::Rc}; + use std::{cell::RefCell, iter::from_fn, ops::Range, rc::Rc}; use gpui::{ geometry::{ @@ -687,7 +687,7 @@ mod element { fn handle_resize( flexes: Rc>>, axis: Axis, - ix: usize, + preceding_ix: usize, child_start: Vector2F, drag_bounds: RectF, ) -> impl Fn(MouseDrag, &mut Workspace, &mut EventContext) { @@ -697,7 +697,7 @@ mod element { move |drag, workspace: &mut Workspace, cx| { if drag.end { - dbg!("FINISHED"); + // Clear cascading resize state return; } let min_size = match axis { @@ -707,60 +707,66 @@ mod element { let mut flexes = flexes.borrow_mut(); // Don't allow resizing to less than the minimum size, if elements are already too small - if min_size - 1. > size(ix, flexes.as_slice()) { + if min_size - 1. > size(preceding_ix, flexes.as_slice()) { return; } - let mut current_target_size = (drag.position - child_start).along(axis); - - let mut proposed_current_pixel_change = - current_target_size - size(ix, flexes.as_slice()); + let mut proposed_current_pixel_change = (drag.position - child_start).along(axis) + - size(preceding_ix, flexes.as_slice()); let flex_changes = |pixel_dx, target_ix, next: isize, flexes: &[f32]| { let flex_change = pixel_dx / drag_bounds.length_along(axis); let current_target_flex = flexes[target_ix] + flex_change; - let next_target_flex = flexes[(target_ix as isize + next) as usize] - flex_change; + let next_target_flex = + flexes[(target_ix as isize + next) as usize] - flex_change; (current_target_flex, next_target_flex) }; - if proposed_current_pixel_change < 0. { - current_target_size = f32::max(current_target_size, min_size); - let current_pixel_change = current_target_size - size(ix, flexes.as_slice()); + let mut successors = from_fn({ + let forward = proposed_current_pixel_change > 0.; + let mut ix_offset = 0; + let len = flexes.len(); + move || { + let result = if forward { + (preceding_ix + 1 + ix_offset < len).then(|| preceding_ix + ix_offset) + } else { + (preceding_ix as isize - ix_offset as isize >= 0) + .then(|| preceding_ix - ix_offset) + }; + + ix_offset += 1; + + result + } + }); + + while proposed_current_pixel_change.abs() > 0. { + let Some(current_ix) = successors.next() else { + break; + }; + + let next_target_size = f32::max( + size(current_ix + 1, flexes.as_slice()) - proposed_current_pixel_change, + min_size, + ); + + let current_target_size = f32::max( + size(current_ix, flexes.as_slice()) + + size(current_ix + 1, flexes.as_slice()) + - next_target_size, + min_size, + ); + + let current_pixel_change = + current_target_size - size(current_ix, flexes.as_slice()); let (current_target_flex, next_target_flex) = - flex_changes(current_pixel_change, ix, 1, flexes.as_slice()); + flex_changes(current_pixel_change, current_ix, 1, flexes.as_slice()); - flexes[ix] = current_target_flex; - flexes[ix + 1] = next_target_flex; - } else if proposed_current_pixel_change > 0. { - let mut ix_offset = 0; - while proposed_current_pixel_change > 0.01 && ix + 1 + ix_offset < flexes.len() - { - let current_ix = ix_offset + ix; - let next_target_size = f32::max( - size(current_ix + 1, flexes.as_slice()) - proposed_current_pixel_change, - min_size, - ); + flexes[current_ix] = current_target_flex; + flexes[current_ix + 1] = next_target_flex; - current_target_size = f32::min( - current_target_size, - size(current_ix, flexes.as_slice()) - + size(current_ix + 1, flexes.as_slice()) - - next_target_size, - ); - - let current_pixel_change = - current_target_size - size(current_ix, flexes.as_slice()); - - let (current_target_flex, next_target_flex) = - flex_changes(current_pixel_change, current_ix, 1, flexes.as_slice()); - - flexes[current_ix] = current_target_flex; - flexes[current_ix + 1] = next_target_flex; - - proposed_current_pixel_change -= current_pixel_change; - ix_offset += 1; - } + proposed_current_pixel_change -= current_pixel_change; } workspace.schedule_serialize(cx); @@ -924,7 +930,7 @@ mod element { ), ) .on_down(MouseButton::Left, |_, _: &mut Workspace, _| { - dbg!("INITIATE"); + // Save cascading resize state }) .on_click(MouseButton::Left, { let flexes = self.flexes.clone(); From 43d94e37eccd15ac5fad02811989682c387728b6 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 24 Jul 2023 09:37:48 -0600 Subject: [PATCH 036/120] Refactor mode indicator to remove itself One of the problems we had is that the status_bar shows a gap between items, and we want to not add an additional gap for an invisible status indicator. --- crates/theme/src/theme.rs | 2 +- crates/vim/src/mode_indicator.rs | 49 +++++++++--------------- crates/vim/src/test.rs | 58 ++++++++++++++++++++++++++++- crates/vim/src/vim.rs | 52 ++++++++++++++++++++++++++ crates/workspace/src/status_bar.rs | 17 ++++++--- crates/zed/src/zed.rs | 3 +- styles/src/style_tree/status_bar.ts | 2 +- 7 files changed, 142 insertions(+), 41 deletions(-) diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index de0701a343..82c3f2a142 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -402,7 +402,7 @@ pub struct StatusBar { pub height: f32, pub item_spacing: f32, pub cursor_position: TextStyle, - pub vim_mode: TextStyle, + pub vim_mode_indicator: TextStyle, pub active_language: Interactive, pub auto_update_progress_message: TextStyle, pub auto_update_done_message: TextStyle, diff --git a/crates/vim/src/mode_indicator.rs b/crates/vim/src/mode_indicator.rs index ef8d159018..683024267c 100644 --- a/crates/vim/src/mode_indicator.rs +++ b/crates/vim/src/mode_indicator.rs @@ -1,30 +1,18 @@ -use gpui::{ - elements::{Empty, Label}, - AnyElement, Element, Entity, View, ViewContext, -}; +use gpui::{elements::Label, AnyElement, Element, Entity, View, ViewContext}; use workspace::{item::ItemHandle, StatusItemView}; -use crate::{state::Mode, Vim}; +use crate::state::Mode; pub struct ModeIndicator { - mode: Option, + pub mode: Mode, } impl ModeIndicator { - pub fn new(cx: &mut ViewContext) -> Self { - cx.observe_global::(|this, cx| { - let vim = Vim::read(cx); - if vim.enabled { - this.set_mode(Some(Vim::read(cx).state.mode), cx) - } else { - this.set_mode(None, cx) - } - }) - .detach(); - Self { mode: None } + pub fn new(mode: Mode) -> Self { + Self { mode } } - pub fn set_mode(&mut self, mode: Option, cx: &mut ViewContext) { + pub fn set_mode(&mut self, mode: Mode, cx: &mut ViewContext) { if mode != self.mode { self.mode = mode; cx.notify(); @@ -38,22 +26,21 @@ impl Entity for ModeIndicator { impl View for ModeIndicator { fn ui_name() -> &'static str { - "ModeIndicator" + "ModeIndicatorView" } fn render(&mut self, cx: &mut ViewContext) -> AnyElement { - if let Some(mode) = self.mode { - let theme = &theme::current(cx).workspace.status_bar; - let text = match mode { - Mode::Normal => "", - Mode::Insert => "--- INSERT ---", - Mode::Visual { line: false } => "--- VISUAL ---", - Mode::Visual { line: true } => "--- VISUAL LINE ---", - }; - Label::new(text, theme.vim_mode.clone()).into_any() - } else { - Empty::new().into_any() - } + let theme = &theme::current(cx).workspace.status_bar; + // we always choose text to be 12 monospace characters + // so that as the mode indicator changes, the rest of the + // UI stays still. + let text = match self.mode { + Mode::Normal => "-- NORMAL --", + Mode::Insert => "-- INSERT --", + Mode::Visual { line: false } => "-- VISUAL --", + Mode::Visual { line: true } => "VISUAL LINE ", + }; + Label::new(text, theme.vim_mode_indicator.clone()).into_any() } } diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 8ed649e61b..96d6a2b690 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -4,6 +4,8 @@ mod neovim_connection; mod vim_binding_test_context; mod vim_test_context; +use std::sync::Arc; + use command_palette::CommandPalette; use editor::DisplayPoint; pub use neovim_backed_binding_test_context::*; @@ -14,7 +16,7 @@ pub use vim_test_context::*; use indoc::indoc; use search::BufferSearchBar; -use crate::state::Mode; +use crate::{state::Mode, ModeIndicator}; #[gpui::test] async fn test_initially_disabled(cx: &mut gpui::TestAppContext) { @@ -195,3 +197,57 @@ async fn test_selection_on_search(cx: &mut gpui::TestAppContext) { cx.simulate_keystrokes(["shift-n"]); cx.assert_state(indoc! {"aa\nbb\nˇcc\ncc\ncc\n"}, Mode::Normal); } + +#[gpui::test] +async fn test_status_indicator( + cx: &mut gpui::TestAppContext, + deterministic: Arc, +) { + let mut cx = VimTestContext::new(cx, true).await; + deterministic.run_until_parked(); + + let mode_indicator = cx.workspace(|workspace, cx| { + let status_bar = workspace.status_bar().read(cx); + let mode_indicator = status_bar.item_of_type::(); + assert!(mode_indicator.is_some()); + mode_indicator.unwrap() + }); + + assert_eq!( + cx.workspace(|_, cx| mode_indicator.read(cx).mode), + Mode::Normal + ); + + // shows the correct mode + cx.simulate_keystrokes(["i"]); + deterministic.run_until_parked(); + assert_eq!( + cx.workspace(|_, cx| mode_indicator.read(cx).mode), + Mode::Insert + ); + + // shows even in search + cx.simulate_keystrokes(["escape", "v", "/"]); + deterministic.run_until_parked(); + assert_eq!( + cx.workspace(|_, cx| mode_indicator.read(cx).mode), + Mode::Visual { line: false } + ); + + // hides if vim mode is disabled + cx.disable_vim(); + deterministic.run_until_parked(); + cx.workspace(|workspace, cx| { + let status_bar = workspace.status_bar().read(cx); + let mode_indicator = status_bar.item_of_type::(); + assert!(mode_indicator.is_none()); + }); + + cx.enable_vim(); + deterministic.run_until_parked(); + cx.workspace(|workspace, cx| { + let status_bar = workspace.status_bar().read(cx); + let mode_indicator = status_bar.item_of_type::(); + assert!(mode_indicator.is_some()); + }); +} diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 8ab110ba1e..54d18825cd 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -118,6 +118,7 @@ pub fn observe_keystrokes(cx: &mut WindowContext) { pub struct Vim { active_editor: Option>, editor_subscription: Option, + mode_indicator: Option>, enabled: bool, state: VimState, @@ -177,6 +178,10 @@ impl Vim { self.state.mode = mode; self.state.operator_stack.clear(); + if let Some(mode_indicator) = &self.mode_indicator { + mode_indicator.update(cx, |mode_indicator, cx| mode_indicator.set_mode(mode, cx)) + } + // Sync editor settings like clip mode self.sync_vim_settings(cx); @@ -259,6 +264,51 @@ impl Vim { } } + fn sync_mode_indicator(cx: &mut AppContext) { + cx.spawn(|mut cx| async move { + let workspace = match cx.update(|cx| { + cx.update_active_window(|cx| { + cx.root_view() + .downcast_ref::() + .map(|workspace| workspace.downgrade()) + }) + }) { + Some(Some(workspace)) => workspace, + _ => { + return Ok(()); + } + }; + + workspace.update(&mut cx, |workspace, cx| { + Vim::update(cx, |vim, cx| { + workspace.status_bar().update(cx, |status_bar, cx| { + let current_position = status_bar.position_of_item::(); + if vim.enabled && current_position.is_none() { + if vim.mode_indicator.is_none() { + vim.mode_indicator = + Some(cx.add_view(|_| ModeIndicator::new(vim.state.mode))); + }; + let mode_indicator = vim.mode_indicator.as_ref().unwrap(); + // TODO: would it be better to depend on the diagnostics crate + // so we can pass the type directly? + let position = status_bar.position_of_named_item("DiagnosticIndicator"); + if let Some(position) = position { + status_bar.insert_item_after(position, mode_indicator.clone(), cx) + } else { + status_bar.add_left_item(mode_indicator.clone(), cx) + } + } else if !vim.enabled { + if let Some(position) = current_position { + status_bar.remove_item_at(position, cx) + } + } + }) + }) + }) + }) + .detach_and_log_err(cx); + } + fn set_enabled(&mut self, enabled: bool, cx: &mut AppContext) { if self.enabled != enabled { self.enabled = enabled; @@ -309,6 +359,8 @@ impl Vim { self.unhook_vim_settings(editor, cx); } }); + + Vim::sync_mode_indicator(cx); } fn unhook_vim_settings(&self, editor: &mut Editor, cx: &mut ViewContext) { diff --git a/crates/workspace/src/status_bar.rs b/crates/workspace/src/status_bar.rs index 6fd3bd5310..7b1c11dcf2 100644 --- a/crates/workspace/src/status_bar.rs +++ b/crates/workspace/src/status_bar.rs @@ -1,4 +1,4 @@ -use std::{any::TypeId, ops::Range}; +use std::ops::Range; use crate::{ItemHandle, Pane}; use gpui::{ @@ -96,14 +96,21 @@ impl StatusBar { cx.notify(); } - pub fn position_of_item(&mut self) -> Option + pub fn position_of_item(&self) -> Option where T: StatusItemView, { self.position_of_named_item(T::ui_name()) } - pub fn position_of_named_item(&mut self, name: &str) -> Option { + pub fn item_of_type(&self) -> Option> { + self.left_items + .iter() + .chain(self.right_items.iter()) + .find_map(|item| item.as_any().clone().downcast()) + } + + pub fn position_of_named_item(&self, name: &str) -> Option { for (index, item) in self.left_items.iter().enumerate() { if item.as_ref().ui_name() == name { return Some(index); @@ -126,10 +133,10 @@ impl StatusBar { T: 'static + StatusItemView, { if position < self.left_items.len() { - self.left_items.insert(position, Box::new(item)) + self.left_items.insert(position + 1, Box::new(item)) } else { self.right_items - .insert(position - self.left_items.len(), Box::new(item)) + .insert(position + 1 - self.left_items.len(), Box::new(item)) } cx.notify() } diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 645371d419..639e1a3f60 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -312,11 +312,10 @@ pub fn initialize_workspace( feedback::deploy_feedback_button::DeployFeedbackButton::new(workspace) }); let cursor_position = cx.add_view(|_| editor::items::CursorPosition::new()); - let vim_mode = cx.add_view(|cx| vim::ModeIndicator::new(cx)); workspace.status_bar().update(cx, |status_bar, cx| { status_bar.add_left_item(diagnostic_summary, cx); - status_bar.add_left_item(vim_mode, cx); status_bar.add_left_item(activity_indicator, cx); + status_bar.add_right_item(feedback_button, cx); status_bar.add_right_item(copilot, cx); status_bar.add_right_item(active_buffer_language, cx); diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index b4273cbf99..74ad7064d1 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -27,7 +27,7 @@ export default function status_bar(): any { }, border: border(layer, { top: true, overlay: true }), cursor_position: text(layer, "sans", "variant"), - vim_mode: text(layer, "sans", "variant"), + vim_mode_indicator: text(layer, "mono", "variant"), active_language: interactive({ base: { padding: { left: 6, right: 6 }, From baa16a2fc6d23b208f4824ad8b6130ff5385f1d1 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 24 Jul 2023 09:57:51 -0600 Subject: [PATCH 037/120] Better method ordering --- crates/workspace/src/status_bar.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/workspace/src/status_bar.rs b/crates/workspace/src/status_bar.rs index 7b1c11dcf2..8c3cfe2053 100644 --- a/crates/workspace/src/status_bar.rs +++ b/crates/workspace/src/status_bar.rs @@ -96,13 +96,6 @@ impl StatusBar { cx.notify(); } - pub fn position_of_item(&self) -> Option - where - T: StatusItemView, - { - self.position_of_named_item(T::ui_name()) - } - pub fn item_of_type(&self) -> Option> { self.left_items .iter() @@ -110,6 +103,13 @@ impl StatusBar { .find_map(|item| item.as_any().clone().downcast()) } + pub fn position_of_item(&self) -> Option + where + T: StatusItemView, + { + self.position_of_named_item(T::ui_name()) + } + pub fn position_of_named_item(&self, name: &str) -> Option { for (index, item) in self.left_items.iter().enumerate() { if item.as_ref().ui_name() == name { From c86096a886701c96c6dd09fca36c0281bc140111 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 25 Jul 2023 10:38:37 -0400 Subject: [PATCH 038/120] update semantic index tests for javascript --- .../src/semantic_index_tests.rs | 208 +++++++++++------- .../src/languages/javascript/embedding.scm | 96 ++++---- crates/zed/src/languages/tsx/embedding.scm | 118 +++++----- .../src/languages/typescript/embedding.scm | 126 +++++------ 4 files changed, 278 insertions(+), 270 deletions(-) diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 432f6b5b53..9bd6efc954 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -388,43 +388,103 @@ fn assert_documents_eq( ); } -// #[gpui::test] -// async fn test_code_context_retrieval_javascript() { -// let language = js_lang(); -// let mut retriever = CodeContextRetriever::new(); +#[gpui::test] +async fn test_code_context_retrieval_javascript() { + let language = js_lang(); + let mut retriever = CodeContextRetriever::new(); -// let text = " -// /* globals importScripts, backend */ -// function _authorize() {} + let text = " + /* globals importScripts, backend */ + function _authorize() {} -// /** -// * Sometimes the frontend build is way faster than backend. -// */ -// export async function authorizeBank() { -// _authorize(pushModal, upgradingAccountId, {}); -// } + /** + * Sometimes the frontend build is way faster than backend. + */ + export async function authorizeBank() { + _authorize(pushModal, upgradingAccountId, {}); + } -// export class SettingsPage { -// /* This is a test setting */ -// constructor(page) { -// this.page = page; -// } -// } + export class SettingsPage { + /* This is a test setting */ + constructor(page) { + this.page = page; + } + } -// /* This is a test comment */ -// class TestClass {} + /* This is a test comment */ + class TestClass {} -// /* Schema for editor_events in Clickhouse. */ -// export interface ClickhouseEditorEvent { -// installation_id: string -// operation: string -// } -// " -// .unindent(); + /* Schema for editor_events in Clickhouse. */ + export interface ClickhouseEditorEvent { + installation_id: string + operation: string + } + " + .unindent(); -// let parsed_files = retriever -// .parse_file(Path::new("foo.js"), &text, language) -// .unwrap(); + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[ + ( + " + /* globals importScripts, backend */ + function _authorize() {}" + .unindent(), + 37, + ), + ( + " + /** + * Sometimes the frontend build is way faster than backend. + */ + export async function authorizeBank() { + _authorize(pushModal, upgradingAccountId, {}); + }" + .unindent(), + 131, + ), + ( + " + export class SettingsPage { + /* This is a test setting */ + constructor(page) { + this.page = page; + } + }" + .unindent(), + 225, + ), + ( + " + /* This is a test setting */ + constructor(page) { + this.page = page; + }" + .unindent(), + 290, + ), + ( + " + /* This is a test comment */ + class TestClass {}" + .unindent(), + 374, + ), + ( + " + /* Schema for editor_events in Clickhouse. */ + export interface ClickhouseEditorEvent { + installation_id: string + operation: string + }" + .unindent(), + 440, + ), + ], + ) +} // let test_documents = &[ // Document { @@ -924,38 +984,60 @@ fn js_lang() -> Arc { ( (comment)* @context . + [ (export_statement (function_declaration "async"? @name "function" @name - name: (_) @name)) @item - ) - - ( - (comment)* @context - . + name: (_) @name)) (function_declaration "async"? @name "function" @name - name: (_) @name) @item - ) + name: (_) @name) + ] @item + ) ( (comment)* @context . + [ (export_statement (class_declaration "class" @name - name: (_) @name)) @item - ) + name: (_) @name)) + (class_declaration + "class" @name + name: (_) @name) + ] @item + ) ( (comment)* @context . - (class_declaration - "class" @name - name: (_) @name) @item - ) + [ + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) + (interface_declaration + "interface" @name + name: (_) @name) + ] @item + ) + + ( + (comment)* @context + . + [ + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) + (enum_declaration + "enum" @name + name: (_) @name) + ] @item + ) ( (comment)* @context @@ -969,41 +1051,7 @@ fn js_lang() -> Arc { "static" ]* @name name: (_) @name) @item - ) - - ( - (comment)* @context - . - (export_statement - (interface_declaration - "interface" @name - name: (_) @name)) @item - ) - - ( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item - ) - - ( - (comment)* @context - . - (export_statement - (enum_declaration - "enum" @name - name: (_) @name)) @item - ) - - ( - (comment)* @context - . - (enum_declaration - "enum" @name - name: (_) @name) @item - ) + ) "# .unindent(), diff --git a/crates/zed/src/languages/javascript/embedding.scm b/crates/zed/src/languages/javascript/embedding.scm index a214040031..ab1a3b6b06 100644 --- a/crates/zed/src/languages/javascript/embedding.scm +++ b/crates/zed/src/languages/javascript/embedding.scm @@ -1,38 +1,60 @@ ( (comment)* @context . - (export_statement + [ + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) (function_declaration "async"? @name "function" @name - name: (_) @name)) @item - ) + name: (_) @name) + ] @item +) ( (comment)* @context . - (function_declaration - "async"? @name - "function" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement + [ + (export_statement + (class_declaration + "class" @name + name: (_) @name)) (class_declaration "class" @name - name: (_) @name)) @item - ) + name: (_) @name) + ] @item +) ( (comment)* @context . - (class_declaration - "class" @name - name: (_) @name) @item - ) + [ + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) + (interface_declaration + "interface" @name + name: (_) @name) + ] @item +) + +( + (comment)* @context + . + [ + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) + (enum_declaration + "enum" @name + name: (_) @name) + ] @item +) ( (comment)* @context @@ -46,38 +68,4 @@ "static" ]* @name name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (interface_declaration - "interface" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (enum_declaration - "enum" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (enum_declaration - "enum" @name - name: (_) @name) @item - ) +) diff --git a/crates/zed/src/languages/tsx/embedding.scm b/crates/zed/src/languages/tsx/embedding.scm index 4bb4fea254..ddcff66584 100644 --- a/crates/zed/src/languages/tsx/embedding.scm +++ b/crates/zed/src/languages/tsx/embedding.scm @@ -1,37 +1,73 @@ ( (comment)* @context . - (export_statement + [ + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) (function_declaration "async"? @name "function" @name - name: (_) @name)) @item + name: (_) @name) + ] @item ) ( (comment)* @context . - (function_declaration - "async"? @name - "function" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement + [ + (export_statement + (class_declaration + "class" @name + name: (_) @name)) (class_declaration "class" @name - name: (_) @name)) @item + name: (_) @name) + ] @item ) ( (comment)* @context . - (class_declaration - "class" @name - name: (_) @name) @item + [ + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) + (interface_declaration + "interface" @name + name: (_) @name) + ] @item + ) + +( + (comment)* @context + . + [ + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) + (enum_declaration + "enum" @name + name: (_) @name) + ] @item + ) + +( + (comment)* @context + . + [ + (export_statement + (type_alias_declaration + "type" @name + name: (_) @name)) + (type_alias_declaration + "type" @name + name: (_) @name) + ] @item ) ( @@ -47,53 +83,3 @@ ]* @name name: (_) @name) @item ) - -( - (comment)* @context - . - (export_statement - (interface_declaration - "interface" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (enum_declaration - "enum" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (enum_declaration - "enum" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (type_alias_declaration - "type" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (type_alias_declaration - "type" @name - name: (_) @name) @item) diff --git a/crates/zed/src/languages/typescript/embedding.scm b/crates/zed/src/languages/typescript/embedding.scm index 4bb4fea254..3170cb7c95 100644 --- a/crates/zed/src/languages/typescript/embedding.scm +++ b/crates/zed/src/languages/typescript/embedding.scm @@ -1,38 +1,74 @@ ( (comment)* @context . - (export_statement + [ + (export_statement + (function_declaration + "async"? @name + "function" @name + name: (_) @name)) (function_declaration "async"? @name "function" @name - name: (_) @name)) @item - ) + name: (_) @name) + ] @item +) ( (comment)* @context . - (function_declaration - "async"? @name - "function" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement + [ + (export_statement + (class_declaration + "class" @name + name: (_) @name)) (class_declaration "class" @name - name: (_) @name)) @item - ) + name: (_) @name) + ] @item +) ( (comment)* @context . - (class_declaration - "class" @name - name: (_) @name) @item - ) + [ + (export_statement + (interface_declaration + "interface" @name + name: (_) @name)) + (interface_declaration + "interface" @name + name: (_) @name) + ] @item +) + +( + (comment)* @context + . + [ + (export_statement + (enum_declaration + "enum" @name + name: (_) @name)) + (enum_declaration + "enum" @name + name: (_) @name) + ] @item +) + +( + (comment)* @context + . + [ + (export_statement + (type_alias_declaration + "type" @name + name: (_) @name)) + (type_alias_declaration + "type" @name + name: (_) @name) + ] @item +) ( (comment)* @context @@ -46,54 +82,4 @@ "static" ]* @name name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (interface_declaration - "interface" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (interface_declaration - "interface" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (enum_declaration - "enum" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (enum_declaration - "enum" @name - name: (_) @name) @item - ) - -( - (comment)* @context - . - (export_statement - (type_alias_declaration - "type" @name - name: (_) @name)) @item - ) - -( - (comment)* @context - . - (type_alias_declaration - "type" @name - name: (_) @name) @item) +) From 1f65effe57b85d126fcb5689d6d37ec3f768502e Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 25 Jul 2023 10:58:44 -0600 Subject: [PATCH 039/120] Update status bar theming Co-Authored-By: Nate Butler --- Cargo.lock | 1 + crates/theme/src/theme.rs | 2 +- crates/vim/Cargo.toml | 1 + crates/vim/src/mode_indicator.rs | 5 ++++- crates/vim/src/vim.rs | 5 ++--- crates/workspace/src/status_bar.rs | 8 ++------ styles/src/style_tree/status_bar.ts | 31 +++++++++++++---------------- 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e805a87230..704eba74b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8514,6 +8514,7 @@ dependencies = [ "indoc", "itertools", "language", + "language_selector", "log", "nvim-rs", "parking_lot 0.11.2", diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 82c3f2a142..4766f636f3 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -402,7 +402,7 @@ pub struct StatusBar { pub height: f32, pub item_spacing: f32, pub cursor_position: TextStyle, - pub vim_mode_indicator: TextStyle, + pub vim_mode_indicator: ContainedText, pub active_language: Interactive, pub auto_update_progress_message: TextStyle, pub auto_update_done_message: TextStyle, diff --git a/crates/vim/Cargo.toml b/crates/vim/Cargo.toml index 3a5974d6c9..2d394e3dcf 100644 --- a/crates/vim/Cargo.toml +++ b/crates/vim/Cargo.toml @@ -33,6 +33,7 @@ search = { path = "../search" } settings = { path = "../settings" } workspace = { path = "../workspace" } theme = { path = "../theme" } +language_selector = { path = "../language_selector"} [dev-dependencies] indoc.workspace = true diff --git a/crates/vim/src/mode_indicator.rs b/crates/vim/src/mode_indicator.rs index 683024267c..e0d2b65955 100644 --- a/crates/vim/src/mode_indicator.rs +++ b/crates/vim/src/mode_indicator.rs @@ -40,7 +40,10 @@ impl View for ModeIndicator { Mode::Visual { line: false } => "-- VISUAL --", Mode::Visual { line: true } => "VISUAL LINE ", }; - Label::new(text, theme.vim_mode_indicator.clone()).into_any() + Label::new(text, theme.vim_mode_indicator.text.clone()) + .contained() + .with_style(theme.vim_mode_indicator.container) + .into_any() } } diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 54d18825cd..363901d260 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -289,9 +289,8 @@ impl Vim { Some(cx.add_view(|_| ModeIndicator::new(vim.state.mode))); }; let mode_indicator = vim.mode_indicator.as_ref().unwrap(); - // TODO: would it be better to depend on the diagnostics crate - // so we can pass the type directly? - let position = status_bar.position_of_named_item("DiagnosticIndicator"); + let position = status_bar + .position_of_item::(); if let Some(position) = position { status_bar.insert_item_after(position, mode_indicator.clone(), cx) } else { diff --git a/crates/workspace/src/status_bar.rs b/crates/workspace/src/status_bar.rs index 8c3cfe2053..8726eaf569 100644 --- a/crates/workspace/src/status_bar.rs +++ b/crates/workspace/src/status_bar.rs @@ -107,17 +107,13 @@ impl StatusBar { where T: StatusItemView, { - self.position_of_named_item(T::ui_name()) - } - - pub fn position_of_named_item(&self, name: &str) -> Option { for (index, item) in self.left_items.iter().enumerate() { - if item.as_ref().ui_name() == name { + if item.as_ref().ui_name() == T::ui_name() { return Some(index); } } for (index, item) in self.right_items.iter().enumerate() { - if item.as_ref().ui_name() == name { + if item.as_ref().ui_name() == T::ui_name() { return Some(index + self.left_items.len()); } } diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 74ad7064d1..06afc37823 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -1,6 +1,8 @@ import { background, border, foreground, text } from "./components" import { interactive, toggleable } from "../element" import { useTheme } from "../common" +import { text_button } from "../component/text_button" + export default function status_bar(): any { const theme = useTheme() @@ -26,21 +28,16 @@ export default function status_bar(): any { right: 6, }, border: border(layer, { top: true, overlay: true }), - cursor_position: text(layer, "sans", "variant"), - vim_mode_indicator: text(layer, "mono", "variant"), - active_language: interactive({ - base: { - padding: { left: 6, right: 6 }, - ...text(layer, "sans", "variant"), - }, - state: { - hovered: { - ...text(layer, "sans", "on"), - }, - }, + cursor_position: text(layer, "sans", "variant", { size: "xs" }), + vim_mode_indicator: { + margin: { left: 6 }, + ...text(layer, "mono", "variant", { size: "xs" }), + }, + active_language: text_button({ + color: "variant" }), - auto_update_progress_message: text(layer, "sans", "variant"), - auto_update_done_message: text(layer, "sans", "variant"), + auto_update_progress_message: text(layer, "sans", "variant", { size: "xs" }), + auto_update_done_message: text(layer, "sans", "variant", { size: "xs" }), lsp_status: interactive({ base: { ...diagnostic_status_container, @@ -60,9 +57,9 @@ export default function status_bar(): any { }), diagnostic_message: interactive({ base: { - ...text(layer, "sans"), + ...text(layer, "sans", { size: "xs" }), }, - state: { hovered: text(layer, "sans", "hovered") }, + state: { hovered: text(layer, "sans", "hovered", { size: "xs" }) }, }), diagnostic_summary: interactive({ base: { @@ -118,7 +115,7 @@ export default function status_bar(): any { icon_color: foreground(layer, "variant"), label: { margin: { left: 6 }, - ...text(layer, "sans", { size: "sm" }), + ...text(layer, "sans", { size: "xs" }), }, }, state: { From 97c3d97792ec0feb1e93de302c377fe8df28fcf0 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 25 Jul 2023 13:30:38 -0400 Subject: [PATCH 040/120] update semantic index tests for cpp --- .../src/semantic_index_tests.rs | 406 ++++++------------ 1 file changed, 142 insertions(+), 264 deletions(-) diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 9bd6efc954..2ae9a06c0f 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -486,105 +486,6 @@ async fn test_code_context_retrieval_javascript() { ) } -// let test_documents = &[ -// Document { -// name: "function _authorize".into(), -// range: text.find("function _authorize").unwrap()..(text.find("}").unwrap() + 1), -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// /* globals importScripts, backend */ -// function _authorize() {} -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "async function authorizeBank".into(), -// range: text.find("export async").unwrap()..223, -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// /** -// * Sometimes the frontend build is way faster than backend. -// */ -// export async function authorizeBank() { -// _authorize(pushModal, upgradingAccountId, {}); -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "class SettingsPage".into(), -// range: 225..343, -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// export class SettingsPage { -// /* This is a test setting */ -// constructor(page) { -// this.page = page; -// } -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "constructor".into(), -// range: 290..341, -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// /* This is a test setting */ -// constructor(page) { -// this.page = page; -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "class TestClass".into(), -// range: 374..392, -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// /* This is a test comment */ -// class TestClass {} -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "interface ClickhouseEditorEvent".into(), -// range: 440..532, -// content: " -// The below code snippet is from file 'foo.js' - -// ```javascript -// /* Schema for editor_events in Clickhouse. */ -// export interface ClickhouseEditorEvent { -// installation_id: string -// operation: string -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// ]; - -// for idx in 0..test_documents.len() { -// assert_eq!(test_documents[idx], parsed_files[idx]); -// } -// } - // #[gpui::test] // async fn test_code_context_retrieval_elixir() { // let language = elixir_lang(); @@ -722,180 +623,157 @@ async fn test_code_context_retrieval_javascript() { // } // } -// #[gpui::test] -// async fn test_code_context_retrieval_cpp() { -// let language = cpp_lang(); -// let mut retriever = CodeContextRetriever::new(); +#[gpui::test] +async fn test_code_context_retrieval_cpp() { + let language = cpp_lang(); + let mut retriever = CodeContextRetriever::new(); -// let text = " -// /** -// * @brief Main function -// * @returns 0 on exit -// */ -// int main() { return 0; } + let text = " + /** + * @brief Main function + * @returns 0 on exit + */ + int main() { return 0; } -// /** -// * This is a test comment -// */ -// class MyClass { // The class -// public: // Access specifier -// int myNum; // Attribute (int variable) -// string myString; // Attribute (string variable) -// }; + /** + * This is a test comment + */ + class MyClass { // The class + public: // Access specifier + int myNum; // Attribute (int variable) + string myString; // Attribute (string variable) + }; -// // This is a test comment -// enum Color { red, green, blue }; + // This is a test comment + enum Color { red, green, blue }; -// /** This is a preceding block comment -// * This is the second line -// */ -// struct { // Structure declaration -// int myNum; // Member (int variable) -// string myString; // Member (string variable) -// } myStructure; + /** This is a preceding block comment + * This is the second line + */ + struct { // Structure declaration + int myNum; // Member (int variable) + string myString; // Member (string variable) + } myStructure; -// /** -// * @brief Matrix class. -// */ -// template ::value || std::is_floating_point::value, -// bool>::type> -// class Matrix2 { -// std::vector> _mat; + /** + * @brief Matrix class. + */ + template ::value || std::is_floating_point::value, + bool>::type> + class Matrix2 { + std::vector> _mat; -// public: -// /** -// * @brief Constructor -// * @tparam Integer ensuring integers are being evaluated and not other -// * data types. -// * @param size denoting the size of Matrix as size x size -// */ -// template ::value, -// Integer>::type> -// explicit Matrix(const Integer size) { -// for (size_t i = 0; i < size; ++i) { -// _mat.emplace_back(std::vector(size, 0)); -// } -// } -// }" -// .unindent(); + public: + /** + * @brief Constructor + * @tparam Integer ensuring integers are being evaluated and not other + * data types. + * @param size denoting the size of Matrix as size x size + */ + template ::value, + Integer>::type> + explicit Matrix(const Integer size) { + for (size_t i = 0; i < size; ++i) { + _mat.emplace_back(std::vector(size, 0)); + } + } + }" + .unindent(); -// let parsed_files = retriever -// .parse_file(Path::new("foo.cpp"), &text, language) -// .unwrap(); + let documents = retriever.parse_file(&text, language.clone()).unwrap(); -// let test_documents = &[ -// Document { -// name: "int main".into(), -// range: 54..78, -// content: " -// The below code snippet is from file 'foo.cpp' + assert_documents_eq( + &documents, + &[ + ( + " + /** + * @brief Main function + * @returns 0 on exit + */ + int main() { return 0; }" + .unindent(), + 54, + ), + ( + " + /** + * This is a test comment + */ + class MyClass { // The class + public: // Access specifier + int myNum; // Attribute (int variable) + string myString; // Attribute (string variable) + }" + .unindent(), + 112, + ), + ( + " + // This is a test comment + enum Color { red, green, blue }" + .unindent(), + 322, + ), + ( + " + /** This is a preceding block comment + * This is the second line + */ + struct { // Structure declaration + int myNum; // Member (int variable) + string myString; // Member (string variable) + } myStructure;" + .unindent(), + 425, + ), + ( + " + /** + * @brief Matrix class. + */ + template ::value || std::is_floating_point::value, + bool>::type> + class Matrix2 { + std::vector> _mat; -// ```cpp -// /** -// * @brief Main function -// * @returns 0 on exit -// */ -// int main() { return 0; } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "class MyClass".into(), -// range: 112..295, -// content: " -// The below code snippet is from file 'foo.cpp' - -// ```cpp -// /** -// * This is a test comment -// */ -// class MyClass { // The class -// public: // Access specifier -// int myNum; // Attribute (int variable) -// string myString; // Attribute (string variable) -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "enum Color".into(), -// range: 324..355, -// content: " -// The below code snippet is from file 'foo.cpp' - -// ```cpp -// // This is a test comment -// enum Color { red, green, blue } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "struct myStructure".into(), -// range: 428..581, -// content: " -// The below code snippet is from file 'foo.cpp' - -// ```cpp -// /** This is a preceding block comment -// * This is the second line -// */ -// struct { // Structure declaration -// int myNum; // Member (int variable) -// string myString; // Member (string variable) -// } myStructure; -// ```" -// .unindent(), -// embedding: vec![], -// }, -// Document { -// name: "class Matrix2".into(), -// range: 613..1342, -// content: " -// The below code snippet is from file 'foo.cpp' - -// ```cpp -// /** -// * @brief Matrix class. -// */ -// template ::value || std::is_floating_point::value, -// bool>::type> -// class Matrix2 { -// std::vector> _mat; - -// public: -// /** -// * @brief Constructor -// * @tparam Integer ensuring integers are being evaluated and not other -// * data types. -// * @param size denoting the size of Matrix as size x size -// */ -// template ::value, -// Integer>::type> -// explicit Matrix(const Integer size) { -// for (size_t i = 0; i < size; ++i) { -// _mat.emplace_back(std::vector(size, 0)); -// } -// } -// } -// ```" -// .unindent(), -// embedding: vec![], -// }, -// ]; - -// for idx in 0..test_documents.len() { -// assert_eq!(test_documents[idx], parsed_files[idx]); -// } -// } + public: + /** + * @brief Constructor + * @tparam Integer ensuring integers are being evaluated and not other + * data types. + * @param size denoting the size of Matrix as size x size + */ + template ::value, + Integer>::type> + explicit Matrix(const Integer size) { + for (size_t i = 0; i < size; ++i) { + _mat.emplace_back(std::vector(size, 0)); + } + } + }" + .unindent(), + 612, + ), + ( + " + explicit Matrix(const Integer size) { + for (size_t i = 0; i < size; ++i) { + _mat.emplace_back(std::vector(size, 0)); + } + }" + .unindent(), + 1226, + ), + ], + ); +} #[gpui::test] fn test_dot_product(mut rng: StdRng) { From 64b252e81a020f2ccf0895c2afeaf12cff37d182 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 25 Jul 2023 12:55:01 -0600 Subject: [PATCH 041/120] A little refactor Co-Authored-By: Mikayla Maki --- crates/vim/src/vim.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index 363901d260..340da4f896 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -264,25 +264,19 @@ impl Vim { } } - fn sync_mode_indicator(cx: &mut AppContext) { - cx.spawn(|mut cx| async move { - let workspace = match cx.update(|cx| { - cx.update_active_window(|cx| { - cx.root_view() - .downcast_ref::() - .map(|workspace| workspace.downgrade()) - }) - }) { - Some(Some(workspace)) => workspace, - _ => { - return Ok(()); - } + fn sync_mode_indicator(cx: &mut WindowContext) { + let Some(workspace) = cx.root_view() + .downcast_ref::() + .map(|workspace| workspace.downgrade()) else { + return; }; + cx.spawn(|mut cx| async move { workspace.update(&mut cx, |workspace, cx| { Vim::update(cx, |vim, cx| { workspace.status_bar().update(cx, |status_bar, cx| { let current_position = status_bar.position_of_item::(); + if vim.enabled && current_position.is_none() { if vim.mode_indicator.is_none() { vim.mode_indicator = From cdceddd2cc3d21f3efd504e8b568a67535093626 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 25 Jul 2023 15:20:35 -0400 Subject: [PATCH 042/120] update semantic index tests for elixir --- .../src/semantic_index_tests.rs | 197 ++++++++---------- 1 file changed, 88 insertions(+), 109 deletions(-) diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 2ae9a06c0f..acf5a9d72b 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -486,142 +486,121 @@ async fn test_code_context_retrieval_javascript() { ) } -// #[gpui::test] -// async fn test_code_context_retrieval_elixir() { -// let language = elixir_lang(); -// let mut retriever = CodeContextRetriever::new(); +#[gpui::test] +async fn test_code_context_retrieval_elixir() { + let language = elixir_lang(); + let mut retriever = CodeContextRetriever::new(); -// let text = r#" -// defmodule File.Stream do -// @moduledoc """ -// Defines a `File.Stream` struct returned by `File.stream!/3`. + let text = r#" + defmodule File.Stream do + @moduledoc """ + Defines a `File.Stream` struct returned by `File.stream!/3`. -// The following fields are public: + The following fields are public: -// * `path` - the file path -// * `modes` - the file modes -// * `raw` - a boolean indicating if bin functions should be used -// * `line_or_bytes` - if reading should read lines or a given number of bytes -// * `node` - the node the file belongs to + * `path` - the file path + * `modes` - the file modes + * `raw` - a boolean indicating if bin functions should be used + * `line_or_bytes` - if reading should read lines or a given number of bytes + * `node` - the node the file belongs to -// """ + """ -// defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil + defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil -// @type t :: %__MODULE__{} + @type t :: %__MODULE__{} -// @doc false -// def __build__(path, modes, line_or_bytes) do -// raw = :lists.keyfind(:encoding, 1, modes) == false + @doc false + def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false -// modes = -// case raw do -// true -> -// case :lists.keyfind(:read_ahead, 1, modes) do -// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] -// {:read_ahead, _} -> [:raw | modes] -// false -> [:raw, :read_ahead | modes] -// end + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end -// false -> -// modes -// end + false -> + modes + end -// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} -// end -// "# -// .unindent(); + end"# + .unindent(); -// let parsed_files = retriever -// .parse_file(Path::new("foo.ex"), &text, language) -// .unwrap(); + let documents = retriever.parse_file(&text, language.clone()).unwrap(); -// let test_documents = &[ -// Document{ -// name: "defmodule File.Stream".into(), -// range: 0..1132, -// content: r#" -// The below code snippet is from file 'foo.ex' + assert_documents_eq( + &documents, + &[( + r#" + defmodule File.Stream do + @moduledoc """ + Defines a `File.Stream` struct returned by `File.stream!/3`. -// ```elixir -// defmodule File.Stream do -// @moduledoc """ -// Defines a `File.Stream` struct returned by `File.stream!/3`. + The following fields are public: -// The following fields are public: + * `path` - the file path + * `modes` - the file modes + * `raw` - a boolean indicating if bin functions should be used + * `line_or_bytes` - if reading should read lines or a given number of bytes + * `node` - the node the file belongs to -// * `path` - the file path -// * `modes` - the file modes -// * `raw` - a boolean indicating if bin functions should be used -// * `line_or_bytes` - if reading should read lines or a given number of bytes -// * `node` - the node the file belongs to + """ -// """ + defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil -// defstruct path: nil, modes: [], line_or_bytes: :line, raw: true, node: nil + @type t :: %__MODULE__{} -// @type t :: %__MODULE__{} + @doc false + def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false -// @doc false -// def __build__(path, modes, line_or_bytes) do -// raw = :lists.keyfind(:encoding, 1, modes) == false + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end -// modes = -// case raw do -// true -> -// case :lists.keyfind(:read_ahead, 1, modes) do -// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] -// {:read_ahead, _} -> [:raw | modes] -// false -> [:raw, :read_ahead | modes] -// end + false -> + modes + end -// false -> -// modes -// end + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} -// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} + end"# + .unindent(), + 0, + ),(r#" + @doc false + def __build__(path, modes, line_or_bytes) do + raw = :lists.keyfind(:encoding, 1, modes) == false -// end -// ```"#.unindent(), -// embedding: vec![], -// }, -// Document { -// name: "def __build__".into(), -// range: 574..1132, -// content: r#" -// The below code snippet is from file 'foo.ex' + modes = + case raw do + true -> + case :lists.keyfind(:read_ahead, 1, modes) do + {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] + {:read_ahead, _} -> [:raw | modes] + false -> [:raw, :read_ahead | modes] + end -// ```elixir -// @doc false -// def __build__(path, modes, line_or_bytes) do -// raw = :lists.keyfind(:encoding, 1, modes) == false + false -> + modes + end -// modes = -// case raw do -// true -> -// case :lists.keyfind(:read_ahead, 1, modes) do -// {:read_ahead, false} -> [:raw | :lists.keydelete(:read_ahead, 1, modes)] -// {:read_ahead, _} -> [:raw | modes] -// false -> [:raw, :read_ahead | modes] -// end + %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} -// false -> -// modes -// end - -// %File.Stream{path: path, modes: modes, raw: raw, line_or_bytes: line_or_bytes, node: node()} - -// end -// ```"# -// .unindent(), -// embedding: vec![], -// }]; - -// for idx in 0..test_documents.len() { -// assert_eq!(test_documents[idx], parsed_files[idx]); -// } -// } + end"#.unindent(), 574)], + ); +} #[gpui::test] async fn test_code_context_retrieval_cpp() { From e8210b827d8bb0871dbebf046506e12d4d6a934d Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 25 Jul 2023 15:24:27 -0400 Subject: [PATCH 043/120] move visible text to just start anchor with context lines for semantic search --- crates/search/src/project_search.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 28085f59fe..6903337e07 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -217,7 +217,7 @@ impl ProjectSearch { let matches = results .into_iter() - .map(|result| (result.buffer, vec![result.range])) + .map(|result| (result.buffer, vec![result.range.start..result.range.start])) .collect(); excerpts.stream_excerpts_with_context_lines(matches, 3, cx) From 75999204adcee661da958dd27fc3acc536d05b67 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 25 Jul 2023 16:26:37 -0400 Subject: [PATCH 044/120] update project search to only show semantic button visible with semantic_index enabled --- crates/search/src/project_search.rs | 24 ++++++++++++++++----- crates/semantic_index/src/semantic_index.rs | 6 +++++- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 6903337e07..ec9108f92c 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -996,6 +996,10 @@ impl ProjectSearchBar { SearchOption::Regex => &mut search_view.regex, }; *value = !*value; + + if value.clone() { + search_view.semantic = None; + } search_view.search(cx); }); cx.notify(); @@ -1012,6 +1016,9 @@ impl ProjectSearchBar { search_view.semantic = None; } else if let Some(semantic_index) = SemanticIndex::global(cx) { // TODO: confirm that it's ok to send this project + search_view.regex = false; + search_view.case_sensitive = false; + search_view.whole_word = false; let project = search_view.model.read(cx).project.clone(); let index_task = semantic_index.update(cx, |semantic_index, cx| { @@ -1266,9 +1273,14 @@ impl View for ProjectSearchBar { .with_child(self.render_nav_button(">", Direction::Next, cx)) .aligned(), ) - .with_child( - Flex::row() - .with_child(self.render_semantic_search_button(cx)) + .with_child({ + let row = if SemanticIndex::enabled(cx) { + Flex::row().with_child(self.render_semantic_search_button(cx)) + } else { + Flex::row() + }; + + let row = row .with_child(self.render_option_button( "Case", SearchOption::CaseSensitive, @@ -1286,8 +1298,10 @@ impl View for ProjectSearchBar { )) .contained() .with_style(theme.search.option_button_group) - .aligned(), - ) + .aligned(); + + row + }) .contained() .with_margin_bottom(row_spacing), ) diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 215ca38a28..7e8d183ba0 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -1,7 +1,7 @@ mod db; mod embedding; mod parsing; -mod semantic_index_settings; +pub mod semantic_index_settings; #[cfg(test)] mod semantic_index_tests; @@ -183,6 +183,10 @@ impl SemanticIndex { } } + pub fn enabled(cx: &AppContext) -> bool { + settings::get::(cx).enabled + } + async fn new( fs: Arc, database_url: PathBuf, From ca6f7d8a804ec486a4608cd627a7e9182f51a3c8 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 09:17:04 -0400 Subject: [PATCH 045/120] add worktree previously indexed functionality to vector db --- crates/semantic_index/src/db.rs | 17 +++++++ crates/semantic_index/src/semantic_index.rs | 53 ++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index b1e78b7aff..4bc97da0f0 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -197,6 +197,23 @@ impl VectorDatabase { Ok(()) } + pub fn worktree_previously_indexed(&self, worktree_root_path: &Path) -> Result { + let mut worktree_query = self + .db + .prepare("SELECT id FROM worktrees WHERE absolute_path = ?1")?; + let worktree_id = worktree_query + .query_row(params![worktree_root_path.to_string_lossy()], |row| { + Ok(row.get::<_, i64>(0)?) + }) + .map_err(|err| anyhow!(err)); + + if worktree_id.is_ok() { + return Ok(true); + } else { + return Ok(false); + } + } + pub fn find_or_create_worktree(&self, worktree_root_path: &Path) -> Result { // Check that the absolute path doesnt exist let mut worktree_query = self diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 7e8d183ba0..7fee09dcff 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -34,7 +34,7 @@ use util::{ ResultExt, }; -const SEMANTIC_INDEX_VERSION: usize = 5; +const SEMANTIC_INDEX_VERSION: usize = 6; const EMBEDDINGS_BATCH_SIZE: usize = 80; pub fn init( @@ -161,6 +161,10 @@ enum DbOperation { worktree_id: i64, sender: oneshot::Sender>>, }, + WorktreePreviouslyIndexed { + path: Arc, + sender: oneshot::Sender>, + }, } enum EmbeddingJob { @@ -327,6 +331,10 @@ impl SemanticIndex { let file_mtimes = db.get_file_mtimes(worktree_db_id); sender.send(file_mtimes).ok(); } + DbOperation::WorktreePreviouslyIndexed { path, sender } => { + let worktree_indexed = db.worktree_previously_indexed(path.as_ref()); + sender.send(worktree_indexed).ok(); + } } } @@ -479,6 +487,49 @@ impl SemanticIndex { async move { rx.await? } } + fn worktree_previously_indexed(&self, path: Arc) -> impl Future> { + let (tx, rx) = oneshot::channel(); + self.db_update_tx + .try_send(DbOperation::WorktreePreviouslyIndexed { path, sender: tx }) + .unwrap(); + async move { rx.await? } + } + + pub fn project_previously_indexed( + &mut self, + project: ModelHandle, + cx: &mut ModelContext, + ) -> Task> { + let worktree_scans_complete = project + .read(cx) + .worktrees(cx) + .map(|worktree| { + let scan_complete = worktree.read(cx).as_local().unwrap().scan_complete(); + async move { + scan_complete.await; + } + }) + .collect::>(); + + let worktrees_indexed_previously = project + .read(cx) + .worktrees(cx) + .map(|worktree| self.worktree_previously_indexed(worktree.read(cx).abs_path())) + .collect::>(); + + cx.spawn(|this, mut cx| async move { + futures::future::join_all(worktree_scans_complete).await; + + let worktree_indexed_previously = + futures::future::join_all(worktrees_indexed_previously).await; + + Ok(worktree_indexed_previously + .iter() + .filter(|worktree| worktree.is_ok()) + .all(|v| v.as_ref().log_err().is_some_and(|v| v.to_owned()))) + }) + } + pub fn index_project( &mut self, project: ModelHandle, From 394a105639413d83c8486ff3ccac2530f6d7dcf2 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 10:03:30 -0400 Subject: [PATCH 046/120] fix warnings --- crates/semantic_index/src/semantic_index.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 7fee09dcff..396a0a8607 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -517,7 +517,7 @@ impl SemanticIndex { .map(|worktree| self.worktree_previously_indexed(worktree.read(cx).abs_path())) .collect::>(); - cx.spawn(|this, mut cx| async move { + cx.spawn(|_, _cx| async move { futures::future::join_all(worktree_scans_complete).await; let worktree_indexed_previously = From 0b61c93a25c23487c1bb52107d9fa5cec80618cf Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 10:22:33 -0400 Subject: [PATCH 047/120] ensure semantic search is not enabled on stable --- crates/semantic_index/src/semantic_index.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index 396a0a8607..e4a307573a 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -189,6 +189,7 @@ impl SemanticIndex { pub fn enabled(cx: &AppContext) -> bool { settings::get::(cx).enabled + && *RELEASE_CHANNEL != ReleaseChannel::Stable } async fn new( From 56704c7c5f930a7840ebc00253fbda9da5476122 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 26 Jul 2023 09:37:52 -0700 Subject: [PATCH 048/120] Remove placeholders --- crates/workspace/src/pane_group.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/workspace/src/pane_group.rs b/crates/workspace/src/pane_group.rs index 22435b56f0..3d7032c148 100644 --- a/crates/workspace/src/pane_group.rs +++ b/crates/workspace/src/pane_group.rs @@ -697,7 +697,7 @@ mod element { move |drag, workspace: &mut Workspace, cx| { if drag.end { - // Clear cascading resize state + // TODO: Clear cascading resize state return; } let min_size = match axis { @@ -929,9 +929,6 @@ mod element { visible_bounds.clone(), ), ) - .on_down(MouseButton::Left, |_, _: &mut Workspace, _| { - // Save cascading resize state - }) .on_click(MouseButton::Left, { let flexes = self.flexes.clone(); move |e, v: &mut Workspace, cx| { From a58c9ed7d3b6ad8203b60e4520ddced8b3042f09 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 26 Jul 2023 09:39:35 -0700 Subject: [PATCH 049/120] fmt --- crates/gpui/src/scene/mouse_event.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/gpui/src/scene/mouse_event.rs b/crates/gpui/src/scene/mouse_event.rs index 21d3716aa6..89bf874583 100644 --- a/crates/gpui/src/scene/mouse_event.rs +++ b/crates/gpui/src/scene/mouse_event.rs @@ -32,7 +32,7 @@ pub struct MouseDrag { pub region: RectF, pub prev_mouse_position: Vector2F, pub platform_event: MouseMovedEvent, - pub end: bool + pub end: bool, } impl Deref for MouseDrag { From 9fc1ebcb5b33652eed02ffc355beabc340e41950 Mon Sep 17 00:00:00 2001 From: Derek Briggs Date: Wed, 26 Jul 2023 11:19:34 -0600 Subject: [PATCH 050/120] icon updates --- assets/icons/file_icons/ai.svg | 27 +++++++++++++++++++ assets/icons/file_icons/archive.svg | 4 +-- assets/icons/file_icons/audio.svg | 4 +-- assets/icons/file_icons/camera.svg | 2 +- assets/icons/file_icons/conversations.svg | 4 +++ assets/icons/file_icons/database.svg | 2 +- assets/icons/file_icons/file.svg | 4 +-- assets/icons/file_icons/folder.svg | 5 ++-- assets/icons/file_icons/folder_open.svg | 5 ++-- assets/icons/file_icons/git.svg | 2 +- assets/icons/file_icons/image.svg | 2 +- assets/icons/file_icons/lock.svg | 2 +- assets/icons/file_icons/magnifying_glass.svg | 3 +++ assets/icons/file_icons/notebook.svg | 6 ++--- assets/icons/file_icons/package.svg | 2 +- assets/icons/file_icons/plus.svg | 3 +++ assets/icons/file_icons/prettier.svg | 10 +++---- assets/icons/file_icons/project.svg | 5 ++++ assets/icons/file_icons/replace.svg | 11 ++++++++ assets/icons/file_icons/replace_all.svg | 5 ++++ assets/icons/file_icons/replace_next.svg | 5 ++++ assets/icons/file_icons/rust.svg | 4 +-- assets/icons/file_icons/settings.svg | 2 +- assets/icons/file_icons/toml.svg | 2 +- assets/icons/file_icons/typescript.svg | 2 +- assets/icons/file_icons/video.svg | 2 +- crates/zed/resources/app-icon-preview.png | Bin 231466 -> 191163 bytes crates/zed/resources/app-icon-preview@2x.png | Bin 757122 -> 679362 bytes 28 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 assets/icons/file_icons/ai.svg create mode 100644 assets/icons/file_icons/conversations.svg create mode 100644 assets/icons/file_icons/magnifying_glass.svg create mode 100644 assets/icons/file_icons/plus.svg create mode 100644 assets/icons/file_icons/project.svg create mode 100644 assets/icons/file_icons/replace.svg create mode 100644 assets/icons/file_icons/replace_all.svg create mode 100644 assets/icons/file_icons/replace_next.svg diff --git a/assets/icons/file_icons/ai.svg b/assets/icons/file_icons/ai.svg new file mode 100644 index 0000000000..2dc30cdf95 --- /dev/null +++ b/assets/icons/file_icons/ai.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/file_icons/archive.svg b/assets/icons/file_icons/archive.svg index 35e3dc59bd..80c76322b9 100644 --- a/assets/icons/file_icons/archive.svg +++ b/assets/icons/file_icons/archive.svg @@ -1,5 +1,5 @@ - - + + diff --git a/assets/icons/file_icons/audio.svg b/assets/icons/file_icons/audio.svg index c2275efb63..f272fd8643 100644 --- a/assets/icons/file_icons/audio.svg +++ b/assets/icons/file_icons/audio.svg @@ -1,6 +1,6 @@ - - + + diff --git a/assets/icons/file_icons/camera.svg b/assets/icons/file_icons/camera.svg index bc1993ad63..d9582a2e7b 100644 --- a/assets/icons/file_icons/camera.svg +++ b/assets/icons/file_icons/camera.svg @@ -1,4 +1,4 @@ - + diff --git a/assets/icons/file_icons/conversations.svg b/assets/icons/file_icons/conversations.svg new file mode 100644 index 0000000000..a956f8b5a1 --- /dev/null +++ b/assets/icons/file_icons/conversations.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/file_icons/database.svg b/assets/icons/file_icons/database.svg index 812d147717..d8aae1373c 100644 --- a/assets/icons/file_icons/database.svg +++ b/assets/icons/file_icons/database.svg @@ -1,5 +1,5 @@ - + diff --git a/assets/icons/file_icons/file.svg b/assets/icons/file_icons/file.svg index bfffe03684..ccacfa2ce3 100644 --- a/assets/icons/file_icons/file.svg +++ b/assets/icons/file_icons/file.svg @@ -1,5 +1,5 @@ - + - + diff --git a/assets/icons/file_icons/folder.svg b/assets/icons/file_icons/folder.svg index fd45ab1c44..208348994c 100644 --- a/assets/icons/file_icons/folder.svg +++ b/assets/icons/file_icons/folder.svg @@ -1,5 +1,4 @@ - - - + + diff --git a/assets/icons/file_icons/folder_open.svg b/assets/icons/file_icons/folder_open.svg index 55c7d51649..95f53fc9f7 100644 --- a/assets/icons/file_icons/folder_open.svg +++ b/assets/icons/file_icons/folder_open.svg @@ -1,5 +1,4 @@ - - - + + diff --git a/assets/icons/file_icons/git.svg b/assets/icons/file_icons/git.svg index a30b47fb86..45904645ca 100644 --- a/assets/icons/file_icons/git.svg +++ b/assets/icons/file_icons/git.svg @@ -1,6 +1,6 @@ - + diff --git a/assets/icons/file_icons/image.svg b/assets/icons/file_icons/image.svg index d9d5b82af1..a11941e22f 100644 --- a/assets/icons/file_icons/image.svg +++ b/assets/icons/file_icons/image.svg @@ -1,6 +1,6 @@ - + diff --git a/assets/icons/file_icons/lock.svg b/assets/icons/file_icons/lock.svg index 14fed3941a..64a6470b2f 100644 --- a/assets/icons/file_icons/lock.svg +++ b/assets/icons/file_icons/lock.svg @@ -1,6 +1,6 @@ - + diff --git a/assets/icons/file_icons/magnifying_glass.svg b/assets/icons/file_icons/magnifying_glass.svg new file mode 100644 index 0000000000..0b539adb6c --- /dev/null +++ b/assets/icons/file_icons/magnifying_glass.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/file_icons/notebook.svg b/assets/icons/file_icons/notebook.svg index 4f55ceac58..62b435c7a2 100644 --- a/assets/icons/file_icons/notebook.svg +++ b/assets/icons/file_icons/notebook.svg @@ -1,8 +1,8 @@ - + - - + + diff --git a/assets/icons/file_icons/package.svg b/assets/icons/file_icons/package.svg index a46126e3e9..2072f30b1e 100644 --- a/assets/icons/file_icons/package.svg +++ b/assets/icons/file_icons/package.svg @@ -1,4 +1,4 @@ - + diff --git a/assets/icons/file_icons/plus.svg b/assets/icons/file_icons/plus.svg new file mode 100644 index 0000000000..a54dd0ad66 --- /dev/null +++ b/assets/icons/file_icons/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/file_icons/prettier.svg b/assets/icons/file_icons/prettier.svg index 23cefe0efc..625e99b3a8 100644 --- a/assets/icons/file_icons/prettier.svg +++ b/assets/icons/file_icons/prettier.svg @@ -1,12 +1,12 @@ - - + + - + - + - + diff --git a/assets/icons/file_icons/project.svg b/assets/icons/file_icons/project.svg new file mode 100644 index 0000000000..525109db4c --- /dev/null +++ b/assets/icons/file_icons/project.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/file_icons/replace.svg b/assets/icons/file_icons/replace.svg new file mode 100644 index 0000000000..4e137dbfc5 --- /dev/null +++ b/assets/icons/file_icons/replace.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/icons/file_icons/replace_all.svg b/assets/icons/file_icons/replace_all.svg new file mode 100644 index 0000000000..0b4a0c021d --- /dev/null +++ b/assets/icons/file_icons/replace_all.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/file_icons/replace_next.svg b/assets/icons/file_icons/replace_next.svg new file mode 100644 index 0000000000..d0d343e6f4 --- /dev/null +++ b/assets/icons/file_icons/replace_next.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/file_icons/rust.svg b/assets/icons/file_icons/rust.svg index 91982b3eeb..ed015af874 100644 --- a/assets/icons/file_icons/rust.svg +++ b/assets/icons/file_icons/rust.svg @@ -1,4 +1,4 @@ - - + + diff --git a/assets/icons/file_icons/settings.svg b/assets/icons/file_icons/settings.svg index 35af7e1899..e6d35e415b 100644 --- a/assets/icons/file_icons/settings.svg +++ b/assets/icons/file_icons/settings.svg @@ -1,4 +1,4 @@ - + diff --git a/assets/icons/file_icons/toml.svg b/assets/icons/file_icons/toml.svg index 496c41e755..f2c2045cb1 100644 --- a/assets/icons/file_icons/toml.svg +++ b/assets/icons/file_icons/toml.svg @@ -1,5 +1,5 @@ - + diff --git a/assets/icons/file_icons/typescript.svg b/assets/icons/file_icons/typescript.svg index f7748a86c4..a69f0e2dee 100644 --- a/assets/icons/file_icons/typescript.svg +++ b/assets/icons/file_icons/typescript.svg @@ -1,5 +1,5 @@ - + diff --git a/assets/icons/file_icons/video.svg b/assets/icons/file_icons/video.svg index c7ebf98af6..0f196ee995 100644 --- a/assets/icons/file_icons/video.svg +++ b/assets/icons/file_icons/video.svg @@ -1,4 +1,4 @@ - + diff --git a/crates/zed/resources/app-icon-preview.png b/crates/zed/resources/app-icon-preview.png index ce2a639e2cd9c77ee5bd56bb13fe397414110c0c..b76e57885835fdb4fdba114fb812fd16f9637001 100644 GIT binary patch literal 191163 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ⅇh9)IG*){A#8$>y+^BqJ7`*RU0RA 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 YC~r9QRajM*fq{X+)78&qol`;+0GNFuoB#j- literal 231466 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�p@>&`RCl7bNQj=4*vVqC*@y#oGE%^*?uEWosDO= zZ)Q3B_@KVi#NJz%Qmt>X{S2J_D`O!O%c-k^%OC%Fe7-8+g!r`|I@??qtV|K^@qIEk z`Pt^WMXI6`qy2m?xKEetHcR{@Ah~}3m(#Z-eiY9(kN;`9IhtqB(gP)2{pG*B`9E6A z-42uTcAc)ePo9-$w3A2mCp+<+Id(JRw&un*UU{$U z@?Vaq?KfLly**Rq@O|BtTT;$DZ7JP1o$;FGm&NLzw`@Af(5gM(BlgNvTbFmQTCVD^ z&a+)#pxAx;lFFT*{MTLzi4+=!G(KsxY+ShdYGd)1&nkzP2Ds+^=uS+Xx}^C5-x&sn z*1)6w3d#rdGFCNcr-_!W3go)qdgJM79?P`{zQ{4&3w{~&X5L8)4`t4rUk8i~40eCm ztH}G&PCELCWq8~krb`+dyCdCh-(G*>=)IW9YMdphZtE*Po;j*rQu*Y8Z*7ue*y-18 z^&Qv0)u@$8#{Ky=;dx;B$=uKt;Wrl7bF7Vb`1^d%=SOm7XLnq_mU*YSK4P`1eB6(D zo!kBIERs<^Ecuw5LHBajv(C~z%Z@zIW;U?9d?u?W&eJ)3vlqu^uk&+6{Nx&rls%fd zVbTA0+y5`;I+}euT%l}YPsyLPnj!~o)&AuF-?}ME{d4Bdxl=oLEO{JO>t-?ct&+QA z{nfQ<_9-p#ij)6e+}iywkzx6ZodHW)&tJK><4fEn&6rP)UpudBzC9t#?dM~1uKSv5 zM%e0Gbsr=QJ`1@`n|R*#pR426DQliy_mf! z%8##aObuQWm|{@1QCG3KQBr7u;g;;YfBv=Kq-UGQ{oU$#{VC7Auk*jmQZ7C4lxyn) zjZbOLSB3BUus(BR<=wom-!j*)@B5YCSGV3+6r-?yqK@HT%SU^v+RZFyui21x?)6QU z<9+kD^6fX%G@5@p@X4(36FQgTjaaT%9Q`?Qs{4_s4VO($xSX?O+p*@ILvt}-1jFhS zYwP1d{s$)5`6~UY>6{op$^Yl?wzb+fkDU4S*!JzwFPD8Tvp>5y_2-o&*5&?w^68Ux z_f7_Bc zYiHJnUvpoqncSuA9@#Hy^p3l14bR4=!h$=DQVbV(zN`=OIqb+elV4jQ*_TFuga&g7B4V5W;u$ghnDy0(Xe%u`zUvdvLY zI^?!k#Pox4_D@;XS{=`N^D1$fg42uRp7&?nJJZo3cJK7bg{!`JxZTdJ>rh+c={Y|= zdc_olw0|2rU+n#=Zm=WN>RD)bxx7`1&2RUAOeuHgN7~CK@6bJ1;c#I+^OPl%e=*$A zaSayazG&BIWj%jIykgC#>?q!cKh?c&@BY>DzPx2+RjXl{*`06C+f)=Z-Z;d!GT+HL zH|O`8XB(#fa%O(a{(et}*n7o>yE7X*ZcP8e5%+hE$Gg%;6V3EF*8j{p=qlS4`fOI6 zpkYIE*rt0GQ;V7QO`OVbTRAH1g@(Mx)AWxsJL+zzwXBN!#PnKw^GDxJU%qyf+_!(F ze&&Q*e@obbdyB$UI#OLbjMC#^V)0}ZJ;N=I6l`Pxl3HI7H#O`Pl&g5=1-m&nEa(=>@B_&b; zyB?VD_AZ^lP_ch^vjIba=E^(AZkTvGYTA_hX{my|ov<{QO-j6eHCpaOrjW@^@EO z-e3x_JSuWC6#k$3d1=i-yT~Y1yKtD_J_ecMK3(p=ckH3&HuXln-%5sL?ySP2#1d|sl ze|tQs-jg>cX!aNL#tbFiC6+sQ*lpkKzW-1D?e@QYZ+1p(YjsUpe7)q*|21j<4p05_ zajUH~=Y9d3T@Rima!<|6XmxMPT^g{eIc?hBTWp#<>ztL^JHl5pK+gi$SM^giSL}CS z2Fp^vFN>KxZXdgMq2$et$hVpmcd{Xo!5w5>~@6O7PrRN1MW?Cv8I`U?# z!>&1xUX)xE-S_a@_3jUTTVH)y_oHlUm0gGw!d51Q3U)dmZ zd@ZV5^y&73&kL|D47*J~H|}>HlH(>&2;>+yJW+^K&j9 zc{gog`p>9TXQ_DJp1P;UEh-ImP7>waGC^!_l=ksg2NteMX8UnyRl_Mirs`zV*%LN9 zS+D$7{X&6ot^{QmPjzr12%pm6-{vORTy|FtNy6br_I5>XI^jkR7v@^S@#-~9cOxiSM9!|IN`O4$^GJ6 zZ~diC`Q&@Gtg{w06bXCzNylwU)6YN_pL1(0znW|FrU<*%mNU)HN+Z=Xo8 z{QtMSBJWfsXXdl^FOnHC_rz{wX#VG}+V(5fQ6=<$oUMaWnPk+hoZ#DPm_a9or z@z=L-hK8zn*n2 z&lXTfxb$w4zZ{pEnI&&txAo&SQ*3{0%51mGD2O>5l6Z83ufnEd-v5PWNo$up3{sFT z7Jd4rUwKvkj>+ohG7tRzyy@BR>#S%mEPE&T=wXMcOS#G&;O6lD~+4D@8bE&3q6bhTUdQ!ehEewEJ+OS z*S(d4ph?)5Pap{Hg4^WnGVIU-%wBn-#%~g$KOM_Wfs>-Mevy&kQ$H ztHg`T4^5Lz%c}CuXBEwq*;jY<;jyq8&F{~xf1Ic%myxqR_=%hGPw(En%iftT(yNjw1be|L3zU9P|tWDP(_q}@mGym_` zQ}Gq=OP5q{t>$(1-IHkZx&NA0@=LFMoKY`lUQ@Xe<|i+BNVN9BraK>(BuKZ5F7Tdy z)G7Rvpy?ZqdO7ZcuAj{r1y6gF+{%p=ak%|hVbjD}sc*$D2GpG1>h9xXx`M-I%7XXr zTeeSF)O}M))u3`?!i$Z9U8nuR80P(WbDnF{66ZB%eniIk&s_Ru&qe+S&*|x=eZ?F3 z*1hmL6LnBCL1^7vd)M?wX$@OG@Y{d8W1|&Quu1IgiH)%rqS(&Q-Z<5<=Tzp6T(7`~ zD-J)+nWwkwqS=|EHQ@q352Rbo3ZHPb%$V7@(0jY<#-dj7iANVp7sbC(Jr%ltVROV$ zZ}FJIX8{5>0vuE1mewZn+p!q)G(P1_nLfo#KJ&=GCcST4{AO@If9`qjLZib2ZQc!k z-}9Z~YEa|Su{B(Lm0i_rj_Eb&-rp6riM;hT(deg=lQ}@-#W|+dwG}nv2C4Ixz6IO1n*k$ z`Su^yTuKo;=Cf(~ywbYeuXR`Ze65O?Zn$qHb57^%H0|D%-4|tLXG#9tEoE8SFKSY< z=~Jp<+LNG-mxQAu8J-27)tY?Gf7X)|=NcX`x2>Q5Z|}<~(g~kCBr1KcueO+?|9+{p z`Ib4quW47we3&`^?w-G|?wg;nzAD*b@a*M5kC#u~cJDl`Q{iqN9d`Ld;nHYP{Yr+8 z-Z|>WCT+5pQjI+0bzHM}M(b;p8~*2>3SL-vws-dQl0|pQ$mB)2uCYk!&ImNoA;^Ze=#)37Twr@fYpKxJIHNM=UV0Ql7v9OP;>bK>vlrL+~ zxgVd&$A0){Yw4+ZZKv()->Qpwyz*7QReD0yC8B1=6SeJ!+Qb)e+*x?p{E>sA$GKTA zuAW`Y7rJlyc|l$tchybIEB=>yuFhB_zeO_f)BOj+cf5-Nw#1Y;+RypIFu6wm?(Dpy z)3-b`ul(S-`Gbpe{-<|lY00d(PjZQJF_@Q>Gu|9+Z%?$9z%t0mo$6TZ5& zrxzT#>uD;=s<`+2#;a>g5;U}AH`Tm;#=j>wYj&gKJsYtF-j~;Y)c^Nn{`TG*lHF3$ z|E4*s-_HwStXQG{bP@mE&(BLt?@1{we>!uyOSSp#Q_|5VEFbxGJmy$9XVaG6wI9+B zG&UTWd;i7qxLbTrp001_m=;@hK16Y04DW%-eFxmF=KjzN4M_;r$&*^XGBxz~iMD;$ z1fn;tXZOjrJ8kCjGPmZ`J^B3W)#LZk?r#>>Ezg@&H~Z0(wMD9)nJ!6T`WrTzbWGbIUwoB; zDe87Or`vwVuIdR7OOj%5Yy9$K&eW>9-K+7`cJ)M0_um(#qkb*i`6}R40K-Jv%d80! zU-{E#PFTPm^_Sn4X`bzW*SVD+cW)D!w`8}(n@+*{!n6GW|0h;F5iWL{F#SpCFa5(T z?mnK|Oe)%6|1o5}VC%*H@E^C#48{g4L9dAaJ0(jRgCefRtSSi-tY}>`zgTkNr++gd zThdI=JaAW34&J!bN`>cusLj;GFcq_vh2QpY7VYTL;fO2J@e$8s`<3p@Yo8|c=fUd@ zs@=z?#>^;@|va63w({&nOJCTPt5_BYc+4 z`;)}6Pu^T#j{m61UE2HQ&pq@1Q5(K*6tyY(eA|!RC%SU=kLg*@@@J<=mg=VFi#qce zrX1^e*OOUS!1wvmOm>y3#fv6)So@u_D>K=*!sqzsTC;^!Q=L~QZWDJp?Gt_Ca~#7; z_m2~WTH8++|IG+`^-p>6kJx@6^Yo>)0ezqKj%Aq5tJPFdGPh(&ad2eXHCHHYv*^=& z(I@dQokWbfCvz;b@|*DI%{OMc zXHT-rU)G-Y{#TpVzl89hY(Y_f%|v~xOzStj4^NkUk>1>A*}39dzr@2O?OU{DpK|o? zHEBu>HF|pdmEg8Bq8$dN_S*S-<~`rRt!lL(>FLGw*DYlqKE7%7;o0%!vFY~L_Q*~w z;(4~fB&^J$;f(!zZv{oo?RwrPP6{ud*fHm|#LIBYNncNVS;g>o#lM){rUwqXy(#GX z!IV1ZVbj*V0yCFze%o0eAjcRmN6Sf6n{}noCnL#L=b8`)F55n(bK4&?uYBas&eVAz zL_lA8wmerFPnFJr-v@LoU+3=->nXC#J$@_Z>i6C9HlKxOpO)W~)L|~c`S_TMhneeB zkqvnbCJ*?O+1YJRml)bv?c7*;bnjX78?m1+^4gug^I_TIqj{I)B)`d;vrg|Q)0n>2 zh9zaAXSBvL8!MYR-V8hEvftQp-1IC<_Rl(6iq&D|JrLScdTtuZu^ZtA2?4iX!K7ASy$5FR3_P; z-p)-GlI^kox-w%gYr)@7!OqjaPLuf(WWV?E?Xn|om#4%&F(}y<78jWy@!-be>_bPN z>lih@`gP#NvBlC7rFV_JS_`)XzFCkX`C;3cJ1f%fI?5Pu{B6|W_`12aUGJsoN%h(% zdS6d@|C8U$wa8xf=j^halZ%$yg+?sgF(qGrZMoHCzG)M(cSbN2Sh||bx#2gr^1;LN zuRdOTFMWb{+LsSEn*R9i73%tRRKc|~k&*TG?tK@(CrrD&@xdK~&k<+#&U?CajZ3@e zqSooh#cKW97fo99&%2pz{whr?{uLLG`~6k9U6!cvg;9)2`c2v$GqE{a)caee`}ob? zlGyazBJ1mlyK&w^adt0Q{TuEHtmdc{|8zU7-lg}?#l@VD*N89Mb~>w8@&7O559RN_ zIaojSu#J*E{Wo$d!+B>B%UGKg!3*qn_vqHFvt(J_@>kl?&DlqIDs%+`*x{qvfSUje>VW+wMdz{&g>7J|;HXadAx-%ssrL{qVJqA6}p0Ijo^5 zs2#qfQ{eRfZEf4+@0%&bBx+B3E|$|eE&R}$^O?d2UhSB1-tcu+)N|Dmq3m{xi%}*9 zpT)9HW@i-K*wAJzciXG}qSEV0=lmXMq=qq{xo>&#m%G=b>)Dn$lEP`7YfLo%?Y;jm zUbpyK`wjMj)|npDw@v(!Ret$j^#5D>GekbS&kT#Q@{F5j8mf1WTk-7WEl!N*&reib z?@^Mx#CVQTSXKK&hW)1kZ&g1NoAu(QJ9~SH@Xs0P`?>i`WY`UmJ06_kFMz#74}b2J{nv9uEoVTK3=ZKo%)VnWQv_pk=?_TW0zFy>B z(DI__^{0x6@sEL~J?Z0{dv~zD? z-(cD|=W1hiL_n*0Qp}3qY}fZ}Opg}ZIE^(nHU4R##qVeLU*0!U|D>~6pm%wUhHguh zWZaSqs<}UoEMC0+!HL2N?<^KZewGzEzczIHn|FuvYfYQo*@fC;3{y?HM6ab7UQjr7 zOWG&)DBsUJIvL@6&%Cud-ped^(M8N;<>5Z>1%gc)C?`E~mcH8x% z%;U#au7w8DjFq_}R%sW`F`g{C=eqdt6WRV18?5+pU4MHjn^yFn7Y#82PLEEkUL&Cq_wvZK58V#`cWOA?T6^DN`}eOd z4hx>BuJ*JMdn{9%_RLaKIOfNMjzpKp+E2?@@N&=lbJ42l>ZcdS*854nf1;vt>CC0# zVt4laE0s1ysV{w2H7&(jUa6O*@nP|)>wlfw>YFxdJ($WEdBjrJ`c!%2&*?m;g0z>` zcpJT>-!ADyHqPcu)w@iG!h2YkC+-a7+r<(Q#LQ=zcunz;)IV+U_^X@uy05V} zTKOt#k1uHxr`M)Tx&=)%=-{AYhnhw zulk|QM^;J6DKuW5pDp9N-kuSOMxxPQ>`HIgQp1wb8uW>6aW80&HIef*-Haoxm_zb~sAR11zxytHK6KLcT= zFog-PQ;ilH6U)AyXq2=1@_b`&-owv^6F0=|b&~r#t>$&N5zCY~rm5~r;y-n4%RORjp|Rt~ zPiu{L2W*%ET*FotG@tSexg+s6=CtZjV+~vObw%&Ecoe24EpXde6{1r!Pdn&=LHI-S z$&U^$7czQu#PC)8-BtWMmU^)D-Z$)2=b7`Db!D7MU9XAjA#L}cS606H__-`_)uqc7 zz6q9@SJK4%=Sk+9srQ^#XxwwK*G+5Ji%pE@xOGmcdARNV{3bW;)`dySf8;IUx)`wW z@8WJG+E2^x*=G6wN4VMhza5WrzIz>sV~c)O z7a2IQF0Ji@uXyy1pX&b=xpOY5xD=Y5dTMa$d)&NfSB=(O&Jxx7I$4e3k?=JuXa4`T z7Kc6JK9#Le@sRnlV_R|ecHWMzU2Ti4uLR~@_!PfiAozZ!`5K9-u_--=&Zb*EVye#3 z__vKUrajsEtMTby&zSukZ2m=>Oe}kG@S+~`@_To82J?Kf`g^68?aPJVqV^Xj``>uK z>%m9u^If_7^4HmLKT9k9`boO#ZXf^KJ*l=!rhkdpp0{FOXZL${`jVaGN1#5d{jQ&=z zdYd%9m?|cpa_rRdxQ%RXwGV!a)HVuKzq8^9%OndoK z;g2GZ)N(6<(~a)`b)L7n`8s=N@BA5^`0}#gLUX-WJ`KxNrFJaonr_u{J}-NkWVBwd zaOIspD`#Bz`7B?0<8r&>t1PzMWUW2E@2$|^Y5LW7CtRHo>7{b_PZGnCq8UriO%}eJ zaplgB+RyP?Rpl%bj%)dyPRe|<rOsrkh%Q* zjb(55pBLvE7;n3tog<-f$3p+VL68-1}zuO!ro}d~E9dZzA6IVjCEn z7T(todTcU@f8ygZMTv_4r*1siy0gWR&HUe)jE8q-|MO@z+QbogJs@sXZ-CrJCe_N5 z{~5w(N+jFPdU@|L%c6O$`!~3ny`J5f!(=|&uPSZ(u9udXF_-d+7yHW>K9=fdo~Ls= zXtA}r&E;tu;(yKmA9r#B$MbGorNy6a8%fEs#{Vh5|4%nx$R;X(lh5og_x_z-on`$* zk~915ohM6|*FSMuI$M;n-fqq=yPzKd#&?XY=!cbm^sgNpFm$w(|T^{krm(;B({sj~CmmVrRO>zwSiL>)HfET6wJ~63xcl#JabV48(_L|xArUN(>0S9rUGnR{JDx8+yWuPX{B z=C&LW*u648D}QF-#EizKfR}gFVjifT`4!!Mp=_dH#=|$F{i$Mm4$tjl^Y&ZQu)JZX z_!PDcMZMl@7Ckt^yzb*$=kPV}PRPvj>MtnCeeAs~mGhY7M}^8`&!f*x;Ab{kCX-Ua z^MC34KfKqO%O|CJU*}G!j(z;?SM|$TSGV)HUwZ3UZokvHex=Mu-GdVLxx41inJQCr zoAdUDgo%m2gl>Pz`K;yfaN1^ep0tJqk|md>*KPRlVol%1%vo~xzfFzpb>9%V!=qny z>W&Y5D_-uHQM6F<*~HvG3ncB+Hg>&kdue}IQFGR%Qwj~ejm&yB+T4AYjc>gRTBY&v z+-VI~jqTI@7F_QCV7S35&C+Gt#WLsh_cQlCuX}y$_r|R`o9iy#W?K`V+f;d$+P8?F@byA7iBWmcna8|fMvi9GptC#U`hC6=jYPXWKnyeYd!4mqb zS8>k{cDX92)m4$b2|<_4^f*nvPTSgXgULb3A-${Ae^DZLO4$CWsHSaCW@g;ldpzyP zoAB}kHijOl>L(V`FQYb0F`a7E*DJFp{M75z*y=yKI<|uY2YmKXGPS_qtLO$CEF4 z=R6ZVTcN{{P*|sSs@Uh^nVXwiPTs4Vw`W4M{YTf>h0F*4E!qBfO`Srwd%zY^uZ6oN zx_T_1t@?&<@zSm&(}TMv8cqCgrl@G+^;dG6X3XV_)D8G%(*ISn>Ahn^%`3&P7Y!a8 zdF-hBntS!&d6BtCrb+&PSpTJaqu|p}HO2zfg$nOV6C!@?FMC=V{4=)V?7qmg){D+& zY?-}mXXRVlcHLF)=4}a{DK4-t-2K6W|J3Yx^^+ zzq4-1_7i$C-R`J!URc;!@y?B>zb<^UP^T0E`RA(yBz%%TMwWhg zzE1R>Wu4pVW*aGyW0H!|+Kqdq9Pi}1h2)%j4LV&wFU&MzYeMMatrPBDNzO=lx+q?I ze$>e$d9RKaG>iUi{I*?&?JOe)XxQ!4itaNHvtyYS%67}lqipaXiqWj)Rc+;Ig#>%~KcSoK3S0gq3>?~1juAr5Ut!q<~7bg^6 z+$Ji%(Oh_?aNh5Qvb`4$9a&!O6seoz6zu2SueW!O%A`FfC!{`!^u4fgYW|akmhCP@ zJmOZ%)ee>B{{7MW(?Q<#V_!XE?{(E}ht;(H)~^U>KL6_KfuS0SeRBD%^`c&ExMH9HG)wR`XS`eM_g z!vg0{^6tM?w5<{S{2tWo&4Z7(-->Y4i&-ZdpBBFnfucJy8hjoYW~N9;pYRr*h{B^ zZ{9NFTu{H&@Z*slL7|jGau?F;3U^1{V}G^nlK1)4v`_CYJX2oFb4yM_V7hm#VdK&- z0bfqF$ov1;*?5B8c+Xkg_)T;EFScWFh78|@9$ySq*h-yK*bXdI*n7~A zDMv5vKbym^CR3GHqCSUta*lrH>HG5V+a-(CRBfA|FK_*lezrqcOZu~_K^ptq{E5C* zmbJRo{7SyR6*3w$*Dg@8Hk0pRlj;qg^{wp#c9|wV&MlC2g6{-j|)w?uv7DG_<&7 zCEa>-v2X91eM`Qn+}u26(*6^Nj}VP4Uf6ir<-n#Rb7a)_^HrbsTf%v} ziPb~u+pSAcSA{j?pE25;-0>v!n_uArsp=-Z*owekYb?b}EN*+~XP(lrU8zvN^?lZy z+x*>L5zJlI_tyBx`$TP-wX#;=Us+eOhJ#bchWyjtnJ%*N#V1d#TQ8Goyeg+e{;GD| zvYYp(Hybm&5DLAR>O4WK?7Gm;H)3C(*JxJ!&9D&o;a_;2{r63i=Z~%jW$n|Q`^rJJ z|H50R<&76aj_+Q=@mb&c$KIU*3UY=rw%-CC-e9QkiJ7DsGmUFAXW{b?oo5Yoy%m)g zeMmm+GkH}RZ^9fiKjmhZ{TE+o%UPbC@AYnmUfi@R2ac@su(&rR)!9sa)9lLXp8+mB z8c7nT{v=oORo`NJQn`3e#_eTXEoxG=dslqE*gx0e@o~<75gyA!duFt(JNckS+c3T-8)h&#rxV4);<5iex-5RJ$-CorY&GC zAh0gy*6J@J0<)e3YA(_{Q7Wah{E^bjEea(UwlGbZeLe2OQtJsbHn9e&SZ!P2{B7I5 zNsr7f2z~z{;+=m?Xq9I)U)@a2)sjAow%5OWK9}{0yvUX1iyF=qO};B$X-?Zpos ziq?O+BTEdAv$?0eblPXm{K+!D^b_VNV=(y!!dQ zKFV+Y-!pgT*!!`bzxi?99hI}KUW(QV@#giWYWw95PZE=D(6SBftGMGU z`?~tmjmU#vz8zS5dZVtJgnYBe5xqMbf*C}nDSPgiE1dq9&1vzj!zPQRt_GU2B>X)k z-+OlM@;{HI)+G3sxP1GVy!`Xpca!e-md?mHy6EV1p2>xVyP1Be^B3NDl5o-P-^qHn z^)8u_S5lLNgnxX@urN#i8g^i!>|E8nKrQZ*KfbO1e>LG^_$I~#X+49C_eYy|%lB6% zFH4OGJQ5nkCBxdRc6ZvMNwzI^ANQ}a1LyPKt&pob^0Ic4_f7@#Cr2J|izujT z&9nLW;@PpU<$n&!KW7dRn_pzR(5yDvJlbsUJT1W`uZ}SHcTAdU5O?*oO4BciYb%$h zMy)-NzNOK?+~v}=P?o$qH;o1EsxJK$>~qQ6?!%cm`RoY_%!d0;oQ!7LUbdc7rCPOr zs{OeK%loaCZ06bE;(t=rLDln+N;hN2%Z)O#ABIK1al`4U&| z$xf8NXxAVs>r?VQ(N^v2K6dR1d?xo_`>l|7;*SsS@q2ShKq+iZ%|`Za!#__xUgml! zc;+mBsj6>^>x;Q;ybA464}ZPgU@hay_tD{A_Vv1EnHh`+uJYHfU_8+0zQxXZPErti zgZD+fsSXX18^74C*0P#eJMQ z-BqEJ4j#YCAAdcW?d&$USy9C*w*QXE--@|#uQ4{apz5b}-nh;CO0sq`ZjZBAq@U@?QglGOa!El;?O`!HW{y+sdzA$YlZ}OS zmYLfpzNp z<^P16z525AeEzzXYcIsf{k`I!tGEAiuEpC$JGWjr>!i5V`x-wj^Ll@0vnJZb@rPJJ$iY`2G$ZjZb%lF;0K3wgr_y&(DVshnIyaFyiuHUg@#wwLFyB2N;Vk%-S z50LKu*j^W@FFR*H6FakvOzm`6){Gf5PT5=BtCMB86D+i9#;@mX{;6TAp=)34n!shG zEu-pN&7s13##M_=>u{oCW`|yNX-0_49PK6d%u13?RW?i$X}$QmZH?-lhXRU?GMrUj zs~N(-EL13)d+*>gvn@H3*k;;GFWt4OV`96ns#YCik~VYyy=H-^(`Mx-SAfv&8as3y|V)^Et)4#QU#)LbU4Ets;`fYfdCpa?m z7)K-9^SbjkYo2~tV`JnlXQjW9Q~Ku0^U=anA}@8zxRx+33%QnXsNk`by}~Q?$d!}q z{-!2~&RO~*>GzZ7{=YwVd=oa2yUQkiu9C^F($d1C{mzPDk9-xz<()xU3p!)nG+um? z{T7iQ=C?;{$-nGfC(gOwVYxc5d)^nHS$}13t!HkiE{dHR_Vl`OooL{SO>C=`_L zJ+R*Fsy6Ep%jZ(F`b~G2m=-%faq~-`d~BiXKgDIt9h+WEI{&yeFN#%&@v6~OuGup@ zv+pi+^=O*I((1+%x=?XK)@4gwsRdik_(@mHh-5ujX(>?sGh3;>_o}Mzig4ox-`i|1 z6g9K&T&pwVL5{$s)xu_eMl~Lut_it!H%SKCZAf3lD;;?DpZ@ET1MTNtp3Z!~e^2k~ zFNr+Hi@rX)|J3M7Ps2>NH^*7${d_fFQPfets!z^tY2SyAH0J3o*^w!3?cJ_VI~M;_ zY`;0-yOGYOhWymzi0$jET_=~HN}qTB)7O&^|7~oN(tLWZ`e*98(}$j_d200=Ki|K= zH~jwWl5HD0MAu!~Dskh@vEC(*n%%3`?z$AYO?4>jS*0B;&YUi4 zYEV}aZc}$h{bJ46jjL}>+aY9{pgiG0cwJ4_I-J|Tr>NUTJ_g{37N_#>-APWzjd%hpu}j3} z|2%rR>TgAa;IGmIZuh6nPhL*EJ@@v@*U|h__CD%7w{v2lHScfJvII7Ub+Or+A*~DF zeZW2W zHopluqr3Qn8IK%~$FiQP=d<@ee9&s9FaGLzh^We>u091GxeBH{iwz4xW(epSIkHas z7MSD8cI{QIsK5>e_r2|{fAzhr57@rs?=iaek2kR5!|H=drH7;su`G_ud_9vr*5+R0 zIc>K|t}|1g>TX*7t>UDmxxe6gK4rm%?D_)}4%UA(3KDa$~jzhSbfUmNA)oEp(*n>}EcmJ8j&gkHqvdejP_`Lto7u)^* zX1rLt{qKjI_=8{9TeIK)qilO*+rlQf2UB?-%&lXM;;YM>6uC^sJeW=7(9h>B2Yu$$ zx2W2DT)VtrnL>=0bk7+v)!#B(R|zEe9|^C?(w_TZw%dZhW4(TITX{U%*K#eqB^Jr^ z%lAQ~W=UVvzTPf9ZsX~Xn~zVLEIs$!G0xPPvt(|&^76`fr6_A{v-)o>Yq(&>hX)t( zC46;)dLAY%XZRGww?V^n+U)n0g? zI`G1?gzWay{PEZ8f9=2W|Ji2#*;hHz1t%tRySy*r?)>>P;*#jv1qY1lxVD|i^ghX$ zVCk#WkgI#Mh28G$B_kD^udCl?%8DLuHjO(O!V<2+7wnLI=fK};O9O3&U5a<#%5Ipa zyLy6+Qg~zK;^3^ttnC87zVoEKeX`T=`=_lL?(T~>J^gBXV`pXa!avRa9v34u&#YeY zCri%F-Qh)MN6$I`c~wQl&fd+N)J%45QZBz<=D@A0w_e#QLj22SqsI4=&$~h_zA=fk zTJcVr`zN5vWH(d&`tEH9<}&ow&AjN@Wo5MHW$&aCw>Z~`oa57MgnL-rZf}`hcUa*< zOyluW-z-HphQ&YlxH2tjS>2P&(go{x@cep~&&T;f+U@>@+wA+VzddUEd1}3*idmCP z&7 zukzqDzHs9pkG7Ge?WA43IxnpA*ZPTn+VoIYzsPChY4^+{vuDoINJ&adh!FIS$lV|_ zZ~p7jj>C0kv!9l0$w(Lce0Jom*7g*ePm3?Ujo_V9{Jyb(OZDsT3E`_wCB5{GRp{r- z*W2@R_Uz?$pO>5E@B3B0XUX}+t4_SG2`Jg|BJt(_zw))wuY`}A$!tzMwB@#4ZJ(t2 z{Dn^iRkRh$?T_*O*s)4oaBu#+NufzG3w;DPPP<95|&@&2^}x}U1l=6u^5>-A5r z;ncLNGoS2m-EQJO$vh!jAkgzk;neR!oN@s@(*11W(J!^_uD!83{mN3*bk-}ceVQBN zVnyWpEp|-WHYcL1O^73N^UeOJTA|Au?F5=PIbGc{_jsqWuX*<*rSlCZJpYB?^zEvZ zpH)8Z?>rGZmUlvr6F6mSPo|leF4^NgJ9=aH?rAogC0h=il@C=gW;m+axin8IUH`q~ z)vIl5y!JRhxY02E?vlI@CRUD{*PIYPrP6;rtKzXkeYpLfeUD!(I()?JMR9|xsn(Cb z-dEeg)|8!CuyCich&`|1-pHo&(JT`+cBGjp?+xpSmDv@%-h1kijE9nn?kdlxx&^cy z4+x%S`Y3(pG_5ObypMg3PpY(PZjzp5u+v%N=jE5Ihl=BEUr!av`;%e6E_~^ZpN}&- zUe*Yi1x&wq((J+U9~Wx>W!IZUTvBbrTY-`TV-YaBr zd*QjuUtLR=?YvPdwD!~9#HkUHS79XUC!T*i?Z9NUZS z6q@&UP1tVp`uNdncS1Z5S3JA*Qz!0HqhDO&7TsNn3SC7`e9irLxA}MI{=L?tmSg#T}JBTnzSpEkkme#yO>x9@Z1{&&v5Y$v++b^gk!%s29WFYa7D|9AYAP5Up; zC=vYjz@y5>L1^J?(M;v_Z$3&K2<&7DFqxrq{pZ7cSB|0=dbjfG(*##u&M@-~i+rrc|LE2~(JnWg^-^)#%hJs1Q;tlUs=uk>xM9l# zZHHGk8fTj8U*7KZuI}rOlS>Uk!?F_g{j3g|doE*1_O)eKoRvcYkJxa}72w@u^^cW# zp*D-?DbXAcF>cw$4XP(ZC%3uB*qhq^=XiMMM8)}Q8)K@b+w3TdwH3cOZMtBIR7j2~)uoA@ zoPKIE$3@W!v(~UBMJ90=o#4;wd!bZ0QQG!l#Nn`%4X=YvvUF{(S;u`x zR=_-_#d}xhhri0ROe!uc=d&wYQg^xX*E54w@##OZ7=(5T=oltD*%gXOcOKVF@ zOJ8Ek+__BjKuww}-?Lf$9gFgmr|NTkZlAmE{-pGzV6`VE9esN|ew}i7wYM^rd3N?) zw?y~)ieNdxX9u@Eot_uuF!$TpJwK0}Ud*`k<(9aIwat-&Vb5SILsNf9`FUCF@^lM9;bArNfo0!f4sL z*sZzeo%F%&!jm*oI~M*B+j=IwW1teB9vtL)|PUs5;I&93Y1)e5+KLf71PmA27Fzd43U{_acJv4eIW4h?^cDR?$3+g>^f|ebKum0D$=)XiDccmMP|)nDgi%`6q?+|+DW%gp@$IQ7_}+Jjqmb*!`Y zb9Iqd%z2k{yR7d8gGOWi`&SK;yYCpZIkIl``En}o-M!d#215Bib6Q&>FSRqxc3zwD z@@b&Zx#bpB(<|OEnq{UR`I_w-vLm`HKZ3V-o&x9buGzP^9`WYePO<3kZCNEKyeZ7q zPTP6&#X_}~jGG@^ch8<(ErdfDhUy>n65 z^Nj&NBytYV<}KS2%Ue0s?U%@_s~_jKZ+ZA`irnNcj&>(BWG5}v+5GyO?~%lV)i>wz zZ~e4UF~(lYD)PS11cSr1iW$Mn_Z|zcv3G6rj>LgC- zG*@-n!4q&{_S~1V6$*ZvC(7A|Y~I>YTX%BT?SDQjOHJp#f8W5g?7?5{E>EAr)h)i3 znY%wQpY-L4$TOKNz0dB!5u1)h@213kIMALKv2f!1)Ez6@PL(JaHFKRPxz{5ycja$U zzR9WLUq8fLl+C_9*9pW9Cuq?G$7%(ac3BPO)CVBxjd^~HX%CtCM(c+a@)etsXz z=L5CA+g~d2p3D7b5|vZ)v~~Z}KkWPOedwx=G()^wq3Z!(lvK!)V$Apw&%(d=d3?_?Z*aZx$CEL+AF4iYCo`f>%!T3 zvubn~e!6&n-N8QX{@7{T)OEHk?|iF&OfcN!S9Bd?w0*+#*ay?}B@}iW9cY$g+_^IT zr^9;hTWwFc&Hua4|5aspq?zxydfh|aw~kg~C(dNszFQ?{VYw*#W~k+o)E_*HPAJH6 z@<^+0JzLuJJxh`ISMJlN(_F7eztPlG%9$Je^Yq#EuaaM9*6cXkzvjg1317Dd-Uxd5 zsjNgQ-fp_jPq7WcDGnbk4hkg1*BH-OE*W++xc*HbmoK+(^o=jN{V@@*9%Su4{n+m9 ze%Cj}{}-%bs3<#drtzloQLn2n*4tlPacsr*sDSXk$e%`^&Kf(iEV*`Jq5_ZA^;Vbk zjogB#8g>Q?^VqX5;-ZdBujz7Q1}C2#3c< zCEt2?@WxhLeE)pTDeai$(|sLtIGn_c{a)xe9-I8`p2-zyzO}+EQeV%1GTO)^v8l;P zrrq*n%NdW%oSqGfoj2!&Mb9}n`Q26V|Jxj1EW4cT$?@wW->zqoE9X^y6HjVxJQ2KH zD=N%!&UvnMx6Y-W!At9Asq)M|dSJP7&;?fQ`#`u=ZDy7Xa39;yT4_wwr|q> zgNI&Z=e9jETbXjyWOjwi@ipJhRB{{?Is5d%%ihw9K{vJkMd-iiQeaiq)tH&#_v7`F z8+IxQeHq&{g`Ib1E1M*z>SbEHcE@;D0NKL_|zOPcq^|pb^hto zx!lQ#nu}Z0_*vHdHgliG{mCbHe$kVOYWQVuRmoo&pfLUGwXT9 zk;`T$zR%=1vN5*k&B=xn0($~Bs_c?15lnx+RhT{4(rH^!YU&$mC0|%7OwuMbgp#e?3U=~yYv4r z@0IlLT`ByroU(cMBucgkkyM=Xu zcV*aNho$$AI33&g`1zNzBl*!HI>kW?>pFdBGF8b>coM|-r87h;KSXrh=PP!Vhtf`7 zyWJ)DsNl`UfW{LA^XI%MSv7Bh*n@Ag*(DAv__Za3jkQs#R6+0ePr(CWi~&zCRcLHA z5zyjz`fBN(y`oK<*j`2n*_U+aT5PUw+R0N9?qJ{;sGG5%O~TAYoFgG8vw^qZ$*Mlq zx({d4&rH92LAN8#U$E3>p=7gdks_mcoTD)Nrhqle09k;&AMcerQyMl=ur(Rdx^0{)U_7$=Bm(Typ z%(Pq*&T0RA&%_Ng{Bw329J*K8rs=xtmW)E>)ymbI6z{s6E;TUWVC)yY!hbdJb6eI4 zHLg3h8J`ll(^=JmG=A+he7nzznP;nukn0wkoPv3-t%ADzf6aJ*72Qa%mb%cSAY-Hw z{qe-obxj`84(WAE?01|{mb0r|)VM0P)w?__w8BMk$0zoy6T9S9I4>+Wm3kKeM{{6W{f7nX&eChFdlyl|EG z@~sQ*wfPaRm^ECK?e`0)*Z;cc^LSERPC>_!9+sJh&m25zSETy$_MU=psUxo&+m|wS zd(R90W~<@K`*yztduEE!gKj^8mL*#gkHn~**sECC-hD4sj#h6^fbdz0!H%g+22w=&RX zux{`Fo$L@Pwsd0Phuf_CLT$8M_T6I-b=wmg7$$dQ#p|T)hV?yjxZiR;o2D%w>M0$& zDLafs?CRXV)2_MXM42foZr7e-ZvRnE%j!zgFWEm6MP5EuF`Z+6%5`E=nnBHPragCg z?x#(TwY1{+JXvhFr#TykQ}4~iX@B?Tyl7+GDP^o&CiJeiplh?^+T1s1qsy0Eci-OC z*Z=pyh50v+FFdnX8ZJ%*NP+-!# zlIAtk zPkkL%su%kF-^V}mp8sF7_x^jCa`&EJ)~9~$D__6$-}lnH*=zTHyCoN2p{n-BHdZ&4 zJySHhGWPU#3%kXqcwZgbslN2o-Hi`-hFs)Rk+gi7AAM>rQ%A*8`_mUL*iMYp{uHV{ z;eGJmD{eoO`yO9Cb|;}D*X)v<*JL9$`>Z4Jr(~ubzWHWL>8tr^zn83MX}Wh!EyV0C z1uHC>r+_2sMOKhwB}s|^kwY(3AY8){!!@vZf}T;9vNfC;n1<8P*kcvY*k})1_bUrp2m1 z&T=o)Toq?KwDNQ&s(n)}^J|oT^qX1Kfhj0V`fDV=;h8EGnWNJdJ+@NqmVcnvd%Phm zLO9^Wg5S&;Me#vDR)1}{ZKeI1=X>ka&1YFlQ|y1(p0)FleDW-QZ`8gk3!QjaeoWagH}{Up^|rG~tsNmpCRqKQ zoIQ2&7KimEx24sr4Al2Ky*kXf&_>94(VLXkiX3i*$v=dm8b2MiZ8_wAulKXYf`?A8 z+3jMkwVx_W`M8kP!boacF1Lgn%hg78zLQIm-DM|+xf#@N$Wy#@;H-f9ij3(M+_#o6 zo`2QZxwy}!EKVY`wpdVMk8k>pvg@h4U$~tW_P2TdVQb~H_==qx^R4#9wZF-he>q$9 z@c((jRz7Br+DU=K-Z@_XYp-J;-?IZxpc+XoZv_Hk~wk#b&1+16rt_G)QwtCntw zU7h+(4^{hk{wqAzU-RVuwQEW_^-HDR$p#)#U|2o>;wrAdIS+rdawOcjpwARMJ3xUu z$YqjmdSAel^KhNdlUkTj)r%;a7 z=r&7Ir^i=~YiA=9Ug%|9t8v_X^|$%YA7{=TRAXOjemUgG%2OEyLNy`l=c;{aJFvNO zUb^MUX^O1BFpoS+FEz)VXR)(-DvZeUvZiB<;u%zmXv5-WowNL58I&QvpZ!*$1~%zQ!dVV%GaA# zw1;b&mEwUL3nt{upILuYYDG7%&nM|Js|AyrJ=ikl*(=x?OzVAMYs6AG;4N z*_+^3A~Zo|J=+GSiDiu)SCR`n`Crb^vbD%zKlbcq;H&ie(zX}YZQJ^{^YG8>H4g){ z!qV>4Pc8k#UHAO!4fUf927FJi=`(qn1bmz`xiMC~?rMl}&DyLI`-5+9-~5tQ77@a~ z{#7p5=hu&_G(VKxn7og5p{UBG>t|11J9tm@;GKBy{})eb6cuvF7VFPB|9a5{)%Bs` z&!+_D_*(pQ`ln-Vbb)`yuf}58AepH5Gat-2>3+o4NSk4moYo}GgP|5LOIBX_)42Tb zy=m_40Z%jkh-mj-G?%pqIcXem;cS5Qq)^r%!S<qoo#K`jvZ5GFsoF&?S1`GnXvOT5yf8p!k5=xNjEZ1 z`nvf2|MgDtl0wSQUKQPV=zm#A|IO_Cf6Wc^J{mvxa5iwlyjS0EE`KjK?}A=RpTx7a zBmCZTf2iDiS!@{^a#?5oQ-8U}4NG3k-oJI`0Y$wRYd`N3x&Nn8Lw>_~GdIb~N$vrM z8KYJ^T~O7$VEExd$RV453wiGDe0l8YanT!#X50UKUt(e_)+uvp&bNgIbs^Hb^`00O zWUP^{a-VD4q&A!B?A4-8JbO~2*j}6{t`a@WcD-BW)Gn^owKWym=g)<{pK|_)r?&YT zo20HNMWF-h?b@ZM=UJ9)cD$@^$d@>6TI&&;SKI3RYu~MoJGB3FwA`bEY^P>coqud= zRd>nXcK4?@@*Dlq{)z4U^4#qp+iCv$zkavt@Bg%ZXRgWLC5z20_X?-aXWCq4)?DVi z;-x{L*(Yv4b@{AG4ieTiY%H1gtX*IBTUj1-Sb8i|HTFbN{I>gVZ2suoKh+fW@Jp?y zx%9_f_MQJu)C#3~RbO!EuX5e>?#}LqJJ{>5iPxEh+}pc$GmFaYwBV3M>h&?(E4OG$ zyls5?_ZBnnKiy!y`d_iVNo*b70i$a;3^N6JWp#SXEI*aW6j)6( z*)#d@>s>#U>)-nwuP)XzsK}98FtsbH4vpdcNleRxRc3rS%(rxt$I*?+dL@#zp$?PkJa-3_qVa^-|b~y*}L}rzMse{w zzuZ_6KSgbS@cGoW6+d@Q6?o>qMtGCWp)HG-CEr}dP`QK6a#7p1S8utW#k8Je_`@=B z`%@9cl4QflQ}1YT+@97LeSgaAV(*7b^o`6LpYzSX`(x(Lg~Ata%>SbmTbQBv#y;bx z^8Gi-u650k1#IV6zCUg?VY}r?w!Oc*EmBTRe6Qv&r^3fy@leR%W#oPvqke`EgOz(< zorsw+sILyHXU;Sk#Tpy5oodQ=gjbeCx3qW{(KU7|Nr|<(Ua8gEe*e^_wcSn zhtiunJTrM5H^`iRwIKe#d;RIk$0oXRXKp>6IW;8ihq86zx+D8P&W+#v|7836%C!2= zm-+d&=heNrXx}SiXj%NH;KDZT9bax;>ks|cFKf4c=E>u~q;CFl=sSCL(w=kH+ix#z zwYuPUsmQh4-&QG5&wuL1`>FYDr`=V4PP%;I#g5|1k+T=C5uSC@yrfN2&BIRG{NT47 z?zH8xjW;|lx>mNx+Diw2&gd$CC)g{~@j~M-hf_)U`}4;FKEDcjp72Od`s90_7238- zu2(9|*>A6)s`LKYio35C2dlo_sOq-h2$x|=j;}iZj&F=?mQeqF^axu{-FdZxR?er0}6du#8^l#{$&#{YjV zxc+_a_7e`JdV&+4{*wx+7oOgdP^_bUEcGf!4u|{$t=Fz5$GX(MHzm&bVyPyy;zHB; zSB*zk$vq5S{xj#pq}*kjYfo-?m$O{)T5!_p4eE|lW_6u5=WUlYExJ2H_Oz-BN7V(# z`j$)=(X1<5zRBEXjN?7y_t4{F=%;P3VjeHBD*y52Re!BZ!Hj2GwNJMyUD7h!a=U5S z--s!<_Gwfi#}h@pT~8uk_RcI)viXyIPEg*h zw?ozLXaBtkaRYxlmt?(4b#<$~Ck z-LfAd%>pOsuUGip#>=~7!%iLb9Sze=56B*W5PG;zEu5o!@A9w8hyIuzGt+jeSuW4n zIXghG&Rp@{pXvN0yG1p_cEjuNi3e?}uDho* zZ15_{l1MdGo!RTawj@M!Nx{sW2E|V+Z<$?wDk)|B@Weu^L+5>(o?o9i^YfhW^C?>c zdm>ZPz9`GDH)a3(E7fe@&8fDGl}j~w@9`9z>YVj`s`aDrj{j?y%|5aCYm3{vjU5Y0 z&K@(!x$))pfy^lz1fPHPbXb$JVE^KjPfgD0IfpK&#m{_u_WG40$Di%k>VBZa<7!rW zdhH{(iFG!g@9)0X!JW?)deLhw0Kyv)z54ayJ#&Oo_BNUbJ;q@{Kb^oWIXcnYYmB_4DUe zYK{{_Z#y5~%2$_mtK{6D)MxhE?kB?JrtV&Ca`n}l*?-*q>os{yHv9}Y?~%&iw`tLt zEK!5y^2f9|13E0vUaYqIlFPZ)V*>j$!@Wi7^QX-G+*r$X@3evZ0k21aJt3Vb!ph7` zd>7ik)qPsWdc9!sy6(5a)|m;+v%(`icGN{K^pLCE`n=VCS>spj;>Yc2ofo-g{9>3} zd45&n>x}_h-k&~SclbB+F&D>&i)#+QxgMpSKjUY0^U}u=$Nsf;|0_Gdt^fa0(6P>j zGdmtXQ`3^WabfdU&eTS?^J|yemRid3EtlWddu7?jU&-cArm+c~YCr$?oyD1(Q)ey_ z&RoeY{eD{HYeVK+CtpkX-C=sbRDR*j|LClE`w|(~H5M1|@0!=^@kvQLbmi&nep#l1 zs}pCOdZ~HRn{$TCuj*L|Ih=|{H~Wj@tfJ#)+bd{ke(TrjpCg*SKtlFQapwIsI|9wW zXqBye?fy`5kDXILLr~ik)jqBlYzw3w&EDSabt5#TT|@0WA?vpGv9xcZ#9QaI!7qJOWA3M$&dU0(*M5=E^}eu z>2P@euZOSOyRG`Jp6-_tII`?Un&l)*)rZN^l}|pOY`3@C^Wl-a`|XE&%l|djepa;> zInMWV^`kd$R=B0FNKoB;_hicF1^v>DrKcia%)PU7rnUUp$h?S@nTt}|yZ!CVCtCz{ zv@VfN3dm`VQyPCEG=Al@R zgQ*KH8JiwDbDKNq%Mwiug%l5EbN$#eZ( zMBfx$IViRBvuFFQ))q}&XtvuOxKGSFW%swyG=9D?Vui?_Bt;**5R=4ZE_y=?|+z?kI0z zTF~Y0Jjt6;)8^xWo?Edk<*m2H(-Ng;u0A)R?67p^=Gfn!qBTHbL+BE|v|&*SzFzTrM+C zG7R7B@h`whw(j#wrI<3MZuZ|luJcy6a&LaC;QaX4EFsC8!C_9yEOo2H|7eJ_nCuB~ zJ@cr->4REIpxTD2Y$3Oo-TxMH2_1dLEX8@%q~M+8g>9etsxlt-8Fw}dILL2v6rO9s za;~?zw{Fg+m*+ocsj;6ey37|=!xV1vT0MWq&-|}Krynl68&&$qh%4&!UCD%3*Ti=m z`P?YSZnNCcA@yH%{k!`c_AWVQp2WK6bp1UphL`%U8mC`+@^(q#r){YgVh$PEIWJEI zN2_ZVZ8JZp`}1J+hRmfAEy`8c^onpFYg-@-h?BV;|aW?nd##1*%-`tyF zEK!#d#t>3gzH*Ij#;K-@vrgA)8HOr&|Gn*Dk~-~_;|=d%p=GXCr#JP41s*i6KDGPg zvT*goT8!pd^PMXABb8*P2d~*?@!+i6o79`Z4ig!^bA~(Dy`6mD+NShrcDwcUdkwiu zwt4x-?3pO8cBsWBOU?e)O0H+&?N6SI?9(`V#@;4r>*ggJ8DC~>;ycNl^YiiYbp~n#k$Tm;dKM{pLIO-#_Ye__EJ&=N_lI$EF+X+V@embk+sVmWtbHY3@18 zFWW_E%)Dv;{ZRRtg7DcDd!A_2oSHT>**qk(Y-wstSc~76u0PL93Iy_NVy<#EZEpKw zC_ORT?z7f&v)7^_E%SJN=^p#r}#-GPAxv)2)5tX2mtR_TbJIwRoQGt}PWc z%E<>`+N&>d^=Ijtd_1JmtrC$vYk|IhVHU##EP zWEfXm<<&a>p>?rbx$63|N5y^hZ&rSIB5N^yKl}U5>n?2J(LDV(Z}K)bo&%oC|9MOe zR+|wnAY}Yy=JS1PKbx)NQd}aeuwmx%z6k$Q+>=h3a4sqG`)~WobIaE|4BuxuS2T(; z1@6+>$i4FtJG;Di*3DmY>mF8YHMz8i@#+@G=YKPpk|&omZY%u59hE59qxf3+q1;SS z2GP#^y?X1X+zfNLvf)t11eZ?!8xLK?`!Bi$96ioB<+Sh0A}*6-KVn$SUx$23WnlUh zeBe!{5AW?A8-IQ~``whI!gP__u1EnzsrKcK3(slIR!9u5Ik@QdqvDk_9Xrzht0z2o zv4JPiU2K=ETc^?zlmC4OUd-PARz{B5Kh|Mue@1(h+@n7Qcm5QLw#G+ac-`{g^W!8l zz3=?;uT>oGt}IRa%{`kzIPYbn_L(!^Obad?biDJYvgd$)m$QF+;Szf<_ZHrQ8)_BL z>=qrpvc&qJ2ZSl7~V|p|ih(YO8g^9?@(!<9{({hO0oKVHli5^i_cuuS~^*D{7D(VJ&D z9;p8~|Nqqo?rf+3u6(^%``XV!WzB@v1B+Vz&HlevZfU37*_|I3m8ZMA&Ty`IA$G5b z?Rinj4YmlOOP{zW7N<>NQ|@@=$E`BS`^LF>dTKrO#c{u9_uT3(yYcC)xM1~H!OJ#> zIh@~wtFQ8$de`sVq1nsVI2$CLncdy;W`?4C#Zwo@b&2yM56Bg|9qvEF)u8ok@7Bte zLo=GxW;|cilQQ$?=QSEr*@VJ%)ASA*&OYI`D$HU>VOOwb#*$BG-g^mihKS7LtZrMo zVgD7j*_jXIYP+7Ng`E{(?eDp?v9R@6VZ8F?>ZoJ;zI-{|etyloG@o|)$~3VfA1}7{ zp5{!ga^Ny{{_v(mu;a4Do1~Q4H*=3(mz!Lzc4+nFUz^0)J1uk*On#-EXHFB4{_A<( zIidP@(>C5^;_tTDtF-6;xmbVqq{_L?{?9GWUwOL0_}4F)pqCqLZQN6v1=ly3*uRd>fbBs?6m3zm84k|Nn0O@6fA?d`o^kdbrvDzM$Hclag`|gZob& z{&PwH>^{buSNHPev>mqmZy?R+e$MtPpVFdB7P>sWmEYFRWxl2H{QAe1^QSy+ym%k> zTS|^Q@}>My?X^{J-+#UzHv4BIi-~LCt@M9>>jQV)n9g$~p;PYa(!Yfh`hSUiFL&ac z|2bsAVt$Y68{fiM=dEt-Vz)o1t-NXD)3}N+-CLM56=$8P`+vyFW4^$Zxr=$Cn$D#? zm?+7xVngWUs|6twEED^=4)=Cu9VyDUmQP}OJ-vK-WZmPr`K7MiY&k1Mj`+qh9d1~3 zI{(APjc=uUU$)tu3I=Y_P6P{GxS5o^3E_Fv(+d$qrQh2N{tw;}&GmUI@azMdAa z-R2u-;zq>}qRb61H-**-n|iLh@pcXO7TZT(7q~TD;?S~xRr7dqO1=rRXlwFi%d`Lf zZ+o+~==HjPS7**Ln*PY|w`ygsAJ3io`EoH&{gu4)>}4|?y8ULlr{8Z3$OvgWx#Z|{ zhl-tfRdYRFp1qXub6QPm!r`fVg>&y56aLwqcSUudzjR_(=fN#xoT5BLzxv;74 zQ{rdw4>n4-E0oXt%4L^tue|m4^)|aR$!|0`{%dUimvKPv-}#?sMdxlju={RT{GKmc z_DL7oayovKaEVUPwD~z-RQ&X|GXbvGPfRz+;xu^wSfF#I$Z>YQf6M%q)_htiZp_i( zc3@@fHulU+{_j)l*f#O_TxGcJ zn$C?%&&op#=Y$tGPVH%A-s920_kBm$ji&RVN>5%?Pl)tO;NhvhlE>~h>DV*t7@h{x zhZA4znJmG7%4Y_5zU`dg{XBo?R%;zrJNBI=Da(BE{Gf=xYhPTRpWmFB;_zzmrlFnqH?pzkQ@cqiu^{3{2(D{2IQml@dtNZFo z*{9p2_tY<4%O8_?y6<_xj5CiDI-JygnJh|pkhYECWSwf8+x@oq+0yOL=O3BMU%$!u zWJada!DG=OlV)tP)!kjxkgq;NHduF-Z%WC+^Y&*wcU``FY=W)yN4uVs=jT!`9_rkq z(`xE3WuE^zucQ00e*F)#zj{ut(OM4-g|{z``ZIBB;YCSoKKMF5 z*LQF0{>{#jZ@;*lFtp8G_>;%~?#rdMuO)2m`L1QKSvi$qMz8i_rERg=X4T)X|J(fk zoa6(Wd^aD)ik0yjo-mqQ?o2(saZYH4<{8~!?aOOE7_6LRUNSXlYA;7@d0_nS-$&wq zbF)l(=I-J#-U_N-;;a%->dKgT7rqpM;OnoE9v4$vtoK6%-P?2#G$&(a|Fc`C9?$;Nv3yp6mZZ1eywLD@Vd7b9!~4T$#nm0x+)GiN{qu8na);O+o4#9R2^XbjMlwENR-eayw(Gzm zb$OTk-|qYil>g2RV|M#?LcL~*{6bf)DK?%}*}_bH6?Q3U9Zoe*fXgM9v>o-khO8Z#3CS8eh@t=vSYc6G%Y^l8W zzTZUUXrA0!*)1x3_Wk0OET1p_{%=t7;dh{080Q3WZTGG{?7!?i9A1~t`F}W5Qov{K zF~1Yb^_#kGakk!{!MObVmig1R-r~RF6>jdNyyh#<&UNXZ-rsrp#eVkE>-O`f?TKs? zezRt`dn&6#YRx3yhTlSku3lR`KJrew<9a9XGDEfR*cKRvV zio|uTE29ecm z*DkkZuo~4KfA#%NC*$+7^tk7DX2^51OP)O z&6zXa@|FAZWA+8ji|e(!Z&W&(|MQ-;^Yb#c-5&x2c3!yECYbznmqMSs#k3!Z4;Gu8 z?S8dk?Tr;>6Mj!qZHr9UKRMqqgvB14$Ta6 z>_dX1elDB*fBv84|JQz8?I66lrs>?S#@)n^h_-=h-!xopCY$V(EUFg2r}Mp))7n?48vf_RYfk zjLDo&6JA~E5Uh31ZS0$QGQcg~U|wbUwQz=StQ&YcSxb+WD!$_iE117@-KCVajeZ<5 zR^ij8lw|j_yfw4^xpnr5+i`1WrH4)OJ-m?V=>cAbU9p=uee3V_D+qi&cK*ytyF${z(7l)JZuN^CHYcMDXXdIjfk2D)*wU{G zCqk!9xS>&euC*xq-dQiHuc{BHn19RZlSxyXy(OnWNb9#6MDeY%VB%ZE1pz~49RRp0-WGg@z4@}ls$>Fgts z-r?d?_%=M*7(PMAAmqbS;p37CRRRlZB+d#g`5?kKPo6!dF7Uq0kDE`Pev6s4=gf4@ zi}raHvcmS8E7zaW?2(+pe*V}^25Gr4z4O&#vw06@J>K(4i!mv(@5{|dj!i*r?jcP- zw_eh?RCsIs4`t6pAKQXzp?S=e5s41RJ;LG-zuvq?&c*oYYMCqfD^hl!zFFXSadWZe z^M!?TZ-!a@;mn+zU;1u_?2{L+%NEW4av~-8$z1EIx0jzysC$)d7PNX!|2tFb&F5l1 zfLe{4mIP?{aGmW<=9+mdS>Uwon>s&5c5Ww|wTeG-Bhp@}9lS6j{L+spFN(xc6xVrf z*m!V)SMirPvl8XYd#*;-9_#-Xsw(_lO_p_i{ijNfS(z2`WtrXTI(c{Kg=M5i|GyIm1pE}czkYdq$M&gwh&;^Wli zua7Cl9G+(PvHf6JrGo|E4L51#ZPI>Lc^-y}bxadk|0-}yJhO4{S4Er4CygIOnj0ES z)n2E?5fSb=p(3wH=fRkDSLFb0iZFgh6(u9lLPH_(c*w@c(_;+FAqwV?eqIxfl!=}$THgQkO)T$3{ z-ur%6omwaTZql}E?5`g;6)Io1`kwgQ{Zi_tliZ$@Vx~KtxiU5Uk5Pj4^WH}P*t(Pb z%zrozXuXsBcXN*)<=&YL~^i-wil>(aT%XICR2TfCxZEY{B)y~{tbbfPd-X^%+C<`(Di42OV-7N zP$iQ!dvB{3ue4N)%-pbU;!NRhE*feMHWv?v9uqQbc+sjRyS1});pO|*Qh(%GR`dP1 z)p^zZ-@V-3Uzl}czbbU!zsHl~Yk73rv$?7(ls%TO+1(hMr@&IZxz*0h?MGAp!?_wi z)Y`dD{8`4i%|_>MSV_&wHOVV}vYRGy-ru?GzUJkl=Ftz08-jPOtxwK~TXOGhN@rh0 zsV?88CZ2+0?d^Ybb3ZfBJhNkA#?1F$r@wpTIxqD0BN+x0D~8Zz9AT305>I^Qk!IR? z=g-y3?4vy4venOSIdREM+sB)>E%_+(rrt}>MUKZzeZ9|Sc^t>}ZxjBQE?;_qz2ZU- z|6KOjUd>8-lupcRm_2`A{;hj|=5nq*;JfFmcgIr!#fH`MZ%ljlz$fm?kB>SZIEtqH zd=b0oeYWW*%cG5NRS&KEac_=l*v}>ZjILzX`+7~Oa@qDJc-^$t_SJG*&tI`iXmvJN z_ocVr&Aqp}!9k?;qmruQp*1B!i%5Y!q@nPd8<+RDi zJYqKsoZa+2uiyOr3;sFTPBk}L!j1*SO#5keuBIf_?7z-K6G>C6-W3NwOB_D;(*MFw zr#TIEaaGA>tNM=5U2)**qjSC=&T%LyMubKE`*r_^JX6()uZ?|W85-SFjyul~Ujs?oR8n^iTaRn>%j>>%kbl6_iwJb zHC^%A_x#J#^>!I?9p}%F>whYI$L3Lz*ttn2=5McUmD;qFDNjyc#x^2Y?Ss$f zYM7)}1zl?w`+4Tm9|_(A%vq~g!E{zPD1gZt)}$ENdStYF?!Ewl6G z!NW(QHcPPB{Co1beg7x<|GddHorhv;xYe$FN^^D0d|do+RrRHJWpjc*%-GYk|LJko zImsK>2Km`e2%QocxBT9z-M1=CPW1nNknI2BgG#OD#jn+3iQeh*Pc5!m@>ean{dCE` z$)A>;yL}{PyTTpj^{3+U1(gTdJH7-M6~#`*_;YtA9REb?Bb+ua8Ik-E+?s_jp(?=z5j9)h}?K-m$3s^4rwl z(sMjqe=1u4ipdGs9APqCEN{8v>@>>%lpi4iLab1zkRs;@WtH) zAKrXbujASLz>~wghVSM>H{Ln3O@9aP(*EOdO@bvSKlXOh!>*W1z4K?=dmq2^!{7Rd ziF~X^vhkk-=9S0iv^pCso6z0O5s|~O;+sJ8_Ly&??U#S1$5eJYEZjeLp8bFMKU)uT z>;Da6v45kLIPED552L7`pOCJ$Ve_OnD<@RkFqf!yJ9((d+;i#S^)9k|mMs0hde=|s zsAaOP505=NG-vOh15dc?ft>m0 z|7DrIjgsbbTWPmjhO;TyR8r8mC?#c9_@aP>%ug>qtcdD9!mx*n0 zXFLAPnN@Kqv2@eP-@-nsrykb6JiWi7;zgmi?0;>dR`8@XOfgKId-s0y=ges{`{!&c zoVH8v#Nklo(xynM&8BROcC5Vd%}g<$o2`VUgZ@o)mQ=}mwA18on7(V@;hb>o*X;4T z*W|C6{N+XYo+>4FtIr`lj}|S6x>0`P&nfwv=XAP%l|G!5_v=%otBHBd+>*-a&Iw8# z;djlBf6jb$_(ZN$4wJUgnt5}-XVFK;*`|_%eIV7|3`(Adlnh`1NAA9oZk5`S3=d2b={j>`V`f%!z zca!ClwVTZL|M^ks*_>q5SM$WcIPKq_S0`3+OjG%LGo9hw$CLk`9N#%FCS+s!wfYn@ z##JnNK|5?0H*WCW>H2twRmt5Sm#VrJ7?p0G=65HEy~o>KpL12_oeQx~mo03%e&~Bh z!dkY4r?$>?n9JDMyd>%Lt{o3D&iq`n;fD^hRbWGyLdZ_36$^F=JkGcy!}@#Xx!ZM7 z_qiU-VW@b}q;ytadZEOWHK}fjKQEm8w^(Au66dn^XN~?P8+2ZO@0`e@%;i<}(2o7|bIJ7A3D zSEKX(eExHH?&gdGN5#?;K4rY=wYyg*ux?w#7RlpgpR#o|^r|PGeCYV&qN?U@-kNvr zbFQxu$ZlA`*mB-jKl4y8CO;5}QD7v1;g@x}F@^6VKJ9-rCe zp2o1i@Ab0R&$YOwdS~@3tc_^e`C+?J^O17>1wNU_vUC9d=ydmpJ;Gl zE!)0Ah6zPM@;|%ycrDxO&U+kfv3bRqcY5vGKfM;Ent$bD{#HlmFf{E;ICJ`+_}wSx zxUYR__}*9av)1{*w$KHlK1Vt=lDvPb9On3vVzBu3YPOj-9?hN{wtYf>N3B(oePyHX zRLif?1}|oMFV9z4RxtPFoKG15nZ9g3U zNBjTOmALKk>%v zBR9Vtn9$Pfw*R5$zidT5B{6R9riPc+wO+Tcj9t#MugIdlJJQ|k-^%G*D*rw>qm-sn zH;-Su_1ybUNz+2JBZcJE=ics2bWh`!)V_0YhT@j^FK7RkpE>twk^Qbk5?1^Eo&WRd z;p+IxpC4ZTKYo8oM&YaLHHYm_Ik|3ASXJg{cexwc@66lh zahu~~ia_C|fa}s_VH22^-@CH*OVW?N{Fj?DKCx7XmRYxNIcL$WEidi=yMsY&qjQZ# z{l=f#_nU>jok%MPy7%LF<@w%;?kSOn?tQW;i?n+5HTe7K*OBGFXGLDR(;KUoJX>g< zPI)r-=Eo<^pIqqFerMvBsBphr&md~z?vl=MFH`2(>A$z$znKxm-ITd=%2~VIiw~bB zO^IAMb8fvsQ2K7kwXQAqLdyhp)_eTwj0)f}la=MFYxrKag8>C>;He}8*}_vdib~f=~uI6CM{@s=%{A%FJap2K(oy=%k=cRH(J*0ofRE9 z-<{*i+Fg@=KU=?ECoKNMR&ndg+fLq}CT!wc|4O@->92ZCAy4?U$(y)mWj3F^smjH1 zjdym=qBn(i=A3E&tljXb@-V~osg~|4)^CrwS=KXM7u{)<`SFD5Mz&{#tuqw9J@)h6 z_3tIa1C7J~3|##DVl*_ZwHBS$o+em&c!|JEju-!a9$tFL!b0G%&Wl8gRa!y?JKLsb zYk3|JX6spFmQo}9Ce?XMdGq9UHvLvn-AEnlW50aaelxDC`8T`${JMRjUR8=a10qfx zVCJ3nx~*8*mrd^A*+fSP6WNF(Gy48~IQw5W?cXMyL!voy?x+3l*M!G^{k^$eJA9ti zpLg&7_!tO9=vu=`5r@micd>P zQFHOn=&+J7eKP|AjrFCBA>xO9Z}??u)c&0!RJC}wIR}g6p{0?6ny;m5A2N5GIngWk zd}hLpIjJvYrpq!)8JuH}%-O8BuQB_m3{9*bO9B^gViX zz3pN9dPh%-k8(>cN==-0dyT;|H~z@I+UM&|AL`GT{()=pKUM!VJ9cRYpSdk9Q|&2j z|7+PZ>yW?aeAEo4MgB@sK3&5dU&eT$KXJ#et(pO;%TJ{(O>a1TyTbJ{;{gWWE&TfH z?B6uzc6@KYdx`z+?eraN72oZ>kBd7^_@}d;DWvzMT-e7?f9^ijukmAPaSnOID4;Z7 z&$l$=s*{`Bh8nX9Ic84Dn;(4C<%M<5%RcQ2{(hzKjJCrapJ>UyUUH>Zl#?Y=_|;Ap z)>ZEJS;`*P_Vk|~)6H3ed++i5cp@*aSN|^CO6NuC=C-2r;7KzkZn2yD;9Nn1*sgpD zuHq)~^Ldg5SI#}Tm~5teUhsV8*97VY&3{s$A9o48V<|H$f(w4mTrZOs^MB@>WY$(A?b;oE>kc)l z$}4=%;$#$xGE-kDD5yQd)8kA0g}QEa{rzuj_AI!0N>udigxAL$)4q#)Idb6Uh zdEvZ}`L|n7e%8|2G{br0D1sYF7D-td=52R!DD@UvT=`HR0|aH|rOX>P1dU?RB@#-P60WY_7l|*Ujdv z+CFt9X;N>KB{Q8L_MM%;VWPKGL1^mQldP$%`pxSNX4RC0%?M}Ow`6L=UxkEU^FGhA zT&%wSQtsdB4n-GVY_gd-`R5w7l7)hzzojA`ro6v!qSW%_xooSBGw(_qd*(R$ZCWWE ztal~8_2&8qe?rbYRj6Q}{owrk%Ln{tPW&}RB>$(r({3`Ic>e5s1M75me!f1Q(7>B5TdH3@xH<7WZ~JwYjoYha zHh%h`Ch@Z^;XaRE&Uy}ugW0=(`X^7b-8=E{_oMp%4?VnlZn68F3I^y|0Dn?hXZPgv zSodl5yg%D+=Vxj*`Ih1~PEO%Dv%CN7OB7(r;h492tM9%w$#WZDvn5&G6gd0DxZmcG zY+TaIis%wOp%p9-ay|?5PnyL4O(qa|qnM`fZPZ>Yqu)S1u-Q zuKXx?Y=4n((V{s*D>)Ls9DZHJ&ba6C4Uwr9=5@JKgtYqSJm_gY>c)55_SLFGQv}yD zPm-Tn`1jT8RZTo+BwO0gmrU81U?+R7XvYb?i!nCq`I&or_c-?%zg{Bvbjgym!!NJ% zDjqs%zx;92)~9ES+AI?dbIs>ZP&eFS>dQ1&e&R)wDO$~eE&3;v9_sQR&}mkmo}HSX z;Tf+cy-Ii)x9>XjT|ZyHZCL*&GgsixZl=@;{&k-?luOmBESt ztY0}*?uBOle$@kR>H9egi*~HJ`TuHvy?)BRSC77&4x8a;-EvxS;_Om+^+QHoy{mg3 z3%j|i#g!gtJ1}wexl?QI#bo_e+xAxcdF?+rdmia@-Ukx`i|?N6TwS-ZQnKP#WZM=S zF}MG3WCbq$a$S6NIs1KM(LXx7+!GlbcFtL07`vPy*yHkx&XtD*n3?+o`X=UDZ9n3x zcuV#0k)>^FGvZ#>SaJK$opUTX*Lq)Q;^O7u=0+2b-t$s7oABwXd2)fYzw<*U?S7_t z53e4WSbN0o)WYV=V$KeS;}0bG%o04gB%@GAGrr=d|CzS^vgZSoWmnuiQFezn>eo{7 zzk0GCirRc<6y1(_dYygqN&U>p0y&p<6uQJ&yI*G$eY7vk<(z{{-aW4A@t3E?3humg zbKj|(&m1{eJk{+sp5O9IK%;riasKdx8J(xw{8pI(UT88 zrZ+wEF~^!hZJUN$`7?JmD6T)5{5wru#;~K{NP*I0mkTCg_GYuLRdv2-R~NVJnx(cu z+xYZ%1>aBW*3Yc_a680aXhUaD#xG~n)cm;*lEVv}73ZG(XglS$+uNu!hLIPaoRrg_ z!rRd!>pscCVvmX>*PRpw%Y=Z(PQ0E+?I!%c!P{F?9Lk<_lqbhU=HB(Q|GDFTiEcf( zKl#nB8wxDBTb^A!`jlPK`(@XaK8|@Zn}u5EM(+F>fBo$JZwl8A9f`XwH9bOQNBqs6 zNJaLxva9x=Ta+smITzi0-Eef5=z;k^Z+gjWna1$&+}p(;1h>!Obk3Tgchs6)B>t(B zgq_|GC6TkHtn8a=9-qJUG*E)U;=KR6+HahyMgL;#>Lz|#$o6>C7f;1v2F|V7^|wN} z_wS2*=Hyzi(7(5&JzVCho0n}=8uP_D2~XV=e(3C2cWUZWf446;52WAZn837u-i}qz z?=ekVV7>Y9A&a=qk40;KRL=^18hiQ8|C`VERqrVK>aH9p);aa2rO=1J=XN^XOnIEO zen!qs^$P-0UmjfL+O($Z`-h{`>m4`u+kAFc>dT(SBWy0P;$WK4;BuKWJ08rs`a#2ur{~Vv>S?;)#TN8G{e7U%aH4p%(6!KAGd@16t+|-Z z=C-^zahiy@tg6m6K9%i77r6RM&iy!*3}{AAj%Ad3kQry5MtXLap9M&0hLN zhf!z8>hPU5GaS?+m5nsypRwtNXij2FyU_ANH$rofjdk)`8H);&i+@(IXgRP?U3zvW z%dAv+ON*egJx*^HoLbOV!!qOf<0);cV#B4pRq9`|uAh3Oy#AMT70dV2?ccvxEI9q} z!irY^x(q#QbmGd8;e4J{9|#-Q9Ap?dZjv#>|fK`kjht^FQsh19M2tL>eBSO_0x)P zu4-RR`#ry0xl#18dLp--_Th~U*$*#z>k3{yxp#G7-WQhh%f4&yFvOVsD!P1CM2OW; z_VE<|2PS%@kFS{Q7STKSl1(mdR+j3s1zQD9)l2a!%qiqtCN*;n!{>I9XGXeP5;i6r zUQn1+;qo?2;a6j1+>7w8BgJoDWk+TGJN9s1nV)#Kg13NOl6mDs`|t^62h%?UJUID~ zTmSFLoj;Wgdrjwd&X^UiyzrR(Yw1Wvt)E+)-F8ce3dl@hmut*tZcMaW)P9U-Uz@W) z^9k7}f}P6$7_3)#I)5&{p=*3c`|7r{8w68UYh9Tb(XwdntJKDg=WJ?UczQqhzGsab zeJ;`O`&OIYPa*mYB3oaB$on@0C!x_h(_w z+oi|t)s+I@a$Wo#$g(;{@$4zlO4F^Ir2GFgYBl~*Rl9v5&^-0&3%;C#sq#^uWi?k^ zxx##6?!37&hZ|nI?^tnc_O(l$F7G@#A03@`+l5&@rs}7#jc;UMGIzq&V-9!!?7v{k z$o5olhU?2mN)sP!n=8WK;nf->__x{H+VZ*Y(Fu2U{Y;#kX_c^ScEete3#IDU438=n zux@(Nc#TAlh6_6tR9qGvqHU^EuG;%*SzQTdLoG0ya&n$9WH^E2H= zT=#xJ5uPK&hTjGlYL6e&BYbE``BEr z-~D<*(g-m(7|~m0ul>+)Q{xgRgi6ZU~}p#;kWv;Gd9*< zjSPN1)kHojIp%AlPu%+O+dNq}k9@b2{4V&i`o!+M7qerUy!p;fbUz`@9DnIHr?fxx!b0FwUD;9cGQ8B`rjPx{(GZ5ol`{o=I#YHyU+K`DcV$5$+h`c z>zyr)j~-3#*XGauuJwEg<71uTgAZLz{w_Y$*JY;U=wkayI{Q{(ZM5jy zjXFnH^;K+^Ep7eGSZX}mY59vmV2otHuK5y&rOKc5?nHG<`0&gJ6Vcn&$c|SJ1*Z|HubeVxO?!^^){=OdvC<<%=!{v@iP8Gwnu$E&ta*i z50(kiY#IkN+wa`mID22^r6)`ddmsG^=c-Abzx0_P^DS9vm!LPk(VMTN3t1H(EWUhd zb;Tl)mv?Lo!`Ag@?r1dFP%QOqlNIZy_$?ozXYxGLXVy&%7i6m~Y2mqb)cob9j?3Z& z-4~_iv^Tu0s8wz|@KaRVN3Use@%Jr~uiKNH+zPz+JnGLB`}bsOZt~r@{!|f#Z^z}T z!|oUUpOrfI`fNT+ukcGPm;d|iiE7IGbA8G5qlvqNP3)`>G(U~JHm&wvjoQ+8A%{)( zoHUnny|8na&m6JPv~ah+_2lJv_OOltl0KYd@)8pf^99W&ZUXVG1FI(HZjm;zmi1`D#z&%NQqcys@07;&<>txzz#f2Pf|ZIMx5Yrrz!? zuD^P5{nHO8kK1<$Tzs_Q;hxXx8@EVLk(}GzaN=v5{nxPr`~Wq zV-U|GaX;js`rqoKCpwCM$=vx6z2ay8oD;gWq05Y z9WP5a%C|bsO4feP`(oCXmytFn=byM78psy=Pw$Xh?v6|y0~?PgM-DtMjS$$!ySXkl zr65N+XW7(sOEMby&;R&(;kuVuiQsb^{@v>yme|dzQdzsDg=Kfr!=#NY3ua8(z9MJQ z!M$?Q?32DaB%>;+074I|713+__oIzGBiw*Ussou z{^HcG%aLVgE5zH}(xPSsUMP30)o?kzS7-9BQ#`4wnZ1K_SSweCu&i^s_2j6|Rb%I= zB^fg{GaO2=e6T&6i!-G^;Zemd=f-Pju}4FFkSf3QJF_PwhN7t>A2S(XBPCs%@v)Wk)`JyUnZS zTu^JeDDPjn=u7s!X*Ui0R|1SHfOyrr6y}NLZw6uBotC{(4GLH40 zcMx@2lpMdY>(<7sv>6!+)_;@PI&>#AA6_c+_0*zI^PeW`D{dBAF2Cb~rufu^FZ09g z9-s2RAw5ZV>Wyc2)L!_vN!-k{pUl%Ns@DHwqVm-4^Iiw0$NddG`P^jhL6iTD3F#P$0c!o??=|ICPdwflSDAJe@VleSH1Hs|--m7TL_(@50B`9zl$G~zl*(GJkcxU1<&ryb_@!yHMQq>ef_svGwOJVB!mCc8K+*J zy5z-JRe1O&M~7A6jPQui0OL0&zimpm`S4Q4%BMx^-f|w>ka7FO;{6{BUe2oTophN) zCvmy4)r*t|N8EnqUF^%!X;I0Qd3?HY`u?2CfVO*#AssFOpPg*ISks>U-#7oKvr4)Z zQ>L9~>ro~XDb7E4GSW+P4 zmqmGb!ew0jcYL+kEcP-w)6FCz}+Ot#n#996P1!#`QOUZPRX7ws~Frc#CiL`CXi@tsbozsY^Bqe7D{x^yxscHA{D! zsng`LJyV*?W3DHpKeJgMtC=;oWWk@RB!vR&FCPy_?st_AyQi?w`TGOboaHig(n|uh z&Zn1tc3Adgrklp~sOF%;^Do(o|Gtv8y3jnCsosX=qKn+b{4+kzXC0mwRQx+y?`Qu1 zeyGOgtsHmV&dhu3EqFfs_gTh}%b8}ceQ0)h z%g!Z{_647|rRKJ2l|PadjQzu*qGNk*^_1C8}EQ@6>MGxc}AJ^&Xcu ze)-55#<=$&x9#R2kzX&iuZjIv%6k0#;p6kJIp4P3Vwut=@@6it*n)p;(dVDEp86d9 z&|}kN-`j!F!86hiEV+M8(e2@H^(D=bN&#DKFYUkf(YZ$^?b1xebTfAS)$tqM4hGj5}Mmyl>L~%2NNA?)z>AtdXCoz5UdDo2ZxfZ*EPvk=%B(Ah(R+*VcclZGZ62 zSlF8KBhofeuK3cXGRdUrHw{&`JabI?mHDef;3{`)SZlh!P|@A`Lptp~yC>=&@Y=7E z{r=)_r{&Eur#8Qt`<0QQ(tqO9@}l>5O@tPO=$z72T~#!10+U6klzGN=rANOyJ5&Q@ zPCw6Msj6m>FPV0CYtG7Ehm{c?t-Vo4Cdu_P?s$2*f%U?E%`j(3ss~Zd5EO2 zip+T$#BIVO!m-}+^}-~V67^Ivd8@G{lN=oT#r@8i>59=|lY z_MvyZ)9lW=@E0;OPnU1pc>Q!%hOxYKNrlP+;S;+So|~pHxslP_=2B?Yq7%!Neg8GL zUE62F9<6ryqC;ad`}A{G{S|9GzkI*(A+vpgMfc;0y>&USHXi=o@7O=B_vq^qet#1m z7RG9a!%e@Zcuan}Y{DObgo-`dQD5$@@ch-9kSX!}``1?Qzs4S4*OjK<%jdiCZSD7O zs>}Nw=FE$fdwQ1bN$~riaDyo&ZXM=pwC4VE;MsYiLG;RdRLsv z(ma7>9eZL{8!%6-GZMADv!zlx{qB*S4|{dB=N~!l(2^RK&m>cMV=kX~+sWwGS23z7 zE6iDvHhvCEeZf1q;6!U^+0zp93<-;?EvH^_R=)njqIg2Nr6RzHXQg_?u?IR^3odHT zeV1N#sFrDNDc^(*ua>{w`&uz9NbWWR>*F~h3qS2>Fez17u*>*3-)=zrBLU>`7d52{BeN|NdMLWi#I*|3qE6+bDEqW`e(E`{FE?;{gKI+aDz} z>`;98@qy*NLqZC(WzsJ_`j_4Dp=`~D!~8e$9Yyu$ySvKz%swanN=;bwt=X zochTr^!+g#)9(@kA?u~~{i+L`wMqq_{eHhN={xgHi-*QfjY6z~)&9pMmr5;QV>spt+* z{$zEEU($J~CQK~hq@>D?)*aJwKC$(t{}mRmbU7lm{Qinojm8BV5Aj@$-fyE^c5z;p zv)}(aCJ&EmF7WtN-?EKiVc{-kW?PYeQ`r>Ob*M%(9NHisc|=@pS>e&pXFpcwH|G2Z z3hUCpIk7ONo{2j!M7oKmMD>zG!qr%flHKy_IX;ygIM&ZtxF@K~)^b6nrokr--rry3 zpEg%qh?mxhny#w#b$vr`so)ini6U(ic0N?%uvp+Yxj!sjV#mVxKN}8{m9m3M#*K4sV~*~MS`@StUD1SSQ6;^ z>cq?ftv)l>Ci7Wun)Yu#JJC?|={|d*qdxq5C2gz4RE+eO&+I!jd*Z5a$slRvjH|}d zDG_<^gxl|%9BC~)+TIi5)h=IohU2b?;_6 zPfsOJXXH`)vDn*9Ym?MjLsP@^vz{cczGq;jxp~1nz3F?D>J>et<}yhyl$;#znZmYq z<~lal+C5IM{{CRHI(Yq=s_rdg>#s$dKYLACl=$< zBVoF)u~4!*yo8mYQ*HRolTOkDE@f zQeW%J+2t<1FDJS6gc9?UA#SQs1W8@Bd%jIxBQy;`bzb4(;m3MF8Z~HOl-L2fo zH8;-)fA3vgWBcK1>RoRAvuExLT%2D2MaKN}i+CRQeN`z3qJM%If_(U1QBds#Un^vUlN zK?#$!Zx}7J3XocRQux7P!-Qb1Jr+KbzF7Sb5cY_^{N3R9!_{ForboJzBwI-dG#okR z%CddY-kIWY)xP>nk3yB|dtWEi9Y}nd7V5mgJZ4&kx|q(_rOlEHsx6QB-~M|q`u}!& zRi0NXPsayd`tfSfxhWFcU#?zu|G2xkSXG$_{#qNxvo*3$|M31Neh231{kb2_%n)%_6XKuw&wtK|jIbB`&Mm5sZf*$Y^SAj}GwpBow|B!&%l=@<-#Q z!^Li+4@H)Ln(dT+&Izw-x!|*T3i~Oqi8H*Tl(oY%q$h3tJV*Ry>BVIxhTc=;o*SRn zb9K14Y;)L|BBl8zf$OrLI&QhRX-&|~&v$|fV!f`HxRzTmX_x=}_v$Jp6oR z8@JTo($bD8%l>Scc_uz6e%t+8bdt?bRX!~5&8fR(UaMa7|5Cnm{cZOe*1RGO>xzd5qCRC<|2f;x z5q2TfXo2--&xD*~OY?fJg~lmIe|(cTp~SCtZ~bfEjSVtvDsy7Ld+;*k#Z~{lt3Chs zwdGM9XU$$~ik~u>+bGp&{x+bj_;dWx8C>?GsU|4b%@91C&J zT3Wu&$WT~Qx-w-pJICJ0Z_oVL8)EYR1UB#;5|wc~D!F0F#;j!7!rF$TyJ8X*gIMP- zbw0msStDz6N=#DN6v1BWUB~CwIJ(!>2~3(_?7Nv~KfBAK=+g_h7BlA5vKAY&rG4G( zbN)k2!<^l7?Pd1+0 zb22f{Qz-fkPeaj%Wa*bDf|h0ZSUb+1dga-%%V(p`F3obe#xvBsE7Cms z>-&m$dXqgdtX+hmflZTk-|rGuAc9?DlP^eE!+|91L3 z%bENuH+J}Dvzt%t`*)2w;d}o5idZ?G-{&~4%q*FEXs+ku)DrJ?tc!M4d`b>i5!IP$ zC~9=_c0W_>U5%RS)i=(Tsu)~&$a>kV$b~m_hk3Evtgrq@jRP~zCe*gP@cO~Y9%UaM z5^&>qf5Li}J8s>4<=ACT8uG8<;xL>v zA?ACiyRNww$PYtz`Pj!rw34 z+4nErBlNXPIs3!1wJHl9JUPK*dE3~?^YOlatxStrbV8>uabeyT&z^4EoCuEjjY zPjARo?h_OL(oiPoSy*+@q1)xByTR!jC6<{JZZTve9&2467;Uj>gSnr1j;!$C8^ZIi z3+}i7j?x^`1^)WRN_Pq$YcjgsAZ+U{p^(~Y#Bsxr9`-Q&*mp4@meTu~`_*Mm%% zHkVxg35(B5#IC7dF8%9gtIDQ{=lSne|6SPV7~}WaFTKg_ZK-7TMF?vsfDrUFdnx%dOsDn_emv%(?61QdXCn)zcoHI`TRzL}(SKs@KxQDIOjz zB@QCRs{)%`p7LCq6nXvwpUUeD?d(Ik-h*a}>NwKWg&53JP zs65%E*&&#-rPIYpFXlws^ji#*QVW;tU9kDD{g0dW8@AluZnv#A{D#B{OU4=bj+Y%e zU%NLaoaEU%=N_Ay4 zRF6w8Zw~~ziDoo}OLHZcYL=?+h-r`8^e!v1?(wz9+wJ}tDRzp9xt?2{!NdGE<<(oA z((rU0ub+z1uSKVoom}6&iD^lwbEj11)hQ(l({+-TE?-^9B+b?T*0laf*m_o8eG@

UzVkLvphc6_-p^>D9$U5ZeG{7cb; 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 Nc)I$ztaD0e0swZztvCPx diff --git a/crates/zed/resources/app-icon-preview@2x.png b/crates/zed/resources/app-icon-preview@2x.png index f22b8523f9fab4a66c5de3cd75ecbbacfb387766..6e08503927d89ecd76653bcc9ddc9ba03123daa0 100644 GIT binary patch literal 679362 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%0D^}n9G}~jx6jPfw_gVQD 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

hf;Hw@y3Q%rtKu_kX@O#d&u8nbS3S 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℘+f~&e!IEn{EhyU(P4P{Bd;l!Z|AsRn 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 literal 757122 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 Ak9(9=<%6cy6miXa(e+!u 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

;JUq$U@a*1a$*=L>cUkGX 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%0D_`jlQmt+yhOy{G>(6iJMmS_es}Qgq=I~ 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

2|6-aC-0CJs(}7%(mv*{r<3+fB#Q;o2t+2|6Pw! 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 Date: Wed, 26 Jul 2023 13:27:55 -0400 Subject: [PATCH 051/120] v0.98.x dev --- Cargo.lock | 2 +- crates/zed/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 623ebd982f..beecb775d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9536,7 +9536,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.97.0" +version = "0.98.0" dependencies = [ "activity_indicator", "ai", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 8c423eb51b..f246e41681 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Nathan Sobo "] description = "The fast, collaborative code editor." edition = "2021" name = "zed" -version = "0.97.0" +version = "0.98.0" publish = false [lib] From 40fcec1495c36e4d06bc4216897fe5d7c910df07 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Wed, 26 Jul 2023 14:35:23 -0400 Subject: [PATCH 052/120] Follow naming convention for menu items --- crates/project_panel/src/project_panel.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 3e20c4986e..e6e1cff598 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -430,7 +430,7 @@ impl ProjectPanel { menu_entries.push(ContextMenuItem::action("Reveal in Finder", RevealInFinder)); if entry.is_dir() { menu_entries.push(ContextMenuItem::action( - "Search inside", + "Search Inside", NewSearchInDirectory, )); } From 98fde3683448c9057b94be1de13cd3d58f0a6351 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 16:36:39 -0400 Subject: [PATCH 053/120] batch search queries in the vector database --- crates/search/src/project_search.rs | 3 + crates/semantic_index/src/db.rs | 72 ++++++++++++------- crates/semantic_index/src/semantic_index.rs | 76 +++++++++++++++------ 3 files changed, 106 insertions(+), 45 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 52ee12c26d..7f1a639a69 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -30,6 +30,7 @@ use std::{ ops::{Not, Range}, path::PathBuf, sync::Arc, + time::Instant, }; use util::ResultExt as _; use workspace::{ @@ -192,6 +193,7 @@ impl ProjectSearch { exclude_files: Vec, cx: &mut ModelContext, ) { + let t0 = Instant::now(); let search = SemanticIndex::global(cx).map(|index| { index.update(cx, |semantic_index, cx| { semantic_index.search_project( @@ -208,6 +210,7 @@ impl ProjectSearch { self.match_ranges.clear(); self.pending_search = Some(cx.spawn(|this, mut cx| async move { let results = search?.await.log_err()?; + log::trace!("semantic search elapsed: {:?}", t0.elapsed().as_millis()); let (_task, mut match_ranges) = this.update(&mut cx, |this, cx| { this.excerpts.update(cx, |excerpts, cx| { diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index 4bc97da0f0..85631e7fc6 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -267,41 +267,56 @@ impl VectorDatabase { pub fn top_k_search( &self, - worktree_ids: &[i64], query_embedding: &Vec, limit: usize, - include_globs: Vec, - exclude_globs: Vec, - ) -> Result)>> { + file_ids: &[i64], + ) -> Result> { let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); - self.for_each_document( - &worktree_ids, - include_globs, - exclude_globs, - |id, embedding| { - let similarity = dot(&embedding, &query_embedding); - let ix = match results.binary_search_by(|(_, s)| { - similarity.partial_cmp(&s).unwrap_or(Ordering::Equal) - }) { - Ok(ix) => ix, - Err(ix) => ix, - }; - results.insert(ix, (id, similarity)); - results.truncate(limit); - }, - )?; + self.for_each_document(file_ids, |id, embedding| { + let similarity = dot(&embedding, &query_embedding); + let ix = match results + .binary_search_by(|(_, s)| similarity.partial_cmp(&s).unwrap_or(Ordering::Equal)) + { + Ok(ix) => ix, + Err(ix) => ix, + }; + results.insert(ix, (id, similarity)); + results.truncate(limit); + })?; - let ids = results.into_iter().map(|(id, _)| id).collect::>(); - self.get_documents_by_ids(&ids) + Ok(results) } - fn for_each_document( + // pub fn top_k_search( + // &self, + // worktree_ids: &[i64], + // query_embedding: &Vec, + // limit: usize, + // file_ids: Vec, + // ) -> Result)>> { + // let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); + // self.for_each_document(&worktree_ids, file_ids, |id, embedding| { + // let similarity = dot(&embedding, &query_embedding); + // let ix = match results + // .binary_search_by(|(_, s)| similarity.partial_cmp(&s).unwrap_or(Ordering::Equal)) + // { + // Ok(ix) => ix, + // Err(ix) => ix, + // }; + // results.insert(ix, (id, similarity)); + // results.truncate(limit); + // })?; + + // let ids = results.into_iter().map(|(id, _)| id).collect::>(); + // self.get_documents_by_ids(&ids) + // } + + pub fn retrieve_included_file_ids( &self, worktree_ids: &[i64], include_globs: Vec, exclude_globs: Vec, - mut f: impl FnMut(i64, Vec), - ) -> Result<()> { + ) -> Result> { let mut file_query = self.db.prepare( " SELECT @@ -315,6 +330,7 @@ impl VectorDatabase { let mut file_ids = Vec::::new(); let mut rows = file_query.query([ids_to_sql(worktree_ids)])?; + while let Some(row) = rows.next()? { let file_id = row.get(0)?; let relative_path = row.get_ref(1)?.as_str()?; @@ -330,6 +346,10 @@ impl VectorDatabase { } } + Ok(file_ids) + } + + fn for_each_document(&self, file_ids: &[i64], mut f: impl FnMut(i64, Vec)) -> Result<()> { let mut query_statement = self.db.prepare( " SELECT @@ -350,7 +370,7 @@ impl VectorDatabase { Ok(()) } - fn get_documents_by_ids(&self, ids: &[i64]) -> Result)>> { + pub fn get_documents_by_ids(&self, ids: &[i64]) -> Result)>> { let mut statement = self.db.prepare( " SELECT diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index e4a307573a..d2b69a0329 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -20,6 +20,7 @@ use postage::watch; use project::{Fs, Project, WorktreeId}; use smol::channel; use std::{ + cmp::Ordering, collections::HashMap, mem, ops::Range, @@ -704,27 +705,64 @@ impl SemanticIndex { let database_url = self.database_url.clone(); let fs = self.fs.clone(); cx.spawn(|this, mut cx| async move { - let documents = cx - .background() - .spawn(async move { - let database = VectorDatabase::new(fs, database_url).await?; + let database = VectorDatabase::new(fs.clone(), database_url.clone()).await?; - let phrase_embedding = embedding_provider - .embed_batch(vec![&phrase]) - .await? - .into_iter() - .next() - .unwrap(); + let phrase_embedding = embedding_provider + .embed_batch(vec![&phrase]) + .await? + .into_iter() + .next() + .unwrap(); - database.top_k_search( - &worktree_db_ids, - &phrase_embedding, - limit, - include_globs, - exclude_globs, - ) - }) - .await?; + let file_ids = database.retrieve_included_file_ids( + &worktree_db_ids, + include_globs, + exclude_globs, + )?; + + let batch_n = cx.background().num_cpus(); + let batch_size = file_ids.clone().len() / batch_n; + + let mut result_tasks = Vec::new(); + for batch in file_ids.chunks(batch_size) { + let batch = batch.into_iter().map(|v| *v).collect::>(); + let limit = limit.clone(); + let fs = fs.clone(); + let database_url = database_url.clone(); + let phrase_embedding = phrase_embedding.clone(); + let task = cx.background().spawn(async move { + let database = VectorDatabase::new(fs, database_url).await.log_err(); + if database.is_none() { + return Err(anyhow!("failed to acquire database connection")); + } else { + database + .unwrap() + .top_k_search(&phrase_embedding, limit, batch.as_slice()) + } + }); + result_tasks.push(task); + } + + let batch_results = futures::future::join_all(result_tasks).await; + + let mut results = Vec::new(); + for batch_result in batch_results { + if batch_result.is_ok() { + for (id, similarity) in batch_result.unwrap() { + let ix = match results.binary_search_by(|(_, s)| { + similarity.partial_cmp(&s).unwrap_or(Ordering::Equal) + }) { + Ok(ix) => ix, + Err(ix) => ix, + }; + results.insert(ix, (id, similarity)); + results.truncate(limit); + } + } + } + + let ids = results.into_iter().map(|(id, _)| id).collect::>(); + let documents = database.get_documents_by_ids(ids.as_slice())?; let mut tasks = Vec::new(); let mut ranges = Vec::new(); From 89bbcdfa4f0449f3e887118697aa0b0edfb8f941 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 16:51:25 -0400 Subject: [PATCH 054/120] remove debug logging for project_search semantic search --- crates/search/src/project_search.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 7f1a639a69..d84f15a22f 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -193,7 +193,6 @@ impl ProjectSearch { exclude_files: Vec, cx: &mut ModelContext, ) { - let t0 = Instant::now(); let search = SemanticIndex::global(cx).map(|index| { index.update(cx, |semantic_index, cx| { semantic_index.search_project( @@ -210,7 +209,6 @@ impl ProjectSearch { self.match_ranges.clear(); self.pending_search = Some(cx.spawn(|this, mut cx| async move { let results = search?.await.log_err()?; - log::trace!("semantic search elapsed: {:?}", t0.elapsed().as_millis()); let (_task, mut match_ranges) = this.update(&mut cx, |this, cx| { this.excerpts.update(cx, |excerpts, cx| { From 5c48729c7c06efb585322f09a97299145ead13ff Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 16:56:41 -0400 Subject: [PATCH 055/120] managed for small batch size edge case in semantic search --- crates/semantic_index/src/semantic_index.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index d2b69a0329..bd114de216 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -721,7 +721,12 @@ impl SemanticIndex { )?; let batch_n = cx.background().num_cpus(); - let batch_size = file_ids.clone().len() / batch_n; + let ids_len = file_ids.clone().len(); + let batch_size = if ids_len <= batch_n { + ids_len + } else { + ids_len / batch_n + }; let mut result_tasks = Vec::new(); for batch in file_ids.chunks(batch_size) { From 06167889c3eb73226ff2071582378ac57eed5d2c Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 16:59:19 -0400 Subject: [PATCH 056/120] remove default keymap for semantic search modal --- assets/keymaps/default.json | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 7553c19925..a2be44cbce 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -411,7 +411,6 @@ "cmd-k cmd-t": "theme_selector::Toggle", "cmd-k cmd-s": "zed::OpenKeymap", "cmd-t": "project_symbols::Toggle", - "cmd-ctrl-t": "semantic_search::Toggle", "cmd-p": "file_finder::Toggle", "cmd-shift-p": "command_palette::Toggle", "cmd-shift-m": "diagnostics::Deploy", From e2b38f7a31592cce6438a2a7c1fba1460674bec0 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 17:01:44 -0400 Subject: [PATCH 057/120] remove unused imports --- crates/search/src/project_search.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index d84f15a22f..52ee12c26d 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -30,7 +30,6 @@ use std::{ ops::{Not, Range}, path::PathBuf, sync::Arc, - time::Instant, }; use util::ResultExt as _; use workspace::{ From fbede4a5a38c43c22fe66c872f380d054aefd504 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Wed, 26 Jul 2023 17:11:30 -0400 Subject: [PATCH 058/120] removed old code --- crates/semantic_index/src/db.rs | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index 85631e7fc6..d180f5e831 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -287,30 +287,6 @@ impl VectorDatabase { Ok(results) } - // pub fn top_k_search( - // &self, - // worktree_ids: &[i64], - // query_embedding: &Vec, - // limit: usize, - // file_ids: Vec, - // ) -> Result)>> { - // let mut results = Vec::<(i64, f32)>::with_capacity(limit + 1); - // self.for_each_document(&worktree_ids, file_ids, |id, embedding| { - // let similarity = dot(&embedding, &query_embedding); - // let ix = match results - // .binary_search_by(|(_, s)| similarity.partial_cmp(&s).unwrap_or(Ordering::Equal)) - // { - // Ok(ix) => ix, - // Err(ix) => ix, - // }; - // results.insert(ix, (id, similarity)); - // results.truncate(limit); - // })?; - - // let ids = results.into_iter().map(|(id, _)| id).collect::>(); - // self.get_documents_by_ids(&ids) - // } - pub fn retrieve_included_file_ids( &self, worktree_ids: &[i64], From 354c02061276966e5d8dafe27b52624faaac5891 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 26 Jul 2023 14:57:46 -0700 Subject: [PATCH 059/120] Block extra drag events in original drag handlers --- crates/editor/src/element.rs | 8 ++++++++ crates/gpui/src/elements/resizable.rs | 3 +++ crates/terminal/src/terminal.rs | 2 +- crates/terminal_view/src/terminal_element.rs | 4 ++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index b48fa5b56d..b9bf74ee85 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -172,6 +172,10 @@ impl EditorElement { .on_drag(MouseButton::Left, { let position_map = position_map.clone(); move |event, editor, cx| { + if event.end { + return; + } + if !Self::mouse_dragged( editor, event.platform_event, @@ -1235,6 +1239,10 @@ impl EditorElement { }) .on_drag(MouseButton::Left, { move |event, editor: &mut Editor, cx| { + if event.end { + return; + } + let y = event.prev_mouse_position.y(); let new_y = event.position.y(); if thumb_top < y && y < thumb_bottom { diff --git a/crates/gpui/src/elements/resizable.rs b/crates/gpui/src/elements/resizable.rs index da4b3473b3..73bec5521c 100644 --- a/crates/gpui/src/elements/resizable.rs +++ b/crates/gpui/src/elements/resizable.rs @@ -147,6 +147,9 @@ impl Element for Resizable { let max_size = side.relevant_component(constraint.max); let on_resize = self.on_resize.clone(); move |event, view: &mut V, cx| { + if event.end { + return; + } let new_size = min_size .max(prev_size + side.compute_delta(event)) .min(max_size) diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index e3109102d1..06befd5f4e 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -78,7 +78,7 @@ lazy_static! { // * use more strict regex for `file://` protocol matching: original regex has `file:` inside, but we want to avoid matching `some::file::module` strings. static ref URL_REGEX: RegexSearch = RegexSearch::new(r#"(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file://|git://|ssh:|ftp://)[^\u{0000}-\u{001F}\u{007F}-\u{009F}<>"\s{-}\^⟨⟩`]+"#).unwrap(); - static ref WORD_REGEX: RegexSearch = RegexSearch::new("[\\w.:/@-~]+").unwrap(); + static ref WORD_REGEX: RegexSearch = RegexSearch::new(r#"[\w.:/@\-~]+"#).unwrap(); } ///Upward flowing events, for changing the title and such diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index e29beb3ad5..194b0a9259 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -411,6 +411,10 @@ impl TerminalElement { }) // Update drag selections .on_drag(MouseButton::Left, move |event, _: &mut TerminalView, cx| { + if event.end { + return; + } + if cx.is_self_focused() { if let Some(conn_handle) = connection.upgrade(cx) { conn_handle.update(cx, |terminal, cx| { From d5c30709b37ec27c22c08ee3f8fc940bd5520e30 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 26 Jul 2023 15:44:06 -0700 Subject: [PATCH 060/120] Downgrade tree sitter elm to 5.6.4 --- Cargo.lock | 5 ++--- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index beecb775d4..05c5faa787 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8070,9 +8070,8 @@ dependencies = [ [[package]] name = "tree-sitter-elm" -version = "5.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95236155fa1cd5fcf92123e7e6aa7b6e8c6756b54b5d39afd792a23bd6c9eb7b" +version = "5.6.4" +source = "git+https://github.com/elm-tooling/tree-sitter-elm?rev=692c50c0b961364c40299e73c1306aecb5d20f40#692c50c0b961364c40299e73c1306aecb5d20f40" dependencies = [ "cc", "tree-sitter", diff --git a/Cargo.toml b/Cargo.toml index fc021bee79..7bcbc7e2dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -112,7 +112,7 @@ tree-sitter-c = "0.20.1" tree-sitter-cpp = "0.20.0" tree-sitter-css = { git = "https://github.com/tree-sitter/tree-sitter-css", rev = "769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" } tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "4ba9dab6e2602960d95b2b625f3386c27e08084e" } -tree-sitter-elm = "5.6.4" +tree-sitter-elm = { git = "https://github.com/elm-tooling/tree-sitter-elm", rev = "692c50c0b961364c40299e73c1306aecb5d20f40"} tree-sitter-embedded-template = "0.20.0" tree-sitter-glsl = { git = "https://github.com/theHamsta/tree-sitter-glsl", rev = "2a56fb7bc8bb03a1892b4741279dd0a8758b7fb3" } tree-sitter-go = { git = "https://github.com/tree-sitter/tree-sitter-go", rev = "aeb2f33b366fd78d5789ff104956ce23508b85db" } From 2e0d051a787fa04f7e59ea14798a458533b059cf Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 27 Jul 2023 12:34:03 +0200 Subject: [PATCH 061/120] Maintain cursor stack's position correctly when ascending the tree This fixes a bug that could cause the cursor to incorrectly report its start when using `slice` or `seek_forward`, and then calling `prev`. We didn't notice this because we were not testing those three methods together. I suppose this could explain some of the panics we've observed because we do use `slice`/`seek_forward` followed by `prev` calls in production. --- crates/sum_tree/src/cursor.rs | 1 + crates/sum_tree/src/sum_tree.rs | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/sum_tree/src/cursor.rs b/crates/sum_tree/src/cursor.rs index 59165283f6..efd6ac145e 100644 --- a/crates/sum_tree/src/cursor.rs +++ b/crates/sum_tree/src/cursor.rs @@ -438,6 +438,7 @@ where } => { if ascending { entry.index += 1; + entry.position = self.position.clone(); } for (child_tree, child_summary) in child_trees[entry.index..] diff --git a/crates/sum_tree/src/sum_tree.rs b/crates/sum_tree/src/sum_tree.rs index 8d219ca021..24a443051a 100644 --- a/crates/sum_tree/src/sum_tree.rs +++ b/crates/sum_tree/src/sum_tree.rs @@ -738,7 +738,7 @@ mod tests { for _ in 0..num_operations { let splice_end = rng.gen_range(0..tree.extent::(&()).0 + 1); let splice_start = rng.gen_range(0..splice_end + 1); - let count = rng.gen_range(0..3); + let count = rng.gen_range(0..10); let tree_end = tree.extent::(&()); let new_items = rng .sample_iter(distributions::Standard) @@ -805,10 +805,12 @@ mod tests { } assert_eq!(filter_cursor.item(), None); - let mut pos = rng.gen_range(0..tree.extent::(&()).0 + 1); let mut before_start = false; let mut cursor = tree.cursor::(); - cursor.seek(&Count(pos), Bias::Right, &()); + let start_pos = rng.gen_range(0..=reference_items.len()); + cursor.seek(&Count(start_pos), Bias::Right, &()); + let mut pos = rng.gen_range(start_pos..=reference_items.len()); + cursor.seek_forward(&Count(pos), Bias::Right, &()); for i in 0..10 { assert_eq!(cursor.start().0, pos); From 0ab1c6ac8ee896864ad3e3e45b30d0cf5b8c53f9 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 27 Jul 2023 10:25:46 -0400 Subject: [PATCH 062/120] Make LSP status message match new font size of diagnostic message --- styles/src/style_tree/status_bar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 06afc37823..6261939994 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -44,7 +44,7 @@ export default function status_bar(): any { icon_spacing: 4, icon_width: 14, height: 18, - message: text(layer, "sans"), + message: text(layer, "sans", { size: "xs" }), icon_color: foreground(layer), }, state: { From 8c9c8362ec1acfeb3f5e98215b961089f0cad336 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 27 Jul 2023 12:19:07 -0400 Subject: [PATCH 063/120] Update Alacritty --- Cargo.lock | 338 +++++++++++++++++++++++-- crates/terminal/Cargo.toml | 2 +- crates/terminal/src/mappings/colors.rs | 6 +- 3 files changed, 316 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 05c5faa787..bc47e4dc0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,50 +125,52 @@ dependencies = [ [[package]] name = "alacritty_config" -version = "0.1.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +version = "0.1.2-dev" +source = "git+https://github.com/alacritty/alacritty?rev=7b9f32300ee0a249c0872302c97635b460e45ba5#7b9f32300ee0a249c0872302c97635b460e45ba5" dependencies = [ "log", "serde", - "serde_yaml", + "toml 0.7.6", + "winit", ] [[package]] name = "alacritty_config_derive" -version = "0.2.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +version = "0.2.2-dev" +source = "git+https://github.com/alacritty/alacritty?rev=7b9f32300ee0a249c0872302c97635b460e45ba5#7b9f32300ee0a249c0872302c97635b460e45ba5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.27", ] [[package]] name = "alacritty_terminal" -version = "0.17.1-dev" -source = "git+https://github.com/zed-industries/alacritty?rev=a51dbe25d67e84d6ed4261e640d3954fbdd9be45#a51dbe25d67e84d6ed4261e640d3954fbdd9be45" +version = "0.20.0-dev" +source = "git+https://github.com/alacritty/alacritty?rev=7b9f32300ee0a249c0872302c97635b460e45ba5#7b9f32300ee0a249c0872302c97635b460e45ba5" dependencies = [ "alacritty_config", "alacritty_config_derive", "base64 0.13.1", - "bitflags 1.3.2", - "dirs 4.0.0", + "bitflags 2.3.3", + "home", "libc", "log", "mio 0.6.23", "mio-anonymous-pipes", "mio-extras", "miow 0.3.7", - "nix", + "nix 0.26.2", "parking_lot 0.12.1", "regex-automata 0.1.10", "serde", "serde_yaml", "signal-hook", "signal-hook-mio", + "toml 0.7.6", "unicode-width", "vte", - "winapi 0.3.9", + "windows-sys", ] [[package]] @@ -192,7 +194,7 @@ dependencies = [ "alsa-sys", "bitflags 1.3.2", "libc", - "nix", + "nix 0.24.3", ] [[package]] @@ -211,6 +213,30 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" +[[package]] +name = "android-activity" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40bc1575e653f158cbdc6ebcd917b9564e66321c5325c232c3591269c257be69" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -860,6 +886,9 @@ name = "bitflags" version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -897,6 +926,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + [[package]] name = "blocking" version = "1.3.1" @@ -1078,6 +1126,20 @@ dependencies = [ "util", ] +[[package]] +name = "calloop" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" +dependencies = [ + "bitflags 1.3.2", + "log", + "nix 0.25.1", + "slotmap", + "thiserror", + "vec_map", +] + [[package]] name = "cap-fs-ext" version = "0.24.4" @@ -1186,6 +1248,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" version = "0.4.26" @@ -1462,7 +1530,7 @@ dependencies = [ "time 0.3.23", "tokio", "tokio-tungstenite", - "toml", + "toml 0.5.11", "tonic", "tower", "tracing", @@ -1987,6 +2055,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "cursor-icon" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740bb192a8e2d1350119916954f4409ee7f62f149b536911eeb78ba5a20526bf" +dependencies = [ + "serde", +] + [[package]] name = "dashmap" version = "5.5.0" @@ -2171,6 +2248,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "dlib" version = "0.5.2" @@ -3230,6 +3313,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + [[package]] name = "hound" version = "3.5.0" @@ -4399,7 +4491,7 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys", - "num_enum", + "num_enum 0.5.11", "raw-window-handle", "thiserror", ] @@ -4439,9 +4531,33 @@ dependencies = [ "bitflags 1.3.2", "cfg-if 1.0.0", "libc", +] + +[[package]] +name = "nix" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", "memoffset 0.6.5", ] +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "static_assertions", +] + [[package]] name = "node_runtime" version = "0.1.0" @@ -4595,7 +4711,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", ] [[package]] @@ -4610,6 +4735,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.27", +] + [[package]] name = "nvim-rs" version = "0.5.0" @@ -4635,6 +4772,32 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -4753,6 +4916,15 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "orbclient" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1" +dependencies = [ + "redox_syscall 0.3.5", +] + [[package]] name = "ordered-float" version = "2.10.0" @@ -5182,7 +5354,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ - "toml", + "toml 0.5.11", ] [[package]] @@ -5287,7 +5459,7 @@ dependencies = [ "terminal", "text", "thiserror", - "toml", + "toml 0.5.11", "unindent", "util", ] @@ -6623,6 +6795,15 @@ dependencies = [ "syn 2.0.27", ] +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -6669,7 +6850,7 @@ dependencies = [ "smallvec", "sqlez", "staff_mode", - "toml", + "toml 0.5.11", "tree-sitter", "tree-sitter-json 0.19.0", "unindent", @@ -6855,6 +7036,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + [[package]] name = "sluice" version = "0.5.5" @@ -6899,6 +7089,15 @@ dependencies = [ "pin-project-lite 0.1.12", ] +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + [[package]] name = "snippet" version = "0.1.0" @@ -7502,7 +7701,7 @@ dependencies = [ "serde_derive", "serde_json", "settings", - "toml", + "toml 0.5.11", "util", ] @@ -7817,11 +8016,26 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -7830,6 +8044,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap 2.0.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -8589,6 +8805,12 @@ dependencies = [ "workspace", ] +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" @@ -8627,10 +8849,12 @@ dependencies = [ [[package]] name = "vte" -version = "0.10.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" dependencies = [ + "log", + "serde", "utf8parse", "vte_generate_state_changes", ] @@ -8863,7 +9087,7 @@ dependencies = [ "rustix 0.33.7", "serde", "sha2 0.9.9", - "toml", + "toml 0.5.11", "winapi 0.3.9", "zstd", ] @@ -9051,6 +9275,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19353897b48e2c4d849a2d73cb0aeb16dc2be4e00c565abfc11eb65a806e47de" +dependencies = [ + "js-sys", + "once_cell", + "wasm-bindgen", +] + [[package]] name = "webpki" version = "0.21.4" @@ -9366,6 +9601,42 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "winit" +version = "0.29.0-beta.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f1afaf8490cc3f1309520ebb53a4cd3fc3642c7df8064a4b074bb9867998d44" +dependencies = [ + "android-activity", + "atomic-waker", + "bitflags 2.3.3", + "calloop", + "cfg_aliases", + "core-foundation", + "core-graphics", + "cursor-icon", + "dispatch", + "js-sys", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "once_cell", + "orbclient", + "raw-window-handle", + "redox_syscall 0.3.5", + "serde", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "windows-sys", + "xkbcommon-dl", +] + [[package]] name = "winnow" version = "0.5.1" @@ -9483,6 +9754,25 @@ dependencies = [ "libc", ] +[[package]] +name = "xkbcommon-dl" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924668544c48c0133152e7eec86d644a056ca3d09275eb8d5cdb9855f9d8699" +dependencies = [ + "bitflags 2.3.3", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" + [[package]] name = "xmlparser" version = "0.13.5" @@ -9618,7 +9908,7 @@ dependencies = [ "theme_selector", "thiserror", "tiny_http", - "toml", + "toml 0.5.11", "tree-sitter", "tree-sitter-bash", "tree-sitter-c", diff --git a/crates/terminal/Cargo.toml b/crates/terminal/Cargo.toml index a2902234c5..fbcf0ec4b9 100644 --- a/crates/terminal/Cargo.toml +++ b/crates/terminal/Cargo.toml @@ -16,7 +16,7 @@ db = { path = "../db" } theme = { path = "../theme" } util = { path = "../util" } -alacritty_terminal = { git = "https://github.com/zed-industries/alacritty", rev = "a51dbe25d67e84d6ed4261e640d3954fbdd9be45" } +alacritty_terminal = { git = "https://github.com/alacritty/alacritty", rev = "7b9f32300ee0a249c0872302c97635b460e45ba5" } procinfo = { git = "https://github.com/zed-industries/wezterm", rev = "5cd757e5f2eb039ed0c6bb6512223e69d5efc64d", default-features = false } smallvec.workspace = true smol.workspace = true diff --git a/crates/terminal/src/mappings/colors.rs b/crates/terminal/src/mappings/colors.rs index 3f776251b5..5f34327ea0 100644 --- a/crates/terminal/src/mappings/colors.rs +++ b/crates/terminal/src/mappings/colors.rs @@ -114,11 +114,7 @@ fn rgb_for_index(i: &u8) -> (u8, u8, u8) { //Convenience method to convert from a GPUI color to an alacritty Rgb pub fn to_alac_rgb(color: Color) -> AlacRgb { - AlacRgb { - r: color.r, - g: color.g, - b: color.g, - } + AlacRgb::new(color.r, color.g, color.g) } #[cfg(test)] From 85f193dd09a099741cfb2c527c925cc20f0b9f6b Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 27 Jul 2023 12:25:53 -0400 Subject: [PATCH 064/120] Extract syntax highlighting properties from tree-sitter highlight queries --- crates/zed/src/languages/lua/highlights.scm | 4 +- crates/zed/src/languages/php/highlights.scm | 4 +- .../src/languages/typescript/highlights.scm | 6 +- styles/src/style_tree/editor.ts | 30 +- styles/src/theme/create_theme.ts | 11 +- styles/src/theme/syntax.ts | 392 ++++-------------- styles/src/theme/theme_config.ts | 4 +- styles/src/theme/tokens/theme.ts | 6 +- styles/src/themes/atelier/common.ts | 5 +- styles/src/themes/ayu/common.ts | 6 +- styles/src/themes/gruvbox/gruvbox-common.ts | 6 +- styles/src/themes/one/one-dark.ts | 4 +- styles/src/themes/one/one-light.ts | 2 - styles/src/themes/rose-pine/common.ts | 4 +- styles/src/types/extract_syntax_types.ts | 102 +++++ styles/src/types/syntax.ts | 203 +++++++++ 16 files changed, 424 insertions(+), 365 deletions(-) create mode 100644 styles/src/types/extract_syntax_types.ts create mode 100644 styles/src/types/syntax.ts diff --git a/crates/zed/src/languages/lua/highlights.scm b/crates/zed/src/languages/lua/highlights.scm index f061bbf8f9..60ca9de36b 100644 --- a/crates/zed/src/languages/lua/highlights.scm +++ b/crates/zed/src/languages/lua/highlights.scm @@ -158,7 +158,7 @@ [ "{" "}" -] @constructor) +] @method.constructor) ;; Functions @@ -195,4 +195,4 @@ (number) @number -(string) @string \ No newline at end of file +(string) @string diff --git a/crates/zed/src/languages/php/highlights.scm b/crates/zed/src/languages/php/highlights.scm index fcb087c47d..cfb03cbcca 100644 --- a/crates/zed/src/languages/php/highlights.scm +++ b/crates/zed/src/languages/php/highlights.scm @@ -47,8 +47,8 @@ ((name) @constant.builtin (#match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) -((name) @constructor - (#match? @constructor "^[A-Z]")) +((name) @method.constructor +(#match? @method.constructor "^[A-Z]")) ((name) @variable.builtin (#eq? @variable.builtin "this")) diff --git a/crates/zed/src/languages/typescript/highlights.scm b/crates/zed/src/languages/typescript/highlights.scm index bf086ea156..ba6b329e0e 100644 --- a/crates/zed/src/languages/typescript/highlights.scm +++ b/crates/zed/src/languages/typescript/highlights.scm @@ -43,8 +43,8 @@ ; Special identifiers -((identifier) @constructor - (#match? @constructor "^[A-Z]")) +((identifier) @method.constructor + (#match? @method.constructor "^[A-Z]")) ((identifier) @type (#match? @type "^[A-Z]")) @@ -218,4 +218,4 @@ "type" "readonly" "override" -] @keyword \ No newline at end of file +] @keyword diff --git a/styles/src/style_tree/editor.ts b/styles/src/style_tree/editor.ts index acf983e8be..ccbb33e21d 100644 --- a/styles/src/style_tree/editor.ts +++ b/styles/src/style_tree/editor.ts @@ -9,9 +9,9 @@ import { } from "./components" import hover_popover from "./hover_popover" -import { build_syntax } from "../theme/syntax" import { interactive, toggleable } from "../element" import { useTheme } from "../theme" +import chroma from "chroma-js" export default function editor(): any { const theme = useTheme() @@ -48,16 +48,28 @@ export default function editor(): any { } } - const syntax = build_syntax() - return { - text_color: syntax.primary.color, + text_color: theme.syntax.primary.color, background: background(layer), active_line_background: with_opacity(background(layer, "on"), 0.75), highlighted_line_background: background(layer, "on"), // Inline autocomplete suggestions, Co-pilot suggestions, etc. - hint: syntax.hint, - suggestion: syntax.predictive, + hint: chroma + .mix( + theme.ramps.neutral(0.6).hex(), + theme.ramps.blue(0.4).hex(), + 0.45, + "lch" + ) + .hex(), + suggestion: chroma + .mix( + theme.ramps.neutral(0.4).hex(), + theme.ramps.blue(0.4).hex(), + 0.45, + "lch" + ) + .hex(), code_actions: { indicator: toggleable({ base: interactive({ @@ -255,8 +267,8 @@ export default function editor(): any { invalid_warning_diagnostic: diagnostic(theme.middle, "base"), hover_popover: hover_popover(), link_definition: { - color: syntax.link_uri.color, - underline: syntax.link_uri.underline, + color: theme.syntax.link_uri.color, + underline: theme.syntax.link_uri.underline, }, jump_icon: interactive({ base: { @@ -314,6 +326,6 @@ export default function editor(): any { color: border_color(layer), }, }, - syntax, + syntax: theme.syntax, } } diff --git a/styles/src/theme/create_theme.ts b/styles/src/theme/create_theme.ts index d2701f8341..e52c4dc95b 100644 --- a/styles/src/theme/create_theme.ts +++ b/styles/src/theme/create_theme.ts @@ -1,12 +1,12 @@ import { Scale, Color } from "chroma-js" -import { Syntax, ThemeSyntax, SyntaxHighlightStyle } from "./syntax" -export { Syntax, ThemeSyntax, SyntaxHighlightStyle } import { ThemeConfig, ThemeAppearance, - ThemeConfigInputColors, + ThemeConfigInputColors } from "./theme_config" import { get_ramps } from "./ramps" +import { syntaxStyle } from "./syntax" +import { Syntax } from "../types/syntax" export interface Theme { name: string @@ -31,7 +31,7 @@ export interface Theme { modal_shadow: Shadow players: Players - syntax?: Partial + syntax: Syntax } export interface Meta { @@ -119,7 +119,6 @@ export function create_theme(theme: ThemeConfig): Theme { name, appearance, input_color, - override: { syntax }, } = theme const is_light = appearance === ThemeAppearance.Light @@ -162,6 +161,8 @@ export function create_theme(theme: ThemeConfig): Theme { "7": player(ramps.yellow), } + const syntax = syntaxStyle(ramps, theme.override.syntax ? theme.override.syntax : {}) + return { name, is_light, diff --git a/styles/src/theme/syntax.ts b/styles/src/theme/syntax.ts index 540a1d0ff9..d39496a412 100644 --- a/styles/src/theme/syntax.ts +++ b/styles/src/theme/syntax.ts @@ -1,332 +1,80 @@ import deepmerge from "deepmerge" -import { FontWeight, font_weights, useTheme } from "../common" -import chroma from "chroma-js" +import { font_weights, ThemeConfigInputSyntax, RampSet } from "../common" +import { Syntax, SyntaxHighlightStyle, allSyntaxKeys } from "../types/syntax" -export interface SyntaxHighlightStyle { - color?: string - weight?: FontWeight - underline?: boolean - italic?: boolean -} +// Apply defaults to any missing syntax properties that are not defined manually +function apply_defaults(ramps: RampSet, syntax_highlights: Partial): Syntax { + const restKeys: (keyof Syntax)[] = allSyntaxKeys.filter(key => !syntax_highlights[key]) -export interface Syntax { - // == Text Styles ====== / - comment: SyntaxHighlightStyle - // elixir: doc comment - "comment.doc": SyntaxHighlightStyle - primary: SyntaxHighlightStyle - predictive: SyntaxHighlightStyle - hint: SyntaxHighlightStyle + const completeSyntax: Syntax = {} as Syntax - // === Formatted Text ====== / - emphasis: SyntaxHighlightStyle - "emphasis.strong": SyntaxHighlightStyle - title: SyntaxHighlightStyle - link_uri: SyntaxHighlightStyle - link_text: SyntaxHighlightStyle - /** md: indented_code_block, fenced_code_block, code_span */ - "text.literal": SyntaxHighlightStyle - - // == Punctuation ====== / - punctuation: SyntaxHighlightStyle - /** Example: `(`, `[`, `{`...*/ - "punctuation.bracket": SyntaxHighlightStyle - /**., ;*/ - "punctuation.delimiter": SyntaxHighlightStyle - // js, ts: ${, } in a template literal - // yaml: *, &, ---, ... - "punctuation.special": SyntaxHighlightStyle - // md: list_marker_plus, list_marker_dot, etc - "punctuation.list_marker": SyntaxHighlightStyle - - // == Strings ====== / - - string: SyntaxHighlightStyle - // css: color_value - // js: this, super - // toml: offset_date_time, local_date_time... - "string.special": SyntaxHighlightStyle - // elixir: atom, quoted_atom, keyword, quoted_keyword - // ruby: simple_symbol, delimited_symbol... - "string.special.symbol"?: SyntaxHighlightStyle - // elixir, python, yaml...: escape_sequence - "string.escape"?: SyntaxHighlightStyle - // Regular expressions - "string.regex"?: SyntaxHighlightStyle - - // == Types ====== / - // We allow Function here because all JS objects literals have this property - constructor: SyntaxHighlightStyle | Function // eslint-disable-line @typescript-eslint/ban-types - variant: SyntaxHighlightStyle - type: SyntaxHighlightStyle - // js: predefined_type - "type.builtin"?: SyntaxHighlightStyle - - // == Values - variable: SyntaxHighlightStyle - // this, ... - // css: -- (var(--foo)) - // lua: self - "variable.special"?: SyntaxHighlightStyle - // c: statement_identifier, - label: SyntaxHighlightStyle - // css: tag_name, nesting_selector, universal_selector... - tag: SyntaxHighlightStyle - // css: attribute, pseudo_element_selector (tag_name), - attribute: SyntaxHighlightStyle - // css: class_name, property_name, namespace_name... - property: SyntaxHighlightStyle - // true, false, null, nullptr - constant: SyntaxHighlightStyle - // css: @media, @import, @supports... - // js: declare, implements, interface, keyof, public... - keyword: SyntaxHighlightStyle - // note: js enum is currently defined as a keyword - enum: SyntaxHighlightStyle - // -, --, ->, !=, &&, ||, <=... - operator: SyntaxHighlightStyle - number: SyntaxHighlightStyle - boolean: SyntaxHighlightStyle - // elixir: __MODULE__, __DIR__, __ENV__, etc - // go: nil, iota - "constant.builtin"?: SyntaxHighlightStyle - - // == Functions ====== / - - function: SyntaxHighlightStyle - // lua: assert, error, loadfile, tostring, unpack... - "function.builtin"?: SyntaxHighlightStyle - // go: call_expression, method_declaration - // js: call_expression, method_definition, pair (key, arrow function) - // rust: function_item name: (identifier) - "function.definition"?: SyntaxHighlightStyle - // rust: macro_definition name: (identifier) - "function.special.definition"?: SyntaxHighlightStyle - "function.method"?: SyntaxHighlightStyle - // ruby: identifier/"defined?" // Nate note: I don't fully understand this one. - "function.method.builtin"?: SyntaxHighlightStyle - - // == Unsorted ====== / - // lua: hash_bang_line - preproc: SyntaxHighlightStyle - // elixir, python: interpolation (ex: foo in ${foo}) - // js: template_substitution - embedded: SyntaxHighlightStyle -} - -export type ThemeSyntax = Partial - -const default_syntax_highlight_style: Omit = { - weight: "normal", - underline: false, - italic: false, -} - -function build_default_syntax(): Syntax { - const theme = useTheme() - - // Make a temporary object that is allowed to be missing - // the "color" property for each style - const syntax: { - [key: string]: Omit - } = {} - - // then spread the default to each style - for (const key of Object.keys({} as Syntax)) { - syntax[key as keyof Syntax] = { - ...default_syntax_highlight_style, - } + const defaults: SyntaxHighlightStyle = { + color: ramps.neutral(1).hex(), } - // Mix the neutral and blue colors to get a - // predictive color distinct from any other color in the theme - const predictive = chroma - .mix( - theme.ramps.neutral(0.4).hex(), - theme.ramps.blue(0.4).hex(), - 0.45, - "lch" - ) - .hex() - // Mix the neutral and green colors to get a - // hint color distinct from any other color in the theme - const hint = chroma - .mix( - theme.ramps.neutral(0.6).hex(), - theme.ramps.blue(0.4).hex(), - 0.45, - "lch" - ) - .hex() - - const color = { - primary: theme.ramps.neutral(1).hex(), - comment: theme.ramps.neutral(0.71).hex(), - punctuation: theme.ramps.neutral(0.86).hex(), - predictive: predictive, - hint: hint, - emphasis: theme.ramps.blue(0.5).hex(), - string: theme.ramps.orange(0.5).hex(), - function: theme.ramps.yellow(0.5).hex(), - type: theme.ramps.cyan(0.5).hex(), - constructor: theme.ramps.blue(0.5).hex(), - variant: theme.ramps.blue(0.5).hex(), - property: theme.ramps.blue(0.5).hex(), - enum: theme.ramps.orange(0.5).hex(), - operator: theme.ramps.orange(0.5).hex(), - number: theme.ramps.green(0.5).hex(), - boolean: theme.ramps.green(0.5).hex(), - constant: theme.ramps.green(0.5).hex(), - keyword: theme.ramps.blue(0.5).hex(), - } - - // Then assign colors and use Syntax to enforce each style getting it's own color - const default_syntax: Syntax = { - ...syntax, - comment: { - color: color.comment, - }, - "comment.doc": { - color: color.comment, - }, - primary: { - color: color.primary, - }, - predictive: { - color: color.predictive, - italic: true, - }, - hint: { - color: color.hint, - weight: font_weights.bold, - }, - emphasis: { - color: color.emphasis, - }, - "emphasis.strong": { - color: color.emphasis, - weight: font_weights.bold, - }, - title: { - color: color.primary, - weight: font_weights.bold, - }, - link_uri: { - color: theme.ramps.green(0.5).hex(), - underline: true, - }, - link_text: { - color: theme.ramps.orange(0.5).hex(), - italic: true, - }, - "text.literal": { - color: color.string, - }, - punctuation: { - color: color.punctuation, - }, - "punctuation.bracket": { - color: color.punctuation, - }, - "punctuation.delimiter": { - color: color.punctuation, - }, - "punctuation.special": { - color: theme.ramps.neutral(0.86).hex(), - }, - "punctuation.list_marker": { - color: color.punctuation, - }, - string: { - color: color.string, - }, - "string.special": { - color: color.string, - }, - "string.special.symbol": { - color: color.string, - }, - "string.escape": { - color: color.comment, - }, - "string.regex": { - color: color.string, - }, - constructor: { - color: theme.ramps.blue(0.5).hex(), - }, - variant: { - color: theme.ramps.blue(0.5).hex(), - }, - type: { - color: color.type, - }, - variable: { - color: color.primary, - }, - label: { - color: theme.ramps.blue(0.5).hex(), - }, - tag: { - color: theme.ramps.blue(0.5).hex(), - }, - attribute: { - color: theme.ramps.blue(0.5).hex(), - }, - property: { - color: theme.ramps.blue(0.5).hex(), - }, - constant: { - color: color.constant, - }, - keyword: { - color: color.keyword, - }, - enum: { - color: color.enum, - }, - operator: { - color: color.operator, - }, - number: { - color: color.number, - }, - boolean: { - color: color.boolean, - }, - function: { - color: color.function, - }, - preproc: { - color: color.primary, - }, - embedded: { - color: color.primary, - }, - } - - return default_syntax -} - -export function build_syntax(): Syntax { - const theme = useTheme() - - const default_syntax: Syntax = build_default_syntax() - - if (!theme.syntax) { - return default_syntax - } - - const syntax = deepmerge>( - default_syntax, - theme.syntax, + for (const key of restKeys) { { - arrayMerge: (destinationArray, sourceArray) => [ - ...destinationArray, - ...sourceArray, - ], + completeSyntax[key] = { + ...defaults, + } } - ) + } - return syntax + const mergedBaseSyntax = Object.assign(completeSyntax, syntax_highlights) + + return mergedBaseSyntax +} + +// Merge the base syntax with the theme syntax overrides +// This is a deep merge, so any nested properties will be merged as well +// This allows for a theme to only override a single property of a syntax highlight style +const merge_syntax = (baseSyntax: Syntax, theme_syntax_overrides: ThemeConfigInputSyntax): Syntax => { + return deepmerge(baseSyntax, theme_syntax_overrides, { + arrayMerge: (destinationArray, sourceArray) => [ + ...destinationArray, + ...sourceArray, + ], + }) +} + +/** Returns a complete Syntax object of the combined styles of a theme's syntax overrides and the default syntax styles */ +export const syntaxStyle = (ramps: RampSet, theme_syntax_overrides: ThemeConfigInputSyntax): Syntax => { + const syntax_highlights: Partial = { + "comment": { color: ramps.neutral(0.71).hex() }, + "comment.doc": { color: ramps.neutral(0.71).hex() }, + primary: { color: ramps.neutral(1).hex() }, + emphasis: { color: ramps.blue(0.5).hex() }, + "emphasis.strong": { color: ramps.blue(0.5).hex(), weight: font_weights.bold }, + link_uri: { color: ramps.green(0.5).hex(), underline: true }, + link_text: { color: ramps.orange(0.5).hex(), italic: true }, + "text.literal": { color: ramps.orange(0.5).hex() }, + punctuation: { color: ramps.neutral(0.86).hex() }, + "punctuation.bracket": { color: ramps.neutral(0.86).hex() }, + "punctuation.special": { color: ramps.neutral(0.86).hex() }, + "punctuation.delimiter": { color: ramps.neutral(0.86).hex() }, + "punctuation.list_marker": { color: ramps.neutral(0.86).hex() }, + string: { color: ramps.orange(0.5).hex() }, + "string.special": { color: ramps.orange(0.5).hex() }, + "string.special.symbol": { color: ramps.orange(0.5).hex() }, + "string.escape": { color: ramps.neutral(0.71).hex() }, + "string.regex": { color: ramps.orange(0.5).hex() }, + "method.constructor": { color: ramps.blue(0.5).hex() }, + type: { color: ramps.cyan(0.5).hex() }, + variable: { color: ramps.neutral(1).hex() }, + label: { color: ramps.blue(0.5).hex() }, + attribute: { color: ramps.blue(0.5).hex() }, + property: { color: ramps.blue(0.5).hex() }, + constant: { color: ramps.green(0.5).hex() }, + keyword: { color: ramps.blue(0.5).hex() }, + operator: { color: ramps.orange(0.5).hex() }, + number: { color: ramps.green(0.5).hex() }, + boolean: { color: ramps.green(0.5).hex() }, + function: { color: ramps.yellow(0.5).hex() }, + preproc: { color: ramps.neutral(1).hex() }, + embedded: { color: ramps.neutral(1).hex() }, + } + + const baseSyntax = apply_defaults(ramps, syntax_highlights) + const mergedSyntax = merge_syntax(baseSyntax, theme_syntax_overrides) + return mergedSyntax } diff --git a/styles/src/theme/theme_config.ts b/styles/src/theme/theme_config.ts index bc8f07425f..8473bbb600 100644 --- a/styles/src/theme/theme_config.ts +++ b/styles/src/theme/theme_config.ts @@ -1,5 +1,5 @@ import { Scale, Color } from "chroma-js" -import { Syntax } from "./syntax" +import { SyntaxHighlightStyle, SyntaxProperty } from "../types/syntax" interface ThemeMeta { /** The name of the theme */ @@ -55,7 +55,7 @@ export type ThemeConfigInputColorsKeys = keyof ThemeConfigInputColors * } * ``` */ -export type ThemeConfigInputSyntax = Partial +export type ThemeConfigInputSyntax = Partial>> interface ThemeConfigOverrides { syntax: ThemeConfigInputSyntax diff --git a/styles/src/theme/tokens/theme.ts b/styles/src/theme/tokens/theme.ts index f759bc8139..f9e83e0512 100644 --- a/styles/src/theme/tokens/theme.ts +++ b/styles/src/theme/tokens/theme.ts @@ -6,15 +6,13 @@ import { } from "@tokens-studio/types" import { Shadow, - SyntaxHighlightStyle, - ThemeSyntax, } from "../create_theme" import { LayerToken, layer_token } from "./layer" import { PlayersToken, players_token } from "./players" import { color_token } from "./token" -import { Syntax } from "../syntax" import editor from "../../style_tree/editor" import { useTheme } from "../../../src/common" +import { Syntax, SyntaxHighlightStyle } from "../../types/syntax" interface ThemeTokens { name: SingleOtherToken @@ -51,7 +49,7 @@ const modal_shadow_token = (): SingleBoxShadowToken => { return create_shadow_token(shadow, "modal_shadow") } -type ThemeSyntaxColorTokens = Record +type ThemeSyntaxColorTokens = Record function syntax_highlight_style_color_tokens( syntax: Syntax diff --git a/styles/src/themes/atelier/common.ts b/styles/src/themes/atelier/common.ts index b76ccc5b60..09226b336c 100644 --- a/styles/src/themes/atelier/common.ts +++ b/styles/src/themes/atelier/common.ts @@ -1,4 +1,4 @@ -import { ThemeLicenseType, ThemeSyntax, ThemeFamilyMeta } from "../../common" +import { ThemeLicenseType, ThemeFamilyMeta, ThemeConfigInputSyntax } from "../../common" export interface Variant { colors: { @@ -29,7 +29,7 @@ export const meta: ThemeFamilyMeta = { "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/", } -export const build_syntax = (variant: Variant): ThemeSyntax => { +export const build_syntax = (variant: Variant): ThemeConfigInputSyntax => { const { colors } = variant return { primary: { color: colors.base06 }, @@ -50,7 +50,6 @@ export const build_syntax = (variant: Variant): ThemeSyntax => { property: { color: colors.base08 }, variable: { color: colors.base06 }, "variable.special": { color: colors.base0E }, - variant: { color: colors.base0A }, keyword: { color: colors.base0E }, } } diff --git a/styles/src/themes/ayu/common.ts b/styles/src/themes/ayu/common.ts index 2bd0bbf259..8704455886 100644 --- a/styles/src/themes/ayu/common.ts +++ b/styles/src/themes/ayu/common.ts @@ -3,8 +3,8 @@ import { chroma, color_ramp, ThemeLicenseType, - ThemeSyntax, ThemeFamilyMeta, + ThemeConfigInputSyntax, } from "../../common" export const ayu = { @@ -27,7 +27,7 @@ export const build_theme = (t: typeof dark, light: boolean) => { purple: t.syntax.constant.hex(), } - const syntax: ThemeSyntax = { + const syntax: ThemeConfigInputSyntax = { constant: { color: t.syntax.constant.hex() }, "string.regex": { color: t.syntax.regexp.hex() }, string: { color: t.syntax.string.hex() }, @@ -61,7 +61,7 @@ export const build_theme = (t: typeof dark, light: boolean) => { } } -export const build_syntax = (t: typeof dark): ThemeSyntax => { +export const build_syntax = (t: typeof dark): ThemeConfigInputSyntax => { return { constant: { color: t.syntax.constant.hex() }, "string.regex": { color: t.syntax.regexp.hex() }, diff --git a/styles/src/themes/gruvbox/gruvbox-common.ts b/styles/src/themes/gruvbox/gruvbox-common.ts index 2fa6b58faa..95e45efa95 100644 --- a/styles/src/themes/gruvbox/gruvbox-common.ts +++ b/styles/src/themes/gruvbox/gruvbox-common.ts @@ -4,8 +4,8 @@ import { ThemeAppearance, ThemeLicenseType, ThemeConfig, - ThemeSyntax, ThemeFamilyMeta, + ThemeConfigInputSyntax, } from "../../common" const meta: ThemeFamilyMeta = { @@ -214,7 +214,7 @@ const build_variant = (variant: Variant): ThemeConfig => { magenta: color_ramp(chroma(variant.colors.gray)), } - const syntax: ThemeSyntax = { + const syntax: ThemeConfigInputSyntax = { primary: { color: neutral[is_light ? 0 : 8] }, "text.literal": { color: colors.blue }, comment: { color: colors.gray }, @@ -229,7 +229,7 @@ const build_variant = (variant: Variant): ThemeConfig => { "string.special.symbol": { color: colors.aqua }, "string.regex": { color: colors.orange }, type: { color: colors.yellow }, - enum: { color: colors.orange }, + // enum: { color: colors.orange }, tag: { color: colors.aqua }, constant: { color: colors.yellow }, keyword: { color: colors.red }, diff --git a/styles/src/themes/one/one-dark.ts b/styles/src/themes/one/one-dark.ts index f672b892ee..97f3922f36 100644 --- a/styles/src/themes/one/one-dark.ts +++ b/styles/src/themes/one/one-dark.ts @@ -54,7 +54,6 @@ export const theme: ThemeConfig = { syntax: { boolean: { color: color.orange }, comment: { color: color.grey }, - enum: { color: color.red }, "emphasis.strong": { color: color.orange }, function: { color: color.blue }, keyword: { color: color.purple }, @@ -73,8 +72,7 @@ export const theme: ThemeConfig = { "text.literal": { color: color.green }, type: { color: color.teal }, "variable.special": { color: color.orange }, - variant: { color: color.blue }, - constructor: { color: color.blue }, + "method.constructor": { color: color.blue }, }, }, } diff --git a/styles/src/themes/one/one-light.ts b/styles/src/themes/one/one-light.ts index c3de7826c9..6554287578 100644 --- a/styles/src/themes/one/one-light.ts +++ b/styles/src/themes/one/one-light.ts @@ -55,7 +55,6 @@ export const theme: ThemeConfig = { syntax: { boolean: { color: color.orange }, comment: { color: color.grey }, - enum: { color: color.red }, "emphasis.strong": { color: color.orange }, function: { color: color.blue }, keyword: { color: color.purple }, @@ -73,7 +72,6 @@ export const theme: ThemeConfig = { "text.literal": { color: color.green }, type: { color: color.teal }, "variable.special": { color: color.orange }, - variant: { color: color.blue }, }, }, } diff --git a/styles/src/themes/rose-pine/common.ts b/styles/src/themes/rose-pine/common.ts index 5c5482a754..decccc0a6d 100644 --- a/styles/src/themes/rose-pine/common.ts +++ b/styles/src/themes/rose-pine/common.ts @@ -1,4 +1,4 @@ -import { ThemeSyntax } from "../../common" +import { ThemeConfigInputSyntax } from "../../common" export const color = { default: { @@ -54,7 +54,7 @@ export const color = { }, } -export const syntax = (c: typeof color.default): Partial => { +export const syntax = (c: typeof color.default): ThemeConfigInputSyntax => { return { comment: { color: c.muted }, operator: { color: c.pine }, diff --git a/styles/src/types/extract_syntax_types.ts b/styles/src/types/extract_syntax_types.ts new file mode 100644 index 0000000000..3bf0895182 --- /dev/null +++ b/styles/src/types/extract_syntax_types.ts @@ -0,0 +1,102 @@ +import fs from 'fs' +import path from 'path' +import readline from 'readline' + +function escapeTypeName(name: string): string { + return `'${name.replace('@', '').toLowerCase()}'` +} + +const generatedNote = `// This file is generated by extract_syntax_types.ts +// Do not edit this file directly +// It is generated from the highlight.scm files in the zed crate + +// To regenerate this file manually: +// 'npm run extract-syntax-types' from ./styles` + +const defaultTextProperty = ` /** Default text color */ + | 'primary'` + +const main = async () => { + const pathFromRoot = 'crates/zed/src/languages' + const directoryPath = path.join(__dirname, '../../../', pathFromRoot) + const stylesMap: Record> = {} + const propertyLanguageMap: Record> = {} + + const processFile = async (filePath: string, language: string) => { + const fileStream = fs.createReadStream(filePath) + const rl = readline.createInterface({ + input: fileStream, + crlfDelay: Infinity, + }) + + for await (const line of rl) { + const cleanedLine = line.replace(/"@[a-zA-Z0-9_.]*"/g, "") + const match = cleanedLine.match(/@(\w+\.*)*/g) + if (match) { + match.forEach((property) => { + const formattedProperty = escapeTypeName(property) + // Only add non-empty properties + if (formattedProperty !== "''") { + if (!propertyLanguageMap[formattedProperty]) { + propertyLanguageMap[formattedProperty] = new Set() + } + propertyLanguageMap[formattedProperty].add(language) + } + }) + } + } + } + + const directories = fs.readdirSync(directoryPath, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name) + + for (const dir of directories) { + const highlightsFilePath = path.join(directoryPath, dir, 'highlights.scm') + if (fs.existsSync(highlightsFilePath)) { + await processFile(highlightsFilePath, dir) + } + } + + for (const [language, properties] of Object.entries(stylesMap)) { + console.log(`${language}: ${Array.from(properties).join(', ')}`) + } + + const sortedProperties = Object.entries(propertyLanguageMap).sort(([propA], [propB]) => propA.localeCompare(propB)) + + const outStream = fs.createWriteStream(path.join(__dirname, 'syntax.ts')) + let allProperties = "" + const syntaxKeys = [] + for (const [property, languages] of sortedProperties) { + let languagesArray = Array.from(languages) + const moreThanSeven = languagesArray.length > 7 + // Limit to the first 7 languages, append "..." if more than 7 + languagesArray = languagesArray.slice(0, 7) + if (moreThanSeven) { + languagesArray.push('...') + } + const languagesString = languagesArray.join(', ') + const comment = `/** ${languagesString} */` + allProperties += ` ${comment}\n | ${property} \n` + syntaxKeys.push(property) + } + outStream.write(`${generatedNote} + +export type SyntaxHighlightStyle = { + color: string, + fade_out?: number, + italic?: boolean, + underline?: boolean, + weight?: string, +} + +export type Syntax = Record +export type SyntaxOverride = Partial + +export type SyntaxProperty = \n${defaultTextProperty}\n\n${allProperties} + +export const allSyntaxKeys: SyntaxProperty[] = [\n ${syntaxKeys.join(',\n ')}\n]`) + outStream.end() +} + +main().catch(console.error) diff --git a/styles/src/types/syntax.ts b/styles/src/types/syntax.ts new file mode 100644 index 0000000000..b74edfdf84 --- /dev/null +++ b/styles/src/types/syntax.ts @@ -0,0 +1,203 @@ +// This file is generated by extract_syntax_types.ts +// Do not edit this file directly +// It is generated from the highlight.scm files in the zed crate + +// To regenerate this file manually: +// 'npm run extract-syntax-types' from ./styles + +export type SyntaxHighlightStyle = { + color: string, + fade_out?: number, + italic?: boolean, + underline?: boolean, + weight?: string, +} + +export type Syntax = Record +export type SyntaxOverride = Partial + +export type SyntaxProperty = + /** Default text color */ + | 'primary' + + /** elixir */ + | '__attribute__' + /** elixir */ + | '__name__' + /** elixir */ + | '_sigil_name' + /** css, heex, lua */ + | 'attribute' + /** javascript, lua, tsx, typescript, yaml */ + | 'boolean' + /** elixir */ + | 'comment.doc' + /** elixir */ + | 'comment.unused' + /** bash, c, cpp, css, elixir, elm, erb, ... */ + | 'comment' + /** elixir, go, javascript, lua, php, python, racket, ... */ + | 'constant.builtin' + /** bash, c, cpp, elixir, elm, glsl, heex, ... */ + | 'constant' + /** glsl */ + | 'delimiter' + /** bash, elixir, javascript, python, ruby, tsx, typescript */ + | 'embedded' + /** markdown */ + | 'emphasis.strong' + /** markdown */ + | 'emphasis' + /** go, python, racket, ruby, scheme */ + | 'escape' + /** lua */ + | 'field' + /** lua, php, python */ + | 'function.builtin' + /** elm, lua, rust */ + | 'function.definition' + /** ruby */ + | 'function.method.builtin' + /** go, javascript, php, python, ruby, rust, tsx, ... */ + | 'function.method' + /** rust */ + | 'function.special.definition' + /** c, cpp, glsl, rust */ + | 'function.special' + /** bash, c, cpp, css, elixir, elm, glsl, ... */ + | 'function' + /** elm */ + | 'identifier' + /** glsl */ + | 'keyword.function' + /** bash, c, cpp, css, elixir, elm, erb, ... */ + | 'keyword' + /** c, cpp, glsl */ + | 'label' + /** markdown */ + | 'link_text' + /** markdown */ + | 'link_uri' + /** lua, php, tsx, typescript */ + | 'method.constructor' + /** lua */ + | 'method' + /** heex */ + | 'module' + /** svelte */ + | 'none' + /** bash, c, cpp, css, elixir, glsl, go, ... */ + | 'number' + /** bash, c, cpp, css, elixir, elm, glsl, ... */ + | 'operator' + /** lua */ + | 'parameter' + /** lua */ + | 'preproc' + /** bash, c, cpp, css, glsl, go, html, ... */ + | 'property' + /** c, cpp, elixir, elm, heex, html, javascript, ... */ + | 'punctuation.bracket' + /** c, cpp, css, elixir, elm, heex, javascript, ... */ + | 'punctuation.delimiter' + /** markdown */ + | 'punctuation.list_marker' + /** elixir, javascript, python, ruby, tsx, typescript, yaml */ + | 'punctuation.special' + /** elixir */ + | 'punctuation' + /** glsl */ + | 'storageclass' + /** elixir, elm, yaml */ + | 'string.escape' + /** elixir, javascript, racket, ruby, tsx, typescript */ + | 'string.regex' + /** elixir, ruby */ + | 'string.special.symbol' + /** css, elixir, toml */ + | 'string.special' + /** bash, c, cpp, css, elixir, elm, glsl, ... */ + | 'string' + /** svelte */ + | 'tag.delimiter' + /** css, heex, php, svelte */ + | 'tag' + /** markdown */ + | 'text.literal' + /** markdown */ + | 'title' + /** javascript, php, rust, tsx, typescript */ + | 'type.builtin' + /** glsl */ + | 'type.qualifier' + /** c, cpp, css, elixir, elm, glsl, go, ... */ + | 'type' + /** glsl, php */ + | 'variable.builtin' + /** cpp, css, javascript, lua, racket, ruby, rust, ... */ + | 'variable.special' + /** c, cpp, elm, glsl, go, javascript, lua, ... */ + | 'variable' + + +export const allSyntaxKeys: SyntaxProperty[] = [ + '__attribute__', + '__name__', + '_sigil_name', + 'attribute', + 'boolean', + 'comment.doc', + 'comment.unused', + 'comment', + 'constant.builtin', + 'constant', + 'delimiter', + 'embedded', + 'emphasis.strong', + 'emphasis', + 'escape', + 'field', + 'function.builtin', + 'function.definition', + 'function.method.builtin', + 'function.method', + 'function.special.definition', + 'function.special', + 'function', + 'identifier', + 'keyword.function', + 'keyword', + 'label', + 'link_text', + 'link_uri', + 'method.constructor', + 'method', + 'module', + 'none', + 'number', + 'operator', + 'parameter', + 'preproc', + 'property', + 'punctuation.bracket', + 'punctuation.delimiter', + 'punctuation.list_marker', + 'punctuation.special', + 'punctuation', + 'storageclass', + 'string.escape', + 'string.regex', + 'string.special.symbol', + 'string.special', + 'string', + 'tag.delimiter', + 'tag', + 'text.literal', + 'title', + 'type.builtin', + 'type.qualifier', + 'type', + 'variable.builtin', + 'variable.special', + 'variable' +] \ No newline at end of file From 86fa27eb54838e69292307c30ac611e0d32993c5 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 27 Jul 2023 12:41:19 -0400 Subject: [PATCH 065/120] Update uses of `#` to `.` in our scheme files where they are interchangeable. uses of `#` cause ERRORs in our scheme highlighting --- crates/zed/src/languages/bash/highlights.scm | 2 +- crates/zed/src/languages/c/highlights.scm | 3 +-- crates/zed/src/languages/c/injections.scm | 4 ++-- crates/zed/src/languages/cpp/highlights.scm | 4 ++-- crates/zed/src/languages/cpp/injections.scm | 4 ++-- crates/zed/src/languages/css/highlights.scm | 2 +- crates/zed/src/languages/elixir/embedding.scm | 6 +++--- crates/zed/src/languages/elixir/highlights.scm | 18 +++++++++--------- crates/zed/src/languages/elixir/injections.scm | 4 ++-- crates/zed/src/languages/elixir/outline.scm | 4 ++-- crates/zed/src/languages/elm/injections.scm | 2 +- crates/zed/src/languages/erb/injections.scm | 8 ++++---- crates/zed/src/languages/glsl/highlights.scm | 4 ++-- crates/zed/src/languages/heex/injections.scm | 6 +++--- crates/zed/src/languages/html/injections.scm | 4 ++-- .../src/languages/javascript/highlights.scm | 6 +++--- crates/zed/src/languages/lua/highlights.scm | 6 +++--- crates/zed/src/languages/php/highlights.scm | 8 ++++---- crates/zed/src/languages/php/injections.scm | 4 ++-- crates/zed/src/languages/python/highlights.scm | 8 ++++---- crates/zed/src/languages/racket/highlights.scm | 7 +++---- crates/zed/src/languages/racket/outline.scm | 4 ++-- crates/zed/src/languages/ruby/brackets.scm | 2 +- crates/zed/src/languages/ruby/highlights.scm | 8 ++++---- crates/zed/src/languages/rust/highlights.scm | 4 ++-- crates/zed/src/languages/rust/injections.scm | 4 ++-- crates/zed/src/languages/scheme/highlights.scm | 4 ++-- crates/zed/src/languages/scheme/outline.scm | 4 ++-- crates/zed/src/languages/svelte/injections.scm | 14 +++++++------- .../src/languages/typescript/highlights.scm | 6 +++--- 30 files changed, 81 insertions(+), 83 deletions(-) diff --git a/crates/zed/src/languages/bash/highlights.scm b/crates/zed/src/languages/bash/highlights.scm index a72c5468ed..f3e0c9529a 100644 --- a/crates/zed/src/languages/bash/highlights.scm +++ b/crates/zed/src/languages/bash/highlights.scm @@ -54,5 +54,5 @@ ( (command (_) @constant) - (#match? @constant "^-") + (.match? @constant "^-") ) diff --git a/crates/zed/src/languages/c/highlights.scm b/crates/zed/src/languages/c/highlights.scm index 064ec61a37..5245e53a05 100644 --- a/crates/zed/src/languages/c/highlights.scm +++ b/crates/zed/src/languages/c/highlights.scm @@ -86,7 +86,7 @@ (identifier) @variable ((identifier) @constant - (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) (call_expression function: (identifier) @function) @@ -106,4 +106,3 @@ (primitive_type) (sized_type_specifier) ] @type - diff --git a/crates/zed/src/languages/c/injections.scm b/crates/zed/src/languages/c/injections.scm index 845a63bd1b..fbc7d83f82 100644 --- a/crates/zed/src/languages/c/injections.scm +++ b/crates/zed/src/languages/c/injections.scm @@ -1,7 +1,7 @@ (preproc_def value: (preproc_arg) @content - (#set! "language" "c")) + (.set! "language" "c")) (preproc_function_def value: (preproc_arg) @content - (#set! "language" "c")) \ No newline at end of file + (.set! "language" "c")) diff --git a/crates/zed/src/languages/cpp/highlights.scm b/crates/zed/src/languages/cpp/highlights.scm index bcfa01ca5c..a040b1d053 100644 --- a/crates/zed/src/languages/cpp/highlights.scm +++ b/crates/zed/src/languages/cpp/highlights.scm @@ -31,13 +31,13 @@ declarator: (field_identifier) @function) ((namespace_identifier) @type - (#match? @type "^[A-Z]")) + (.match? @type "^[A-Z]")) (auto) @type (type_identifier) @type ((identifier) @constant - (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) (field_identifier) @property (statement_identifier) @label diff --git a/crates/zed/src/languages/cpp/injections.scm b/crates/zed/src/languages/cpp/injections.scm index eca372d577..3c94ba4061 100644 --- a/crates/zed/src/languages/cpp/injections.scm +++ b/crates/zed/src/languages/cpp/injections.scm @@ -1,7 +1,7 @@ (preproc_def value: (preproc_arg) @content - (#set! "language" "c++")) + (.set! "language" "c++")) (preproc_function_def value: (preproc_arg) @content - (#set! "language" "c++")) \ No newline at end of file + (.set! "language" "c++")) diff --git a/crates/zed/src/languages/css/highlights.scm b/crates/zed/src/languages/css/highlights.scm index e271d8583c..83f99861c5 100644 --- a/crates/zed/src/languages/css/highlights.scm +++ b/crates/zed/src/languages/css/highlights.scm @@ -46,7 +46,7 @@ (property_name) (plain_value) ] @variable.special - (#match? @variable.special "^--") + (.match? @variable.special "^--") ) [ diff --git a/crates/zed/src/languages/elixir/embedding.scm b/crates/zed/src/languages/elixir/embedding.scm index 16ad20746d..3c523c2487 100644 --- a/crates/zed/src/languages/elixir/embedding.scm +++ b/crates/zed/src/languages/elixir/embedding.scm @@ -3,7 +3,7 @@ operator: "@" operand: (call target: (identifier) @unary - (#match? @unary "^(doc)$")) + (.match? @unary "^(doc)$")) ) @context . (call @@ -18,10 +18,10 @@ target: (identifier) @name) operator: "when") ]) - (#match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + (.match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item ) (call target: (identifier) @name (arguments (alias) @name) - (#match? @name "^(defmodule|defprotocol)$")) @item + (.match? @name "^(defmodule|defprotocol)$")) @item diff --git a/crates/zed/src/languages/elixir/highlights.scm b/crates/zed/src/languages/elixir/highlights.scm index 0e779d195c..a8fd7eb45a 100644 --- a/crates/zed/src/languages/elixir/highlights.scm +++ b/crates/zed/src/languages/elixir/highlights.scm @@ -54,13 +54,13 @@ (sigil_name) @__name__ quoted_start: _ @string quoted_end: _ @string - (#match? @__name__ "^[sS]$")) @string + (.match? @__name__ "^[sS]$")) @string (sigil (sigil_name) @__name__ quoted_start: _ @string.regex quoted_end: _ @string.regex - (#match? @__name__ "^[rR]$")) @string.regex + (.match? @__name__ "^[rR]$")) @string.regex (sigil (sigil_name) @__name__ @@ -69,7 +69,7 @@ ( (identifier) @comment.unused - (#match? @comment.unused "^_") + (.match? @comment.unused "^_") ) (call @@ -91,7 +91,7 @@ operator: "|>" right: (identifier)) ]) - (#match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) + (.match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) (binary_operator operator: "|>" @@ -99,15 +99,15 @@ (call target: (identifier) @keyword - (#match? @keyword "^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$")) + (.match? @keyword "^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$")) (call target: (identifier) @keyword - (#match? @keyword "^(alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) + (.match? @keyword "^(alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) ( (identifier) @constant.builtin - (#match? @constant.builtin "^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$") + (.match? @constant.builtin "^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$") ) (unary_operator @@ -121,7 +121,7 @@ (sigil) (boolean) ] @comment.doc)) - (#match? @__attribute__ "^(moduledoc|typedoc|doc)$")) + (.match? @__attribute__ "^(moduledoc|typedoc|doc)$")) (comment) @comment @@ -150,4 +150,4 @@ ((sigil (sigil_name) @_sigil_name (quoted_content) @embedded) - (#eq? @_sigil_name "H")) + (.eq? @_sigil_name "H")) diff --git a/crates/zed/src/languages/elixir/injections.scm b/crates/zed/src/languages/elixir/injections.scm index 4de229f104..5d445a7b82 100644 --- a/crates/zed/src/languages/elixir/injections.scm +++ b/crates/zed/src/languages/elixir/injections.scm @@ -3,5 +3,5 @@ ((sigil (sigil_name) @_sigil_name (quoted_content) @content) - (#eq? @_sigil_name "H") - (#set! language "heex")) + (.eq? @_sigil_name "H") + (.set! language "heex")) diff --git a/crates/zed/src/languages/elixir/outline.scm b/crates/zed/src/languages/elixir/outline.scm index a3311fb6d4..756d396510 100644 --- a/crates/zed/src/languages/elixir/outline.scm +++ b/crates/zed/src/languages/elixir/outline.scm @@ -1,7 +1,7 @@ (call target: (identifier) @context (arguments (alias) @name) - (#match? @context "^(defmodule|defprotocol)$")) @item + (.match? @context "^(defmodule|defprotocol)$")) @item (call target: (identifier) @context @@ -23,4 +23,4 @@ ")" @context.extra)) operator: "when") ]) - (#match? @context "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + (.match? @context "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item diff --git a/crates/zed/src/languages/elm/injections.scm b/crates/zed/src/languages/elm/injections.scm index 0567320675..3456f59a04 100644 --- a/crates/zed/src/languages/elm/injections.scm +++ b/crates/zed/src/languages/elm/injections.scm @@ -1,2 +1,2 @@ ((glsl_content) @content - (#set! "language" "glsl")) + (.set! "language" "glsl")) diff --git a/crates/zed/src/languages/erb/injections.scm b/crates/zed/src/languages/erb/injections.scm index 7a69a818ef..d9801015b7 100644 --- a/crates/zed/src/languages/erb/injections.scm +++ b/crates/zed/src/languages/erb/injections.scm @@ -1,7 +1,7 @@ ((code) @content - (#set! "language" "ruby") - (#set! "combined")) + (.set! "language" "ruby") + (.set! "combined")) ((content) @content - (#set! "language" "html") - (#set! "combined")) + (.set! "language" "html") + (.set! "combined")) diff --git a/crates/zed/src/languages/glsl/highlights.scm b/crates/zed/src/languages/glsl/highlights.scm index e4503c6fbb..2378b8449b 100644 --- a/crates/zed/src/languages/glsl/highlights.scm +++ b/crates/zed/src/languages/glsl/highlights.scm @@ -74,7 +74,7 @@ (sized_type_specifier) @type ((identifier) @constant - (#match? @constant "^[A-Z][A-Z\\d_]*$")) + (.match? @constant "^[A-Z][A-Z\\d_]*$")) (identifier) @variable @@ -114,5 +114,5 @@ ( (identifier) @variable.builtin - (#match? @variable.builtin "^gl_") + (.match? @variable.builtin "^gl_") ) diff --git a/crates/zed/src/languages/heex/injections.scm b/crates/zed/src/languages/heex/injections.scm index b503bcb28d..1b63005cbf 100644 --- a/crates/zed/src/languages/heex/injections.scm +++ b/crates/zed/src/languages/heex/injections.scm @@ -5,9 +5,9 @@ (expression_value) (ending_expression_value) ] @content) - (#set! language "elixir") - (#set! combined) + (.set! language "elixir") + (.set! combined) ) ((expression (expression_value) @content) - (#set! language "elixir")) + (.set! language "elixir")) diff --git a/crates/zed/src/languages/html/injections.scm b/crates/zed/src/languages/html/injections.scm index 9084e373f2..7d2ed0a225 100644 --- a/crates/zed/src/languages/html/injections.scm +++ b/crates/zed/src/languages/html/injections.scm @@ -1,7 +1,7 @@ (script_element (raw_text) @content - (#set! "language" "javascript")) + (.set! "language" "javascript")) (style_element (raw_text) @content - (#set! "language" "css")) + (.set! "language" "css")) diff --git a/crates/zed/src/languages/javascript/highlights.scm b/crates/zed/src/languages/javascript/highlights.scm index 36ab21ca1e..7761bbb3a2 100644 --- a/crates/zed/src/languages/javascript/highlights.scm +++ b/crates/zed/src/languages/javascript/highlights.scm @@ -44,7 +44,7 @@ ; Special identifiers ((identifier) @type - (#match? @type "^[A-Z]")) + (.match? @type "^[A-Z]")) (type_identifier) @type (predefined_type) @type.builtin @@ -53,7 +53,7 @@ (shorthand_property_identifier) (shorthand_property_identifier_pattern) ] @constant - (#match? @constant "^_*[A-Z_][A-Z\\d_]*$")) +(.match? @constant "^_*[A-Z_][A-Z\\d_]*$")) ; Literals @@ -214,4 +214,4 @@ "type" "readonly" "override" -] @keyword \ No newline at end of file +] @keyword diff --git a/crates/zed/src/languages/lua/highlights.scm b/crates/zed/src/languages/lua/highlights.scm index 60ca9de36b..e00d0b9557 100644 --- a/crates/zed/src/languages/lua/highlights.scm +++ b/crates/zed/src/languages/lua/highlights.scm @@ -127,7 +127,7 @@ (identifier) @variable ((identifier) @variable.special - (#eq? @variable.special "self")) + (.eq? @variable.special "self")) (variable_list attribute: (attribute @@ -137,7 +137,7 @@ ;; Constants ((identifier) @constant - (#match? @constant "^[A-Z][A-Z_0-9]*$")) + (.match? @constant "^[A-Z][A-Z_0-9]*$")) (vararg_expression) @constant @@ -180,7 +180,7 @@ (function_call (identifier) @function.builtin - (#any-of? @function.builtin + (.any-of? @function.builtin ;; built-in functions in Lua 5.1 "assert" "collectgarbage" "dofile" "error" "getfenv" "getmetatable" "ipairs" "load" "loadfile" "loadstring" "module" "next" "pairs" "pcall" "print" diff --git a/crates/zed/src/languages/php/highlights.scm b/crates/zed/src/languages/php/highlights.scm index cfb03cbcca..fb85d997fa 100644 --- a/crates/zed/src/languages/php/highlights.scm +++ b/crates/zed/src/languages/php/highlights.scm @@ -43,15 +43,15 @@ (relative_scope) @variable.builtin ((name) @constant - (#match? @constant "^_?[A-Z][A-Z\\d_]+$")) + (.match? @constant "^_?[A-Z][A-Z\\d_]+$")) ((name) @constant.builtin - (#match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) + (.match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) ((name) @method.constructor -(#match? @method.constructor "^[A-Z]")) +(.match? @method.constructor "^[A-Z]")) ((name) @variable.builtin - (#eq? @variable.builtin "this")) + (.eq? @variable.builtin "this")) (variable_name) @variable diff --git a/crates/zed/src/languages/php/injections.scm b/crates/zed/src/languages/php/injections.scm index 57abd8ea2b..725729337b 100644 --- a/crates/zed/src/languages/php/injections.scm +++ b/crates/zed/src/languages/php/injections.scm @@ -1,3 +1,3 @@ ((text) @content - (#set! "language" "html") - (#set! "combined")) + (.set! "language" "html") + (.set! "combined")) diff --git a/crates/zed/src/languages/python/highlights.scm b/crates/zed/src/languages/python/highlights.scm index 71ab963d82..b31bddaeb5 100644 --- a/crates/zed/src/languages/python/highlights.scm +++ b/crates/zed/src/languages/python/highlights.scm @@ -18,16 +18,16 @@ ; Identifier naming conventions ((identifier) @type - (#match? @type "^[A-Z]")) + (.match? @type "^[A-Z]")) ((identifier) @constant - (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) ; Builtin functions ((call function: (identifier) @function.builtin) - (#match? + (.match? @function.builtin "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) @@ -122,4 +122,4 @@ "yield" "match" "case" -] @keyword \ No newline at end of file +] @keyword diff --git a/crates/zed/src/languages/racket/highlights.scm b/crates/zed/src/languages/racket/highlights.scm index 2c0caf8935..304b10a018 100644 --- a/crates/zed/src/languages/racket/highlights.scm +++ b/crates/zed/src/languages/racket/highlights.scm @@ -22,7 +22,7 @@ (lang_name) @variable.special ((symbol) @operator - (#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) + (.match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) (list . @@ -31,10 +31,9 @@ (list . (symbol) @keyword - (#match? @keyword + (.match? @keyword "^(unit-from-context|for/last|syntax-case|match-let\\*-values|define-for-syntax|define/subexpression-pos-prop|set-field!|class-field-accessor|invoke-unit|#%stratified-body|for\\*/and|for\\*/weak-set|flat-rec-contract|for\\*/stream|planet|for/mutable-seteqv|log-error|delay|#%declare|prop:dict/contract|->d|lib|override\\*|define-local-member-name|send-generic|for\\*/hasheq|define-syntax|submod|except|include-at/relative-to/reader|public\\*|define-member-name|define/public|let\\*|for/and|for\\*/first|for|delay/strict|define-values-for-export|==|match-define-values|for/weak-seteq|for\\*/async|for/stream|for/weak-seteqv|set!-values|lambda|for\\*/product|augment-final\\*|pubment\\*|command-line|contract|case|struct-field-index|contract-struct|unless|for/hasheq|for/seteqv|with-method|define-values-for-syntax|for-template|pubment|for\\*/list|syntax-case\\*|init-field|define-serializable-class|=>|for/foldr/derived|letrec-syntaxes|overment\\*|unquote-splicing|_|inherit-field|for\\*|stream-lazy|match-lambda\\*|contract-pos/neg-doubling|unit/c|match-define|for\\*/set|unit/s|nor|#%expression|class/c|this%|place/context|super-make-object|when|set!|parametric->/c|syntax-id-rules|include/reader|compound-unit|override-final|get-field|gen:dict|for\\*/seteqv|for\\*/hash|#%provide|combine-out|link|with-contract-continuation-mark|define-struct/derived|stream\\*|λ|rename-out|define-serializable-class\\*|augment|define/augment|let|define-signature-form|letrec-syntax|abstract|define-namespace-anchor|#%module-begin|#%top-interaction|for\\*/weak-seteqv|do|define/subexpression-pos-prop/name|absent|send/apply|with-handlers\\*|all-from-out|provide-signature-elements|gen:stream|define/override-final|for\\*/mutable-seteqv|rename|quasisyntax/loc|instantiate|for/list|extends|include-at/relative-to|mixin|define/pubment|#%plain-lambda|except-out|#%plain-module-begin|init|for\\*/last|relative-in|define-unit/new-import-export|->dm|member-name-key|nand|interface\\*|struct|define/override|else|define/augment-final|failure-cont|open|log-info|define/final-prop|all-defined-out|for/sum|for\\*/sum|recursive-contract|define|define-logger|match\\*|log-debug|rename-inner|->|struct/derived|unit|class\\*|prefix-out|any|define/overment|define-signature|match-letrec-values|let-syntaxes|for/mutable-set|define/match|cond|super-instantiate|define-contract-struct|import|hash/dc|define-custom-set-types|public-final|for/vector|for-label|prefix-in|for\\*/foldr/derived|define-unit-binding|object-contract|syntax-rules|augride|for\\*/mutable-seteq|quasisyntax|inner|for-syntax|overment|send/keyword-apply|generic|let\\*-values|->m|define-values|struct-copy|init-depend|struct/ctc|match-lambda|#%printing-module-begin|match\\*/derived|case->m|this|file|stream-cons|inspect|field|for/weak-set|struct\\*|gen:custom-write|thunk\\*|combine-in|unquote|for/lists|define/private|for\\*/foldr|define-unit/s|with-continuation-mark|begin|prefix|quote-syntax/prune|object/c|interface|match/derived|for/hasheqv|current-contract-region|define-compound-unit|override|define/public-final|recontract-out|let/cc|augride\\*|inherit|send|define-values/invoke-unit|for/mutable-seteq|#%datum|for/first|match-let\\*|invoke-unit/infer|define/contract|syntax/loc|for\\*/hasheqv|define-sequence-syntax|let/ec|for/product|for\\*/fold/derived|define-syntax-rule|lazy|unconstrained-domain->|augment-final|private|class|define-splicing-for-clause-syntax|for\\*/fold|prompt-tag/c|contract-out|match/values|public-final\\*|case-lambda|for/fold|unsyntax|for/set|begin0|#%require|time|public|define-struct|include|define-values/invoke-unit/infer|only-space-in|struct/c|only-meta-in|unit/new-import-export|place|begin-for-syntax|shared|inherit/super|quote|for/or|struct/contract|export|inherit/inner|struct-out|let-syntax|augment\\*|for\\*/vector|rename-in|match-let|define-unit|:do-in|~@|for\\*/weak-seteq|private\\*|and|except-in|log-fatal|gen:equal\\+hash|provide|require|thunk|invariant-assertion|define-match-expander|init-rest|->\\*|class/derived|super-new|for/fold/derived|for\\*/mutable-set|match-lambda\\*\\*|only|with-contract|~\\?|opt/c|let-values|delay/thread|->i|for/foldr|for-meta|only-in|send\\+|\\.\\.\\.|struct-guard/c|->\\*m|gen:set|struct/dc|define-syntaxes|if|parameterize|module\\*|module|send\\*|#%variable-reference|compound-unit/infer|#%plain-app|for/hash|contracted|case->|match|for\\*/lists|#%app|letrec-values|log-warning|super|define/augride|local-require|provide/contract|define-struct/contract|match-let-values|quote-syntax|for\\*/seteq|define-compound-unit/infer|parameterize\\*|values/drop|for/seteq|tag|stream|delay/idle|module\\+|define-custom-hash-types|cons/dc|define-module-boundary-contract|or|protect-out|define-opt/c|implies|letrec-syntaxes\\+values|for\\*/or|unsyntax-splicing|override-final\\*|for/async|parameterize-break|syntax|place\\*|for-space|quasiquote|with-handlers|delay/sync|define-unit-from-context|match-letrec|#%top|define-unit/contract|delay/name|new|field-bound\\?|letrec|class-field-mutator|with-syntax|flat-murec-contract|rename-super|local)$" )) ((symbol) @comment - (#match? @comment "^#[cC][iIsS]$")) - + (.match? @comment "^#[cC][iIsS]$")) diff --git a/crates/zed/src/languages/racket/outline.scm b/crates/zed/src/languages/racket/outline.scm index 604e052a63..188067078d 100644 --- a/crates/zed/src/languages/racket/outline.scm +++ b/crates/zed/src/languages/racket/outline.scm @@ -6,5 +6,5 @@ (symbol) @name (list . (symbol) @name) ] - (#match? @start-symbol "^define") -) @item \ No newline at end of file + (.match? @start-symbol "^define") +) @item diff --git a/crates/zed/src/languages/ruby/brackets.scm b/crates/zed/src/languages/ruby/brackets.scm index 957b20ecdb..f5129f8f31 100644 --- a/crates/zed/src/languages/ruby/brackets.scm +++ b/crates/zed/src/languages/ruby/brackets.scm @@ -11,4 +11,4 @@ (begin "begin" @open "end" @close) (module "module" @open "end" @close) (_ . "def" @open "end" @close) -(_ . "class" @open "end" @close) \ No newline at end of file +(_ . "class" @open "end" @close) diff --git a/crates/zed/src/languages/ruby/highlights.scm b/crates/zed/src/languages/ruby/highlights.scm index 2610cfa1cc..93cf2608f4 100644 --- a/crates/zed/src/languages/ruby/highlights.scm +++ b/crates/zed/src/languages/ruby/highlights.scm @@ -33,12 +33,12 @@ (identifier) @variable ((identifier) @keyword - (#match? @keyword "^(private|protected|public)$")) + (.match? @keyword "^(private|protected|public)$")) ; Function calls ((identifier) @function.method.builtin - (#eq? @function.method.builtin "require")) + (.eq? @function.method.builtin "require")) "defined?" @function.method.builtin @@ -60,7 +60,7 @@ ] @property ((identifier) @constant.builtin - (#match? @constant.builtin "^__(FILE|LINE|ENCODING)__$")) + (.match? @constant.builtin "^__(FILE|LINE|ENCODING)__$")) (file) @constant.builtin (line) @constant.builtin @@ -71,7 +71,7 @@ ) @constant.builtin ((constant) @constant - (#match? @constant "^[A-Z\\d_]+$")) + (.match? @constant "^[A-Z\\d_]+$")) (constant) @type diff --git a/crates/zed/src/languages/rust/highlights.scm b/crates/zed/src/languages/rust/highlights.scm index 7240173a89..54dbfa00bd 100644 --- a/crates/zed/src/languages/rust/highlights.scm +++ b/crates/zed/src/languages/rust/highlights.scm @@ -38,11 +38,11 @@ ; Assume uppercase names are types/enum-constructors ((identifier) @type - (#match? @type "^[A-Z]")) + (.match? @type "^[A-Z]")) ; Assume all-caps names are constants ((identifier) @constant - (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) [ "(" diff --git a/crates/zed/src/languages/rust/injections.scm b/crates/zed/src/languages/rust/injections.scm index 57ebea8539..78fde3752f 100644 --- a/crates/zed/src/languages/rust/injections.scm +++ b/crates/zed/src/languages/rust/injections.scm @@ -1,7 +1,7 @@ (macro_invocation (token_tree) @content - (#set! "language" "rust")) + (.set! "language" "rust")) (macro_rule (token_tree) @content - (#set! "language" "rust")) \ No newline at end of file + (.set! "language" "rust")) diff --git a/crates/zed/src/languages/scheme/highlights.scm b/crates/zed/src/languages/scheme/highlights.scm index 40ba61cd05..201b0e9276 100644 --- a/crates/zed/src/languages/scheme/highlights.scm +++ b/crates/zed/src/languages/scheme/highlights.scm @@ -14,7 +14,7 @@ (directive)] @comment ((symbol) @operator - (#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) + (.match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) (list . @@ -23,6 +23,6 @@ (list . (symbol) @keyword - (#match? @keyword + (.match? @keyword "^(define-syntax|let\\*|lambda|λ|case|=>|quote-splicing|unquote-splicing|set!|let|letrec|letrec-syntax|let-values|let\\*-values|do|else|define|cond|syntax-rules|unquote|begin|quote|let-syntax|and|if|quasiquote|letrec|delay|or|when|unless|identifier-syntax|assert|library|export|import|rename|only|except|prefix)$" )) diff --git a/crates/zed/src/languages/scheme/outline.scm b/crates/zed/src/languages/scheme/outline.scm index 604e052a63..188067078d 100644 --- a/crates/zed/src/languages/scheme/outline.scm +++ b/crates/zed/src/languages/scheme/outline.scm @@ -6,5 +6,5 @@ (symbol) @name (list . (symbol) @name) ] - (#match? @start-symbol "^define") -) @item \ No newline at end of file + (.match? @start-symbol "^define") +) @item diff --git a/crates/zed/src/languages/svelte/injections.scm b/crates/zed/src/languages/svelte/injections.scm index 8c1ac9fcd0..17719b325c 100755 --- a/crates/zed/src/languages/svelte/injections.scm +++ b/crates/zed/src/languages/svelte/injections.scm @@ -2,27 +2,27 @@ ; -------------- (script_element (raw_text) @content - (#set! "language" "javascript")) + (.set! "language" "javascript")) ((script_element (start_tag (attribute (quoted_attribute_value (attribute_value) @_language))) (raw_text) @content) - (#eq? @_language "ts") - (#set! "language" "typescript")) + (.eq? @_language "ts") + (.set! "language" "typescript")) ((script_element (start_tag (attribute (quoted_attribute_value (attribute_value) @_language))) (raw_text) @content) - (#eq? @_language "typescript") - (#set! "language" "typescript")) + (.eq? @_language "typescript") + (.set! "language" "typescript")) (style_element (raw_text) @content - (#set! "language" "css")) + (.set! "language" "css")) ((raw_text_expr) @content - (#set! "language" "javascript")) + (.set! "language" "javascript")) diff --git a/crates/zed/src/languages/typescript/highlights.scm b/crates/zed/src/languages/typescript/highlights.scm index ba6b329e0e..9272108670 100644 --- a/crates/zed/src/languages/typescript/highlights.scm +++ b/crates/zed/src/languages/typescript/highlights.scm @@ -44,10 +44,10 @@ ; Special identifiers ((identifier) @method.constructor - (#match? @method.constructor "^[A-Z]")) + (.match? @method.constructor "^[A-Z]")) ((identifier) @type - (#match? @type "^[A-Z]")) + (.match? @type "^[A-Z]")) (type_identifier) @type (predefined_type) @type.builtin @@ -56,7 +56,7 @@ (shorthand_property_identifier) (shorthand_property_identifier_pattern) ] @constant - (#match? @constant "^_*[A-Z_][A-Z\\d_]*$")) +(.match? @constant "^_*[A-Z_][A-Z\\d_]*$")) ; Literals From 0b7e75c25a6d98649e92aa5d6e4f709f7bd754d2 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 27 Jul 2023 12:55:32 -0400 Subject: [PATCH 066/120] Add the `generate-syntax` action --- styles/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/styles/package.json b/styles/package.json index 16e95d90d5..3a50ac5371 100644 --- a/styles/package.json +++ b/styles/package.json @@ -8,6 +8,7 @@ "build-licenses": "ts-node ./src/build_licenses.ts", "build-tokens": "ts-node ./src/build_tokens.ts", "build-types": "ts-node ./src/build_types.ts", + "generate-syntax": "ts-node ./src/types/extract_syntax_types.ts", "test": "vitest" }, "author": "Zed Industries (https://github.com/zed-industries/)", From b9d5cc5828617fb0e973c121f09645cb7e98fb62 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 27 Jul 2023 12:56:54 -0400 Subject: [PATCH 067/120] Format --- styles/src/build_themes.ts | 9 +- styles/src/build_tokens.ts | 4 +- styles/src/component/icon_button.ts | 5 +- styles/src/component/tab_bar_button.ts | 67 +++--- styles/src/component/text_button.ts | 5 +- styles/src/style_tree/app.ts | 2 +- styles/src/style_tree/assistant.ts | 69 ++++--- styles/src/style_tree/editor.ts | 2 +- styles/src/style_tree/feedback.ts | 2 +- styles/src/style_tree/picker.ts | 2 +- styles/src/style_tree/project_panel.ts | 16 +- styles/src/style_tree/status_bar.ts | 10 +- styles/src/style_tree/titlebar.ts | 4 +- styles/src/theme/create_theme.ts | 25 ++- styles/src/theme/syntax.ts | 42 ++-- styles/src/theme/theme_config.ts | 4 +- styles/src/theme/tokens/theme.ts | 4 +- styles/src/themes/atelier/common.ts | 6 +- styles/src/types/extract_syntax_types.ts | 41 ++-- styles/src/types/syntax.ts | 253 +++++++++++------------ styles/tsconfig.json | 4 +- 21 files changed, 299 insertions(+), 277 deletions(-) diff --git a/styles/src/build_themes.ts b/styles/src/build_themes.ts index 17575663a1..4d262f8146 100644 --- a/styles/src/build_themes.ts +++ b/styles/src/build_themes.ts @@ -21,9 +21,7 @@ function clear_themes(theme_directory: string) { } } -const all_themes: Theme[] = themes.map((theme) => - create_theme(theme) -) +const all_themes: Theme[] = themes.map((theme) => create_theme(theme)) function write_themes(themes: Theme[], output_directory: string) { clear_themes(output_directory) @@ -34,10 +32,7 @@ function write_themes(themes: Theme[], output_directory: string) { const style_tree = app() const style_tree_json = JSON.stringify(style_tree, null, 2) const temp_path = path.join(temp_directory, `${theme.name}.json`) - const out_path = path.join( - output_directory, - `${theme.name}.json` - ) + const out_path = path.join(output_directory, `${theme.name}.json`) fs.writeFileSync(temp_path, style_tree_json) fs.renameSync(temp_path, out_path) console.log(`- ${out_path} created`) diff --git a/styles/src/build_tokens.ts b/styles/src/build_tokens.ts index fd6aa18ced..3c52b6d989 100644 --- a/styles/src/build_tokens.ts +++ b/styles/src/build_tokens.ts @@ -83,8 +83,6 @@ function write_tokens(themes: Theme[], tokens_directory: string) { console.log(`- ${METADATA_FILE} created`) } -const all_themes: Theme[] = themes.map((theme) => - create_theme(theme) -) +const all_themes: Theme[] = themes.map((theme) => create_theme(theme)) write_tokens(all_themes, TOKENS_DIRECTORY) diff --git a/styles/src/component/icon_button.ts b/styles/src/component/icon_button.ts index 6887fc7c30..13dfce6d77 100644 --- a/styles/src/component/icon_button.ts +++ b/styles/src/component/icon_button.ts @@ -10,10 +10,7 @@ export type Margin = { } interface IconButtonOptions { - layer?: - | Theme["lowest"] - | Theme["middle"] - | Theme["highest"] + layer?: Theme["lowest"] | Theme["middle"] | Theme["highest"] color?: keyof Theme["lowest"] margin?: Partial } diff --git a/styles/src/component/tab_bar_button.ts b/styles/src/component/tab_bar_button.ts index 0c43e7010e..9e7f9acfc3 100644 --- a/styles/src/component/tab_bar_button.ts +++ b/styles/src/component/tab_bar_button.ts @@ -12,44 +12,47 @@ type TabBarButtonProps = TabBarButtonOptions & { state?: Partial>> } -export function tab_bar_button(theme: Theme, { icon, color = "base" }: TabBarButtonProps) { +export function tab_bar_button( + theme: Theme, + { icon, color = "base" }: TabBarButtonProps +) { const button_spacing = 8 - return ( - interactive({ - base: { - icon: { - color: foreground(theme.middle, color), - asset: icon, - dimensions: { - width: 15, - height: 15, - }, + return interactive({ + base: { + icon: { + color: foreground(theme.middle, color), + asset: icon, + dimensions: { + width: 15, + height: 15, }, + }, + container: { + corner_radius: 4, + padding: { + top: 4, + bottom: 4, + left: 4, + right: 4, + }, + margin: { + left: button_spacing / 2, + right: button_spacing / 2, + }, + }, + }, + state: { + hovered: { container: { - corner_radius: 4, - padding: { - top: 4, bottom: 4, left: 4, right: 4 - }, - margin: { - left: button_spacing / 2, - right: button_spacing / 2, - }, + background: background(theme.middle, color, "hovered"), }, }, - state: { - hovered: { - container: { - background: background(theme.middle, color, "hovered"), - - } - }, - clicked: { - container: { - background: background(theme.middle, color, "pressed"), - } + clicked: { + container: { + background: background(theme.middle, color, "pressed"), }, }, - }) - ) + }, + }) } diff --git a/styles/src/component/text_button.ts b/styles/src/component/text_button.ts index 58b2a1cbf2..68ec01c92b 100644 --- a/styles/src/component/text_button.ts +++ b/styles/src/component/text_button.ts @@ -9,10 +9,7 @@ import { useTheme, Theme } from "../theme" import { Margin } from "./icon_button" interface TextButtonOptions { - layer?: - | Theme["lowest"] - | Theme["middle"] - | Theme["highest"] + layer?: Theme["lowest"] | Theme["middle"] | Theme["highest"] color?: keyof Theme["lowest"] margin?: Partial text_properties?: TextProperties diff --git a/styles/src/style_tree/app.ts b/styles/src/style_tree/app.ts index ccfdd60a98..ee0aa133a0 100644 --- a/styles/src/style_tree/app.ts +++ b/styles/src/style_tree/app.ts @@ -57,6 +57,6 @@ export default function app(): any { tooltip: tooltip(), terminal: terminal(), assistant: assistant(), - feedback: feedback() + feedback: feedback(), } } diff --git a/styles/src/style_tree/assistant.ts b/styles/src/style_tree/assistant.ts index cfc1f8d813..7df5434f91 100644 --- a/styles/src/style_tree/assistant.ts +++ b/styles/src/style_tree/assistant.ts @@ -8,50 +8,48 @@ type RoleCycleButton = TextStyle & { } // TODO: Replace these with zed types type RemainingTokens = TextStyle & { - background: string, - margin: { top: number, right: number }, + background: string + margin: { top: number; right: number } padding: { - right: number, - left: number, - top: number, - bottom: number, - }, - corner_radius: number, + right: number + left: number + top: number + bottom: number + } + corner_radius: number } export default function assistant(): any { const theme = useTheme() - const interactive_role = (color: StyleSets): Interactive => { - return ( - interactive({ - base: { + const interactive_role = ( + color: StyleSets + ): Interactive => { + return interactive({ + base: { + ...text(theme.highest, "sans", color, { size: "sm" }), + }, + state: { + hovered: { ...text(theme.highest, "sans", color, { size: "sm" }), + background: background(theme.highest, color, "hovered"), }, - state: { - hovered: { - ...text(theme.highest, "sans", color, { size: "sm" }), - background: background(theme.highest, color, "hovered"), - }, - clicked: { - ...text(theme.highest, "sans", color, { size: "sm" }), - background: background(theme.highest, color, "pressed"), - } + clicked: { + ...text(theme.highest, "sans", color, { size: "sm" }), + background: background(theme.highest, color, "pressed"), }, - }) - ) + }, + }) } const tokens_remaining = (color: StyleSets): RemainingTokens => { - return ( - { - ...text(theme.highest, "mono", color, { size: "xs" }), - background: background(theme.highest, "on", "default"), - margin: { top: 12, right: 20 }, - padding: { right: 4, left: 4, top: 1, bottom: 1 }, - corner_radius: 6, - } - ) + return { + ...text(theme.highest, "mono", color, { size: "xs" }), + background: background(theme.highest, "on", "default"), + margin: { top: 12, right: 20 }, + padding: { right: 4, left: 4, top: 1, bottom: 1 }, + corner_radius: 6, + } } return { @@ -93,7 +91,10 @@ export default function assistant(): any { base: { background: background(theme.middle), padding: { top: 4, bottom: 4 }, - border: border(theme.middle, "default", { top: true, overlay: true }), + border: border(theme.middle, "default", { + top: true, + overlay: true, + }), }, state: { hovered: { @@ -101,7 +102,7 @@ export default function assistant(): any { }, clicked: { background: background(theme.middle, "pressed"), - } + }, }, }), saved_at: { diff --git a/styles/src/style_tree/editor.ts b/styles/src/style_tree/editor.ts index ccbb33e21d..832e776264 100644 --- a/styles/src/style_tree/editor.ts +++ b/styles/src/style_tree/editor.ts @@ -318,7 +318,7 @@ export default function editor(): any { ? with_opacity(theme.ramps.green(0.5).hex(), 0.8) : with_opacity(theme.ramps.green(0.4).hex(), 0.8), }, - selections: foreground(layer, "accent") + selections: foreground(layer, "accent"), }, composition_mark: { underline: { diff --git a/styles/src/style_tree/feedback.ts b/styles/src/style_tree/feedback.ts index b1bd96e165..0349359533 100644 --- a/styles/src/style_tree/feedback.ts +++ b/styles/src/style_tree/feedback.ts @@ -37,7 +37,7 @@ export default function feedback(): any { ...text(theme.highest, "mono", "on", "disabled"), background: background(theme.highest, "on", "disabled"), border: border(theme.highest, "on", "disabled"), - } + }, }, }), button_margin: 8, diff --git a/styles/src/style_tree/picker.ts b/styles/src/style_tree/picker.ts index 28ae854787..317f600b1e 100644 --- a/styles/src/style_tree/picker.ts +++ b/styles/src/style_tree/picker.ts @@ -152,7 +152,7 @@ export default function picker(): any { 0.5 ), }, - } + }, }), } } diff --git a/styles/src/style_tree/project_panel.ts b/styles/src/style_tree/project_panel.ts index e239f9a840..51958af145 100644 --- a/styles/src/style_tree/project_panel.ts +++ b/styles/src/style_tree/project_panel.ts @@ -64,17 +64,17 @@ export default function project_panel(): any { const unselected_default_style = merge( base_properties, unselected?.default ?? {}, - {}, + {} ) const unselected_hovered_style = merge( base_properties, { background: background(theme.middle, "hovered") }, - unselected?.hovered ?? {}, + unselected?.hovered ?? {} ) const unselected_clicked_style = merge( base_properties, { background: background(theme.middle, "pressed") }, - unselected?.clicked ?? {}, + unselected?.clicked ?? {} ) const selected_default_style = merge( base_properties, @@ -82,7 +82,7 @@ export default function project_panel(): any { background: background(theme.lowest), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.default ?? {}, + selected_style?.default ?? {} ) const selected_hovered_style = merge( base_properties, @@ -90,7 +90,7 @@ export default function project_panel(): any { background: background(theme.lowest, "hovered"), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.hovered ?? {}, + selected_style?.hovered ?? {} ) const selected_clicked_style = merge( base_properties, @@ -98,7 +98,7 @@ export default function project_panel(): any { background: background(theme.lowest, "pressed"), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.clicked ?? {}, + selected_style?.clicked ?? {} ) return toggleable({ @@ -175,7 +175,7 @@ export default function project_panel(): any { default: { icon_color: foreground(theme.middle, "variant"), }, - }, + } ), cut_entry: entry( { @@ -190,7 +190,7 @@ export default function project_panel(): any { size: "sm", }), }, - }, + } ), filename_editor: { background: background(theme.middle, "on"), diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 06afc37823..8f50896207 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -34,10 +34,14 @@ export default function status_bar(): any { ...text(layer, "mono", "variant", { size: "xs" }), }, active_language: text_button({ - color: "variant" + color: "variant", + }), + auto_update_progress_message: text(layer, "sans", "variant", { + size: "xs", + }), + auto_update_done_message: text(layer, "sans", "variant", { + size: "xs", }), - auto_update_progress_message: text(layer, "sans", "variant", { size: "xs" }), - auto_update_done_message: text(layer, "sans", "variant", { size: "xs" }), lsp_status: interactive({ base: { ...diagnostic_status_container, diff --git a/styles/src/style_tree/titlebar.ts b/styles/src/style_tree/titlebar.ts index 177a8c5bd8..fe0c53e87d 100644 --- a/styles/src/style_tree/titlebar.ts +++ b/styles/src/style_tree/titlebar.ts @@ -183,10 +183,10 @@ export function titlebar(): any { project_name_divider: text(theme.lowest, "sans", "variant"), project_menu_button: toggleable_text_button(theme, { - color: 'base', + color: "base", }), git_menu_button: toggleable_text_button(theme, { - color: 'variant', + color: "variant", }), // Collaborators diff --git a/styles/src/theme/create_theme.ts b/styles/src/theme/create_theme.ts index e52c4dc95b..6df36d7077 100644 --- a/styles/src/theme/create_theme.ts +++ b/styles/src/theme/create_theme.ts @@ -2,7 +2,7 @@ import { Scale, Color } from "chroma-js" import { ThemeConfig, ThemeAppearance, - ThemeConfigInputColors + ThemeConfigInputColors, } from "./theme_config" import { get_ramps } from "./ramps" import { syntaxStyle } from "./syntax" @@ -13,16 +13,16 @@ export interface Theme { is_light: boolean /** - * App background, other elements that should sit directly on top of the background. - */ + * App background, other elements that should sit directly on top of the background. + */ lowest: Layer /** - * Panels, tabs, other UI surfaces that sit on top of the background. - */ + * Panels, tabs, other UI surfaces that sit on top of the background. + */ middle: Layer /** - * Editors like code buffers, conversation editors, etc. - */ + * Editors like code buffers, conversation editors, etc. + */ highest: Layer ramps: RampSet @@ -115,11 +115,7 @@ export interface Style { } export function create_theme(theme: ThemeConfig): Theme { - const { - name, - appearance, - input_color, - } = theme + const { name, appearance, input_color } = theme const is_light = appearance === ThemeAppearance.Light const color_ramps: ThemeConfigInputColors = input_color @@ -161,7 +157,10 @@ export function create_theme(theme: ThemeConfig): Theme { "7": player(ramps.yellow), } - const syntax = syntaxStyle(ramps, theme.override.syntax ? theme.override.syntax : {}) + const syntax = syntaxStyle( + ramps, + theme.override.syntax ? theme.override.syntax : {} + ) return { name, diff --git a/styles/src/theme/syntax.ts b/styles/src/theme/syntax.ts index d39496a412..b1bf5ed930 100644 --- a/styles/src/theme/syntax.ts +++ b/styles/src/theme/syntax.ts @@ -3,8 +3,13 @@ import { font_weights, ThemeConfigInputSyntax, RampSet } from "../common" import { Syntax, SyntaxHighlightStyle, allSyntaxKeys } from "../types/syntax" // Apply defaults to any missing syntax properties that are not defined manually -function apply_defaults(ramps: RampSet, syntax_highlights: Partial): Syntax { - const restKeys: (keyof Syntax)[] = allSyntaxKeys.filter(key => !syntax_highlights[key]) +function apply_defaults( + ramps: RampSet, + syntax_highlights: Partial +): Syntax { + const restKeys: (keyof Syntax)[] = allSyntaxKeys.filter( + (key) => !syntax_highlights[key] + ) const completeSyntax: Syntax = {} as Syntax @@ -28,23 +33,36 @@ function apply_defaults(ramps: RampSet, syntax_highlights: Partial): Syn // Merge the base syntax with the theme syntax overrides // This is a deep merge, so any nested properties will be merged as well // This allows for a theme to only override a single property of a syntax highlight style -const merge_syntax = (baseSyntax: Syntax, theme_syntax_overrides: ThemeConfigInputSyntax): Syntax => { - return deepmerge(baseSyntax, theme_syntax_overrides, { - arrayMerge: (destinationArray, sourceArray) => [ - ...destinationArray, - ...sourceArray, - ], - }) +const merge_syntax = ( + baseSyntax: Syntax, + theme_syntax_overrides: ThemeConfigInputSyntax +): Syntax => { + return deepmerge( + baseSyntax, + theme_syntax_overrides, + { + arrayMerge: (destinationArray, sourceArray) => [ + ...destinationArray, + ...sourceArray, + ], + } + ) } /** Returns a complete Syntax object of the combined styles of a theme's syntax overrides and the default syntax styles */ -export const syntaxStyle = (ramps: RampSet, theme_syntax_overrides: ThemeConfigInputSyntax): Syntax => { +export const syntaxStyle = ( + ramps: RampSet, + theme_syntax_overrides: ThemeConfigInputSyntax +): Syntax => { const syntax_highlights: Partial = { - "comment": { color: ramps.neutral(0.71).hex() }, + comment: { color: ramps.neutral(0.71).hex() }, "comment.doc": { color: ramps.neutral(0.71).hex() }, primary: { color: ramps.neutral(1).hex() }, emphasis: { color: ramps.blue(0.5).hex() }, - "emphasis.strong": { color: ramps.blue(0.5).hex(), weight: font_weights.bold }, + "emphasis.strong": { + color: ramps.blue(0.5).hex(), + weight: font_weights.bold, + }, link_uri: { color: ramps.green(0.5).hex(), underline: true }, link_text: { color: ramps.orange(0.5).hex(), italic: true }, "text.literal": { color: ramps.orange(0.5).hex() }, diff --git a/styles/src/theme/theme_config.ts b/styles/src/theme/theme_config.ts index 8473bbb600..f5f8359074 100644 --- a/styles/src/theme/theme_config.ts +++ b/styles/src/theme/theme_config.ts @@ -55,7 +55,9 @@ export type ThemeConfigInputColorsKeys = keyof ThemeConfigInputColors * } * ``` */ -export type ThemeConfigInputSyntax = Partial>> +export type ThemeConfigInputSyntax = Partial< + Record> +> interface ThemeConfigOverrides { syntax: ThemeConfigInputSyntax diff --git a/styles/src/theme/tokens/theme.ts b/styles/src/theme/tokens/theme.ts index f9e83e0512..d930793669 100644 --- a/styles/src/theme/tokens/theme.ts +++ b/styles/src/theme/tokens/theme.ts @@ -4,9 +4,7 @@ import { SingleOtherToken, TokenTypes, } from "@tokens-studio/types" -import { - Shadow, -} from "../create_theme" +import { Shadow } from "../create_theme" import { LayerToken, layer_token } from "./layer" import { PlayersToken, players_token } from "./players" import { color_token } from "./token" diff --git a/styles/src/themes/atelier/common.ts b/styles/src/themes/atelier/common.ts index 09226b336c..9a0029581c 100644 --- a/styles/src/themes/atelier/common.ts +++ b/styles/src/themes/atelier/common.ts @@ -1,4 +1,8 @@ -import { ThemeLicenseType, ThemeFamilyMeta, ThemeConfigInputSyntax } from "../../common" +import { + ThemeLicenseType, + ThemeFamilyMeta, + ThemeConfigInputSyntax, +} from "../../common" export interface Variant { colors: { diff --git a/styles/src/types/extract_syntax_types.ts b/styles/src/types/extract_syntax_types.ts index 3bf0895182..eb21d2418b 100644 --- a/styles/src/types/extract_syntax_types.ts +++ b/styles/src/types/extract_syntax_types.ts @@ -1,9 +1,9 @@ -import fs from 'fs' -import path from 'path' -import readline from 'readline' +import fs from "fs" +import path from "path" +import readline from "readline" function escapeTypeName(name: string): string { - return `'${name.replace('@', '').toLowerCase()}'` + return `'${name.replace("@", "").toLowerCase()}'` } const generatedNote = `// This file is generated by extract_syntax_types.ts @@ -17,8 +17,8 @@ const defaultTextProperty = ` /** Default text color */ | 'primary'` const main = async () => { - const pathFromRoot = 'crates/zed/src/languages' - const directoryPath = path.join(__dirname, '../../../', pathFromRoot) + const pathFromRoot = "crates/zed/src/languages" + const directoryPath = path.join(__dirname, "../../../", pathFromRoot) const stylesMap: Record> = {} const propertyLanguageMap: Record> = {} @@ -47,24 +47,31 @@ const main = async () => { } } - const directories = fs.readdirSync(directoryPath, { withFileTypes: true }) - .filter(dirent => dirent.isDirectory()) - .map(dirent => dirent.name) + const directories = fs + .readdirSync(directoryPath, { withFileTypes: true }) + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => dirent.name) for (const dir of directories) { - const highlightsFilePath = path.join(directoryPath, dir, 'highlights.scm') + const highlightsFilePath = path.join( + directoryPath, + dir, + "highlights.scm" + ) if (fs.existsSync(highlightsFilePath)) { await processFile(highlightsFilePath, dir) } } for (const [language, properties] of Object.entries(stylesMap)) { - console.log(`${language}: ${Array.from(properties).join(', ')}`) + console.log(`${language}: ${Array.from(properties).join(", ")}`) } - const sortedProperties = Object.entries(propertyLanguageMap).sort(([propA], [propB]) => propA.localeCompare(propB)) + const sortedProperties = Object.entries(propertyLanguageMap).sort( + ([propA], [propB]) => propA.localeCompare(propB) + ) - const outStream = fs.createWriteStream(path.join(__dirname, 'syntax.ts')) + const outStream = fs.createWriteStream(path.join(__dirname, "syntax.ts")) let allProperties = "" const syntaxKeys = [] for (const [property, languages] of sortedProperties) { @@ -73,9 +80,9 @@ const main = async () => { // Limit to the first 7 languages, append "..." if more than 7 languagesArray = languagesArray.slice(0, 7) if (moreThanSeven) { - languagesArray.push('...') + languagesArray.push("...") } - const languagesString = languagesArray.join(', ') + const languagesString = languagesArray.join(", ") const comment = `/** ${languagesString} */` allProperties += ` ${comment}\n | ${property} \n` syntaxKeys.push(property) @@ -95,7 +102,9 @@ export type SyntaxOverride = Partial export type SyntaxProperty = \n${defaultTextProperty}\n\n${allProperties} -export const allSyntaxKeys: SyntaxProperty[] = [\n ${syntaxKeys.join(',\n ')}\n]`) +export const allSyntaxKeys: SyntaxProperty[] = [\n ${syntaxKeys.join( + ",\n " + )}\n]`) outStream.end() } diff --git a/styles/src/types/syntax.ts b/styles/src/types/syntax.ts index b74edfdf84..9b23dbde3c 100644 --- a/styles/src/types/syntax.ts +++ b/styles/src/types/syntax.ts @@ -6,198 +6,197 @@ // 'npm run extract-syntax-types' from ./styles export type SyntaxHighlightStyle = { - color: string, - fade_out?: number, - italic?: boolean, - underline?: boolean, - weight?: string, + color: string + fade_out?: number + italic?: boolean + underline?: boolean + weight?: string } export type Syntax = Record export type SyntaxOverride = Partial -export type SyntaxProperty = +export type SyntaxProperty = /** Default text color */ - | 'primary' + | "primary" /** elixir */ - | '__attribute__' + | "__attribute__" /** elixir */ - | '__name__' + | "__name__" /** elixir */ - | '_sigil_name' + | "_sigil_name" /** css, heex, lua */ - | 'attribute' + | "attribute" /** javascript, lua, tsx, typescript, yaml */ - | 'boolean' + | "boolean" /** elixir */ - | 'comment.doc' + | "comment.doc" /** elixir */ - | 'comment.unused' + | "comment.unused" /** bash, c, cpp, css, elixir, elm, erb, ... */ - | 'comment' + | "comment" /** elixir, go, javascript, lua, php, python, racket, ... */ - | 'constant.builtin' + | "constant.builtin" /** bash, c, cpp, elixir, elm, glsl, heex, ... */ - | 'constant' + | "constant" /** glsl */ - | 'delimiter' + | "delimiter" /** bash, elixir, javascript, python, ruby, tsx, typescript */ - | 'embedded' + | "embedded" /** markdown */ - | 'emphasis.strong' + | "emphasis.strong" /** markdown */ - | 'emphasis' + | "emphasis" /** go, python, racket, ruby, scheme */ - | 'escape' + | "escape" /** lua */ - | 'field' + | "field" /** lua, php, python */ - | 'function.builtin' + | "function.builtin" /** elm, lua, rust */ - | 'function.definition' + | "function.definition" /** ruby */ - | 'function.method.builtin' + | "function.method.builtin" /** go, javascript, php, python, ruby, rust, tsx, ... */ - | 'function.method' + | "function.method" /** rust */ - | 'function.special.definition' + | "function.special.definition" /** c, cpp, glsl, rust */ - | 'function.special' + | "function.special" /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | 'function' + | "function" /** elm */ - | 'identifier' + | "identifier" /** glsl */ - | 'keyword.function' + | "keyword.function" /** bash, c, cpp, css, elixir, elm, erb, ... */ - | 'keyword' + | "keyword" /** c, cpp, glsl */ - | 'label' + | "label" /** markdown */ - | 'link_text' + | "link_text" /** markdown */ - | 'link_uri' + | "link_uri" /** lua, php, tsx, typescript */ - | 'method.constructor' + | "method.constructor" /** lua */ - | 'method' + | "method" /** heex */ - | 'module' + | "module" /** svelte */ - | 'none' + | "none" /** bash, c, cpp, css, elixir, glsl, go, ... */ - | 'number' + | "number" /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | 'operator' + | "operator" /** lua */ - | 'parameter' + | "parameter" /** lua */ - | 'preproc' + | "preproc" /** bash, c, cpp, css, glsl, go, html, ... */ - | 'property' + | "property" /** c, cpp, elixir, elm, heex, html, javascript, ... */ - | 'punctuation.bracket' + | "punctuation.bracket" /** c, cpp, css, elixir, elm, heex, javascript, ... */ - | 'punctuation.delimiter' + | "punctuation.delimiter" /** markdown */ - | 'punctuation.list_marker' + | "punctuation.list_marker" /** elixir, javascript, python, ruby, tsx, typescript, yaml */ - | 'punctuation.special' + | "punctuation.special" /** elixir */ - | 'punctuation' + | "punctuation" /** glsl */ - | 'storageclass' + | "storageclass" /** elixir, elm, yaml */ - | 'string.escape' + | "string.escape" /** elixir, javascript, racket, ruby, tsx, typescript */ - | 'string.regex' + | "string.regex" /** elixir, ruby */ - | 'string.special.symbol' + | "string.special.symbol" /** css, elixir, toml */ - | 'string.special' + | "string.special" /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | 'string' + | "string" /** svelte */ - | 'tag.delimiter' + | "tag.delimiter" /** css, heex, php, svelte */ - | 'tag' + | "tag" /** markdown */ - | 'text.literal' + | "text.literal" /** markdown */ - | 'title' + | "title" /** javascript, php, rust, tsx, typescript */ - | 'type.builtin' + | "type.builtin" /** glsl */ - | 'type.qualifier' + | "type.qualifier" /** c, cpp, css, elixir, elm, glsl, go, ... */ - | 'type' + | "type" /** glsl, php */ - | 'variable.builtin' + | "variable.builtin" /** cpp, css, javascript, lua, racket, ruby, rust, ... */ - | 'variable.special' + | "variable.special" /** c, cpp, elm, glsl, go, javascript, lua, ... */ - | 'variable' - + | "variable" export const allSyntaxKeys: SyntaxProperty[] = [ - '__attribute__', - '__name__', - '_sigil_name', - 'attribute', - 'boolean', - 'comment.doc', - 'comment.unused', - 'comment', - 'constant.builtin', - 'constant', - 'delimiter', - 'embedded', - 'emphasis.strong', - 'emphasis', - 'escape', - 'field', - 'function.builtin', - 'function.definition', - 'function.method.builtin', - 'function.method', - 'function.special.definition', - 'function.special', - 'function', - 'identifier', - 'keyword.function', - 'keyword', - 'label', - 'link_text', - 'link_uri', - 'method.constructor', - 'method', - 'module', - 'none', - 'number', - 'operator', - 'parameter', - 'preproc', - 'property', - 'punctuation.bracket', - 'punctuation.delimiter', - 'punctuation.list_marker', - 'punctuation.special', - 'punctuation', - 'storageclass', - 'string.escape', - 'string.regex', - 'string.special.symbol', - 'string.special', - 'string', - 'tag.delimiter', - 'tag', - 'text.literal', - 'title', - 'type.builtin', - 'type.qualifier', - 'type', - 'variable.builtin', - 'variable.special', - 'variable' -] \ No newline at end of file + "__attribute__", + "__name__", + "_sigil_name", + "attribute", + "boolean", + "comment.doc", + "comment.unused", + "comment", + "constant.builtin", + "constant", + "delimiter", + "embedded", + "emphasis.strong", + "emphasis", + "escape", + "field", + "function.builtin", + "function.definition", + "function.method.builtin", + "function.method", + "function.special.definition", + "function.special", + "function", + "identifier", + "keyword.function", + "keyword", + "label", + "link_text", + "link_uri", + "method.constructor", + "method", + "module", + "none", + "number", + "operator", + "parameter", + "preproc", + "property", + "punctuation.bracket", + "punctuation.delimiter", + "punctuation.list_marker", + "punctuation.special", + "punctuation", + "storageclass", + "string.escape", + "string.regex", + "string.special.symbol", + "string.special", + "string", + "tag.delimiter", + "tag", + "text.literal", + "title", + "type.builtin", + "type.qualifier", + "type", + "variable.builtin", + "variable.special", + "variable", +] diff --git a/styles/tsconfig.json b/styles/tsconfig.json index 281bd74b21..a1913027b7 100644 --- a/styles/tsconfig.json +++ b/styles/tsconfig.json @@ -24,7 +24,5 @@ "useUnknownInCatchVariables": false, "baseUrl": "." }, - "exclude": [ - "node_modules" - ] + "exclude": ["node_modules"] } From b08a2770b867951c38a4286ebf96223578f0fc4a Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Thu, 27 Jul 2023 13:02:40 -0400 Subject: [PATCH 068/120] Remove redundant `syntax_highlights` --- styles/src/theme/syntax.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/styles/src/theme/syntax.ts b/styles/src/theme/syntax.ts index b1bf5ed930..db8f98de66 100644 --- a/styles/src/theme/syntax.ts +++ b/styles/src/theme/syntax.ts @@ -78,7 +78,6 @@ export const syntaxStyle = ( "string.regex": { color: ramps.orange(0.5).hex() }, "method.constructor": { color: ramps.blue(0.5).hex() }, type: { color: ramps.cyan(0.5).hex() }, - variable: { color: ramps.neutral(1).hex() }, label: { color: ramps.blue(0.5).hex() }, attribute: { color: ramps.blue(0.5).hex() }, property: { color: ramps.blue(0.5).hex() }, @@ -88,8 +87,6 @@ export const syntaxStyle = ( number: { color: ramps.green(0.5).hex() }, boolean: { color: ramps.green(0.5).hex() }, function: { color: ramps.yellow(0.5).hex() }, - preproc: { color: ramps.neutral(1).hex() }, - embedded: { color: ramps.neutral(1).hex() }, } const baseSyntax = apply_defaults(ramps, syntax_highlights) From d8352743061ebf73e382b724b80aeec236a67763 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 11:11:24 -0700 Subject: [PATCH 069/120] Downgrade our dependency on treesitter-cpp --- Cargo.lock | 17 +++++++++++++---- Cargo.toml | 2 +- crates/language/src/language.rs | 20 ++++++++++---------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 05c5faa787..674765f00c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6513,7 +6513,7 @@ dependencies = [ "theme", "tiktoken-rs 0.5.0", "tree-sitter", - "tree-sitter-cpp", + "tree-sitter-cpp 0.20.2", "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tree-sitter-json 0.19.0", "tree-sitter-rust", @@ -8032,9 +8032,18 @@ dependencies = [ [[package]] name = "tree-sitter-cpp" -version = "0.20.1" +version = "0.20.0" +source = "git+https://github.com/tree-sitter/tree-sitter-cpp?rev=f44509141e7e483323d2ec178f2d2e6c0fc041c1#f44509141e7e483323d2ec178f2d2e6c0fc041c1" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-cpp" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dbedbf4066bfab725b3f9e2a21530507419a7d2f98621d3c13213502b734ec0" +checksum = "1c88fd925d0333e63ac64e521f5bd79c53019e569ffbbccfeef346a326f459e9" dependencies = [ "cc", "tree-sitter", @@ -9622,7 +9631,7 @@ dependencies = [ "tree-sitter", "tree-sitter-bash", "tree-sitter-c", - "tree-sitter-cpp", + "tree-sitter-cpp 0.20.0", "tree-sitter-css", "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", "tree-sitter-elm", diff --git a/Cargo.toml b/Cargo.toml index 7bcbc7e2dc..fc46286de0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -109,7 +109,7 @@ pretty_assertions = "1.3.0" tree-sitter-bash = { git = "https://github.com/tree-sitter/tree-sitter-bash", rev = "1b0321ee85701d5036c334a6f04761cdc672e64c" } tree-sitter-c = "0.20.1" -tree-sitter-cpp = "0.20.0" +tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev="f44509141e7e483323d2ec178f2d2e6c0fc041c1" } tree-sitter-css = { git = "https://github.com/tree-sitter/tree-sitter-css", rev = "769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" } tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "4ba9dab6e2602960d95b2b625f3386c27e08084e" } tree-sitter-elm = { git = "https://github.com/elm-tooling/tree-sitter-elm", rev = "692c50c0b961364c40299e73c1306aecb5d20f40"} diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index e34358c7c5..b265bba7b5 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -844,8 +844,8 @@ impl LanguageRegistry { } } } - Err(err) => { - log::error!("failed to load language {name} - {err}"); + Err(e) => { + log::error!("failed to load language {name}:\n{:?}", e); let mut state = this.state.write(); state.mark_language_loaded(id); if let Some(mut txs) = state.loading_languages.remove(&id) { @@ -853,7 +853,7 @@ impl LanguageRegistry { let _ = tx.send(Err(anyhow!( "failed to load language {}: {}", name, - err + e ))); } } @@ -1188,25 +1188,25 @@ impl Language { pub fn with_queries(mut self, queries: LanguageQueries) -> Result { if let Some(query) = queries.highlights { - self = self.with_highlights_query(query.as_ref())?; + self = self.with_highlights_query(query.as_ref()).context("Error loading highlights query")?; } if let Some(query) = queries.brackets { - self = self.with_brackets_query(query.as_ref())?; + self = self.with_brackets_query(query.as_ref()).context("Error loading brackets query")?; } if let Some(query) = queries.indents { - self = self.with_indents_query(query.as_ref())?; + self = self.with_indents_query(query.as_ref()).context("Error loading indents query")?; } if let Some(query) = queries.outline { - self = self.with_outline_query(query.as_ref())?; + self = self.with_outline_query(query.as_ref()).context("Error loading outline query")?; } if let Some(query) = queries.embedding { - self = self.with_embedding_query(query.as_ref())?; + self = self.with_embedding_query(query.as_ref()).context("Error loading embedding query")?; } if let Some(query) = queries.injections { - self = self.with_injection_query(query.as_ref())?; + self = self.with_injection_query(query.as_ref()).context("Error loading injection query")?; } if let Some(query) = queries.overrides { - self = self.with_override_query(query.as_ref())?; + self = self.with_override_query(query.as_ref()).context("Error loading override query")?; } Ok(self) } From a829b5be01659953d133c3b6ee284770fa1f3879 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 11:14:21 -0700 Subject: [PATCH 070/120] fmt --- crates/language/src/language.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index b265bba7b5..125e14d445 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -1188,25 +1188,39 @@ impl Language { pub fn with_queries(mut self, queries: LanguageQueries) -> Result { if let Some(query) = queries.highlights { - self = self.with_highlights_query(query.as_ref()).context("Error loading highlights query")?; + self = self + .with_highlights_query(query.as_ref()) + .context("Error loading highlights query")?; } if let Some(query) = queries.brackets { - self = self.with_brackets_query(query.as_ref()).context("Error loading brackets query")?; + self = self + .with_brackets_query(query.as_ref()) + .context("Error loading brackets query")?; } if let Some(query) = queries.indents { - self = self.with_indents_query(query.as_ref()).context("Error loading indents query")?; + self = self + .with_indents_query(query.as_ref()) + .context("Error loading indents query")?; } if let Some(query) = queries.outline { - self = self.with_outline_query(query.as_ref()).context("Error loading outline query")?; + self = self + .with_outline_query(query.as_ref()) + .context("Error loading outline query")?; } if let Some(query) = queries.embedding { - self = self.with_embedding_query(query.as_ref()).context("Error loading embedding query")?; + self = self + .with_embedding_query(query.as_ref()) + .context("Error loading embedding query")?; } if let Some(query) = queries.injections { - self = self.with_injection_query(query.as_ref()).context("Error loading injection query")?; + self = self + .with_injection_query(query.as_ref()) + .context("Error loading injection query")?; } if let Some(query) = queries.overrides { - self = self.with_override_query(query.as_ref()).context("Error loading override query")?; + self = self + .with_override_query(query.as_ref()) + .context("Error loading override query")?; } Ok(self) } From 7a9af7c663e7669fd1147bca7aecb89f969d1e89 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 27 Jul 2023 15:17:13 -0400 Subject: [PATCH 071/120] Publish preview releases to discord --- .github/workflows/release_actions.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release_actions.yml b/.github/workflows/release_actions.yml index 71909ae177..6c3b3d57c0 100644 --- a/.github/workflows/release_actions.yml +++ b/.github/workflows/release_actions.yml @@ -8,7 +8,6 @@ jobs: steps: - name: Discord Webhook Action uses: tsickert/discord-webhook@v5.3.0 - if: ${{ ! github.event.release.prerelease }} with: webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }} content: | From 39794544852192000ec524d6aa94179732ff6fb9 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 27 Jul 2023 17:13:37 -0400 Subject: [PATCH 072/120] Follow naming convention for menu items --- crates/collab_ui/src/collab_titlebar_item.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/collab_ui/src/collab_titlebar_item.rs b/crates/collab_ui/src/collab_titlebar_item.rs index ce8d10d655..a54c0e9e79 100644 --- a/crates/collab_ui/src/collab_titlebar_item.rs +++ b/crates/collab_ui/src/collab_titlebar_item.rs @@ -374,7 +374,7 @@ impl CollabTitlebarItem { "Share Feedback", feedback::feedback_editor::GiveFeedback, ), - ContextMenuItem::action("Sign out", SignOut), + ContextMenuItem::action("Sign Out", SignOut), ] } else { vec![ From fc9687d16334ac33f482630f9a9330bc24bd8edb Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 27 Jul 2023 18:27:36 -0400 Subject: [PATCH 073/120] Avoid panic by accessing view handle by global in wrong window View handles are window specific but this global will be doing things in all windows, that would cause a panic when it attempted to update a status bar mode indicator in a background window Co-Authored-By: Mikayla Maki --- crates/vim/src/mode_indicator.rs | 61 +++++++++++++++++++++---- crates/vim/src/test.rs | 14 +++--- crates/vim/src/test/vim_test_context.rs | 4 ++ crates/vim/src/vim.rs | 51 +++------------------ crates/zed/src/zed.rs | 2 + 5 files changed, 72 insertions(+), 60 deletions(-) diff --git a/crates/vim/src/mode_indicator.rs b/crates/vim/src/mode_indicator.rs index e0d2b65955..84e3e5868a 100644 --- a/crates/vim/src/mode_indicator.rs +++ b/crates/vim/src/mode_indicator.rs @@ -1,20 +1,60 @@ -use gpui::{elements::Label, AnyElement, Element, Entity, View, ViewContext}; +use gpui::{ + elements::{Empty, Label}, + AnyElement, Element, Entity, Subscription, View, ViewContext, +}; +use settings::SettingsStore; use workspace::{item::ItemHandle, StatusItemView}; -use crate::state::Mode; +use crate::{state::Mode, Vim, VimEvent, VimModeSetting}; pub struct ModeIndicator { - pub mode: Mode, + pub mode: Option, + _subscription: Subscription, } impl ModeIndicator { - pub fn new(mode: Mode) -> Self { - Self { mode } + pub fn new(cx: &mut ViewContext) -> Self { + let handle = cx.handle().downgrade(); + + let _subscription = cx.subscribe_global::(move |&event, cx| { + if let Some(mode_indicator) = handle.upgrade(cx) { + match event { + VimEvent::ModeChanged { mode } => { + cx.update_window(mode_indicator.window_id(), |cx| { + mode_indicator.update(cx, move |mode_indicator, cx| { + mode_indicator.set_mode(mode, cx); + }) + }); + } + } + } + }); + + cx.observe_global::(move |mode_indicator, cx| { + if settings::get::(cx).0 { + mode_indicator.mode = cx + .has_global::() + .then(|| cx.global::().state.mode); + } else { + mode_indicator.mode.take(); + } + }) + .detach(); + + // Vim doesn't exist in some tests + let mode = cx + .has_global::() + .then(|| cx.global::().state.mode); + + Self { + mode, + _subscription, + } } pub fn set_mode(&mut self, mode: Mode, cx: &mut ViewContext) { - if mode != self.mode { - self.mode = mode; + if self.mode != Some(mode) { + self.mode = Some(mode); cx.notify(); } } @@ -30,11 +70,16 @@ impl View for ModeIndicator { } fn render(&mut self, cx: &mut ViewContext) -> AnyElement { + let Some(mode) = self.mode.as_ref() else { + return Empty::new().into_any(); + }; + let theme = &theme::current(cx).workspace.status_bar; + // we always choose text to be 12 monospace characters // so that as the mode indicator changes, the rest of the // UI stays still. - let text = match self.mode { + let text = match mode { Mode::Normal => "-- NORMAL --", Mode::Insert => "-- INSERT --", Mode::Visual { line: false } => "-- VISUAL --", diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 96d6a2b690..98d8cb8749 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -215,7 +215,7 @@ async fn test_status_indicator( assert_eq!( cx.workspace(|_, cx| mode_indicator.read(cx).mode), - Mode::Normal + Some(Mode::Normal) ); // shows the correct mode @@ -223,7 +223,7 @@ async fn test_status_indicator( deterministic.run_until_parked(); assert_eq!( cx.workspace(|_, cx| mode_indicator.read(cx).mode), - Mode::Insert + Some(Mode::Insert) ); // shows even in search @@ -231,7 +231,7 @@ async fn test_status_indicator( deterministic.run_until_parked(); assert_eq!( cx.workspace(|_, cx| mode_indicator.read(cx).mode), - Mode::Visual { line: false } + Some(Mode::Visual { line: false }) ); // hides if vim mode is disabled @@ -239,15 +239,15 @@ async fn test_status_indicator( deterministic.run_until_parked(); cx.workspace(|workspace, cx| { let status_bar = workspace.status_bar().read(cx); - let mode_indicator = status_bar.item_of_type::(); - assert!(mode_indicator.is_none()); + let mode_indicator = status_bar.item_of_type::().unwrap(); + assert!(mode_indicator.read(cx).mode.is_none()); }); cx.enable_vim(); deterministic.run_until_parked(); cx.workspace(|workspace, cx| { let status_bar = workspace.status_bar().read(cx); - let mode_indicator = status_bar.item_of_type::(); - assert!(mode_indicator.is_some()); + let mode_indicator = status_bar.item_of_type::().unwrap(); + assert!(mode_indicator.read(cx).mode.is_some()); }); } diff --git a/crates/vim/src/test/vim_test_context.rs b/crates/vim/src/test/vim_test_context.rs index 56ca654644..ea09e55091 100644 --- a/crates/vim/src/test/vim_test_context.rs +++ b/crates/vim/src/test/vim_test_context.rs @@ -43,6 +43,10 @@ impl<'a> VimTestContext<'a> { toolbar.add_item(project_search_bar, cx); }) }); + workspace.status_bar().update(cx, |status_bar, cx| { + let vim_mode_indicator = cx.add_view(ModeIndicator::new); + status_bar.add_right_item(vim_mode_indicator, cx); + }); }); Self { cx } diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index d8edf1a667..22bd196c67 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -43,6 +43,11 @@ struct Number(u8); actions!(vim, [Tab, Enter]); impl_actions!(vim, [Number, SwitchMode, PushOperator]); +#[derive(Copy, Clone, Debug)] +enum VimEvent { + ModeChanged { mode: Mode }, +} + pub fn init(cx: &mut AppContext) { settings::register::(cx); @@ -121,8 +126,6 @@ pub fn observe_keystrokes(cx: &mut WindowContext) { pub struct Vim { active_editor: Option>, editor_subscription: Option, - mode_indicator: Option>, - enabled: bool, state: VimState, } @@ -181,9 +184,7 @@ impl Vim { self.state.mode = mode; self.state.operator_stack.clear(); - if let Some(mode_indicator) = &self.mode_indicator { - mode_indicator.update(cx, |mode_indicator, cx| mode_indicator.set_mode(mode, cx)) - } + cx.emit_global(VimEvent::ModeChanged { mode }); // Sync editor settings like clip mode self.sync_vim_settings(cx); @@ -271,44 +272,6 @@ impl Vim { } } - fn sync_mode_indicator(cx: &mut WindowContext) { - let Some(workspace) = cx.root_view() - .downcast_ref::() - .map(|workspace| workspace.downgrade()) else { - return; - }; - - cx.spawn(|mut cx| async move { - workspace.update(&mut cx, |workspace, cx| { - Vim::update(cx, |vim, cx| { - workspace.status_bar().update(cx, |status_bar, cx| { - let current_position = status_bar.position_of_item::(); - - if vim.enabled && current_position.is_none() { - if vim.mode_indicator.is_none() { - vim.mode_indicator = - Some(cx.add_view(|_| ModeIndicator::new(vim.state.mode))); - }; - let mode_indicator = vim.mode_indicator.as_ref().unwrap(); - let position = status_bar - .position_of_item::(); - if let Some(position) = position { - status_bar.insert_item_after(position, mode_indicator.clone(), cx) - } else { - status_bar.add_left_item(mode_indicator.clone(), cx) - } - } else if !vim.enabled { - if let Some(position) = current_position { - status_bar.remove_item_at(position, cx) - } - } - }) - }) - }) - }) - .detach_and_log_err(cx); - } - fn set_enabled(&mut self, enabled: bool, cx: &mut AppContext) { if self.enabled != enabled { self.enabled = enabled; @@ -359,8 +322,6 @@ impl Vim { self.unhook_vim_settings(editor, cx); } }); - - Vim::sync_mode_indicator(cx); } fn unhook_vim_settings(&self, editor: &mut Editor, cx: &mut ViewContext) { diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 84cef99f81..a29567ac38 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -308,6 +308,7 @@ pub fn initialize_workspace( ); let active_buffer_language = cx.add_view(|_| language_selector::ActiveBufferLanguage::new(workspace)); + let vim_mode_indicator = cx.add_view(|cx| vim::ModeIndicator::new(cx)); let feedback_button = cx.add_view(|_| { feedback::deploy_feedback_button::DeployFeedbackButton::new(workspace) }); @@ -319,6 +320,7 @@ pub fn initialize_workspace( status_bar.add_right_item(feedback_button, cx); status_bar.add_right_item(copilot, cx); status_bar.add_right_item(active_buffer_language, cx); + status_bar.add_right_item(vim_mode_indicator, cx); status_bar.add_right_item(cursor_position, cx); }); From 03bc430bdd82422dc01813f859a8ff8e201212a6 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 16:14:56 -0700 Subject: [PATCH 074/120] Make mode indicator follow vim enabled state --- crates/vim/src/mode_indicator.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/vim/src/mode_indicator.rs b/crates/vim/src/mode_indicator.rs index 84e3e5868a..639a7594f1 100644 --- a/crates/vim/src/mode_indicator.rs +++ b/crates/vim/src/mode_indicator.rs @@ -44,7 +44,11 @@ impl ModeIndicator { // Vim doesn't exist in some tests let mode = cx .has_global::() - .then(|| cx.global::().state.mode); + .then(|| { + let vim = cx.global::(); + vim.enabled.then(|| vim.state.mode) + }) + .flatten(); Self { mode, From 1935307b4f6b80438df46719ab5202ea7bd26850 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 27 Jul 2023 18:08:15 -0600 Subject: [PATCH 075/120] Fix jumping to definition in a new file This is broken because vim currently sets settings only on the active editor. Fix this by correcting the range on the currently active editor. It would be nice (at some point) to refactor how vim sets settings, but that's for another day. --- crates/editor/src/editor.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index e05837740d..7af3f5460d 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6374,8 +6374,8 @@ impl Editor { .range .to_offset(definition.target.buffer.read(cx)); + let range = self.range_for_match(&range); if Some(&definition.target.buffer) == self.buffer.read(cx).as_singleton().as_ref() { - let range = self.range_for_match(&range); self.change_selections(Some(Autoscroll::fit()), cx, |s| { s.select_ranges([range]); }); @@ -6392,7 +6392,6 @@ impl Editor { // When selecting a definition in a different buffer, disable the nav history // to avoid creating a history entry at the previous cursor location. pane.update(cx, |pane, _| pane.disable_history()); - let range = target_editor.range_for_match(&range); target_editor.change_selections(Some(Autoscroll::fit()), cx, |s| { s.select_ranges([range]); }); From f15a03816f9357522a3793fbba449818dc9ed67e Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 17:19:32 -0700 Subject: [PATCH 076/120] underscore arguments --- crates/zed/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index df16ea7db9..b9fefb89a7 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -717,7 +717,7 @@ async fn watch_languages(_: Arc, _: Arc) -> Option<()> } #[cfg(not(debug_assertions))] -fn watch_file_types(fs: Arc, cx: &mut AppContext) {} +fn watch_file_types(_fs: Arc, _cx: &mut AppContext) {} fn connect_to_cli( server_name: &str, From 0dffb728db4287376c1fc9214e2de3b7aee2d06e Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 17:36:02 -0700 Subject: [PATCH 077/120] Update elixir depedency co-authored-by: Alex --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7c6a213d0d..9de3e6f4a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3851,7 +3851,7 @@ dependencies = [ "text", "theme", "tree-sitter", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", + "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c)", "tree-sitter-embedded-template", "tree-sitter-heex", "tree-sitter-html", @@ -8287,7 +8287,7 @@ dependencies = [ [[package]] name = "tree-sitter-elixir" version = "0.1.0" -source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e#4ba9dab6e2602960d95b2b625f3386c27e08084e" +source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c#2616034f78ffa83ca6a521ebd7eee1868cb5c14c" dependencies = [ "cc", "tree-sitter", @@ -9923,7 +9923,7 @@ dependencies = [ "tree-sitter-c", "tree-sitter-cpp 0.20.0", "tree-sitter-css", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", + "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c)", "tree-sitter-elm", "tree-sitter-embedded-template", "tree-sitter-glsl", diff --git a/Cargo.toml b/Cargo.toml index fc46286de0..19d43a1b95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,7 +111,7 @@ tree-sitter-bash = { git = "https://github.com/tree-sitter/tree-sitter-bash", re tree-sitter-c = "0.20.1" tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev="f44509141e7e483323d2ec178f2d2e6c0fc041c1" } tree-sitter-css = { git = "https://github.com/tree-sitter/tree-sitter-css", rev = "769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" } -tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "4ba9dab6e2602960d95b2b625f3386c27e08084e" } +tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "2616034f78ffa83ca6a521ebd7eee1868cb5c14c" } tree-sitter-elm = { git = "https://github.com/elm-tooling/tree-sitter-elm", rev = "692c50c0b961364c40299e73c1306aecb5d20f40"} tree-sitter-embedded-template = "0.20.0" tree-sitter-glsl = { git = "https://github.com/theHamsta/tree-sitter-glsl", rev = "2a56fb7bc8bb03a1892b4741279dd0a8758b7fb3" } From 45e5d816649242b058c19979779c0b04c3d9de17 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 17:41:13 -0700 Subject: [PATCH 078/120] update to dependency without symbol conflict --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9de3e6f4a6..04ee8c2212 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3851,7 +3851,7 @@ dependencies = [ "text", "theme", "tree-sitter", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c)", + "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=a2861e88a730287a60c11ea9299c033c7d076e30)", "tree-sitter-embedded-template", "tree-sitter-heex", "tree-sitter-html", @@ -8287,7 +8287,7 @@ dependencies = [ [[package]] name = "tree-sitter-elixir" version = "0.1.0" -source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c#2616034f78ffa83ca6a521ebd7eee1868cb5c14c" +source = "git+https://github.com/elixir-lang/tree-sitter-elixir?rev=a2861e88a730287a60c11ea9299c033c7d076e30#a2861e88a730287a60c11ea9299c033c7d076e30" dependencies = [ "cc", "tree-sitter", @@ -9923,7 +9923,7 @@ dependencies = [ "tree-sitter-c", "tree-sitter-cpp 0.20.0", "tree-sitter-css", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=2616034f78ffa83ca6a521ebd7eee1868cb5c14c)", + "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=a2861e88a730287a60c11ea9299c033c7d076e30)", "tree-sitter-elm", "tree-sitter-embedded-template", "tree-sitter-glsl", diff --git a/Cargo.toml b/Cargo.toml index 19d43a1b95..157db0635f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,7 +111,7 @@ tree-sitter-bash = { git = "https://github.com/tree-sitter/tree-sitter-bash", re tree-sitter-c = "0.20.1" tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev="f44509141e7e483323d2ec178f2d2e6c0fc041c1" } tree-sitter-css = { git = "https://github.com/tree-sitter/tree-sitter-css", rev = "769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" } -tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "2616034f78ffa83ca6a521ebd7eee1868cb5c14c" } +tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "a2861e88a730287a60c11ea9299c033c7d076e30" } tree-sitter-elm = { git = "https://github.com/elm-tooling/tree-sitter-elm", rev = "692c50c0b961364c40299e73c1306aecb5d20f40"} tree-sitter-embedded-template = "0.20.0" tree-sitter-glsl = { git = "https://github.com/theHamsta/tree-sitter-glsl", rev = "2a56fb7bc8bb03a1892b4741279dd0a8758b7fb3" } From a0fc515cfca9677dde32cef8be22321d1304a13e Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 17:58:43 -0700 Subject: [PATCH 079/120] Rework close_inactive_items to await all tasks Update action name to be more accurate --- assets/keymaps/default.json | 2 +- crates/workspace/src/pane.rs | 4 +++ crates/workspace/src/workspace.rs | 42 ++++++++++++++++++++----------- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 5c841d19b2..090385458e 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -22,7 +22,7 @@ "alt-cmd-right": "pane::ActivateNextItem", "cmd-w": "pane::CloseActiveItem", "alt-cmd-t": "pane::CloseInactiveItems", - "ctrl-alt-cmd-w": "workspace::CloseInactiveEditors", + "ctrl-alt-cmd-w": "workspace::CloseInactiveTabsAndPanes", "cmd-k u": "pane::CloseCleanItems", "cmd-k cmd-w": "pane::CloseAllItems", "cmd-shift-w": "workspace::CloseWindow", diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 2972c307f2..ee658c9cc9 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -746,6 +746,10 @@ impl Pane { _: &CloseAllItems, cx: &mut ViewContext, ) -> Option>> { + if self.items.is_empty() { + return None; + } + Some(self.close_items(cx, move |_| true)) } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 6694cc06a3..827b0b8427 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -21,6 +21,7 @@ use drag_and_drop::DragAndDrop; use futures::{ channel::{mpsc, oneshot}, future::try_join_all, + stream::FuturesUnordered, FutureExt, StreamExt, }; use gpui::{ @@ -122,7 +123,7 @@ actions!( NewFile, NewWindow, CloseWindow, - CloseInactiveEditors, + CloseInactiveTabsAndPanes, AddFolderToProject, Unfollow, Save, @@ -240,7 +241,7 @@ pub fn init(app_state: Arc, cx: &mut AppContext) { cx.add_async_action(Workspace::follow_next_collaborator); cx.add_async_action(Workspace::close); - cx.add_async_action(Workspace::close_inactive_editors); + cx.add_async_action(Workspace::close_inactive_items_and_panes); cx.add_global_action(Workspace::close_global); cx.add_global_action(restart); cx.add_async_action(Workspace::save_all); @@ -1635,32 +1636,43 @@ impl Workspace { } } - pub fn close_inactive_editors( + pub fn close_inactive_items_and_panes( &mut self, - _: &CloseInactiveEditors, + _: &CloseInactiveTabsAndPanes, cx: &mut ViewContext, ) -> Option>> { let current_pane = self.active_pane(); - // let mut tasks: Vec>> = Vec::new(); - current_pane - .update(cx, |pane, cx| { - pane.close_inactive_items(&CloseInactiveItems, cx).unwrap() - }) - .detach_and_log_err(cx); + let mut tasks = Vec::new(); + + if let Some(current_pane_close) = current_pane.update(cx, |pane, cx| { + pane.close_inactive_items(&CloseInactiveItems, cx) + }) { + tasks.push(current_pane_close); + }; for pane in self.panes() { if pane.id() == current_pane.id() { continue; } - pane.update(cx, |pane: &mut Pane, cx| { - pane.close_all_items(&CloseAllItems, cx).unwrap() - }) - .detach_and_log_err(cx); + if let Some(close_pane_items) = pane.update(cx, |pane: &mut Pane, cx| { + pane.close_all_items(&CloseAllItems, cx) + }) { + tasks.push(close_pane_items) + } } - Some(Task::ready(Ok(()))) + if tasks.is_empty() { + None + } else { + Some(cx.spawn(|_, _| async move { + for task in tasks { + task.await? + } + Ok(()) + })) + } } pub fn toggle_dock(&mut self, dock_side: DockPosition, cx: &mut ViewContext) { From 4735b07088269e5b99e9299dbb9dd620e70f4497 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 27 Jul 2023 18:00:33 -0700 Subject: [PATCH 080/120] Fix warning --- crates/workspace/src/workspace.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 827b0b8427..a8ba017655 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -21,7 +21,6 @@ use drag_and_drop::DragAndDrop; use futures::{ channel::{mpsc, oneshot}, future::try_join_all, - stream::FuturesUnordered, FutureExt, StreamExt, }; use gpui::{ From cf6e524c9a5f2fecbfbad9675e37cafd746c002c Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 28 Jul 2023 12:56:44 +0300 Subject: [PATCH 081/120] Make project search includes and excludes more user-friendly Allow search results that start with the include/exclude path part --- crates/project/src/project_tests.rs | 55 ++++---- crates/project/src/search.rs | 117 +++++++++++++++--- crates/search/src/project_search.rs | 84 ++++--------- crates/semantic_index/src/db.rs | 17 +-- crates/semantic_index/src/semantic_index.rs | 14 +-- .../src/semantic_index_tests.rs | 7 +- 6 files changed, 160 insertions(+), 134 deletions(-) diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index 16e706a77e..259c10ca05 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -1,7 +1,6 @@ -use crate::{worktree::WorktreeHandle, Event, *}; +use crate::{search::PathMatcher, worktree::WorktreeHandle, Event, *}; use fs::{FakeFs, LineEnding, RealFs}; use futures::{future, StreamExt}; -use globset::Glob; use gpui::{executor::Deterministic, test::subscribe, AppContext}; use language::{ language_settings::{AllLanguageSettings, LanguageSettingsContent}, @@ -3641,7 +3640,7 @@ async fn test_search_with_inclusions(cx: &mut gpui::TestAppContext) { search_query, false, true, - vec![Glob::new("*.odd").unwrap().compile_matcher()], + vec![PathMatcher::new("*.odd").unwrap()], Vec::new() ), cx @@ -3659,7 +3658,7 @@ async fn test_search_with_inclusions(cx: &mut gpui::TestAppContext) { search_query, false, true, - vec![Glob::new("*.rs").unwrap().compile_matcher()], + vec![PathMatcher::new("*.rs").unwrap()], Vec::new() ), cx @@ -3681,8 +3680,8 @@ async fn test_search_with_inclusions(cx: &mut gpui::TestAppContext) { false, true, vec![ - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher(), + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap(), ], Vec::new() ), @@ -3705,9 +3704,9 @@ async fn test_search_with_inclusions(cx: &mut gpui::TestAppContext) { false, true, vec![ - Glob::new("*.rs").unwrap().compile_matcher(), - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher(), + PathMatcher::new("*.rs").unwrap(), + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap(), ], Vec::new() ), @@ -3752,7 +3751,7 @@ async fn test_search_with_exclusions(cx: &mut gpui::TestAppContext) { false, true, Vec::new(), - vec![Glob::new("*.odd").unwrap().compile_matcher()], + vec![PathMatcher::new("*.odd").unwrap()], ), cx ) @@ -3775,7 +3774,7 @@ async fn test_search_with_exclusions(cx: &mut gpui::TestAppContext) { false, true, Vec::new(), - vec![Glob::new("*.rs").unwrap().compile_matcher()], + vec![PathMatcher::new("*.rs").unwrap()], ), cx ) @@ -3797,8 +3796,8 @@ async fn test_search_with_exclusions(cx: &mut gpui::TestAppContext) { true, Vec::new(), vec![ - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher(), + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap(), ], ), cx @@ -3821,9 +3820,9 @@ async fn test_search_with_exclusions(cx: &mut gpui::TestAppContext) { true, Vec::new(), vec![ - Glob::new("*.rs").unwrap().compile_matcher(), - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher(), + PathMatcher::new("*.rs").unwrap(), + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap(), ], ), cx @@ -3860,8 +3859,8 @@ async fn test_search_with_exclusions_and_inclusions(cx: &mut gpui::TestAppContex search_query, false, true, - vec![Glob::new("*.odd").unwrap().compile_matcher()], - vec![Glob::new("*.odd").unwrap().compile_matcher()], + vec![PathMatcher::new("*.odd").unwrap()], + vec![PathMatcher::new("*.odd").unwrap()], ), cx ) @@ -3878,8 +3877,8 @@ async fn test_search_with_exclusions_and_inclusions(cx: &mut gpui::TestAppContex search_query, false, true, - vec![Glob::new("*.ts").unwrap().compile_matcher()], - vec![Glob::new("*.ts").unwrap().compile_matcher()], + vec![PathMatcher::new("*.ts").unwrap()], + vec![PathMatcher::new("*.ts").unwrap()], ), cx ) @@ -3897,12 +3896,12 @@ async fn test_search_with_exclusions_and_inclusions(cx: &mut gpui::TestAppContex false, true, vec![ - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher() + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap() ], vec![ - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher() + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap() ], ), cx @@ -3921,12 +3920,12 @@ async fn test_search_with_exclusions_and_inclusions(cx: &mut gpui::TestAppContex false, true, vec![ - Glob::new("*.ts").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher() + PathMatcher::new("*.ts").unwrap(), + PathMatcher::new("*.odd").unwrap() ], vec![ - Glob::new("*.rs").unwrap().compile_matcher(), - Glob::new("*.odd").unwrap().compile_matcher() + PathMatcher::new("*.rs").unwrap(), + PathMatcher::new("*.odd").unwrap() ], ), cx diff --git a/crates/project/src/search.rs b/crates/project/src/search.rs index 4b4126fef2..71a0b70b81 100644 --- a/crates/project/src/search.rs +++ b/crates/project/src/search.rs @@ -1,5 +1,5 @@ use aho_corasick::{AhoCorasick, AhoCorasickBuilder}; -use anyhow::Result; +use anyhow::{Context, Result}; use client::proto; use globset::{Glob, GlobMatcher}; use itertools::Itertools; @@ -9,7 +9,7 @@ use smol::future::yield_now; use std::{ io::{BufRead, BufReader, Read}, ops::Range, - path::Path, + path::{Path, PathBuf}, sync::Arc, }; @@ -20,8 +20,8 @@ pub enum SearchQuery { query: Arc, whole_word: bool, case_sensitive: bool, - files_to_include: Vec, - files_to_exclude: Vec, + files_to_include: Vec, + files_to_exclude: Vec, }, Regex { regex: Regex, @@ -29,18 +29,43 @@ pub enum SearchQuery { multiline: bool, whole_word: bool, case_sensitive: bool, - files_to_include: Vec, - files_to_exclude: Vec, + files_to_include: Vec, + files_to_exclude: Vec, }, } +#[derive(Clone, Debug)] +pub struct PathMatcher { + maybe_path: PathBuf, + glob: GlobMatcher, +} + +impl std::fmt::Display for PathMatcher { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.maybe_path.to_string_lossy().fmt(f) + } +} + +impl PathMatcher { + pub fn new(maybe_glob: &str) -> Result { + Ok(PathMatcher { + glob: Glob::new(&maybe_glob)?.compile_matcher(), + maybe_path: PathBuf::from(maybe_glob), + }) + } + + pub fn is_match>(&self, other: P) -> bool { + other.as_ref().starts_with(&self.maybe_path) || self.glob.is_match(other) + } +} + impl SearchQuery { pub fn text( query: impl ToString, whole_word: bool, case_sensitive: bool, - files_to_include: Vec, - files_to_exclude: Vec, + files_to_include: Vec, + files_to_exclude: Vec, ) -> Self { let query = query.to_string(); let search = AhoCorasickBuilder::new() @@ -61,8 +86,8 @@ impl SearchQuery { query: impl ToString, whole_word: bool, case_sensitive: bool, - files_to_include: Vec, - files_to_exclude: Vec, + files_to_include: Vec, + files_to_exclude: Vec, ) -> Result { let mut query = query.to_string(); let initial_query = Arc::from(query.as_str()); @@ -96,16 +121,16 @@ impl SearchQuery { message.query, message.whole_word, message.case_sensitive, - deserialize_globs(&message.files_to_include)?, - deserialize_globs(&message.files_to_exclude)?, + deserialize_path_matches(&message.files_to_include)?, + deserialize_path_matches(&message.files_to_exclude)?, ) } else { Ok(Self::text( message.query, message.whole_word, message.case_sensitive, - deserialize_globs(&message.files_to_include)?, - deserialize_globs(&message.files_to_exclude)?, + deserialize_path_matches(&message.files_to_include)?, + deserialize_path_matches(&message.files_to_exclude)?, )) } } @@ -120,12 +145,12 @@ impl SearchQuery { files_to_include: self .files_to_include() .iter() - .map(|g| g.glob().to_string()) + .map(|matcher| matcher.to_string()) .join(","), files_to_exclude: self .files_to_exclude() .iter() - .map(|g| g.glob().to_string()) + .map(|matcher| matcher.to_string()) .join(","), } } @@ -266,7 +291,7 @@ impl SearchQuery { matches!(self, Self::Regex { .. }) } - pub fn files_to_include(&self) -> &[GlobMatcher] { + pub fn files_to_include(&self) -> &[PathMatcher] { match self { Self::Text { files_to_include, .. @@ -277,7 +302,7 @@ impl SearchQuery { } } - pub fn files_to_exclude(&self) -> &[GlobMatcher] { + pub fn files_to_exclude(&self) -> &[PathMatcher] { match self { Self::Text { files_to_exclude, .. @@ -306,11 +331,63 @@ impl SearchQuery { } } -fn deserialize_globs(glob_set: &str) -> Result> { +fn deserialize_path_matches(glob_set: &str) -> anyhow::Result> { glob_set .split(',') .map(str::trim) .filter(|glob_str| !glob_str.is_empty()) - .map(|glob_str| Ok(Glob::new(glob_str)?.compile_matcher())) + .map(|glob_str| { + PathMatcher::new(glob_str) + .with_context(|| format!("deserializing path match glob {glob_str}")) + }) .collect() } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn path_matcher_creation_for_valid_paths() { + for valid_path in [ + "file", + "Cargo.toml", + ".DS_Store", + "~/dir/another_dir/", + "./dir/file", + "dir/[a-z].txt", + "../dir/filé", + ] { + let path_matcher = PathMatcher::new(valid_path).unwrap_or_else(|e| { + panic!("Valid path {valid_path} should be accepted, but got: {e}") + }); + assert!( + path_matcher.is_match(valid_path), + "Path matcher for valid path {valid_path} should match itself" + ) + } + } + + #[test] + fn path_matcher_creation_for_globs() { + for invalid_glob in ["dir/[].txt", "dir/[a-z.txt", "dir/{file"] { + match PathMatcher::new(invalid_glob) { + Ok(_) => panic!("Invalid glob {invalid_glob} should not be accepted"), + Err(_expected) => {} + } + } + + for valid_glob in [ + "dir/?ile", + "dir/*.txt", + "dir/**/file", + "dir/[a-z].txt", + "{dir,file}", + ] { + match PathMatcher::new(valid_glob) { + Ok(_expected) => {} + Err(e) => panic!("Valid glob {valid_glob} should be accepted, but got: {e}"), + } + } + } +} diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 52ee12c26d..d6d69e575f 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -2,14 +2,13 @@ use crate::{ SearchOptions, SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, ToggleWholeWord, }; -use anyhow::Result; +use anyhow::Context; use collections::HashMap; use editor::{ items::active_match_index, scroll::autoscroll::Autoscroll, Anchor, Editor, MultiBuffer, SelectAll, MAX_TAB_TITLE_LEN, }; use futures::StreamExt; -use globset::{Glob, GlobMatcher}; use gpui::{ actions, elements::*, @@ -19,7 +18,10 @@ use gpui::{ }; use menu::Confirm; use postage::stream::Stream; -use project::{search::SearchQuery, Entry, Project}; +use project::{ + search::{PathMatcher, SearchQuery}, + Entry, Project, +}; use semantic_index::SemanticIndex; use smallvec::SmallVec; use std::{ @@ -185,21 +187,15 @@ impl ProjectSearch { cx.notify(); } - fn semantic_search( - &mut self, - query: String, - include_files: Vec, - exclude_files: Vec, - cx: &mut ModelContext, - ) { + fn semantic_search(&mut self, query: SearchQuery, cx: &mut ModelContext) { let search = SemanticIndex::global(cx).map(|index| { index.update(cx, |semantic_index, cx| { semantic_index.search_project( self.project.clone(), - query.clone(), + query.as_str().to_owned(), 10, - include_files, - exclude_files, + query.files_to_include().to_vec(), + query.files_to_exclude().to_vec(), cx, ) }) @@ -590,8 +586,7 @@ impl ProjectSearchView { if !dir_entry.is_dir() { return; } - let filter_path = dir_entry.path.join("**"); - let Some(filter_str) = filter_path.to_str() else { return; }; + let Some(filter_str) = dir_entry.path.to_str() else { return; }; let model = cx.add_model(|cx| ProjectSearch::new(workspace.project().clone(), cx)); let search = cx.add_view(|cx| ProjectSearchView::new(model, cx)); @@ -662,16 +657,10 @@ impl ProjectSearchView { if semantic.outstanding_file_count > 0 { return; } - - let query = self.query_editor.read(cx).text(cx); - if let Some((included_files, exclude_files)) = - self.get_included_and_excluded_globsets(cx) - { - self.model.update(cx, |model, cx| { - model.semantic_search(query, included_files, exclude_files, cx) - }); + if let Some(query) = self.build_search_query(cx) { + self.model + .update(cx, |model, cx| model.semantic_search(query, cx)); } - return; } if let Some(query) = self.build_search_query(cx) { @@ -679,42 +668,10 @@ impl ProjectSearchView { } } - fn get_included_and_excluded_globsets( - &mut self, - cx: &mut ViewContext, - ) -> Option<(Vec, Vec)> { - let included_files = - match Self::load_glob_set(&self.included_files_editor.read(cx).text(cx)) { - Ok(included_files) => { - self.panels_with_errors.remove(&InputPanel::Include); - included_files - } - Err(_e) => { - self.panels_with_errors.insert(InputPanel::Include); - cx.notify(); - return None; - } - }; - let excluded_files = - match Self::load_glob_set(&self.excluded_files_editor.read(cx).text(cx)) { - Ok(excluded_files) => { - self.panels_with_errors.remove(&InputPanel::Exclude); - excluded_files - } - Err(_e) => { - self.panels_with_errors.insert(InputPanel::Exclude); - cx.notify(); - return None; - } - }; - - Some((included_files, excluded_files)) - } - fn build_search_query(&mut self, cx: &mut ViewContext) -> Option { let text = self.query_editor.read(cx).text(cx); let included_files = - match Self::load_glob_set(&self.included_files_editor.read(cx).text(cx)) { + match Self::parse_path_matches(&self.included_files_editor.read(cx).text(cx)) { Ok(included_files) => { self.panels_with_errors.remove(&InputPanel::Include); included_files @@ -726,7 +683,7 @@ impl ProjectSearchView { } }; let excluded_files = - match Self::load_glob_set(&self.excluded_files_editor.read(cx).text(cx)) { + match Self::parse_path_matches(&self.excluded_files_editor.read(cx).text(cx)) { Ok(excluded_files) => { self.panels_with_errors.remove(&InputPanel::Exclude); excluded_files @@ -766,11 +723,14 @@ impl ProjectSearchView { } } - fn load_glob_set(text: &str) -> Result> { + fn parse_path_matches(text: &str) -> anyhow::Result> { text.split(',') .map(str::trim) - .filter(|glob_str| !glob_str.is_empty()) - .map(|glob_str| anyhow::Ok(Glob::new(glob_str)?.compile_matcher())) + .filter(|maybe_glob_str| !maybe_glob_str.is_empty()) + .map(|maybe_glob_str| { + PathMatcher::new(maybe_glob_str) + .with_context(|| format!("parsing {maybe_glob_str} as path matcher")) + }) .collect() } @@ -1769,7 +1729,7 @@ pub mod tests { search_view.included_files_editor.update(cx, |editor, cx| { assert_eq!( editor.display_text(cx), - a_dir_entry.path.join("**").display().to_string(), + a_dir_entry.path.to_str().unwrap(), "New search in directory should have included dir entry path" ); }); diff --git a/crates/semantic_index/src/db.rs b/crates/semantic_index/src/db.rs index d180f5e831..e8c929c995 100644 --- a/crates/semantic_index/src/db.rs +++ b/crates/semantic_index/src/db.rs @@ -1,7 +1,6 @@ use crate::{parsing::Document, SEMANTIC_INDEX_VERSION}; use anyhow::{anyhow, Context, Result}; -use globset::GlobMatcher; -use project::Fs; +use project::{search::PathMatcher, Fs}; use rpc::proto::Timestamp; use rusqlite::{ params, @@ -290,8 +289,8 @@ impl VectorDatabase { pub fn retrieve_included_file_ids( &self, worktree_ids: &[i64], - include_globs: Vec, - exclude_globs: Vec, + includes: &[PathMatcher], + excludes: &[PathMatcher], ) -> Result> { let mut file_query = self.db.prepare( " @@ -310,13 +309,9 @@ impl VectorDatabase { while let Some(row) = rows.next()? { let file_id = row.get(0)?; let relative_path = row.get_ref(1)?.as_str()?; - let included = include_globs.is_empty() - || include_globs - .iter() - .any(|glob| glob.is_match(relative_path)); - let excluded = exclude_globs - .iter() - .any(|glob| glob.is_match(relative_path)); + let included = + includes.is_empty() || includes.iter().any(|glob| glob.is_match(relative_path)); + let excluded = excludes.iter().any(|glob| glob.is_match(relative_path)); if included && !excluded { file_ids.push(file_id); } diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index bd114de216..f1450eb7b0 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -11,13 +11,12 @@ use anyhow::{anyhow, Result}; use db::VectorDatabase; use embedding::{EmbeddingProvider, OpenAIEmbeddings}; use futures::{channel::oneshot, Future}; -use globset::GlobMatcher; use gpui::{AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task, WeakModelHandle}; use language::{Anchor, Buffer, Language, LanguageRegistry}; use parking_lot::Mutex; use parsing::{CodeContextRetriever, Document, PARSEABLE_ENTIRE_FILE_TYPES}; use postage::watch; -use project::{Fs, Project, WorktreeId}; +use project::{search::PathMatcher, Fs, Project, WorktreeId}; use smol::channel; use std::{ cmp::Ordering, @@ -682,8 +681,8 @@ impl SemanticIndex { project: ModelHandle, phrase: String, limit: usize, - include_globs: Vec, - exclude_globs: Vec, + includes: Vec, + excludes: Vec, cx: &mut ModelContext, ) -> Task>> { let project_state = if let Some(state) = self.projects.get(&project.downgrade()) { @@ -714,11 +713,8 @@ impl SemanticIndex { .next() .unwrap(); - let file_ids = database.retrieve_included_file_ids( - &worktree_db_ids, - include_globs, - exclude_globs, - )?; + let file_ids = + database.retrieve_included_file_ids(&worktree_db_ids, &includes, &excludes)?; let batch_n = cx.background().num_cpus(); let ids_len = file_ids.clone().len(); diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index acf5a9d72b..6acb25d98a 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -7,11 +7,10 @@ use crate::{ }; use anyhow::Result; use async_trait::async_trait; -use globset::Glob; use gpui::{Task, TestAppContext}; use language::{Language, LanguageConfig, LanguageRegistry, ToOffset}; use pretty_assertions::assert_eq; -use project::{project_settings::ProjectSettings, FakeFs, Fs, Project}; +use project::{project_settings::ProjectSettings, search::PathMatcher, FakeFs, Fs, Project}; use rand::{rngs::StdRng, Rng}; use serde_json::json; use settings::SettingsStore; @@ -121,8 +120,8 @@ async fn test_semantic_index(cx: &mut TestAppContext) { ); // Test Include Files Functonality - let include_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; - let exclude_files = vec![Glob::new("*.rs").unwrap().compile_matcher()]; + let include_files = vec![PathMatcher::new("*.rs").unwrap()]; + let exclude_files = vec![PathMatcher::new("*.rs").unwrap()]; let rust_only_search_results = store .update(cx, |store, cx| { store.search_project( From fac0e2dd56bfa44dbeea1baf814d2fad23e08c63 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 28 Jul 2023 12:10:04 -0600 Subject: [PATCH 082/120] Don't highlight project search matches either --- crates/editor/src/editor.rs | 2 +- crates/search/src/project_search.rs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index e05837740d..5404610b1d 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1537,7 +1537,7 @@ impl Editor { self.collapse_matches = collapse_matches; } - fn range_for_match(&self, range: &Range) -> Range { + pub fn range_for_match(&self, range: &Range) -> Range { if self.collapse_matches { return range.start..range.start; } diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 9054d9e121..ade60a6d34 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -654,6 +654,7 @@ impl ProjectSearchView { let range_to_select = match_ranges[new_index].clone(); self.results_editor.update(cx, |editor, cx| { + let range_to_select = editor.range_for_match(&range_to_select); editor.unfold_ranges([range_to_select.clone()], false, true, cx); editor.change_selections(Some(Autoscroll::fit()), cx, |s| { s.select_ranges([range_to_select]) @@ -695,8 +696,12 @@ impl ProjectSearchView { let is_new_search = self.search_id != prev_search_id; self.results_editor.update(cx, |editor, cx| { if is_new_search { + let range_to_select = match_ranges + .first() + .clone() + .map(|range| editor.range_for_match(range)); editor.change_selections(Some(Autoscroll::fit()), cx, |s| { - s.select_ranges(match_ranges.first().cloned()) + s.select_ranges(range_to_select) }); } editor.highlight_background::( From b8690ec1d1df2e5f3d7a018070be0180dfa3257e Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 28 Jul 2023 15:12:37 -0400 Subject: [PATCH 083/120] Update release action to choose between preview and stable URL in Discord announcements This is what ChatGPT told me, so we'll see. --- .github/workflows/release_actions.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release_actions.yml b/.github/workflows/release_actions.yml index 6c3b3d57c0..f767324e4f 100644 --- a/.github/workflows/release_actions.yml +++ b/.github/workflows/release_actions.yml @@ -6,6 +6,16 @@ jobs: discord_release: runs-on: ubuntu-latest steps: + - name: Get appropriate URL + id: get-appropriate-url + run: | + if [ "${{ github.event.release.prerelease }}" == "true" ]; then + URL="https://zed.dev/releases/preview/latest" + else + URL="https://zed.dev/releases/stable/latest" + fi + echo "::set-output name=URL::$URL" + - name: Discord Webhook Action uses: tsickert/discord-webhook@v5.3.0 with: @@ -13,6 +23,6 @@ jobs: content: | 📣 Zed ${{ github.event.release.tag_name }} was just released! - Restart your Zed or head to https://zed.dev/releases/stable/latest to grab it. + Restart your Zed or head to ${{ steps.get-appropriate-url.outputs.URL }} to grab it. ${{ github.event.release.body }} From 46101bf1103721088f16da845dae3a79bf30e856 Mon Sep 17 00:00:00 2001 From: Julia Date: Fri, 28 Jul 2023 15:24:40 -0400 Subject: [PATCH 084/120] Reattempt Node installation if the installation itself errors This also makes us a bit more aggressive about reinstalling Node --- crates/copilot/src/copilot.rs | 4 +-- crates/node_runtime/src/node_runtime.rs | 44 ++++++------------------- crates/zed/src/main.rs | 2 +- crates/zed/src/zed.rs | 2 +- 4 files changed, 14 insertions(+), 38 deletions(-) diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index ce4938ed0d..ab2d861190 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -338,9 +338,9 @@ impl Copilot { let (server, fake_server) = LanguageServer::fake("copilot".into(), Default::default(), cx.to_async()); let http = util::http::FakeHttpClient::create(|_| async { unreachable!() }); - let this = cx.add_model(|cx| Self { + let this = cx.add_model(|_| Self { http: http.clone(), - node_runtime: NodeRuntime::instance(http, cx.background().clone()), + node_runtime: NodeRuntime::instance(http), server: CopilotServer::Running(RunningCopilotServer { lsp: Arc::new(server), sign_in_status: SignInStatus::Authorized, diff --git a/crates/node_runtime/src/node_runtime.rs b/crates/node_runtime/src/node_runtime.rs index 94858df880..d43c14ec7b 100644 --- a/crates/node_runtime/src/node_runtime.rs +++ b/crates/node_runtime/src/node_runtime.rs @@ -1,9 +1,6 @@ use anyhow::{anyhow, bail, Context, Result}; use async_compression::futures::bufread::GzipDecoder; use async_tar::Archive; -use futures::lock::Mutex; -use futures::{future::Shared, FutureExt}; -use gpui::{executor::Background, Task}; use serde::Deserialize; use smol::{fs, io::BufReader, process::Command}; use std::process::{Output, Stdio}; @@ -33,20 +30,12 @@ pub struct NpmInfoDistTags { pub struct NodeRuntime { http: Arc, - background: Arc, - installation_path: Mutex>>>>>, } impl NodeRuntime { - pub fn instance(http: Arc, background: Arc) -> Arc { + pub fn instance(http: Arc) -> Arc { RUNTIME_INSTANCE - .get_or_init(|| { - Arc::new(NodeRuntime { - http, - background, - installation_path: Mutex::new(None), - }) - }) + .get_or_init(|| Arc::new(NodeRuntime { http })) .clone() } @@ -61,7 +50,9 @@ impl NodeRuntime { subcommand: &str, args: &[&str], ) -> Result { - let attempt = |installation_path: PathBuf| async move { + let attempt = || async move { + let installation_path = self.install_if_needed().await?; + let mut env_path = installation_path.join("bin").into_os_string(); if let Some(existing_path) = std::env::var_os("PATH") { if !existing_path.is_empty() { @@ -92,10 +83,9 @@ impl NodeRuntime { command.output().await.map_err(|e| anyhow!("{e}")) }; - let installation_path = self.install_if_needed().await?; - let mut output = attempt(installation_path.clone()).await; + let mut output = attempt().await; if output.is_err() { - output = attempt(installation_path).await; + output = attempt().await; if output.is_err() { return Err(anyhow!( "failed to launch npm subcommand {subcommand} subcommand" @@ -167,23 +157,8 @@ impl NodeRuntime { } async fn install_if_needed(&self) -> Result { - let task = self - .installation_path - .lock() - .await - .get_or_insert_with(|| { - let http = self.http.clone(); - self.background - .spawn(async move { Self::install(http).await.map_err(Arc::new) }) - .shared() - }) - .clone(); + log::info!("Node runtime install_if_needed"); - task.await.map_err(|e| anyhow!("{}", e)) - } - - async fn install(http: Arc) -> Result { - log::info!("installing Node runtime"); let arch = match consts::ARCH { "x86_64" => "x64", "aarch64" => "arm64", @@ -214,7 +189,8 @@ impl NodeRuntime { let file_name = format!("node-{VERSION}-darwin-{arch}.tar.gz"); let url = format!("https://nodejs.org/dist/{VERSION}/{file_name}"); - let mut response = http + let mut response = self + .http .get(&url, Default::default(), true) .await .context("error downloading Node binary tarball")?; diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index b9fefb89a7..e44ab3e33a 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -136,7 +136,7 @@ fn main() { languages.set_executor(cx.background().clone()); languages.set_language_server_download_dir(paths::LANGUAGES_DIR.clone()); let languages = Arc::new(languages); - let node_runtime = NodeRuntime::instance(http.clone(), cx.background().to_owned()); + let node_runtime = NodeRuntime::instance(http.clone()); languages::init(languages.clone(), node_runtime.clone()); let user_store = cx.add_model(|cx| UserStore::new(client.clone(), http.clone(), cx)); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index a29567ac38..4b0bf1cd4c 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -2364,7 +2364,7 @@ mod tests { languages.set_executor(cx.background().clone()); let languages = Arc::new(languages); let http = FakeHttpClient::with_404_response(); - let node_runtime = NodeRuntime::instance(http, cx.background().to_owned()); + let node_runtime = NodeRuntime::instance(http); languages::init(languages.clone(), node_runtime); for name in languages.language_names() { languages.language_for_name(&name); From d3b89e16f26d24965267637000e642382cb4b675 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 28 Jul 2023 14:56:13 -0700 Subject: [PATCH 085/120] Make wrap guides respect scroll position --- crates/editor/src/element.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index b9bf74ee85..cb46e74af0 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -546,8 +546,18 @@ impl EditorElement { }); } + let scroll_left = + layout.position_map.snapshot.scroll_position().x() * layout.position_map.em_width; + for (wrap_position, active) in layout.wrap_guides.iter() { - let x = text_bounds.origin_x() + wrap_position + layout.position_map.em_width / 2.; + let x = + (text_bounds.origin_x() + wrap_position + layout.position_map.em_width / 2.) + - scroll_left; + + if x < text_bounds.origin_x() { + continue; + } + let color = if *active { self.style.active_wrap_guide } else { From fe43bacb6fa9a22d57d174df92a05a8cb6739e9d Mon Sep 17 00:00:00 2001 From: Julia Date: Fri, 28 Jul 2023 18:53:24 -0400 Subject: [PATCH 086/120] Put LiveKitBridge Swift build directory in `target` Helps it get caught in a cargo clean --- crates/live_kit_client/build.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/live_kit_client/build.rs b/crates/live_kit_client/build.rs index bcd3f76dca..3fa0e003e7 100644 --- a/crates/live_kit_client/build.rs +++ b/crates/live_kit_client/build.rs @@ -58,11 +58,14 @@ fn build_bridge(swift_target: &SwiftTarget) { "cargo:rerun-if-changed={}/Package.resolved", SWIFT_PACKAGE_NAME ); + let swift_package_root = swift_package_root(); + let swift_target_folder = swift_target_folder(); if !Command::new("swift") .arg("build") .args(["--configuration", &env::var("PROFILE").unwrap()]) .args(["--triple", &swift_target.target.triple]) + .args(["--build-path".into(), swift_target_folder]) .current_dir(&swift_package_root) .status() .unwrap() @@ -128,6 +131,12 @@ fn swift_package_root() -> PathBuf { env::current_dir().unwrap().join(SWIFT_PACKAGE_NAME) } +fn swift_target_folder() -> PathBuf { + env::current_dir() + .unwrap() + .join(format!("../../target/{SWIFT_PACKAGE_NAME}")) +} + fn copy_dir(source: &Path, destination: &Path) { assert!( Command::new("rm") @@ -155,8 +164,7 @@ fn copy_dir(source: &Path, destination: &Path) { impl SwiftTarget { fn out_dir_path(&self) -> PathBuf { - swift_package_root() - .join(".build") + swift_target_folder() .join(&self.target.unversioned_triple) .join(env::var("PROFILE").unwrap()) } From 2c47efcce91328ee8d567f2871fae1e3cd107b63 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 28 Jul 2023 22:36:15 -0400 Subject: [PATCH 087/120] Add a command to collapse all entires --- crates/project_panel/src/project_panel.rs | 76 +++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index e6e1cff598..b650d272fb 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -115,6 +115,7 @@ actions!( [ ExpandSelectedEntry, CollapseSelectedEntry, + CollapseAllEntries, NewDirectory, NewFile, Copy, @@ -140,6 +141,7 @@ pub fn init(assets: impl AssetSource, cx: &mut AppContext) { file_associations::init(assets, cx); cx.add_action(ProjectPanel::expand_selected_entry); cx.add_action(ProjectPanel::collapse_selected_entry); + cx.add_action(ProjectPanel::collapse_all_entries); cx.add_action(ProjectPanel::select_prev); cx.add_action(ProjectPanel::select_next); cx.add_action(ProjectPanel::new_file); @@ -514,6 +516,12 @@ impl ProjectPanel { } } + pub fn collapse_all_entries(&mut self, _: &CollapseAllEntries, cx: &mut ViewContext) { + self.expanded_dir_ids.clear(); + self.update_visible_entries(None, cx); + cx.notify(); + } + fn toggle_expanded(&mut self, entry_id: ProjectEntryId, cx: &mut ViewContext) { if let Some(worktree_id) = self.project.read(cx).worktree_id_for_entry(entry_id, cx) { if let Some(expanded_dir_ids) = self.expanded_dir_ids.get_mut(&worktree_id) { @@ -2678,6 +2686,73 @@ mod tests { ); } + #[gpui::test] + async fn test_collapse_all_entries(cx: &mut gpui::TestAppContext) { + init_test_with_editor(cx); + + let fs = FakeFs::new(cx.background()); + fs.insert_tree( + "/project_root", + json!({ + "dir_1": { + "nested_dir": { + "file_a.py": "# File contents", + "file_b.py": "# File contents", + "file_c.py": "# File contents", + }, + "file_1.py": "# File contents", + "file_2.py": "# File contents", + "file_3.py": "# File contents", + }, + "dir_2": { + "file_1.py": "# File contents", + "file_2.py": "# File contents", + "file_3.py": "# File contents", + } + }), + ) + .await; + + let project = Project::test(fs.clone(), ["/project_root".as_ref()], cx).await; + let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); + + let new_search_events_count = Arc::new(AtomicUsize::new(0)); + let _subscription = panel.update(cx, |_, cx| { + let subcription_count = Arc::clone(&new_search_events_count); + cx.subscribe(&cx.handle(), move |_, _, event, _| { + if matches!(event, Event::NewSearchInDirectory { .. }) { + subcription_count.fetch_add(1, atomic::Ordering::SeqCst); + } + }) + }); + + panel.update(cx, |panel, cx| { + panel.collapse_all_entries(&CollapseAllEntries, cx) + }); + cx.foreground().run_until_parked(); + assert_eq!( + visible_entries_as_strings(&panel, 0..10, cx), + &["v project_root", " > dir_1", " > dir_2",] + ); + + // Open dir_1 and make sure nested_dir was collapsed during + toggle_expand_dir(&panel, "project_root/dir_1", cx); + cx.foreground().run_until_parked(); + assert_eq!( + visible_entries_as_strings(&panel, 0..10, cx), + &[ + "v project_root", + " v dir_1 <== selected", + " > nested_dir", + " file_1.py", + " file_2.py", + " file_3.py", + " > dir_2", + ] + ); + } + fn toggle_expand_dir( panel: &ViewHandle, path: impl AsRef, @@ -2878,3 +2953,4 @@ mod tests { }); } } +// TODO - a workspace command? From b0e81c58dc9d85a93153563b1c71753c425c4247 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 28 Jul 2023 23:06:40 -0400 Subject: [PATCH 088/120] Remove unused code in test --- crates/project_panel/src/project_panel.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index b650d272fb..b2b8b2e4bd 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -2717,16 +2717,6 @@ mod tests { let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); - let new_search_events_count = Arc::new(AtomicUsize::new(0)); - let _subscription = panel.update(cx, |_, cx| { - let subcription_count = Arc::clone(&new_search_events_count); - cx.subscribe(&cx.handle(), move |_, _, event, _| { - if matches!(event, Event::NewSearchInDirectory { .. }) { - subcription_count.fetch_add(1, atomic::Ordering::SeqCst); - } - }) - }); - panel.update(cx, |panel, cx| { panel.collapse_all_entries(&CollapseAllEntries, cx) }); From 0bd6e7bac3179b49f69125b573c78dce438f286a Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 28 Jul 2023 23:13:36 -0400 Subject: [PATCH 089/120] Fix comment --- crates/project_panel/src/project_panel.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index b2b8b2e4bd..0be52646e6 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -2726,7 +2726,7 @@ mod tests { &["v project_root", " > dir_1", " > dir_2",] ); - // Open dir_1 and make sure nested_dir was collapsed during + // Open dir_1 and make sure nested_dir was collapsed when running collapse_all_entries toggle_expand_dir(&panel, "project_root/dir_1", cx); cx.foreground().run_until_parked(); assert_eq!( From d58f031696ce039c0068344803551558c391d85c Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 28 Jul 2023 22:27:36 -0700 Subject: [PATCH 090/120] disable wrap guides in the assitant panel --- crates/ai/src/assistant.rs | 1 + crates/editor/src/editor.rs | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/crates/ai/src/assistant.rs b/crates/ai/src/assistant.rs index 8a4c04d338..957c5e1c06 100644 --- a/crates/ai/src/assistant.rs +++ b/crates/ai/src/assistant.rs @@ -1637,6 +1637,7 @@ impl ConversationEditor { let mut editor = Editor::for_buffer(conversation.read(cx).buffer.clone(), None, cx); editor.set_soft_wrap_mode(SoftWrap::EditorWidth, cx); editor.set_show_gutter(false, cx); + editor.set_show_wrap_guides(false, cx); editor }); diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index b4145edb64..5270d6f951 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -543,6 +543,7 @@ pub struct Editor { show_local_selections: bool, mode: EditorMode, show_gutter: bool, + show_wrap_guides: Option, placeholder_text: Option>, highlighted_rows: Option>, #[allow(clippy::type_complexity)] @@ -1375,6 +1376,7 @@ impl Editor { show_local_selections: true, mode, show_gutter: mode == EditorMode::Full, + show_wrap_guides: None, placeholder_text: None, highlighted_rows: None, background_highlights: Default::default(), @@ -7187,6 +7189,10 @@ impl Editor { pub fn wrap_guides(&self, cx: &AppContext) -> SmallVec<[(usize, bool); 2]> { let mut wrap_guides = smallvec::smallvec![]; + if self.show_wrap_guides == Some(false) { + return wrap_guides; + } + let settings = self.buffer.read(cx).settings_at(0, cx); if settings.show_wrap_guides { if let SoftWrap::Column(soft_wrap) = self.soft_wrap_mode(cx) { @@ -7244,6 +7250,11 @@ impl Editor { cx.notify(); } + pub fn set_show_wrap_guides(&mut self, show_gutter: bool, cx: &mut ViewContext) { + self.show_wrap_guides = Some(show_gutter); + cx.notify(); + } + pub fn reveal_in_finder(&mut self, _: &RevealInFinder, cx: &mut ViewContext) { if let Some(buffer) = self.buffer().read(cx).as_singleton() { if let Some(file) = buffer.read(cx).file().and_then(|f| f.as_local()) { From 8926266952948063a666a248f2e4b7bf8edcfde6 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Sat, 29 Jul 2023 23:53:16 -0700 Subject: [PATCH 091/120] Halve opacity on wrap guides --- styles/src/style_tree/editor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/styles/src/style_tree/editor.ts b/styles/src/style_tree/editor.ts index 832e776264..deab45d4b2 100644 --- a/styles/src/style_tree/editor.ts +++ b/styles/src/style_tree/editor.ts @@ -182,8 +182,8 @@ export default function editor(): any { line_number: with_opacity(foreground(layer), 0.35), line_number_active: foreground(layer), rename_fade: 0.6, - wrap_guide: with_opacity(foreground(layer), 0.1), - active_wrap_guide: with_opacity(foreground(layer), 0.2), + wrap_guide: with_opacity(foreground(layer), 0.05), + active_wrap_guide: with_opacity(foreground(layer), 0.1), unnecessary_code_fade: 0.5, selection: theme.players[0], whitespace: theme.ramps.neutral(0.5).hex(), From a5dd8dd0a9c14e85bc95a8b84989366f5ff590fa Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 31 Jul 2023 10:02:28 -0400 Subject: [PATCH 092/120] add lua embedding query for semantic search --- Cargo.lock | 39 +++---- crates/semantic_index/Cargo.toml | 1 + .../src/semantic_index_tests.rs | 102 ++++++++++++++++++ crates/zed/src/languages/lua/config.toml | 1 + crates/zed/src/languages/lua/embedding.scm | 10 ++ 5 files changed, 134 insertions(+), 19 deletions(-) create mode 100644 crates/zed/src/languages/lua/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index 7c6a213d0d..6c558cbb09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2042,9 +2042,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.64+curl-8.2.0" +version = "0.4.65+curl-8.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f96069f0b1cb1241c838740659a771ef143363f52772a9ce1bd9c04c75eee0dc" +checksum = "961ba061c9ef2fe34bbd12b807152d96f0badd2bebe7b90ce6c8c8b7572a0986" dependencies = [ "cc", "libc", @@ -3033,9 +3033,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df" +checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006" dependencies = [ "aho-corasick 1.0.2", "bstr", @@ -6688,6 +6688,7 @@ dependencies = [ "tree-sitter-cpp 0.20.2", "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tree-sitter-json 0.19.0", + "tree-sitter-lua", "tree-sitter-rust", "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -6722,18 +6723,18 @@ checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99" [[package]] name = "serde" -version = "1.0.175" +version = "1.0.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b" +checksum = "63ba2516aa6bf82e0b19ca8b50019d52df58455d3cf9bdaf6315225fdd0c560a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.175" +version = "1.0.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4" +checksum = "401797fe7833d72109fedec6bfcbe67c0eed9b99772f26eb8afd261f0abc6fd3" dependencies = [ "proc-macro2", "quote", @@ -6762,9 +6763,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ "indexmap 2.0.0", "itoa 1.0.9", @@ -6786,9 +6787,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e168eaaf71e8f9bd6037feb05190485708e019f4fd87d161b3c0a0d37daf85e5" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", @@ -9031,9 +9032,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "wasm-encoder" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a3d1b4a575ffb873679402b2aedb3117555eb65c27b1b86c8a91e574bc2a2a" +checksum = "41763f20eafed1399fff1afb466496d3a959f58241436cfdc17e3f5ca954de16" dependencies = [ "leb128", ] @@ -9255,9 +9256,9 @@ dependencies = [ [[package]] name = "wast" -version = "62.0.0" +version = "62.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f7ee878019d69436895f019b65f62c33da63595d8e857cbdc87c13ecb29a32" +checksum = "b8ae06f09dbe377b889fbd620ff8fa21e1d49d1d9d364983c0cdbf9870cb9f1f" dependencies = [ "leb128", "memchr", @@ -9267,11 +9268,11 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "295572bf24aa5b685a971a83ad3e8b6e684aaad8a9be24bc7bf59bed84cc1c08" +checksum = "842e15861d203fb4a96d314b0751cdeaf0f6f8b35e8d81d2953af2af5e44e637" dependencies = [ - "wast 62.0.0", + "wast 62.0.1", ] [[package]] diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index a1f126bfb8..942f61d298 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -60,3 +60,4 @@ tree-sitter-rust = "*" tree-sitter-toml = "*" tree-sitter-cpp = "*" tree-sitter-elixir = "*" +tree-sitter-lua = "*" diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index acf5a9d72b..4eedade69d 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -486,6 +486,79 @@ async fn test_code_context_retrieval_javascript() { ) } +#[gpui::test] +async fn test_code_context_retrieval_lua() { + let language = lua_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = r#" + -- Creates a new class + -- @param baseclass The Baseclass of this class, or nil. + -- @return A new class reference. + function classes.class(baseclass) + -- Create the class definition and metatable. + local classdef = {} + -- Find the super class, either Object or user-defined. + baseclass = baseclass or classes.Object + -- If this class definition does not know of a function, it will 'look up' to the Baseclass via the __index of the metatable. + setmetatable(classdef, { __index = baseclass }) + -- All class instances have a reference to the class object. + classdef.class = classdef + --- Recursivly allocates the inheritance tree of the instance. + -- @param mastertable The 'root' of the inheritance tree. + -- @return Returns the instance with the allocated inheritance tree. + function classdef.alloc(mastertable) + -- All class instances have a reference to a superclass object. + local instance = { super = baseclass.alloc(mastertable) } + -- Any functions this instance does not know of will 'look up' to the superclass definition. + setmetatable(instance, { __index = classdef, __newindex = mastertable }) + return instance + end + end + "#.unindent(); + + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[ + (r#" + -- Creates a new class + -- @param baseclass The Baseclass of this class, or nil. + -- @return A new class reference. + function classes.class(baseclass) + -- Create the class definition and metatable. + local classdef = {} + -- Find the super class, either Object or user-defined. + baseclass = baseclass or classes.Object + -- If this class definition does not know of a function, it will 'look up' to the Baseclass via the __index of the metatable. + setmetatable(classdef, { __index = baseclass }) + -- All class instances have a reference to the class object. + classdef.class = classdef + --- Recursivly allocates the inheritance tree of the instance. + -- @param mastertable The 'root' of the inheritance tree. + -- @return Returns the instance with the allocated inheritance tree. + function classdef.alloc(mastertable) + --[ ... ]-- + --[ ... ]-- + end + end"#.unindent(), + 114), + (r#" + --- Recursivly allocates the inheritance tree of the instance. + -- @param mastertable The 'root' of the inheritance tree. + -- @return Returns the instance with the allocated inheritance tree. + function classdef.alloc(mastertable) + -- All class instances have a reference to a superclass object. + local instance = { super = baseclass.alloc(mastertable) } + -- Any functions this instance does not know of will 'look up' to the superclass definition. + setmetatable(instance, { __index = classdef, __newindex = mastertable }) + return instance + end"#.unindent(), 809), + ] + ); +} + #[gpui::test] async fn test_code_context_retrieval_elixir() { let language = elixir_lang(); @@ -1084,6 +1157,35 @@ fn cpp_lang() -> Arc { ) } +fn lua_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "Lua".into(), + path_suffixes: vec!["lua".into()], + collapsed_placeholder: "--[ ... ]--".to_string(), + ..Default::default() + }, + Some(tree_sitter_lua::language()), + ) + .with_embedding_query( + r#" + ( + (comment)* @context + . + (function_declaration + "function" @name + name: (_) @name + (comment)* @collapse + body: (block) @collapse + ) @item + ) + "#, + ) + .unwrap(), + ) +} + fn elixir_lang() -> Arc { Arc::new( Language::new( diff --git a/crates/zed/src/languages/lua/config.toml b/crates/zed/src/languages/lua/config.toml index fe44a3d2aa..d3e44edfe9 100644 --- a/crates/zed/src/languages/lua/config.toml +++ b/crates/zed/src/languages/lua/config.toml @@ -7,3 +7,4 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, ] +collapsed_placeholder = "--[ ... ]--" diff --git a/crates/zed/src/languages/lua/embedding.scm b/crates/zed/src/languages/lua/embedding.scm new file mode 100644 index 0000000000..0d1065089f --- /dev/null +++ b/crates/zed/src/languages/lua/embedding.scm @@ -0,0 +1,10 @@ +( + (comment)* @context + . + (function_declaration + "function" @name + name: (_) @name + (comment)* @collapse + body: (block) @collapse + ) @item +) From ca4e21881efc5d0293e545a1059971cab356bc54 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 31 Jul 2023 10:54:30 -0400 Subject: [PATCH 093/120] add ruby support for semantic search --- Cargo.lock | 1 + crates/semantic_index/Cargo.toml | 1 + .../src/semantic_index_tests.rs | 231 ++++++++++++++++++ crates/zed/src/languages/ruby/config.toml | 1 + crates/zed/src/languages/ruby/embedding.scm | 22 ++ 5 files changed, 256 insertions(+) create mode 100644 crates/zed/src/languages/ruby/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index 6c558cbb09..b4a8f13bea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6689,6 +6689,7 @@ dependencies = [ "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tree-sitter-json 0.19.0", "tree-sitter-lua", + "tree-sitter-ruby", "tree-sitter-rust", "tree-sitter-toml 0.20.0", "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 942f61d298..637f3f4487 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -61,3 +61,4 @@ tree-sitter-toml = "*" tree-sitter-cpp = "*" tree-sitter-elixir = "*" tree-sitter-lua = "*" +tree-sitter-ruby = "*" diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 4eedade69d..58d34649c7 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -827,6 +827,196 @@ async fn test_code_context_retrieval_cpp() { ); } +#[gpui::test] +async fn test_code_context_retrieval_ruby() { + let language = ruby_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = r#" + # This concern is inspired by "sudo mode" on GitHub. It + # is a way to re-authenticate a user before allowing them + # to see or perform an action. + # + # Add `before_action :require_challenge!` to actions you + # want to protect. + # + # The user will be shown a page to enter the challenge (which + # is either the password, or just the username when no + # password exists). Upon passing, there is a grace period + # during which no challenge will be asked from the user. + # + # Accessing challenge-protected resources during the grace + # period will refresh the grace period. + module ChallengableConcern + extend ActiveSupport::Concern + + CHALLENGE_TIMEOUT = 1.hour.freeze + + def require_challenge! + return if skip_challenge? + + if challenge_passed_recently? + session[:challenge_passed_at] = Time.now.utc + return + end + + @challenge = Form::Challenge.new(return_to: request.url) + + if params.key?(:form_challenge) + if challenge_passed? + session[:challenge_passed_at] = Time.now.utc + else + flash.now[:alert] = I18n.t('challenge.invalid_password') + render_challenge + end + else + render_challenge + end + end + + def challenge_passed? + current_user.valid_password?(challenge_params[:current_password]) + end + end + + class Animal + include Comparable + + attr_reader :legs + + def initialize(name, legs) + @name, @legs = name, legs + end + + def <=>(other) + legs <=> other.legs + end + end + + # Singleton method for car object + def car.wheels + puts "There are four wheels" + end"# + .unindent(); + + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[ + ( + r#" + # This concern is inspired by "sudo mode" on GitHub. It + # is a way to re-authenticate a user before allowing them + # to see or perform an action. + # + # Add `before_action :require_challenge!` to actions you + # want to protect. + # + # The user will be shown a page to enter the challenge (which + # is either the password, or just the username when no + # password exists). Upon passing, there is a grace period + # during which no challenge will be asked from the user. + # + # Accessing challenge-protected resources during the grace + # period will refresh the grace period. + module ChallengableConcern + extend ActiveSupport::Concern + + CHALLENGE_TIMEOUT = 1.hour.freeze + + def require_challenge! + # ... + end + + def challenge_passed? + # ... + end + end"# + .unindent(), + 558, + ), + ( + r#" + def require_challenge! + return if skip_challenge? + + if challenge_passed_recently? + session[:challenge_passed_at] = Time.now.utc + return + end + + @challenge = Form::Challenge.new(return_to: request.url) + + if params.key?(:form_challenge) + if challenge_passed? + session[:challenge_passed_at] = Time.now.utc + else + flash.now[:alert] = I18n.t('challenge.invalid_password') + render_challenge + end + else + render_challenge + end + end"# + .unindent(), + 663, + ), + ( + r#" + def challenge_passed? + current_user.valid_password?(challenge_params[:current_password]) + end"# + .unindent(), + 1254, + ), + ( + r#" + class Animal + include Comparable + + attr_reader :legs + + def initialize(name, legs) + # ... + end + + def <=>(other) + # ... + end + end"# + .unindent(), + 1363, + ), + ( + r#" + def initialize(name, legs) + @name, @legs = name, legs + end"# + .unindent(), + 1427, + ), + ( + r#" + def <=>(other) + legs <=> other.legs + end"# + .unindent(), + 1501, + ), + ( + r#" + # Singleton method for car object + def car.wheels + puts "There are four wheels" + end"# + .unindent(), + 1591, + ), + ], + ); +} + #[gpui::test] fn test_dot_product(mut rng: StdRng) { assert_eq!(dot(&[1., 0., 0., 0., 0.], &[0., 1., 0., 0., 0.]), 0.); @@ -1186,6 +1376,47 @@ fn lua_lang() -> Arc { ) } +fn ruby_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "Ruby".into(), + path_suffixes: vec!["rb".into()], + collapsed_placeholder: "# ...".to_string(), + ..Default::default() + }, + Some(tree_sitter_ruby::language()), + ) + .with_embedding_query( + r#" + ( + (comment)* @context + . + [ + (module + "module" @name + name: (_) @name) + (method + "def" @name + name: (_) @name + body: (body_statement) @collapse) + (class + "class" @name + name: (_) @name) + (singleton_method + "def" @name + object: (_) @name + "." @name + name: (_) @name + body: (body_statement) @collapse) + ] @item + ) + "#, + ) + .unwrap(), + ) +} + fn elixir_lang() -> Arc { Arc::new( Language::new( diff --git a/crates/zed/src/languages/ruby/config.toml b/crates/zed/src/languages/ruby/config.toml index a0b26bff92..6c8c615015 100644 --- a/crates/zed/src/languages/ruby/config.toml +++ b/crates/zed/src/languages/ruby/config.toml @@ -10,3 +10,4 @@ brackets = [ { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] }, ] +collapsed_placeholder = "# ..." diff --git a/crates/zed/src/languages/ruby/embedding.scm b/crates/zed/src/languages/ruby/embedding.scm new file mode 100644 index 0000000000..7a101e6b09 --- /dev/null +++ b/crates/zed/src/languages/ruby/embedding.scm @@ -0,0 +1,22 @@ +( + (comment)* @context + . + [ + (module + "module" @name + name: (_) @name) + (method + "def" @name + name: (_) @name + body: (body_statement) @collapse) + (class + "class" @name + name: (_) @name) + (singleton_method + "def" @name + object: (_) @name + "." @name + name: (_) @name + body: (body_statement) @collapse) + ] @item + ) From 89edb3d1b534b962f3e4e81c6055b6fd92fef868 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 31 Jul 2023 11:41:18 -0400 Subject: [PATCH 094/120] fix templating bug for parseable entire files --- crates/semantic_index/src/parsing.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index c952ef3a4e..677406931e 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -59,7 +59,7 @@ impl CodeContextRetriever { let document_span = ENTIRE_FILE_TEMPLATE .replace("", relative_path.to_string_lossy().as_ref()) .replace("", language_name.as_ref()) - .replace("item", &content); + .replace("", &content); Ok(vec![Document { range: 0..content.len(), From e07a81b22590257bb7bc8c4362d6afe3a01d401c Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Mon, 31 Jul 2023 12:49:55 -0400 Subject: [PATCH 095/120] Add additional storage filetypes --- assets/icons/file_icons/file_types.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/assets/icons/file_icons/file_types.json b/assets/icons/file_icons/file_types.json index 0ccf9c2bb7..67791aaecb 100644 --- a/assets/icons/file_icons/file_types.json +++ b/assets/icons/file_icons/file_types.json @@ -1,5 +1,16 @@ { "suffixes": { + "db": "storage", + "sqlite": "storage", + "myi": "storage", + "myd": "storage", + "mdf": "storage", + "csv": "storage", + "bak": "backup", + "dat": "storage", + "dll": "storage", + "sav": "storage", + "tsv": "storage", "aac": "audio", "bash": "terminal", "bmp": "image", From c4709418d142888b5d94ae61c5aad98f28c6b21a Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Mon, 31 Jul 2023 12:50:30 -0400 Subject: [PATCH 096/120] Format --- assets/icons/file_icons/file_types.json | 341 ++++++++++++------------ 1 file changed, 175 insertions(+), 166 deletions(-) diff --git a/assets/icons/file_icons/file_types.json b/assets/icons/file_icons/file_types.json index 67791aaecb..9ea75d0730 100644 --- a/assets/icons/file_icons/file_types.json +++ b/assets/icons/file_icons/file_types.json @@ -1,170 +1,179 @@ { - "suffixes": { - "db": "storage", - "sqlite": "storage", - "myi": "storage", - "myd": "storage", - "mdf": "storage", - "csv": "storage", - "bak": "backup", - "dat": "storage", - "dll": "storage", - "sav": "storage", - "tsv": "storage", - "aac": "audio", - "bash": "terminal", - "bmp": "image", - "c": "code", - "conf": "settings", - "cpp": "code", - "cc": "code", - "css": "code", - "doc": "document", - "docx": "document", - "eslintrc": "eslint", - "eslintrc.js": "eslint", - "eslintrc.json": "eslint", - "flac": "audio", - "fish": "terminal", - "gitattributes": "vcs", - "gitignore": "vcs", - "gitmodules": "vcs", - "gif": "image", - "go": "code", - "h": "code", - "handlebars": "code", - "hbs": "template", - "htm": "template", - "html": "template", - "svelte": "template", - "hpp": "code", - "ico": "image", - "ini": "settings", - "java": "code", - "jpeg": "image", - "jpg": "image", - "js": "code", - "json": "storage", - "lock": "lock", - "log": "log", - "md": "document", - "mdx": "document", - "mp3": "audio", - "mp4": "video", - "ods": "document", - "odp": "document", - "odt": "document", - "ogg": "video", - "pdf": "document", - "php": "code", - "png": "image", - "ppt": "document", - "pptx": "document", - "prettierrc": "prettier", - "prettierignore": "prettier", - "ps1": "terminal", - "psd": "image", - "py": "code", - "rb": "code", - "rkt": "code", - "rs": "rust", - "rtf": "document", - "scm": "code", - "sh": "terminal", - "bashrc": "terminal", - "bash_profile": "terminal", - "bash_aliases": "terminal", - "bash_logout": "terminal", - "profile": "terminal", - "zshrc": "terminal", - "zshenv": "terminal", - "zsh_profile": "terminal", - "zsh_aliases": "terminal", - "zsh_histfile": "terminal", - "zlogin": "terminal", - "sql": "code", - "svg": "image", - "swift": "code", - "tiff": "image", - "toml": "toml", - "ts": "typescript", - "tsx": "code", - "txt": "document", - "wav": "audio", - "webm": "video", - "xls": "document", - "xlsx": "document", - "xml": "template", - "yaml": "settings", - "yml": "settings", - "zsh": "terminal" - }, - "types": { - "audio": { - "icon": "icons/file_icons/audio.svg" + "suffixes": { + "aac": "audio", + "accdb": "storage", + "bak": "backup", + "bash": "terminal", + "bash_aliases": "terminal", + "bash_logout": "terminal", + "bash_profile": "terminal", + "bashrc": "terminal", + "bmp": "image", + "c": "code", + "cc": "code", + "conf": "settings", + "cpp": "code", + "css": "code", + "csv": "storage", + "dat": "storage", + "db": "storage", + "dbf": "storage", + "dll": "storage", + "doc": "document", + "docx": "document", + "eslintrc": "eslint", + "eslintrc.js": "eslint", + "eslintrc.json": "eslint", + "fmp": "storage", + "fp7": "storage", + "flac": "audio", + "fish": "terminal", + "frm": "storage", + "gdb": "storage", + "gitattributes": "vcs", + "gitignore": "vcs", + "gitmodules": "vcs", + "gif": "image", + "go": "code", + "h": "code", + "handlebars": "code", + "hbs": "template", + "htm": "template", + "html": "template", + "ib": "storage", + "ico": "image", + "ini": "settings", + "java": "code", + "jpeg": "image", + "jpg": "image", + "js": "code", + "json": "storage", + "ldf": "storage", + "lock": "lock", + "log": "log", + "mdb": "storage", + "md": "document", + "mdf": "storage", + "mdx": "document", + "mp3": "audio", + "mp4": "video", + "myd": "storage", + "myi": "storage", + "ods": "document", + "odp": "document", + "odt": "document", + "ogg": "video", + "pdb": "storage", + "pdf": "document", + "php": "code", + "png": "image", + "ppt": "document", + "pptx": "document", + "prettierignore": "prettier", + "prettierrc": "prettier", + "profile": "terminal", + "ps1": "terminal", + "psd": "image", + "py": "code", + "rb": "code", + "rkt": "code", + "rs": "rust", + "rtf": "document", + "sav": "storage", + "scm": "code", + "sh": "terminal", + "sqlite": "storage", + "sdf": "storage", + "svelte": "template", + "svg": "image", + "swift": "code", + "ts": "typescript", + "tsx": "code", + "tiff": "image", + "toml": "toml", + "tsv": "storage", + "txt": "document", + "wav": "audio", + "webm": "video", + "xls": "document", + "xlsx": "document", + "xml": "template", + "yaml": "settings", + "yml": "settings", + "zlogin": "terminal", + "zsh": "terminal", + "zsh_aliases": "terminal", + "zshenv": "terminal", + "zsh_histfile": "terminal", + "zsh_profile": "terminal", + "zshrc": "terminal" }, - "code": { - "icon": "icons/file_icons/code.svg" - }, - "collapsed_chevron": { - "icon": "icons/file_icons/chevron_right.svg" - }, - "collapsed_folder": { - "icon": "icons/file_icons/folder.svg" - }, - "default": { - "icon": "icons/file_icons/file.svg" - }, - "document": { - "icon": "icons/file_icons/book.svg" - }, - "eslint": { - "icon": "icons/file_icons/eslint.svg" - }, - "expanded_chevron": { - "icon": "icons/file_icons/chevron_down.svg" - }, - "expanded_folder": { - "icon": "icons/file_icons/folder_open.svg" - }, - "image": { - "icon": "icons/file_icons/image.svg" - }, - "lock": { - "icon": "icons/file_icons/lock.svg" - }, - "log": { - "icon": "icons/file_icons/info.svg" - }, - "prettier": { - "icon": "icons/file_icons/prettier.svg" - }, - "rust": { - "icon": "icons/file_icons/rust.svg" - }, - "settings": { - "icon": "icons/file_icons/settings.svg" - }, - "storage": { - "icon": "icons/file_icons/database.svg" - }, - "template": { - "icon": "icons/file_icons/html.svg" - }, - "terminal": { - "icon": "icons/file_icons/terminal.svg" - }, - "toml": { - "icon": "icons/file_icons/toml.svg" - }, - "typescript": { - "icon": "icons/file_icons/typescript.svg" - }, - "vcs": { - "icon": "icons/file_icons/git.svg" - }, - "video": { - "icon": "icons/file_icons/video.svg" + "types": { + "audio": { + "icon": "icons/file_icons/audio.svg" + }, + "code": { + "icon": "icons/file_icons/code.svg" + }, + "collapsed_chevron": { + "icon": "icons/file_icons/chevron_right.svg" + }, + "collapsed_folder": { + "icon": "icons/file_icons/folder.svg" + }, + "default": { + "icon": "icons/file_icons/file.svg" + }, + "document": { + "icon": "icons/file_icons/book.svg" + }, + "eslint": { + "icon": "icons/file_icons/eslint.svg" + }, + "expanded_chevron": { + "icon": "icons/file_icons/chevron_down.svg" + }, + "expanded_folder": { + "icon": "icons/file_icons/folder_open.svg" + }, + "image": { + "icon": "icons/file_icons/image.svg" + }, + "lock": { + "icon": "icons/file_icons/lock.svg" + }, + "log": { + "icon": "icons/file_icons/info.svg" + }, + "prettier": { + "icon": "icons/file_icons/prettier.svg" + }, + "rust": { + "icon": "icons/file_icons/rust.svg" + }, + "settings": { + "icon": "icons/file_icons/settings.svg" + }, + "storage": { + "icon": "icons/file_icons/database.svg" + }, + "template": { + "icon": "icons/file_icons/html.svg" + }, + "terminal": { + "icon": "icons/file_icons/terminal.svg" + }, + "toml": { + "icon": "icons/file_icons/toml.svg" + }, + "typescript": { + "icon": "icons/file_icons/typescript.svg" + }, + "vcs": { + "icon": "icons/file_icons/git.svg" + }, + "video": { + "icon": "icons/file_icons/video.svg" + } } - } } From bb288eb941fba31ba98a89f9b2b32940ed493ac5 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Mon, 31 Jul 2023 13:08:40 -0400 Subject: [PATCH 097/120] Ensure json uses a tab size of 4 --- .zed/settings.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .zed/settings.json diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000000..d4b3375b0d --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,5 @@ +{ + "JSON": { + "tab_size": 4 + } +} From 88474a60485257814313b4a6ff799642feeafe6a Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 31 Jul 2023 10:54:29 -0700 Subject: [PATCH 098/120] Clip wrap guides from under the scrollbar --- crates/editor/src/element.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index cb46e74af0..750beaea13 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -554,7 +554,9 @@ impl EditorElement { (text_bounds.origin_x() + wrap_position + layout.position_map.em_width / 2.) - scroll_left; - if x < text_bounds.origin_x() { + if x < text_bounds.origin_x() + || (layout.show_scrollbars && x > self.scrollbar_left(&bounds)) + { continue; } @@ -1046,6 +1048,10 @@ impl EditorElement { scene.pop_layer(); } + fn scrollbar_left(&self, bounds: &RectF) -> f32 { + bounds.max_x() - self.style.theme.scrollbar.width + } + fn paint_scrollbar( &mut self, scene: &mut SceneBuilder, @@ -1064,7 +1070,7 @@ impl EditorElement { let top = bounds.min_y(); let bottom = bounds.max_y(); let right = bounds.max_x(); - let left = right - style.width; + let left = self.scrollbar_left(&bounds); let row_range = &layout.scrollbar_row_range; let max_row = layout.max_row as f32 + (row_range.end - row_range.start); From 599f6748274ca40e91e593d5d049982b2fbded45 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 31 Jul 2023 16:36:09 -0400 Subject: [PATCH 099/120] add php support for semantic search --- Cargo.lock | 65 ++---- crates/semantic_index/Cargo.toml | 17 +- crates/semantic_index/src/parsing.rs | 7 +- .../src/semantic_index_tests.rs | 205 ++++++++++++++++++ crates/zed/src/languages/php/config.toml | 1 + crates/zed/src/languages/php/embedding.scm | 36 +++ crates/zed/src/languages/php/outline.scm | 7 +- 7 files changed, 275 insertions(+), 63 deletions(-) create mode 100644 crates/zed/src/languages/php/embedding.scm diff --git a/Cargo.lock b/Cargo.lock index b4a8f13bea..f6a85aa70c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2341,7 +2341,7 @@ dependencies = [ "tree-sitter", "tree-sitter-html", "tree-sitter-rust", - "tree-sitter-typescript 0.20.2 (git+https://github.com/tree-sitter/tree-sitter-typescript?rev=5d20856f34315b068c41edaee2ac8a100081d259)", + "tree-sitter-typescript", "unindent", "util", "workspace", @@ -3851,7 +3851,7 @@ dependencies = [ "text", "theme", "tree-sitter", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", + "tree-sitter-elixir", "tree-sitter-embedded-template", "tree-sitter-heex", "tree-sitter-html", @@ -3860,7 +3860,7 @@ dependencies = [ "tree-sitter-python", "tree-sitter-ruby", "tree-sitter-rust", - "tree-sitter-typescript 0.20.2 (git+https://github.com/tree-sitter/tree-sitter-typescript?rev=5d20856f34315b068c41edaee2ac8a100081d259)", + "tree-sitter-typescript", "unicase", "unindent", "util", @@ -6685,14 +6685,15 @@ dependencies = [ "theme", "tiktoken-rs 0.5.0", "tree-sitter", - "tree-sitter-cpp 0.20.2", - "tree-sitter-elixir 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tree-sitter-json 0.19.0", + "tree-sitter-cpp", + "tree-sitter-elixir", + "tree-sitter-json 0.20.0", "tree-sitter-lua", + "tree-sitter-php", "tree-sitter-ruby", "tree-sitter-rust", - "tree-sitter-toml 0.20.0", - "tree-sitter-typescript 0.20.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tree-sitter-toml", + "tree-sitter-typescript", "unindent", "util", "workspace", @@ -8257,16 +8258,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-cpp" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c88fd925d0333e63ac64e521f5bd79c53019e569ffbbccfeef346a326f459e9" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tree-sitter-css" version = "0.19.0" @@ -8276,16 +8267,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-elixir" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9916f3e1c80b3c8aab8582604e97e8720cb9b893489b347cf999f80f9d469e" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tree-sitter-elixir" version = "0.1.0" @@ -8464,26 +8445,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-toml" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca517f578a98b23d20780247cc2688407fa81effad5b627a5a364ec3339b53e8" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "079c695c32d39ad089101c66393aeaca30e967fba3486a91f573d2f0e12d290a" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tree-sitter-typescript" version = "0.20.2" @@ -9923,9 +9884,9 @@ dependencies = [ "tree-sitter", "tree-sitter-bash", "tree-sitter-c", - "tree-sitter-cpp 0.20.0", + "tree-sitter-cpp", "tree-sitter-css", - "tree-sitter-elixir 0.1.0 (git+https://github.com/elixir-lang/tree-sitter-elixir?rev=4ba9dab6e2602960d95b2b625f3386c27e08084e)", + "tree-sitter-elixir", "tree-sitter-elm", "tree-sitter-embedded-template", "tree-sitter-glsl", @@ -9942,8 +9903,8 @@ dependencies = [ "tree-sitter-rust", "tree-sitter-scheme", "tree-sitter-svelte", - "tree-sitter-toml 0.5.1", - "tree-sitter-typescript 0.20.2 (git+https://github.com/tree-sitter/tree-sitter-typescript?rev=5d20856f34315b068c41edaee2ac8a100081d259)", + "tree-sitter-toml", + "tree-sitter-typescript", "tree-sitter-yaml", "unindent", "url", diff --git a/crates/semantic_index/Cargo.toml b/crates/semantic_index/Cargo.toml index 637f3f4487..3c7a6ff5df 100644 --- a/crates/semantic_index/Cargo.toml +++ b/crates/semantic_index/Cargo.toml @@ -54,11 +54,12 @@ tempdir.workspace = true ctor.workspace = true env_logger.workspace = true -tree-sitter-typescript = "*" -tree-sitter-json = "*" -tree-sitter-rust = "*" -tree-sitter-toml = "*" -tree-sitter-cpp = "*" -tree-sitter-elixir = "*" -tree-sitter-lua = "*" -tree-sitter-ruby = "*" +tree-sitter-typescript.workspace = true +tree-sitter-json.workspace = true +tree-sitter-rust.workspace = true +tree-sitter-toml.workspace = true +tree-sitter-cpp.workspace = true +tree-sitter-elixir.workspace = true +tree-sitter-lua.workspace = true +tree-sitter-ruby.workspace = true +tree-sitter-php.workspace = true diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index 677406931e..3f7a850a57 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -200,7 +200,12 @@ impl CodeContextRetriever { let mut document_content = String::new(); for context_range in &context_match.context_ranges { - document_content.push_str(&content[context_range.clone()]); + add_content_from_range( + &mut document_content, + content, + context_range.clone(), + context_match.start_col, + ); document_content.push_str("\n"); } diff --git a/crates/semantic_index/src/semantic_index_tests.rs b/crates/semantic_index/src/semantic_index_tests.rs index 58d34649c7..0411a8e5ec 100644 --- a/crates/semantic_index/src/semantic_index_tests.rs +++ b/crates/semantic_index/src/semantic_index_tests.rs @@ -1017,6 +1017,156 @@ async fn test_code_context_retrieval_ruby() { ); } +#[gpui::test] +async fn test_code_context_retrieval_php() { + let language = php_lang(); + let mut retriever = CodeContextRetriever::new(); + + let text = r#" + 100) { + throw new Exception(message: 'Progress cannot be greater than 100'); + } + + if ($this->achievements()->find($achievement->id)) { + throw new Exception(message: 'User already has this Achievement'); + } + + $this->achievements()->attach($achievement, [ + 'progress' => $progress ?? null, + ]); + + $this->when(value: ($progress === null) || ($progress === 100), callback: fn (): ?array => event(new AchievementAwarded(achievement: $achievement, user: $this))); + } + + public function achievements(): BelongsToMany + { + return $this->belongsToMany(related: Achievement::class) + ->withPivot(columns: 'progress') + ->where('is_secret', false) + ->using(AchievementUser::class); + } + } + + interface Multiplier + { + public function qualifies(array $data): bool; + + public function setMultiplier(): int; + } + + enum AuditType: string + { + case Add = 'add'; + case Remove = 'remove'; + case Reset = 'reset'; + case LevelUp = 'level_up'; + } + + ?>"# + .unindent(); + + let documents = retriever.parse_file(&text, language.clone()).unwrap(); + + assert_documents_eq( + &documents, + &[ + ( + r#" + /* + This is a multiple-lines comment block + that spans over multiple + lines + */ + function functionName() { + echo "Hello world!"; + }"# + .unindent(), + 123, + ), + ( + r#" + trait HasAchievements + { + /** + * @throws \Exception + */ + public function grantAchievement(Achievement $achievement, $progress = null): void + {/* ... */} + + public function achievements(): BelongsToMany + {/* ... */} + }"# + .unindent(), + 177, + ), + (r#" + /** + * @throws \Exception + */ + public function grantAchievement(Achievement $achievement, $progress = null): void + { + if ($progress > 100) { + throw new Exception(message: 'Progress cannot be greater than 100'); + } + + if ($this->achievements()->find($achievement->id)) { + throw new Exception(message: 'User already has this Achievement'); + } + + $this->achievements()->attach($achievement, [ + 'progress' => $progress ?? null, + ]); + + $this->when(value: ($progress === null) || ($progress === 100), callback: fn (): ?array => event(new AchievementAwarded(achievement: $achievement, user: $this))); + }"#.unindent(), 245), + (r#" + public function achievements(): BelongsToMany + { + return $this->belongsToMany(related: Achievement::class) + ->withPivot(columns: 'progress') + ->where('is_secret', false) + ->using(AchievementUser::class); + }"#.unindent(), 902), + (r#" + interface Multiplier + { + public function qualifies(array $data): bool; + + public function setMultiplier(): int; + }"#.unindent(), + 1146), + (r#" + enum AuditType: string + { + case Add = 'add'; + case Remove = 'remove'; + case Reset = 'reset'; + case LevelUp = 'level_up'; + }"#.unindent(), 1265) + ], + ); +} + #[gpui::test] fn test_dot_product(mut rng: StdRng) { assert_eq!(dot(&[1., 0., 0., 0., 0.], &[0., 1., 0., 0., 0.]), 0.); @@ -1376,6 +1526,61 @@ fn lua_lang() -> Arc { ) } +fn php_lang() -> Arc { + Arc::new( + Language::new( + LanguageConfig { + name: "PHP".into(), + path_suffixes: vec!["php".into()], + collapsed_placeholder: "/* ... */".into(), + ..Default::default() + }, + Some(tree_sitter_php::language()), + ) + .with_embedding_query( + r#" + ( + (comment)* @context + . + [ + (function_definition + "function" @name + name: (_) @name + body: (_ + "{" @keep + "}" @keep) @collapse + ) + + (trait_declaration + "trait" @name + name: (_) @name) + + (method_declaration + "function" @name + name: (_) @name + body: (_ + "{" @keep + "}" @keep) @collapse + ) + + (interface_declaration + "interface" @name + name: (_) @name + ) + + (enum_declaration + "enum" @name + name: (_) @name + ) + + ] @item + ) + "#, + ) + .unwrap(), + ) +} + fn ruby_lang() -> Arc { Arc::new( Language::new( diff --git a/crates/zed/src/languages/php/config.toml b/crates/zed/src/languages/php/config.toml index e9de52745a..19acb949e2 100644 --- a/crates/zed/src/languages/php/config.toml +++ b/crates/zed/src/languages/php/config.toml @@ -9,3 +9,4 @@ brackets = [ { start = "(", end = ")", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, ] +collapsed_placeholder = "/* ... */" diff --git a/crates/zed/src/languages/php/embedding.scm b/crates/zed/src/languages/php/embedding.scm new file mode 100644 index 0000000000..db277775b3 --- /dev/null +++ b/crates/zed/src/languages/php/embedding.scm @@ -0,0 +1,36 @@ +( + (comment)* @context + . + [ + (function_definition + "function" @name + name: (_) @name + body: (_ + "{" @keep + "}" @keep) @collapse + ) + + (trait_declaration + "trait" @name + name: (_) @name) + + (method_declaration + "function" @name + name: (_) @name + body: (_ + "{" @keep + "}" @keep) @collapse + ) + + (interface_declaration + "interface" @name + name: (_) @name + ) + + (enum_declaration + "enum" @name + name: (_) @name + ) + + ] @item + ) diff --git a/crates/zed/src/languages/php/outline.scm b/crates/zed/src/languages/php/outline.scm index 4934bc494d..87986f1032 100644 --- a/crates/zed/src/languages/php/outline.scm +++ b/crates/zed/src/languages/php/outline.scm @@ -8,8 +8,6 @@ name: (_) @name ) @item - - (method_declaration "function" @context name: (_) @name @@ -24,3 +22,8 @@ "enum" @context name: (_) @name ) @item + +(trait_declaration + "trait" @context + name: (_) @name + ) @item From 646dabe1133b32c852bf9b41b22234723f442602 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 31 Jul 2023 16:40:03 +0300 Subject: [PATCH 100/120] Add buffer search history --- assets/keymaps/default.json | 7 + crates/gpui/src/app.rs | 6 + crates/search/src/buffer_search.rs | 230 ++++++++++++++++++++++++++++- crates/search/src/search.rs | 187 +++++++++++++++++++++++ crates/vim/src/normal/search.rs | 2 +- crates/vim/src/test.rs | 4 +- 6 files changed, 428 insertions(+), 8 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index adc55f8c91..57fde112bf 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -227,6 +227,13 @@ "alt-enter": "search::SelectAllMatches" } }, + { + "context": "BufferSearchBar > Editor", + "bindings": { + "up": "search::PreviousHistoryQuery", + "down": "search::NextHistoryQuery" + } + }, { "context": "ProjectSearchBar", "bindings": { diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 7af363d596..da601ba351 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1128,6 +1128,12 @@ impl AppContext { self.keystroke_matcher.clear_bindings(); } + pub fn binding_for_action(&self, action: &dyn Action) -> Option<&Binding> { + self.keystroke_matcher + .bindings_for_action(action.id()) + .find(|binding| binding.action().eq(action)) + } + pub fn default_global(&mut self) -> &T { let type_id = TypeId::of::(); self.update(|this| { diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 5429305098..45842aa561 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -1,6 +1,6 @@ use crate::{ - SearchOptions, SelectAllMatches, SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, - ToggleRegex, ToggleWholeWord, + NextHistoryQuery, PreviousHistoryQuery, SearchHistory, SearchOptions, SelectAllMatches, + SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, ToggleWholeWord, }; use collections::HashMap; use editor::Editor; @@ -46,6 +46,8 @@ pub fn init(cx: &mut AppContext) { cx.add_action(BufferSearchBar::select_prev_match_on_pane); cx.add_action(BufferSearchBar::select_all_matches_on_pane); cx.add_action(BufferSearchBar::handle_editor_cancel); + cx.add_action(BufferSearchBar::next_history_query); + cx.add_action(BufferSearchBar::previous_history_query); add_toggle_option_action::(SearchOptions::CASE_SENSITIVE, cx); add_toggle_option_action::(SearchOptions::WHOLE_WORD, cx); add_toggle_option_action::(SearchOptions::REGEX, cx); @@ -65,7 +67,7 @@ fn add_toggle_option_action(option: SearchOptions, cx: &mut AppContex } pub struct BufferSearchBar { - pub query_editor: ViewHandle, + query_editor: ViewHandle, active_searchable_item: Option>, active_match_index: Option, active_searchable_item_subscription: Option, @@ -76,6 +78,7 @@ pub struct BufferSearchBar { default_options: SearchOptions, query_contains_error: bool, dismissed: bool, + search_history: SearchHistory, } impl Entity for BufferSearchBar { @@ -106,6 +109,48 @@ impl View for BufferSearchBar { .map(|active_searchable_item| active_searchable_item.supported_options()) .unwrap_or_default(); + let previous_query_keystrokes = + cx.binding_for_action(&PreviousHistoryQuery {}) + .map(|binding| { + binding + .keystrokes() + .iter() + .map(|k| k.to_string()) + .collect::>() + }); + let next_query_keystrokes = cx.binding_for_action(&NextHistoryQuery {}).map(|binding| { + binding + .keystrokes() + .iter() + .map(|k| k.to_string()) + .collect::>() + }); + let new_placeholder_text = match (previous_query_keystrokes, next_query_keystrokes) { + (Some(previous_query_keystrokes), Some(next_query_keystrokes)) => { + format!( + "Search ({}/{} for previous/next query)", + previous_query_keystrokes.join(" "), + next_query_keystrokes.join(" ") + ) + } + (None, Some(next_query_keystrokes)) => { + format!( + "Search ({} for next query)", + next_query_keystrokes.join(" ") + ) + } + (Some(previous_query_keystrokes), None) => { + format!( + "Search ({} for previous query)", + previous_query_keystrokes.join(" ") + ) + } + (None, None) => String::new(), + }; + self.query_editor.update(cx, |editor, cx| { + editor.set_placeholder_text(new_placeholder_text, cx); + }); + Flex::row() .with_child( Flex::row() @@ -258,6 +303,7 @@ impl BufferSearchBar { pending_search: None, query_contains_error: false, dismissed: true, + search_history: SearchHistory::default(), } } @@ -341,7 +387,7 @@ impl BufferSearchBar { cx: &mut ViewContext, ) -> oneshot::Receiver<()> { let options = options.unwrap_or(self.default_options); - if query != self.query_editor.read(cx).text(cx) || self.search_options != options { + if query != self.query(cx) || self.search_options != options { self.query_editor.update(cx, |query_editor, cx| { query_editor.buffer().update(cx, |query_buffer, cx| { let len = query_buffer.len(cx); @@ -674,7 +720,7 @@ impl BufferSearchBar { fn update_matches(&mut self, cx: &mut ViewContext) -> oneshot::Receiver<()> { let (done_tx, done_rx) = oneshot::channel(); - let query = self.query_editor.read(cx).text(cx); + let query = self.query(cx); self.pending_search.take(); if let Some(active_searchable_item) = self.active_searchable_item.as_ref() { if query.is_empty() { @@ -707,6 +753,7 @@ impl BufferSearchBar { ) }; + let query_text = query.as_str().to_string(); let matches = active_searchable_item.find_matches(query, cx); let active_searchable_item = active_searchable_item.downgrade(); @@ -720,6 +767,7 @@ impl BufferSearchBar { .insert(active_searchable_item.downgrade(), matches); this.update_match_index(cx); + this.search_history.add(query_text); if !this.dismissed { let matches = this .searchable_items_with_matches @@ -753,6 +801,28 @@ impl BufferSearchBar { cx.notify(); } } + + fn next_history_query(&mut self, _: &NextHistoryQuery, cx: &mut ViewContext) { + if let Some(new_query) = self.search_history.next().map(str::to_string) { + let _ = self.search(&new_query, Some(self.search_options), cx); + } else { + self.search_history.reset_selection(); + let _ = self.search("", Some(self.search_options), cx); + } + } + + fn previous_history_query(&mut self, _: &PreviousHistoryQuery, cx: &mut ViewContext) { + if self.query(cx).is_empty() { + if let Some(new_query) = self.search_history.current().map(str::to_string) { + let _ = self.search(&new_query, Some(self.search_options), cx); + return; + } + } + + if let Some(new_query) = self.search_history.previous().map(str::to_string) { + let _ = self.search(&new_query, Some(self.search_options), cx); + } + } } #[cfg(test)] @@ -1333,4 +1403,154 @@ mod tests { ); }); } + + #[gpui::test] + async fn test_search_query_history(cx: &mut TestAppContext) { + crate::project_search::tests::init_test(cx); + + let buffer_text = r#" + A regular expression (shortened as regex or regexp;[1] also referred to as + rational expression[2][3]) is a sequence of characters that specifies a search + pattern in text. Usually such patterns are used by string-searching algorithms + for "find" or "find and replace" operations on strings, or for input validation. + "# + .unindent(); + let buffer = cx.add_model(|cx| Buffer::new(0, buffer_text, cx)); + let (window_id, _root_view) = cx.add_window(|_| EmptyView); + + let editor = cx.add_view(window_id, |cx| Editor::for_buffer(buffer.clone(), None, cx)); + + let search_bar = cx.add_view(window_id, |cx| { + let mut search_bar = BufferSearchBar::new(cx); + search_bar.set_active_pane_item(Some(&editor), cx); + search_bar.show(cx); + search_bar + }); + + // Add 3 search items into the history. + search_bar + .update(cx, |search_bar, cx| search_bar.search("a", None, cx)) + .await + .unwrap(); + search_bar + .update(cx, |search_bar, cx| search_bar.search("b", None, cx)) + .await + .unwrap(); + search_bar + .update(cx, |search_bar, cx| { + search_bar.search("c", Some(SearchOptions::CASE_SENSITIVE), cx) + }) + .await + .unwrap(); + // Ensure that the latest search is active. + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "c"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Next history query after the latest should set the query to the empty string. + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), ""); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), ""); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // First previous query for empty current query should set the query to the latest. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "c"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Further previous items should go over the history in reverse order. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "b"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Previous items should never go behind the first history item. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "a"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "a"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Next items should go over the history in the original order. + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "b"); + assert_eq!(search_bar.search_options, SearchOptions::CASE_SENSITIVE); + }); + + search_bar + .update(cx, |search_bar, cx| search_bar.search("ba", None, cx)) + .await + .unwrap(); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "ba"); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + + // New search input should add another entry to history and move the selection to the end of the history. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "c"); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "b"); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "c"); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), "ba"); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_bar.read_with(cx, |search_bar, cx| { + assert_eq!(search_bar.query(cx), ""); + assert_eq!(search_bar.search_options, SearchOptions::NONE); + }); + } } diff --git a/crates/search/src/search.rs b/crates/search/src/search.rs index 58cda0c7dc..18e3915527 100644 --- a/crates/search/src/search.rs +++ b/crates/search/src/search.rs @@ -3,6 +3,7 @@ pub use buffer_search::BufferSearchBar; use gpui::{actions, Action, AppContext}; use project::search::SearchQuery; pub use project_search::{ProjectSearchBar, ProjectSearchView}; +use smallvec::SmallVec; pub mod buffer_search; pub mod project_search; @@ -21,6 +22,8 @@ actions!( SelectNextMatch, SelectPrevMatch, SelectAllMatches, + NextHistoryQuery, + PreviousHistoryQuery, ] ); @@ -65,3 +68,187 @@ impl SearchOptions { options } } + +const SEARCH_HISTORY_LIMIT: usize = 20; + +#[derive(Default, Debug)] +pub struct SearchHistory { + history: SmallVec<[String; SEARCH_HISTORY_LIMIT]>, + selected: Option, +} + +impl SearchHistory { + pub fn add(&mut self, search_string: String) { + if let Some(i) = self.selected { + if search_string == self.history[i] { + return; + } + } + + if let Some(previously_searched) = self.history.last_mut() { + if search_string.find(previously_searched.as_str()).is_some() { + *previously_searched = search_string; + self.selected = Some(self.history.len() - 1); + return; + } + } + + self.history.push(search_string); + if self.history.len() > SEARCH_HISTORY_LIMIT { + self.history.remove(0); + } + self.selected = Some(self.history.len() - 1); + } + + pub fn next(&mut self) -> Option<&str> { + let history_size = self.history.len(); + if history_size == 0 { + return None; + } + + let selected = self.selected?; + if selected == history_size - 1 { + return None; + } + let next_index = selected + 1; + self.selected = Some(next_index); + Some(&self.history[next_index]) + } + + pub fn current(&self) -> Option<&str> { + Some(&self.history[self.selected?]) + } + + pub fn previous(&mut self) -> Option<&str> { + let history_size = self.history.len(); + if history_size == 0 { + return None; + } + + let prev_index = match self.selected { + Some(selected_index) => { + if selected_index == 0 { + return None; + } else { + selected_index - 1 + } + } + None => history_size - 1, + }; + + self.selected = Some(prev_index); + Some(&self.history[prev_index]) + } + + pub fn reset_selection(&mut self) { + self.selected = None; + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_add() { + let mut search_history = SearchHistory::default(); + assert_eq!( + search_history.current(), + None, + "No current selection should be set fo the default search history" + ); + + search_history.add("rust".to_string()); + assert_eq!( + search_history.current(), + Some("rust"), + "Newly added item should be selected" + ); + + // check if duplicates are not added + search_history.add("rust".to_string()); + assert_eq!( + search_history.history.len(), + 1, + "Should not add a duplicate" + ); + assert_eq!(search_history.current(), Some("rust")); + + // check if new string containing the previous string replaces it + search_history.add("rustlang".to_string()); + assert_eq!( + search_history.history.len(), + 1, + "Should replace previous item if it's a substring" + ); + assert_eq!(search_history.current(), Some("rustlang")); + + // push enough items to test SEARCH_HISTORY_LIMIT + for i in 0..SEARCH_HISTORY_LIMIT * 2 { + search_history.add(format!("item{i}")); + } + assert!(search_history.history.len() <= SEARCH_HISTORY_LIMIT); + } + + #[test] + fn test_next_and_previous() { + let mut search_history = SearchHistory::default(); + assert_eq!( + search_history.next(), + None, + "Default search history should not have a next item" + ); + + search_history.add("Rust".to_string()); + assert_eq!(search_history.next(), None); + search_history.add("JavaScript".to_string()); + assert_eq!(search_history.next(), None); + search_history.add("TypeScript".to_string()); + assert_eq!(search_history.next(), None); + + assert_eq!(search_history.current(), Some("TypeScript")); + + assert_eq!(search_history.previous(), Some("JavaScript")); + assert_eq!(search_history.current(), Some("JavaScript")); + + assert_eq!(search_history.previous(), Some("Rust")); + assert_eq!(search_history.current(), Some("Rust")); + + assert_eq!(search_history.previous(), None); + assert_eq!(search_history.current(), Some("Rust")); + + assert_eq!(search_history.next(), Some("JavaScript")); + assert_eq!(search_history.current(), Some("JavaScript")); + + assert_eq!(search_history.next(), Some("TypeScript")); + assert_eq!(search_history.current(), Some("TypeScript")); + + assert_eq!(search_history.next(), None); + assert_eq!(search_history.current(), Some("TypeScript")); + } + + #[test] + fn test_reset_selection() { + let mut search_history = SearchHistory::default(); + search_history.add("Rust".to_string()); + search_history.add("JavaScript".to_string()); + search_history.add("TypeScript".to_string()); + + assert_eq!(search_history.current(), Some("TypeScript")); + search_history.reset_selection(); + assert_eq!(search_history.current(), None); + assert_eq!( + search_history.previous(), + Some("TypeScript"), + "Should start from the end after reset on previous item query" + ); + + search_history.previous(); + assert_eq!(search_history.current(), Some("JavaScript")); + search_history.previous(); + assert_eq!(search_history.current(), Some("Rust")); + + search_history.reset_selection(); + assert_eq!(search_history.current(), None); + } +} diff --git a/crates/vim/src/normal/search.rs b/crates/vim/src/normal/search.rs index d584c575d2..614866d9c9 100644 --- a/crates/vim/src/normal/search.rs +++ b/crates/vim/src/normal/search.rs @@ -222,7 +222,7 @@ mod test { }); search_bar.read_with(cx.cx, |bar, cx| { - assert_eq!(bar.query_editor.read(cx).text(cx), "cc"); + assert_eq!(bar.query(cx), "cc"); }); deterministic.run_until_parked(); diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 98d8cb8749..474f2128fc 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -99,7 +99,7 @@ async fn test_buffer_search(cx: &mut gpui::TestAppContext) { }); search_bar.read_with(cx.cx, |bar, cx| { - assert_eq!(bar.query_editor.read(cx).text(cx), ""); + assert_eq!(bar.query(cx), ""); }) } @@ -175,7 +175,7 @@ async fn test_selection_on_search(cx: &mut gpui::TestAppContext) { }); search_bar.read_with(cx.cx, |bar, cx| { - assert_eq!(bar.query_editor.read(cx).text(cx), "cc"); + assert_eq!(bar.query(cx), "cc"); }); // wait for the query editor change event to fire. From 634baeedb4a0a59b303182519ef1279b72319c8f Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 1 Aug 2023 01:23:51 +0300 Subject: [PATCH 101/120] Add project search history --- assets/keymaps/default.json | 7 + crates/search/src/project_search.rs | 283 +++++++++++++++++++++++++++- crates/search/src/search.rs | 2 +- 3 files changed, 289 insertions(+), 3 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index 57fde112bf..38ec8ffb40 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -240,6 +240,13 @@ "escape": "project_search::ToggleFocus" } }, + { + "context": "ProjectSearchBar > Editor", + "bindings": { + "up": "search::PreviousHistoryQuery", + "down": "search::NextHistoryQuery" + } + }, { "context": "ProjectSearchView", "bindings": { diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 87307264f5..1b4e32f4b8 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1,6 +1,6 @@ use crate::{ - SearchOptions, SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, - ToggleWholeWord, + NextHistoryQuery, PreviousHistoryQuery, SearchHistory, SearchOptions, SelectNextMatch, + SelectPrevMatch, ToggleCaseSensitive, ToggleRegex, ToggleWholeWord, }; use anyhow::Context; use collections::HashMap; @@ -56,6 +56,8 @@ pub fn init(cx: &mut AppContext) { cx.add_action(ProjectSearchBar::search_in_new); cx.add_action(ProjectSearchBar::select_next_match); cx.add_action(ProjectSearchBar::select_prev_match); + cx.add_action(ProjectSearchBar::next_history_query); + cx.add_action(ProjectSearchBar::previous_history_query); cx.capture_action(ProjectSearchBar::tab); cx.capture_action(ProjectSearchBar::tab_previous); add_toggle_option_action::(SearchOptions::CASE_SENSITIVE, cx); @@ -83,6 +85,7 @@ struct ProjectSearch { match_ranges: Vec>, active_query: Option, search_id: usize, + search_history: SearchHistory, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -131,6 +134,7 @@ impl ProjectSearch { match_ranges: Default::default(), active_query: None, search_id: 0, + search_history: SearchHistory::default(), } } @@ -144,6 +148,7 @@ impl ProjectSearch { match_ranges: self.match_ranges.clone(), active_query: self.active_query.clone(), search_id: self.search_id, + search_history: self.search_history.clone(), }) } @@ -152,6 +157,7 @@ impl ProjectSearch { .project .update(cx, |project, cx| project.search(query.clone(), cx)); self.search_id += 1; + self.search_history.add(query.as_str().to_string()); self.active_query = Some(query); self.match_ranges.clear(); self.pending_search = Some(cx.spawn_weak(|this, mut cx| async move { @@ -202,6 +208,7 @@ impl ProjectSearch { }); self.search_id += 1; self.match_ranges.clear(); + self.search_history.add(query.as_str().to_string()); self.pending_search = Some(cx.spawn(|this, mut cx| async move { let results = search?.await.log_err()?; @@ -278,6 +285,49 @@ impl View for ProjectSearchView { Cow::Borrowed("No results") }; + let previous_query_keystrokes = + cx.binding_for_action(&PreviousHistoryQuery {}) + .map(|binding| { + binding + .keystrokes() + .iter() + .map(|k| k.to_string()) + .collect::>() + }); + let next_query_keystrokes = + cx.binding_for_action(&NextHistoryQuery {}).map(|binding| { + binding + .keystrokes() + .iter() + .map(|k| k.to_string()) + .collect::>() + }); + let new_placeholder_text = match (previous_query_keystrokes, next_query_keystrokes) { + (Some(previous_query_keystrokes), Some(next_query_keystrokes)) => { + format!( + "Search ({}/{} for previous/next query)", + previous_query_keystrokes.join(" "), + next_query_keystrokes.join(" ") + ) + } + (None, Some(next_query_keystrokes)) => { + format!( + "Search ({} for next query)", + next_query_keystrokes.join(" ") + ) + } + (Some(previous_query_keystrokes), None) => { + format!( + "Search ({} for previous query)", + previous_query_keystrokes.join(" ") + ) + } + (None, None) => String::new(), + }; + self.query_editor.update(cx, |editor, cx| { + editor.set_placeholder_text(new_placeholder_text, cx); + }); + MouseEventHandler::::new(0, cx, |_, _| { Label::new(text, theme.search.results_status.clone()) .aligned() @@ -1152,6 +1202,47 @@ impl ProjectSearchBar { false } } + + fn next_history_query(&mut self, _: &NextHistoryQuery, cx: &mut ViewContext) { + if let Some(search_view) = self.active_project_search.as_ref() { + search_view.update(cx, |search_view, cx| { + let new_query = search_view.model.update(cx, |model, _| { + if let Some(new_query) = model.search_history.next().map(str::to_string) { + new_query + } else { + model.search_history.reset_selection(); + String::new() + } + }); + search_view.set_query(&new_query, cx); + }); + } + } + + fn previous_history_query(&mut self, _: &PreviousHistoryQuery, cx: &mut ViewContext) { + if let Some(search_view) = self.active_project_search.as_ref() { + search_view.update(cx, |search_view, cx| { + if search_view.query_editor.read(cx).text(cx).is_empty() { + if let Some(new_query) = search_view + .model + .read(cx) + .search_history + .current() + .map(str::to_string) + { + search_view.set_query(&new_query, cx); + return; + } + } + + if let Some(new_query) = search_view.model.update(cx, |model, _| { + model.search_history.previous().map(str::to_string) + }) { + search_view.set_query(&new_query, cx); + } + }); + } + } } impl Entity for ProjectSearchBar { @@ -1333,6 +1424,7 @@ pub mod tests { use editor::DisplayPoint; use gpui::{color::Color, executor::Deterministic, TestAppContext}; use project::FakeFs; + use semantic_index::semantic_index_settings::SemanticIndexSettings; use serde_json::json; use settings::SettingsStore; use std::sync::Arc; @@ -1758,6 +1850,192 @@ pub mod tests { }); } + #[gpui::test] + async fn test_search_query_history(cx: &mut TestAppContext) { + init_test(cx); + + let fs = FakeFs::new(cx.background()); + fs.insert_tree( + "/dir", + json!({ + "one.rs": "const ONE: usize = 1;", + "two.rs": "const TWO: usize = one::ONE + one::ONE;", + "three.rs": "const THREE: usize = one::ONE + two::TWO;", + "four.rs": "const FOUR: usize = one::ONE + three::THREE;", + }), + ) + .await; + let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; + let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + workspace.update(cx, |workspace, cx| { + ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) + }); + + let search_view = cx.read(|cx| { + workspace + .read(cx) + .active_pane() + .read(cx) + .active_item() + .and_then(|item| item.downcast::()) + .expect("Search view expected to appear after new search event trigger") + }); + + let search_bar = cx.add_view(window_id, |cx| { + let mut search_bar = ProjectSearchBar::new(); + search_bar.set_active_pane_item(Some(&search_view), cx); + // search_bar.show(cx); + search_bar + }); + + // Add 3 search items into the history + another unsubmitted one. + search_view.update(cx, |search_view, cx| { + search_view.search_options = SearchOptions::CASE_SENSITIVE; + search_view + .query_editor + .update(cx, |query_editor, cx| query_editor.set_text("ONE", cx)); + search_view.search(cx); + }); + cx.foreground().run_until_parked(); + search_view.update(cx, |search_view, cx| { + search_view + .query_editor + .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx)); + search_view.search(cx); + }); + cx.foreground().run_until_parked(); + search_view.update(cx, |search_view, cx| { + search_view + .query_editor + .update(cx, |query_editor, cx| query_editor.set_text("THREE", cx)); + search_view.search(cx); + }); + cx.foreground().run_until_parked(); + search_view.update(cx, |search_view, cx| { + search_view.query_editor.update(cx, |query_editor, cx| { + query_editor.set_text("JUST_TEXT_INPUT", cx) + }); + }); + cx.foreground().run_until_parked(); + + // Ensure that the latest input with search settings is active. + search_view.update(cx, |search_view, cx| { + assert_eq!( + search_view.query_editor.read(cx).text(cx), + "JUST_TEXT_INPUT" + ); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Next history query after the latest should set the query to the empty string. + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), ""); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), ""); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // First previous query for empty current query should set the query to the latest submitted one. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Further previous items should go over the history in reverse order. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Previous items should never go behind the first history item. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // Next items should go over the history in the original order. + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + search_view.update(cx, |search_view, cx| { + search_view + .query_editor + .update(cx, |query_editor, cx| query_editor.set_text("TWO_NEW", cx)); + search_view.search(cx); + }); + cx.foreground().run_until_parked(); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + + // New search input should add another entry to history and move the selection to the end of the history. + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.previous_history_query(&PreviousHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW"); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + search_bar.update(cx, |search_bar, cx| { + search_bar.next_history_query(&NextHistoryQuery, cx); + }); + search_view.update(cx, |search_view, cx| { + assert_eq!(search_view.query_editor.read(cx).text(cx), ""); + assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE); + }); + } + pub fn init_test(cx: &mut TestAppContext) { cx.foreground().forbid_parking(); let fonts = cx.font_cache(); @@ -1767,6 +2045,7 @@ pub mod tests { cx.update(|cx| { cx.set_global(SettingsStore::test(cx)); cx.set_global(ActiveSearches::default()); + settings::register::(cx); theme::init((), cx); cx.update_global::(|store, _| { diff --git a/crates/search/src/search.rs b/crates/search/src/search.rs index 18e3915527..f1711afec2 100644 --- a/crates/search/src/search.rs +++ b/crates/search/src/search.rs @@ -71,7 +71,7 @@ impl SearchOptions { const SEARCH_HISTORY_LIMIT: usize = 20; -#[derive(Default, Debug)] +#[derive(Default, Debug, Clone)] pub struct SearchHistory { history: SmallVec<[String; SEARCH_HISTORY_LIMIT]>, selected: Option, From 9a50b43eaa0f52a0a223e198141b8091ec618548 Mon Sep 17 00:00:00 2001 From: KCaverly Date: Mon, 31 Jul 2023 21:03:02 -0400 Subject: [PATCH 102/120] add templating languages html, erb, heex, svelte as entire parseable file types --- crates/semantic_index/src/parsing.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index 3f7a850a57..643db8c798 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -21,7 +21,8 @@ const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; const ENTIRE_FILE_TEMPLATE: &str = "The below snippet is from file ''\n\n```\n\n```"; -pub const PARSEABLE_ENTIRE_FILE_TYPES: &[&str] = &["TOML", "YAML", "CSS"]; +pub const PARSEABLE_ENTIRE_FILE_TYPES: &[&str] = + &["TOML", "YAML", "CSS", "HEEX", "ERB", "SVELTE", "HTML"]; pub struct CodeContextRetriever { pub parser: Parser, From e221f23018d9b9883327712874b1237725922a0a Mon Sep 17 00:00:00 2001 From: KCaverly Date: Tue, 1 Aug 2023 10:30:34 -0400 Subject: [PATCH 103/120] add support for markdown files to semantic search --- crates/semantic_index/src/parsing.rs | 16 ++++++++++++++++ crates/semantic_index/src/semantic_index.rs | 1 + 2 files changed, 17 insertions(+) diff --git a/crates/semantic_index/src/parsing.rs b/crates/semantic_index/src/parsing.rs index 643db8c798..cef23862c5 100644 --- a/crates/semantic_index/src/parsing.rs +++ b/crates/semantic_index/src/parsing.rs @@ -21,6 +21,7 @@ const CODE_CONTEXT_TEMPLATE: &str = "The below code snippet is from file ''\n\n```\n\n```"; const ENTIRE_FILE_TEMPLATE: &str = "The below snippet is from file ''\n\n```\n\n```"; +const MARKDOWN_CONTEXT_TEMPLATE: &str = "The below file contents is from file ''\n\n"; pub const PARSEABLE_ENTIRE_FILE_TYPES: &[&str] = &["TOML", "YAML", "CSS", "HEEX", "ERB", "SVELTE", "HTML"]; @@ -70,6 +71,19 @@ impl CodeContextRetriever { }]) } + fn parse_markdown_file(&self, relative_path: &Path, content: &str) -> Result> { + let document_span = MARKDOWN_CONTEXT_TEMPLATE + .replace("", relative_path.to_string_lossy().as_ref()) + .replace("", &content); + + Ok(vec![Document { + range: 0..content.len(), + content: document_span, + embedding: Vec::new(), + name: "Markdown".to_string(), + }]) + } + fn get_matches_in_file( &mut self, content: &str, @@ -136,6 +150,8 @@ impl CodeContextRetriever { if PARSEABLE_ENTIRE_FILE_TYPES.contains(&language_name.as_ref()) { return self.parse_entire_file(relative_path, language_name, &content); + } else if &language_name.to_string() == &"Markdown".to_string() { + return self.parse_markdown_file(relative_path, &content); } let mut documents = self.parse_file(content, language)?; diff --git a/crates/semantic_index/src/semantic_index.rs b/crates/semantic_index/src/semantic_index.rs index bd114de216..23c75f4014 100644 --- a/crates/semantic_index/src/semantic_index.rs +++ b/crates/semantic_index/src/semantic_index.rs @@ -613,6 +613,7 @@ impl SemanticIndex { .await { if !PARSEABLE_ENTIRE_FILE_TYPES.contains(&language.name().as_ref()) + && &language.name().as_ref() != &"Markdown" && language .grammar() .and_then(|grammar| grammar.embedding_config.as_ref()) From eb26fb2d45357e35d7d39edb8e2b3c6e0c1e9dbb Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Tue, 1 Aug 2023 11:52:53 -0400 Subject: [PATCH 104/120] Fix variable names --- crates/editor/src/editor.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 5270d6f951..a4d9259a6d 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -4221,7 +4221,7 @@ impl Editor { _: &SortLinesCaseSensitive, cx: &mut ViewContext, ) { - self.manipulate_lines(cx, |text| text.sort()) + self.manipulate_lines(cx, |lines| lines.sort()) } pub fn sort_lines_case_insensitive( @@ -4229,7 +4229,7 @@ impl Editor { _: &SortLinesCaseInsensitive, cx: &mut ViewContext, ) { - self.manipulate_lines(cx, |text| text.sort_by_key(|line| line.to_lowercase())) + self.manipulate_lines(cx, |lines| lines.sort_by_key(|line| line.to_lowercase())) } pub fn reverse_lines(&mut self, _: &ReverseLines, cx: &mut ViewContext) { @@ -4267,19 +4267,19 @@ impl Editor { let text = buffer .text_for_range(start_point..end_point) .collect::(); - let mut text = text.split("\n").collect_vec(); + let mut lines = text.split("\n").collect_vec(); - let text_len = text.len(); - callback(&mut text); + let lines_len = lines.len(); + callback(&mut lines); // This is a current limitation with selections. // If we wanted to support removing or adding lines, we'd need to fix the logic associated with selections. debug_assert!( - text.len() == text_len, + lines.len() == lines_len, "callback should not change the number of lines" ); - edits.push((start_point..end_point, text.join("\n"))); + edits.push((start_point..end_point, lines.join("\n"))); let start_anchor = buffer.anchor_after(start_point); let end_anchor = buffer.anchor_before(end_point); From 3cee181f99c6de5ae264a119124d0ca94c0ffe3d Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 1 Aug 2023 14:04:29 -0400 Subject: [PATCH 105/120] Improve panic message usefulness on local dev builds --- crates/zed/src/main.rs | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index e44ab3e33a..2a1fef6a56 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -45,6 +45,7 @@ use std::{ use sum_tree::Bias; use terminal_view::{get_working_directory, TerminalSettings, TerminalView}; use util::{ + channel::ReleaseChannel, http::{self, HttpClient}, paths::PathLikeWithPosition, }; @@ -415,22 +416,41 @@ fn init_panic_hook(app: &App, installation_id: Option) { panic::set_hook(Box::new(move |info| { let prior_panic_count = PANIC_COUNT.fetch_add(1, Ordering::SeqCst); if prior_panic_count > 0 { - std::panic::resume_unwind(Box::new(())); + // Give the panic-ing thread time to write the panic file + loop { + std::thread::yield_now(); + } + } + + let thread = thread::current(); + let thread_name = thread.name().unwrap_or(""); + + let payload = info + .payload() + .downcast_ref::<&str>() + .map(|s| s.to_string()) + .or_else(|| info.payload().downcast_ref::().map(|s| s.clone())) + .unwrap_or_else(|| "Box".to_string()); + + if *util::channel::RELEASE_CHANNEL == ReleaseChannel::Dev { + let location = info.location().unwrap(); + let backtrace = Backtrace::new(); + eprintln!( + "Thread {:?} panicked with {:?} at {}:{}:{}\n{:?}", + thread_name, + payload, + location.file(), + location.line(), + location.column(), + backtrace, + ); + std::process::exit(-1); } let app_version = ZED_APP_VERSION .or_else(|| platform.app_version().ok()) .map_or("dev".to_string(), |v| v.to_string()); - let thread = thread::current(); - let thread = thread.name().unwrap_or(""); - - let payload = info.payload(); - let payload = None - .or_else(|| payload.downcast_ref::<&str>().map(|s| s.to_string())) - .or_else(|| payload.downcast_ref::().map(|s| s.clone())) - .unwrap_or_else(|| "Box".to_string()); - let backtrace = Backtrace::new(); let mut backtrace = backtrace .frames() @@ -447,7 +467,7 @@ fn init_panic_hook(app: &App, installation_id: Option) { } let panic_data = Panic { - thread: thread.into(), + thread: thread_name.into(), payload: payload.into(), location_data: info.location().map(|location| LocationData { file: location.file().into(), From b695c42e1152ad9019b2c6bfcaf21834fe00b386 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 1 Aug 2023 22:28:04 -0600 Subject: [PATCH 106/120] WIP: Return WindowHandle from AppContext::add_window --- crates/gpui/src/app.rs | 352 ++++++++++++++++-------- crates/gpui/src/app/ref_counts.rs | 23 ++ crates/gpui/src/app/test_app_context.rs | 11 +- 3 files changed, 268 insertions(+), 118 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index da601ba351..b2d732d170 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -130,8 +130,12 @@ pub trait BorrowAppContext { } pub trait BorrowWindowContext { - fn read_with T>(&self, window_id: usize, f: F) -> T; - fn update T>(&mut self, window_id: usize, f: F) -> T; + fn read_with(&self, window_id: usize, f: F) -> T + where + F: FnOnce(&WindowContext) -> T; + fn update(&mut self, window_id: usize, f: F) -> T + where + F: FnOnce(&mut WindowContext) -> T; } #[derive(Clone)] @@ -402,7 +406,7 @@ impl AsyncAppContext { &mut self, window_options: WindowOptions, build_root_view: F, - ) -> (usize, ViewHandle) + ) -> WindowHandle where T: View, F: FnOnce(&mut ViewContext) -> T, @@ -1300,7 +1304,7 @@ impl AppContext { &mut self, window_options: WindowOptions, build_root_view: F, - ) -> (usize, ViewHandle) + ) -> WindowHandle where V: View, F: FnOnce(&mut ViewContext) -> V, @@ -1311,9 +1315,8 @@ impl AppContext { this.platform .open_window(window_id, window_options, this.foreground.clone()); let window = this.build_window(window_id, platform_window, build_root_view); - let root_view = window.root_view().clone().downcast::().unwrap(); this.windows.insert(window_id, window); - (window_id, root_view) + WindowHandle::new(window_id, this.ref_counts.clone()) }) } @@ -3802,6 +3805,131 @@ impl Clone for WeakModelHandle { impl Copy for WeakModelHandle {} +pub struct WindowHandle { + any_handle: AnyWindowHandle, + view_type: PhantomData, +} + +impl WindowHandle { + fn id(&self) -> usize { + self.any_handle.id() + } + + fn new(window_id: usize, ref_counts: Arc>) -> Self { + WindowHandle { + any_handle: AnyWindowHandle::new::(window_id, ref_counts), + view_type: PhantomData, + } + } + + fn root(&self, cx: &impl BorrowAppContext) -> ViewHandle { + self.read_with(cx, |cx| cx.root_view().clone().downcast().unwrap()) + } + + pub fn read_with(&self, cx: &C, read: F) -> R + where + C: BorrowAppContext, + F: FnOnce(&WindowContext) -> R, + { + cx.read_with(|cx| cx.read_window(self.id(), read).unwrap()) + } + + pub fn update(&self, cx: &mut C, update: F) -> R + where + C: BorrowAppContext, + F: FnOnce(&mut WindowContext) -> R, + { + cx.update(|cx| cx.update_window(self.id(), update).unwrap()) + } + + pub fn update_root(&self, cx: &mut C, update: F) -> R + where + C: BorrowAppContext, + F: FnOnce(&mut V, &mut ViewContext) -> R, + { + let window_id = self.id(); + cx.update(|cx| { + cx.update_window(window_id, |cx| { + cx.root_view() + .clone() + .downcast::() + .unwrap() + .update(cx, update) + }) + .unwrap() + }) + } + + pub fn read_root<'a>(&self, cx: &'a AppContext) -> &'a V { + let root_view = cx + .read_window(self.id(), |cx| cx.root_view().clone().downcast().unwrap()) + .unwrap(); + root_view.read(cx) + } + + pub fn read_root_with(&self, cx: &C, read: F) -> R + where + C: BorrowAppContext, + F: FnOnce(&V, &ViewContext) -> R, + { + self.read_with(cx, |cx| { + cx.root_view() + .downcast_ref::() + .unwrap() + .read_with(cx, read) + }) + } + + pub fn add_view(&self, cx: &mut C, build_view: F) -> ViewHandle + where + C: BorrowAppContext, + U: View, + F: FnOnce(&mut ViewContext) -> U, + { + self.update(cx, |cx| cx.add_view(build_view)) + } +} + +pub struct AnyWindowHandle { + window_id: usize, + root_view_type: TypeId, + ref_counts: Arc>, + + #[cfg(any(test, feature = "test-support"))] + handle_id: usize, +} + +impl AnyWindowHandle { + fn new(window_id: usize, ref_counts: Arc>) -> Self { + ref_counts.lock().inc_window(window_id); + + #[cfg(any(test, feature = "test-support"))] + let handle_id = ref_counts + .lock() + .leak_detector + .lock() + .handle_created(None, window_id); + + Self { + window_id, + root_view_type: TypeId::of::(), + ref_counts, + #[cfg(any(test, feature = "test-support"))] + handle_id, + } + } + + pub fn id(&self) -> usize { + self.window_id + } +} + +impl Drop for AnyWindowHandle { + fn drop(&mut self) { + self.ref_counts.lock().dec_window(self.window_id) + } +} + #[repr(transparent)] pub struct ViewHandle { any_handle: AnyViewHandle, @@ -4684,11 +4812,11 @@ mod tests { } } - let (_, view) = cx.add_window(|_| View { render_count: 0 }); + let window = cx.add_window(|_| View { render_count: 0 }); let called_defer = Rc::new(AtomicBool::new(false)); let called_after_window_update = Rc::new(AtomicBool::new(false)); - view.update(cx, |this, cx| { + window.update_root(cx, |this, cx| { assert_eq!(this.render_count, 1); cx.defer({ let called_defer = called_defer.clone(); @@ -4712,7 +4840,7 @@ mod tests { assert!(called_defer.load(SeqCst)); assert!(called_after_window_update.load(SeqCst)); - assert_eq!(view.read_with(cx, |view, _| view.render_count), 3); + assert_eq!(window.read_root_with(cx, |view, _| view.render_count), 3); } #[crate::test(self)] @@ -4751,9 +4879,9 @@ mod tests { } } - let (window_id, _root_view) = cx.add_window(|cx| View::new(None, cx)); - let handle_1 = cx.add_view(window_id, |cx| View::new(None, cx)); - let handle_2 = cx.add_view(window_id, |cx| View::new(Some(handle_1.clone()), cx)); + let window = cx.add_window(|cx| View::new(None, cx)); + let handle_1 = window.add_view(cx, |cx| View::new(None, cx)); + let handle_2 = window.add_view(cx, |cx| View::new(Some(handle_1.clone()), cx)); assert_eq!(cx.read(|cx| cx.views.len()), 3); handle_1.update(cx, |view, cx| { @@ -4813,11 +4941,11 @@ mod tests { } let mouse_down_count = Arc::new(AtomicUsize::new(0)); - let (window_id, _) = cx.add_window(Default::default(), |_| View { + let window = cx.add_window(Default::default(), |_| View { mouse_down_count: mouse_down_count.clone(), }); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { // Ensure window's root element is in a valid lifecycle state. cx.dispatch_event( Event::MouseDown(MouseButtonEvent { @@ -4876,9 +5004,11 @@ mod tests { let model = cx.add_model(|_| Model { released: model_released.clone(), }); - let (window_id, view) = cx.add_window(Default::default(), |_| View { + let window = cx.add_window(Default::default(), |_| View { released: view_released.clone(), }); + let view = window.root(cx); + assert!(!model_released.get()); assert!(!view_released.get()); @@ -4900,7 +5030,7 @@ mod tests { assert!(model_release_observed.get()); drop(view); - cx.update_window(window_id, |cx| cx.remove_window()); + window.update(cx, |cx| cx.remove_window()); assert!(view_released.get()); assert!(view_release_observed.get()); } @@ -4913,8 +5043,9 @@ mod tests { type Event = String; } - let (window_id, handle_1) = cx.add_window(|_| TestView::default()); - let handle_2 = cx.add_view(window_id, |_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let handle_1 = window.root(cx); + let handle_2 = window.add_view(cx, |_| TestView::default()); let handle_3 = cx.add_model(|_| Model); handle_1.update(cx, |_, cx| { @@ -5140,9 +5271,9 @@ mod tests { type Event = (); } - let (window_id, _root_view) = cx.add_window(|_| TestView::default()); - let observing_view = cx.add_view(window_id, |_| TestView::default()); - let emitting_view = cx.add_view(window_id, |_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let observing_view = window.add_view(cx, |_| TestView::default()); + let emitting_view = window.add_view(cx, |_| TestView::default()); let observing_model = cx.add_model(|_| Model); let observed_model = cx.add_model(|_| Model); @@ -5165,7 +5296,7 @@ mod tests { #[crate::test(self)] fn test_view_emit_before_subscribe_in_same_update_cycle(cx: &mut AppContext) { - let (_, view) = cx.add_window::(Default::default(), |cx| { + let window = cx.add_window::(Default::default(), |cx| { drop(cx.subscribe(&cx.handle(), { move |this, _, _, _| this.events.push("dropped before flush".into()) })); @@ -5181,7 +5312,7 @@ mod tests { TestView { events: Vec::new() } }); - assert_eq!(view.read(cx).events, ["before emit"]); + assert_eq!(window.read_root(cx).events, ["before emit"]); } #[crate::test(self)] @@ -5195,7 +5326,8 @@ mod tests { type Event = (); } - let (_, view) = cx.add_window(|_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let view = window.root(cx); let model = cx.add_model(|_| Model { state: "old-state".into(), }); @@ -5216,7 +5348,7 @@ mod tests { #[crate::test(self)] fn test_view_notify_before_observe_in_same_update_cycle(cx: &mut AppContext) { - let (_, view) = cx.add_window::(Default::default(), |cx| { + let window = cx.add_window::(Default::default(), |cx| { drop(cx.observe(&cx.handle(), { move |this, _, _| this.events.push("dropped before flush".into()) })); @@ -5232,7 +5364,7 @@ mod tests { TestView { events: Vec::new() } }); - assert_eq!(view.read(cx).events, ["before notify"]); + assert_eq!(window.read_root(cx).events, ["before notify"]); } #[crate::test(self)] @@ -5243,7 +5375,8 @@ mod tests { } let model = cx.add_model(|_| Model); - let (_, view) = cx.add_window(|_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let view = window.root(cx); view.update(cx, |_, cx| { model.update(cx, |_, cx| cx.notify()); @@ -5267,8 +5400,8 @@ mod tests { type Event = (); } - let (window_id, _root_view) = cx.add_window(|_| TestView::default()); - let observing_view = cx.add_view(window_id, |_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let observing_view = window.add_view(cx, |_| TestView::default()); let observing_model = cx.add_model(|_| Model); let observed_model = cx.add_model(|_| Model); @@ -5390,9 +5523,9 @@ mod tests { } } - let (window_id, _root_view) = cx.add_window(|_| View); - let observing_view = cx.add_view(window_id, |_| View); - let observed_view = cx.add_view(window_id, |_| View); + let window = cx.add_window(|_| View); + let observing_view = window.add_view(cx, |_| View); + let observed_view = window.add_view(cx, |_| View); let observation_count = Rc::new(RefCell::new(0)); observing_view.update(cx, |_, cx| { @@ -5474,13 +5607,14 @@ mod tests { } let view_events: Arc>> = Default::default(); - let (window_id, view_1) = cx.add_window(|_| View { + let window = cx.add_window(|_| View { events: view_events.clone(), name: "view 1".to_string(), child: None, }); - let view_2 = cx - .update_window(window_id, |cx| { + let view_1 = window.root(cx); + let view_2 = window + .update(cx, |cx| { let view_2 = cx.add_view(|_| View { events: view_events.clone(), name: "view 2".to_string(), @@ -5731,40 +5865,34 @@ mod tests { }) .detach(); - let (window_id, view_1) = - cx.add_window(Default::default(), |_| ViewA { id: 1, child: None }); - let view_2 = cx - .update_window(window_id, |cx| { - let child = cx.add_view(|_| ViewB { id: 2, child: None }); - view_1.update(cx, |view, cx| { - view.child = Some(child.clone().into_any()); - cx.notify(); - }); - child - }) - .unwrap(); - let view_3 = cx - .update_window(window_id, |cx| { - let child = cx.add_view(|_| ViewA { id: 3, child: None }); - view_2.update(cx, |view, cx| { - view.child = Some(child.clone().into_any()); - cx.notify(); - }); - child - }) - .unwrap(); - let view_4 = cx - .update_window(window_id, |cx| { - let child = cx.add_view(|_| ViewB { id: 4, child: None }); - view_3.update(cx, |view, cx| { - view.child = Some(child.clone().into_any()); - cx.notify(); - }); - child - }) - .unwrap(); + let window = cx.add_window(Default::default(), |_| ViewA { id: 1, child: None }); + let view_1 = window.root(cx); + let view_2 = window.update(cx, |cx| { + let child = cx.add_view(|_| ViewB { id: 2, child: None }); + view_1.update(cx, |view, cx| { + view.child = Some(child.clone().into_any()); + cx.notify(); + }); + child + }); + let view_3 = window.update(cx, |cx| { + let child = cx.add_view(|_| ViewA { id: 3, child: None }); + view_2.update(cx, |view, cx| { + view.child = Some(child.clone().into_any()); + cx.notify(); + }); + child + }); + let view_4 = window.update(cx, |cx| { + let child = cx.add_view(|_| ViewB { id: 4, child: None }); + view_3.update(cx, |view, cx| { + view.child = Some(child.clone().into_any()); + cx.notify(); + }); + child + }); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_action(Some(view_4.id()), &Action("bar".to_string())) }); @@ -5786,31 +5914,27 @@ mod tests { // Remove view_1, which doesn't propagate the action - let (window_id, view_2) = - cx.add_window(Default::default(), |_| ViewB { id: 2, child: None }); - let view_3 = cx - .update_window(window_id, |cx| { - let child = cx.add_view(|_| ViewA { id: 3, child: None }); - view_2.update(cx, |view, cx| { - view.child = Some(child.clone().into_any()); - cx.notify(); - }); - child - }) - .unwrap(); - let view_4 = cx - .update_window(window_id, |cx| { - let child = cx.add_view(|_| ViewB { id: 4, child: None }); - view_3.update(cx, |view, cx| { - view.child = Some(child.clone().into_any()); - cx.notify(); - }); - child - }) - .unwrap(); + let window = cx.add_window(Default::default(), |_| ViewB { id: 2, child: None }); + let view_2 = window.root(cx); + let view_3 = window.update(cx, |cx| { + let child = cx.add_view(|_| ViewA { id: 3, child: None }); + view_2.update(cx, |view, cx| { + view.child = Some(child.clone().into_any()); + cx.notify(); + }); + child + }); + let view_4 = window.update(cx, |cx| { + let child = cx.add_view(|_| ViewB { id: 4, child: None }); + view_3.update(cx, |view, cx| { + view.child = Some(child.clone().into_any()); + cx.notify(); + }); + child + }); actions.borrow_mut().clear(); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_action(Some(view_4.id()), &Action("bar".to_string())) }); @@ -5887,7 +6011,7 @@ mod tests { view_3.keymap_context.add_identifier("b"); view_3.keymap_context.add_identifier("c"); - let (window_id, _view_1) = cx.add_window(Default::default(), |cx| { + let window = cx.add_window(Default::default(), |cx| { let view_2 = cx.add_view(|cx| { let view_3 = cx.add_view(|cx| { cx.focus_self(); @@ -6006,13 +6130,14 @@ mod tests { } } - let (window_id, view_1) = cx.add_window(|cx| { + let window = cx.add_window(|cx| { let view_2 = cx.add_view(|cx| { cx.focus_self(); View2 {} }); View1 { child: view_2 } }); + let view_1 = window.root(cx); let view_2 = view_1.read_with(cx, |view, _| view.child.clone()); cx.update(|cx| { @@ -6138,7 +6263,8 @@ mod tests { impl_actions!(test, [ActionWithArg]); - let (window_id, view) = cx.add_window(|_| View); + let window = cx.add_window(|_| View); + let view = window.root(cx); cx.update(|cx| { cx.add_global_action(|_: &ActionWithArg, _| {}); cx.add_bindings(vec![ @@ -6250,7 +6376,8 @@ mod tests { } } - let (_, view) = cx.add_window(|_| Counter(0)); + let window = cx.add_window(|_| Counter(0)); + let view = window.root(cx); let condition1 = view.condition(cx, |view, _| view.0 == 2); let condition2 = view.condition(cx, |view, _| view.0 == 3); @@ -6272,15 +6399,15 @@ mod tests { #[crate::test(self)] #[should_panic] async fn test_view_condition_timeout(cx: &mut TestAppContext) { - let (_, view) = cx.add_window(|_| TestView::default()); - view.condition(cx, |_, _| false).await; + let window = cx.add_window(|_| TestView::default()); + window.root(cx).condition(cx, |_, _| false).await; } #[crate::test(self)] #[should_panic(expected = "view dropped with pending condition")] async fn test_view_condition_panic_on_drop(cx: &mut TestAppContext) { - let (window_id, _root_view) = cx.add_window(|_| TestView::default()); - let view = cx.add_view(window_id, |_| TestView::default()); + let window = cx.add_window(|_| TestView::default()); + let view = window.add_view(cx, |_| TestView::default()); let condition = view.condition(cx, |_, _| false); cx.update(|_| drop(view)); @@ -6305,22 +6432,21 @@ mod tests { } } - let (window_id, root_view) = cx.add_window(Default::default(), |_| View(0)); - cx.update_window(window_id, |cx| { + let window = cx.add_window(Default::default(), |_| View(0)); + let root_view = window.root(cx); + window.update(cx, |cx| { assert_eq!( cx.window.rendered_views[&root_view.id()].name(), Some("render count: 0") ); }); - let view = cx - .update_window(window_id, |cx| { - cx.refresh_windows(); - cx.add_view(|_| View(0)) - }) - .unwrap(); + let view = window.update(cx, |cx| { + cx.refresh_windows(); + cx.add_view(|_| View(0)) + }); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { assert_eq!( cx.window.rendered_views[&root_view.id()].name(), Some("render count: 1") @@ -6333,7 +6459,7 @@ mod tests { cx.update(|cx| cx.refresh_windows()); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { assert_eq!( cx.window.rendered_views[&root_view.id()].name(), Some("render count: 2") @@ -6349,7 +6475,7 @@ mod tests { drop(view); }); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { assert_eq!( cx.window.rendered_views[&root_view.id()].name(), Some("render count: 3") @@ -6397,7 +6523,7 @@ mod tests { } let events = Rc::new(RefCell::new(Vec::new())); - let (window_1, _) = cx.add_window(|cx: &mut ViewContext| { + let window_1 = cx.add_window(|cx: &mut ViewContext| { cx.observe_window_activation({ let events = events.clone(); move |this, active, _| events.borrow_mut().push((this.0, active)) @@ -6407,7 +6533,7 @@ mod tests { }); assert_eq!(mem::take(&mut *events.borrow_mut()), [("window 1", true)]); - let (window_2, _) = cx.add_window(|cx: &mut ViewContext| { + let window_2 = cx.add_window(|cx: &mut ViewContext| { cx.observe_window_activation({ let events = events.clone(); move |this, active, _| events.borrow_mut().push((this.0, active)) @@ -6420,7 +6546,7 @@ mod tests { [("window 1", false), ("window 2", true)] ); - let (window_3, _) = cx.add_window(|cx: &mut ViewContext| { + let window_3 = cx.add_window(|cx: &mut ViewContext| { cx.observe_window_activation({ let events = events.clone(); move |this, active, _| events.borrow_mut().push((this.0, active)) diff --git a/crates/gpui/src/app/ref_counts.rs b/crates/gpui/src/app/ref_counts.rs index f0c1699f16..c076a8a476 100644 --- a/crates/gpui/src/app/ref_counts.rs +++ b/crates/gpui/src/app/ref_counts.rs @@ -23,8 +23,10 @@ struct ElementStateRefCount { #[derive(Default)] pub struct RefCounts { + window_counts: HashMap, entity_counts: HashMap, element_state_counts: HashMap, + dropped_windows: HashSet, dropped_models: HashSet, dropped_views: HashSet<(usize, usize)>, dropped_element_states: HashSet, @@ -43,6 +45,18 @@ impl RefCounts { } } + pub fn inc_window(&mut self, window_id: usize) { + match self.window_counts.entry(window_id) { + Entry::Occupied(mut entry) => { + *entry.get_mut() += 1; + } + Entry::Vacant(entry) => { + entry.insert(1); + self.dropped_windows.remove(&window_id); + } + } + } + pub fn inc_model(&mut self, model_id: usize) { match self.entity_counts.entry(model_id) { Entry::Occupied(mut entry) => { @@ -85,6 +99,15 @@ impl RefCounts { } } + pub fn dec_window(&mut self, window_id: usize) { + let count = self.window_counts.get_mut(&window_id).unwrap(); + *count -= 1; + if *count == 0 { + self.entity_counts.remove(&window_id); + self.dropped_windows.insert(window_id); + } + } + pub fn dec_model(&mut self, model_id: usize) { let count = self.entity_counts.get_mut(&model_id).unwrap(); *count -= 1; diff --git a/crates/gpui/src/app/test_app_context.rs b/crates/gpui/src/app/test_app_context.rs index 2fa8699883..0fa64f531e 100644 --- a/crates/gpui/src/app/test_app_context.rs +++ b/crates/gpui/src/app/test_app_context.rs @@ -6,7 +6,7 @@ use crate::{ platform::{Event, InputHandler, KeyDownEvent, Platform}, Action, AppContext, BorrowAppContext, BorrowWindowContext, Entity, FontCache, Handle, ModelContext, ModelHandle, Subscription, Task, View, ViewContext, ViewHandle, WeakHandle, - WindowContext, + WindowContext, WindowHandle, }; use collections::BTreeMap; use futures::Future; @@ -148,17 +148,18 @@ impl TestAppContext { self.cx.borrow_mut().add_model(build_model) } - pub fn add_window(&mut self, build_root_view: F) -> (usize, ViewHandle) + pub fn add_window(&mut self, build_root_view: F) -> WindowHandle where T: View, F: FnOnce(&mut ViewContext) -> T, { - let (window_id, view) = self + let window = self .cx .borrow_mut() .add_window(Default::default(), build_root_view); - self.simulate_window_activation(Some(window_id)); - (window_id, view) + self.simulate_window_activation(Some(window.id())); + + WindowHandle::new(window.id(), self.cx.borrow_mut().ref_counts.clone()) } pub fn add_view(&mut self, window_id: usize, build_view: F) -> ViewHandle From 300ce61bd0d6bf77153669eb3be044a870e76676 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 2 Aug 2023 08:25:40 -0600 Subject: [PATCH 107/120] WIP --- crates/gpui/src/app.rs | 76 ++++++++++++++----------- crates/gpui/src/app/ref_counts.rs | 5 +- crates/gpui/src/app/test_app_context.rs | 2 +- crates/gpui/src/app/window.rs | 2 +- 4 files changed, 47 insertions(+), 38 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index b2d732d170..adabcf0a8b 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -498,8 +498,8 @@ pub struct AppContext { // Action Types -> Action Handlers global_actions: HashMap>, keystroke_matcher: KeymapMatcher, - next_entity_id: usize, - next_window_id: usize, + next_id: usize, + // next_window_id: usize, next_subscription_id: usize, frame_count: usize, @@ -558,8 +558,7 @@ impl AppContext { actions: Default::default(), global_actions: Default::default(), keystroke_matcher: KeymapMatcher::default(), - next_entity_id: 0, - next_window_id: 0, + next_id: 0, next_subscription_id: 0, frame_count: 0, subscriptions: Default::default(), @@ -1230,7 +1229,7 @@ impl AppContext { F: FnOnce(&mut ModelContext) -> T, { self.update(|this| { - let model_id = post_inc(&mut this.next_entity_id); + let model_id = post_inc(&mut this.next_id); let handle = ModelHandle::new(model_id, &this.ref_counts); let mut cx = ModelContext::new(this, model_id); let model = build_model(&mut cx); @@ -1310,7 +1309,7 @@ impl AppContext { F: FnOnce(&mut ViewContext) -> V, { self.update(|this| { - let window_id = post_inc(&mut this.next_window_id); + let window_id = post_inc(&mut this.next_id); let platform_window = this.platform .open_window(window_id, window_options, this.foreground.clone()); @@ -1326,7 +1325,7 @@ impl AppContext { F: FnOnce(&mut ViewContext) -> V, { self.update(|this| { - let window_id = post_inc(&mut this.next_window_id); + let window_id = post_inc(&mut this.next_id); let platform_window = this.platform.add_status_item(window_id); let window = this.build_window(window_id, platform_window, build_root_view); let root_view = window.root_view().clone().downcast::().unwrap(); @@ -3810,6 +3809,7 @@ pub struct WindowHandle { view_type: PhantomData, } +#[allow(dead_code)] impl WindowHandle { fn id(&self) -> usize { self.any_handle.id() @@ -3922,6 +3922,17 @@ impl AnyWindowHandle { pub fn id(&self) -> usize { self.window_id } + + pub fn downcast(self) -> Option> { + if TypeId::of::() == self.root_view_type { + Some(WindowHandle { + any_handle: self, + view_type: PhantomData, + }) + } else { + None + } + } } impl Drop for AnyWindowHandle { @@ -5613,20 +5624,18 @@ mod tests { child: None, }); let view_1 = window.root(cx); - let view_2 = window - .update(cx, |cx| { - let view_2 = cx.add_view(|_| View { - events: view_events.clone(), - name: "view 2".to_string(), - child: None, - }); - view_1.update(cx, |view_1, cx| { - view_1.child = Some(view_2.clone().into_any()); - cx.notify(); - }); - view_2 - }) - .unwrap(); + let view_2 = window.update(cx, |cx| { + let view_2 = cx.add_view(|_| View { + events: view_events.clone(), + name: "view 2".to_string(), + child: None, + }); + view_1.update(cx, |view_1, cx| { + view_1.child = Some(view_2.clone().into_any()); + cx.notify(); + }); + view_2 + }); let observed_events: Arc>> = Default::default(); view_1.update(cx, |_, cx| { @@ -6071,26 +6080,26 @@ mod tests { } }); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_keystroke(&Keystroke::parse("a").unwrap()) }); assert_eq!(&*actions.borrow(), &["2 a"]); actions.borrow_mut().clear(); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_keystroke(&Keystroke::parse("b").unwrap()); }); assert_eq!(&*actions.borrow(), &["3 b", "2 b", "1 b", "global b"]); actions.borrow_mut().clear(); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_keystroke(&Keystroke::parse("c").unwrap()); }); assert_eq!(&*actions.borrow(), &["3 c"]); actions.borrow_mut().clear(); - cx.update_window(window_id, |cx| { + window.update(cx, |cx| { cx.dispatch_keystroke(&Keystroke::parse("d").unwrap()); }); assert_eq!(&*actions.borrow(), &["2 d"]); @@ -6201,7 +6210,7 @@ mod tests { // Check that global actions do not have a binding, even if a binding does exist in another view assert_eq!( - &available_actions(window_id, view_1.id(), cx), + &available_actions(window.id(), view_1.id(), cx), &[ ("test::Action1", vec![Keystroke::parse("a").unwrap()]), ("test::GlobalAction", vec![]) @@ -6210,7 +6219,7 @@ mod tests { // Check that view 1 actions and bindings are available even when called from view 2 assert_eq!( - &available_actions(window_id, view_2.id(), cx), + &available_actions(window.id(), view_2.id(), cx), &[ ("test::Action1", vec![Keystroke::parse("a").unwrap()]), ("test::Action2", vec![Keystroke::parse("b").unwrap()]), @@ -6273,7 +6282,7 @@ mod tests { ]); }); - let actions = cx.available_actions(window_id, view.id()); + let actions = cx.available_actions(window.id(), view.id()); assert_eq!( actions[0].1.as_any().downcast_ref::(), Some(&ActionWithArg { arg: false }) @@ -6559,25 +6568,25 @@ mod tests { [("window 2", false), ("window 3", true)] ); - cx.simulate_window_activation(Some(window_2)); + cx.simulate_window_activation(Some(window_2.id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 3", false), ("window 2", true)] ); - cx.simulate_window_activation(Some(window_1)); + cx.simulate_window_activation(Some(window_1.id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 2", false), ("window 1", true)] ); - cx.simulate_window_activation(Some(window_3)); + cx.simulate_window_activation(Some(window_3.id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 1", false), ("window 3", true)] ); - cx.simulate_window_activation(Some(window_3)); + cx.simulate_window_activation(Some(window_3.id())); assert_eq!(mem::take(&mut *events.borrow_mut()), []); } @@ -6633,12 +6642,13 @@ mod tests { let child_rendered = Rc::new(Cell::new(false)); let child_dropped = Rc::new(Cell::new(false)); - let (_, root_view) = cx.add_window(|cx| Parent { + let window = cx.add_window(|cx| Parent { child: Some(cx.add_view(|_| Child { rendered: child_rendered.clone(), dropped: child_dropped.clone(), })), }); + let root_view = window.root(cx); assert!(child_rendered.take()); assert!(!child_dropped.take()); diff --git a/crates/gpui/src/app/ref_counts.rs b/crates/gpui/src/app/ref_counts.rs index c076a8a476..74563d05bc 100644 --- a/crates/gpui/src/app/ref_counts.rs +++ b/crates/gpui/src/app/ref_counts.rs @@ -23,7 +23,6 @@ struct ElementStateRefCount { #[derive(Default)] pub struct RefCounts { - window_counts: HashMap, entity_counts: HashMap, element_state_counts: HashMap, dropped_windows: HashSet, @@ -46,7 +45,7 @@ impl RefCounts { } pub fn inc_window(&mut self, window_id: usize) { - match self.window_counts.entry(window_id) { + match self.entity_counts.entry(window_id) { Entry::Occupied(mut entry) => { *entry.get_mut() += 1; } @@ -100,7 +99,7 @@ impl RefCounts { } pub fn dec_window(&mut self, window_id: usize) { - let count = self.window_counts.get_mut(&window_id).unwrap(); + let count = self.entity_counts.get_mut(&window_id).unwrap(); *count -= 1; if *count == 0 { self.entity_counts.remove(&window_id); diff --git a/crates/gpui/src/app/test_app_context.rs b/crates/gpui/src/app/test_app_context.rs index 0fa64f531e..80f1037466 100644 --- a/crates/gpui/src/app/test_app_context.rs +++ b/crates/gpui/src/app/test_app_context.rs @@ -60,7 +60,7 @@ impl TestAppContext { RefCounts::new(leak_detector), (), ); - cx.next_entity_id = first_entity_id; + cx.next_id = first_entity_id; let cx = TestAppContext { cx: Rc::new(RefCell::new(cx)), foreground_platform, diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index e4beb58873..9dc5d99bc5 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -1176,7 +1176,7 @@ impl<'a> WindowContext<'a> { F: FnOnce(&mut ViewContext) -> Option, { let window_id = self.window_id; - let view_id = post_inc(&mut self.next_entity_id); + let view_id = post_inc(&mut self.next_id); let mut cx = ViewContext::mutable(self, view_id); let handle = if let Some(view) = build_view(&mut cx) { let mut keymap_context = KeymapContext::default(); From 4c7d60ed131f563edc5c937e5bf3cf654f1c9178 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 2 Aug 2023 09:07:35 -0700 Subject: [PATCH 108/120] Upgrade to rust 1.71 --- Dockerfile | 2 +- rust-toolchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2a78d37cbb..77d011490e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax = docker/dockerfile:1.2 -FROM rust:1.70-bullseye as builder +FROM rust:1.71-bullseye as builder WORKDIR app COPY . . diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f78a67ddb3..50003020e9 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.70" +channel = "1.71" components = [ "rustfmt" ] targets = [ "x86_64-apple-darwin", "aarch64-apple-darwin", "wasm32-wasi" ] From a127b0d3e6168de644267541b5bd29b6adfec55c Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 2 Aug 2023 09:19:23 -0700 Subject: [PATCH 109/120] Fix warnings surfaced in Rust 1.71 --- crates/collab/src/tests/randomized_integration_tests.rs | 2 +- crates/editor/src/display_map/inlay_map.rs | 4 +--- crates/editor/src/inlay_hint_cache.rs | 1 - crates/project/src/worktree.rs | 2 +- crates/sum_tree/src/cursor.rs | 2 +- crates/vim/src/normal/search.rs | 2 +- crates/zed/src/zed.rs | 1 - 7 files changed, 5 insertions(+), 9 deletions(-) diff --git a/crates/collab/src/tests/randomized_integration_tests.rs b/crates/collab/src/tests/randomized_integration_tests.rs index 8062a12b83..ae3e609b93 100644 --- a/crates/collab/src/tests/randomized_integration_tests.rs +++ b/crates/collab/src/tests/randomized_integration_tests.rs @@ -183,7 +183,7 @@ async fn apply_server_operation( let username; { let mut plan = plan.lock(); - let mut user = plan.user(user_id); + let user = plan.user(user_id); if user.online { return false; } diff --git a/crates/editor/src/display_map/inlay_map.rs b/crates/editor/src/display_map/inlay_map.rs index 6a59cecae8..9794ac45c1 100644 --- a/crates/editor/src/display_map/inlay_map.rs +++ b/crates/editor/src/display_map/inlay_map.rs @@ -397,7 +397,7 @@ impl InlayMap { buffer_snapshot: MultiBufferSnapshot, mut buffer_edits: Vec>, ) -> (InlaySnapshot, Vec) { - let mut snapshot = &mut self.snapshot; + let snapshot = &mut self.snapshot; if buffer_edits.is_empty() { if snapshot.buffer.trailing_excerpt_update_count() @@ -572,7 +572,6 @@ impl InlayMap { }) .collect(); let buffer_snapshot = snapshot.buffer.clone(); - drop(snapshot); let (snapshot, edits) = self.sync(buffer_snapshot, buffer_edits); (snapshot, edits) } @@ -635,7 +634,6 @@ impl InlayMap { } log::info!("removing inlays: {:?}", to_remove); - drop(snapshot); let (snapshot, edits) = self.splice(to_remove, to_insert); (snapshot, edits) } diff --git a/crates/editor/src/inlay_hint_cache.rs b/crates/editor/src/inlay_hint_cache.rs index 63076ba234..3d4ea3d6f2 100644 --- a/crates/editor/src/inlay_hint_cache.rs +++ b/crates/editor/src/inlay_hint_cache.rs @@ -571,7 +571,6 @@ fn new_update_task( if let Some(buffer) = refresh_multi_buffer.buffer(pending_refresh_query.buffer_id) { - drop(refresh_multi_buffer); editor.inlay_hint_cache.update_tasks.insert( pending_refresh_query.excerpt_id, UpdateTask { diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index b0795818b8..9e30796bbc 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -2369,7 +2369,7 @@ impl BackgroundScannerState { } // Remove any git repositories whose .git entry no longer exists. - let mut snapshot = &mut self.snapshot; + let snapshot = &mut self.snapshot; let mut repositories = mem::take(&mut snapshot.git_repositories); let mut repository_entries = mem::take(&mut snapshot.repository_entries); repositories.retain(|work_directory_id, _| { diff --git a/crates/sum_tree/src/cursor.rs b/crates/sum_tree/src/cursor.rs index efd6ac145e..12ab12dc27 100644 --- a/crates/sum_tree/src/cursor.rs +++ b/crates/sum_tree/src/cursor.rs @@ -202,7 +202,7 @@ where self.position = D::default(); } - let mut entry = self.stack.last_mut().unwrap(); + let entry = self.stack.last_mut().unwrap(); if !descending { if entry.index == 0 { self.stack.pop(); diff --git a/crates/vim/src/normal/search.rs b/crates/vim/src/normal/search.rs index 614866d9c9..9375c4e78d 100644 --- a/crates/vim/src/normal/search.rs +++ b/crates/vim/src/normal/search.rs @@ -93,7 +93,7 @@ fn search_submit(workspace: &mut Workspace, _: &SearchSubmit, cx: &mut ViewConte pane.update(cx, |pane, cx| { if let Some(search_bar) = pane.toolbar().read(cx).item_of_type::() { search_bar.update(cx, |search_bar, cx| { - let mut state = &mut vim.state.search; + let state = &mut vim.state.search; let mut count = state.count; // in the case that the query has changed, the search bar diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 4b0bf1cd4c..b67bf0bab4 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -545,7 +545,6 @@ pub fn handle_keymap_file_changes( reload_keymaps(cx, &keymap_content); } }) - .detach(); })); } } From b0ec05a73242bc131d1e788fa278a057e4dfb569 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Wed, 2 Aug 2023 13:50:30 -0400 Subject: [PATCH 110/120] v0.99.x dev --- Cargo.lock | 2 +- crates/zed/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a00b073586..fbf4e750c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9815,7 +9815,7 @@ dependencies = [ [[package]] name = "zed" -version = "0.98.0" +version = "0.99.0" dependencies = [ "activity_indicator", "ai", diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index a5877aaccb..95d6445d17 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Nathan Sobo "] description = "The fast, collaborative code editor." edition = "2021" name = "zed" -version = "0.98.0" +version = "0.99.0" publish = false [lib] From 60e190e5001553e4c3c0cd472e6feb45ea07aca2 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 2 Aug 2023 12:08:56 -0600 Subject: [PATCH 111/120] WIP --- crates/copilot/src/sign_in.rs | 13 ++++++------- crates/gpui/src/app.rs | 10 +++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/crates/copilot/src/sign_in.rs b/crates/copilot/src/sign_in.rs index 803cb5cc85..fec8f27c97 100644 --- a/crates/copilot/src/sign_in.rs +++ b/crates/copilot/src/sign_in.rs @@ -4,7 +4,7 @@ use gpui::{ geometry::rect::RectF, platform::{WindowBounds, WindowKind, WindowOptions}, AnyElement, AnyViewHandle, AppContext, ClipboardItem, Element, Entity, View, ViewContext, - ViewHandle, + WindowHandle, }; use theme::ui::modal; @@ -18,14 +18,14 @@ const COPILOT_SIGN_UP_URL: &'static str = "https://github.com/features/copilot"; pub fn init(cx: &mut AppContext) { if let Some(copilot) = Copilot::global(cx) { - let mut code_verification: Option> = None; + let mut code_verification: Option> = None; cx.observe(&copilot, move |copilot, cx| { let status = copilot.read(cx).status(); match &status { crate::Status::SigningIn { prompt } => { if let Some(code_verification_handle) = code_verification.as_mut() { - let window_id = code_verification_handle.window_id(); + let window_id = code_verification_handle.id(); let updated = cx.update_window(window_id, |cx| { code_verification_handle.update(cx, |code_verification, cx| { code_verification.set_status(status.clone(), cx) @@ -66,7 +66,7 @@ pub fn init(cx: &mut AppContext) { fn create_copilot_auth_window( cx: &mut AppContext, status: &Status, -) -> ViewHandle { +) -> WindowHandle { let window_size = theme::current(cx).copilot.modal.dimensions(); let window_options = WindowOptions { bounds: WindowBounds::Fixed(RectF::new(Default::default(), window_size)), @@ -78,10 +78,9 @@ fn create_copilot_auth_window( is_movable: true, screen: None, }; - let (_, view) = cx.add_window(window_options, |_cx| { + cx.add_window(window_options, |_cx| { CopilotCodeVerification::new(status.clone()) - }); - view + }) } pub struct CopilotCodeVerification { diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index adabcf0a8b..9c0e50647c 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -3811,10 +3811,6 @@ pub struct WindowHandle { #[allow(dead_code)] impl WindowHandle { - fn id(&self) -> usize { - self.any_handle.id() - } - fn new(window_id: usize, ref_counts: Arc>) -> Self { WindowHandle { any_handle: AnyWindowHandle::new::(window_id, ref_counts), @@ -3822,7 +3818,11 @@ impl WindowHandle { } } - fn root(&self, cx: &impl BorrowAppContext) -> ViewHandle { + pub fn id(&self) -> usize { + self.any_handle.id() + } + + pub fn root(&self, cx: &impl BorrowAppContext) -> ViewHandle { self.read_with(cx, |cx| cx.root_view().clone().downcast().unwrap()) } From 9e755bb85582f2cbe953492e9a14ce0a166f24c1 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 2 Aug 2023 12:15:39 -0700 Subject: [PATCH 112/120] Revert "Extract syntax highlighting properties from tree-sitter highlight queries (#2797)" This reverts commit 45c635872b5ef7bb8994e16d593aa25edf8e94bf, reversing changes made to f2b82369f27b79fdcaa6a4276bb047abddf7171c. --- crates/zed/src/languages/bash/highlights.scm | 2 +- crates/zed/src/languages/c/highlights.scm | 3 +- crates/zed/src/languages/c/injections.scm | 4 +- crates/zed/src/languages/cpp/highlights.scm | 4 +- crates/zed/src/languages/cpp/injections.scm | 4 +- crates/zed/src/languages/css/highlights.scm | 2 +- crates/zed/src/languages/elixir/embedding.scm | 6 +- .../zed/src/languages/elixir/highlights.scm | 18 +- .../zed/src/languages/elixir/injections.scm | 4 +- crates/zed/src/languages/elixir/outline.scm | 4 +- crates/zed/src/languages/elm/injections.scm | 2 +- crates/zed/src/languages/erb/injections.scm | 8 +- crates/zed/src/languages/glsl/highlights.scm | 4 +- crates/zed/src/languages/heex/injections.scm | 6 +- crates/zed/src/languages/html/injections.scm | 4 +- .../src/languages/javascript/highlights.scm | 6 +- crates/zed/src/languages/lua/highlights.scm | 10 +- crates/zed/src/languages/php/highlights.scm | 10 +- crates/zed/src/languages/php/injections.scm | 4 +- .../zed/src/languages/python/highlights.scm | 8 +- .../zed/src/languages/racket/highlights.scm | 7 +- crates/zed/src/languages/racket/outline.scm | 4 +- crates/zed/src/languages/ruby/brackets.scm | 2 +- crates/zed/src/languages/ruby/highlights.scm | 8 +- crates/zed/src/languages/rust/highlights.scm | 4 +- crates/zed/src/languages/rust/injections.scm | 4 +- .../zed/src/languages/scheme/highlights.scm | 4 +- crates/zed/src/languages/scheme/outline.scm | 4 +- .../zed/src/languages/svelte/injections.scm | 14 +- .../src/languages/typescript/highlights.scm | 10 +- styles/package.json | 1 - styles/src/build_themes.ts | 9 +- styles/src/build_tokens.ts | 4 +- styles/src/component/icon_button.ts | 5 +- styles/src/component/tab_bar_button.ts | 67 ++- styles/src/component/text_button.ts | 5 +- styles/src/style_tree/app.ts | 2 +- styles/src/style_tree/assistant.ts | 69 ++-- styles/src/style_tree/editor.ts | 32 +- styles/src/style_tree/feedback.ts | 2 +- styles/src/style_tree/picker.ts | 2 +- styles/src/style_tree/project_panel.ts | 16 +- styles/src/style_tree/status_bar.ts | 10 +- styles/src/style_tree/titlebar.ts | 4 +- styles/src/theme/create_theme.ts | 30 +- styles/src/theme/syntax.ts | 387 ++++++++++++++---- styles/src/theme/theme_config.ts | 6 +- styles/src/theme/tokens/theme.ts | 10 +- styles/src/themes/atelier/common.ts | 9 +- styles/src/themes/ayu/common.ts | 6 +- styles/src/themes/gruvbox/gruvbox-common.ts | 6 +- styles/src/themes/one/one-dark.ts | 4 +- styles/src/themes/one/one-light.ts | 2 + styles/src/themes/rose-pine/common.ts | 4 +- styles/src/types/extract_syntax_types.ts | 111 ----- styles/src/types/syntax.ts | 202 --------- styles/tsconfig.json | 4 +- 57 files changed, 553 insertions(+), 630 deletions(-) delete mode 100644 styles/src/types/extract_syntax_types.ts delete mode 100644 styles/src/types/syntax.ts diff --git a/crates/zed/src/languages/bash/highlights.scm b/crates/zed/src/languages/bash/highlights.scm index f3e0c9529a..a72c5468ed 100644 --- a/crates/zed/src/languages/bash/highlights.scm +++ b/crates/zed/src/languages/bash/highlights.scm @@ -54,5 +54,5 @@ ( (command (_) @constant) - (.match? @constant "^-") + (#match? @constant "^-") ) diff --git a/crates/zed/src/languages/c/highlights.scm b/crates/zed/src/languages/c/highlights.scm index 5245e53a05..064ec61a37 100644 --- a/crates/zed/src/languages/c/highlights.scm +++ b/crates/zed/src/languages/c/highlights.scm @@ -86,7 +86,7 @@ (identifier) @variable ((identifier) @constant - (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) (call_expression function: (identifier) @function) @@ -106,3 +106,4 @@ (primitive_type) (sized_type_specifier) ] @type + diff --git a/crates/zed/src/languages/c/injections.scm b/crates/zed/src/languages/c/injections.scm index fbc7d83f82..845a63bd1b 100644 --- a/crates/zed/src/languages/c/injections.scm +++ b/crates/zed/src/languages/c/injections.scm @@ -1,7 +1,7 @@ (preproc_def value: (preproc_arg) @content - (.set! "language" "c")) + (#set! "language" "c")) (preproc_function_def value: (preproc_arg) @content - (.set! "language" "c")) + (#set! "language" "c")) \ No newline at end of file diff --git a/crates/zed/src/languages/cpp/highlights.scm b/crates/zed/src/languages/cpp/highlights.scm index a040b1d053..bcfa01ca5c 100644 --- a/crates/zed/src/languages/cpp/highlights.scm +++ b/crates/zed/src/languages/cpp/highlights.scm @@ -31,13 +31,13 @@ declarator: (field_identifier) @function) ((namespace_identifier) @type - (.match? @type "^[A-Z]")) + (#match? @type "^[A-Z]")) (auto) @type (type_identifier) @type ((identifier) @constant - (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) (field_identifier) @property (statement_identifier) @label diff --git a/crates/zed/src/languages/cpp/injections.scm b/crates/zed/src/languages/cpp/injections.scm index 3c94ba4061..eca372d577 100644 --- a/crates/zed/src/languages/cpp/injections.scm +++ b/crates/zed/src/languages/cpp/injections.scm @@ -1,7 +1,7 @@ (preproc_def value: (preproc_arg) @content - (.set! "language" "c++")) + (#set! "language" "c++")) (preproc_function_def value: (preproc_arg) @content - (.set! "language" "c++")) + (#set! "language" "c++")) \ No newline at end of file diff --git a/crates/zed/src/languages/css/highlights.scm b/crates/zed/src/languages/css/highlights.scm index 83f99861c5..e271d8583c 100644 --- a/crates/zed/src/languages/css/highlights.scm +++ b/crates/zed/src/languages/css/highlights.scm @@ -46,7 +46,7 @@ (property_name) (plain_value) ] @variable.special - (.match? @variable.special "^--") + (#match? @variable.special "^--") ) [ diff --git a/crates/zed/src/languages/elixir/embedding.scm b/crates/zed/src/languages/elixir/embedding.scm index 3c523c2487..16ad20746d 100644 --- a/crates/zed/src/languages/elixir/embedding.scm +++ b/crates/zed/src/languages/elixir/embedding.scm @@ -3,7 +3,7 @@ operator: "@" operand: (call target: (identifier) @unary - (.match? @unary "^(doc)$")) + (#match? @unary "^(doc)$")) ) @context . (call @@ -18,10 +18,10 @@ target: (identifier) @name) operator: "when") ]) - (.match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + (#match? @name "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item ) (call target: (identifier) @name (arguments (alias) @name) - (.match? @name "^(defmodule|defprotocol)$")) @item + (#match? @name "^(defmodule|defprotocol)$")) @item diff --git a/crates/zed/src/languages/elixir/highlights.scm b/crates/zed/src/languages/elixir/highlights.scm index a8fd7eb45a..0e779d195c 100644 --- a/crates/zed/src/languages/elixir/highlights.scm +++ b/crates/zed/src/languages/elixir/highlights.scm @@ -54,13 +54,13 @@ (sigil_name) @__name__ quoted_start: _ @string quoted_end: _ @string - (.match? @__name__ "^[sS]$")) @string + (#match? @__name__ "^[sS]$")) @string (sigil (sigil_name) @__name__ quoted_start: _ @string.regex quoted_end: _ @string.regex - (.match? @__name__ "^[rR]$")) @string.regex + (#match? @__name__ "^[rR]$")) @string.regex (sigil (sigil_name) @__name__ @@ -69,7 +69,7 @@ ( (identifier) @comment.unused - (.match? @comment.unused "^_") + (#match? @comment.unused "^_") ) (call @@ -91,7 +91,7 @@ operator: "|>" right: (identifier)) ]) - (.match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) + (#match? @keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) (binary_operator operator: "|>" @@ -99,15 +99,15 @@ (call target: (identifier) @keyword - (.match? @keyword "^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$")) + (#match? @keyword "^(def|defdelegate|defexception|defguard|defguardp|defimpl|defmacro|defmacrop|defmodule|defn|defnp|defoverridable|defp|defprotocol|defstruct)$")) (call target: (identifier) @keyword - (.match? @keyword "^(alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) + (#match? @keyword "^(alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) ( (identifier) @constant.builtin - (.match? @constant.builtin "^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$") + (#match? @constant.builtin "^(__MODULE__|__DIR__|__ENV__|__CALLER__|__STACKTRACE__)$") ) (unary_operator @@ -121,7 +121,7 @@ (sigil) (boolean) ] @comment.doc)) - (.match? @__attribute__ "^(moduledoc|typedoc|doc)$")) + (#match? @__attribute__ "^(moduledoc|typedoc|doc)$")) (comment) @comment @@ -150,4 +150,4 @@ ((sigil (sigil_name) @_sigil_name (quoted_content) @embedded) - (.eq? @_sigil_name "H")) + (#eq? @_sigil_name "H")) diff --git a/crates/zed/src/languages/elixir/injections.scm b/crates/zed/src/languages/elixir/injections.scm index 5d445a7b82..4de229f104 100644 --- a/crates/zed/src/languages/elixir/injections.scm +++ b/crates/zed/src/languages/elixir/injections.scm @@ -3,5 +3,5 @@ ((sigil (sigil_name) @_sigil_name (quoted_content) @content) - (.eq? @_sigil_name "H") - (.set! language "heex")) + (#eq? @_sigil_name "H") + (#set! language "heex")) diff --git a/crates/zed/src/languages/elixir/outline.scm b/crates/zed/src/languages/elixir/outline.scm index 756d396510..a3311fb6d4 100644 --- a/crates/zed/src/languages/elixir/outline.scm +++ b/crates/zed/src/languages/elixir/outline.scm @@ -1,7 +1,7 @@ (call target: (identifier) @context (arguments (alias) @name) - (.match? @context "^(defmodule|defprotocol)$")) @item + (#match? @context "^(defmodule|defprotocol)$")) @item (call target: (identifier) @context @@ -23,4 +23,4 @@ ")" @context.extra)) operator: "when") ]) - (.match? @context "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item + (#match? @context "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item diff --git a/crates/zed/src/languages/elm/injections.scm b/crates/zed/src/languages/elm/injections.scm index 3456f59a04..0567320675 100644 --- a/crates/zed/src/languages/elm/injections.scm +++ b/crates/zed/src/languages/elm/injections.scm @@ -1,2 +1,2 @@ ((glsl_content) @content - (.set! "language" "glsl")) + (#set! "language" "glsl")) diff --git a/crates/zed/src/languages/erb/injections.scm b/crates/zed/src/languages/erb/injections.scm index d9801015b7..7a69a818ef 100644 --- a/crates/zed/src/languages/erb/injections.scm +++ b/crates/zed/src/languages/erb/injections.scm @@ -1,7 +1,7 @@ ((code) @content - (.set! "language" "ruby") - (.set! "combined")) + (#set! "language" "ruby") + (#set! "combined")) ((content) @content - (.set! "language" "html") - (.set! "combined")) + (#set! "language" "html") + (#set! "combined")) diff --git a/crates/zed/src/languages/glsl/highlights.scm b/crates/zed/src/languages/glsl/highlights.scm index 2378b8449b..e4503c6fbb 100644 --- a/crates/zed/src/languages/glsl/highlights.scm +++ b/crates/zed/src/languages/glsl/highlights.scm @@ -74,7 +74,7 @@ (sized_type_specifier) @type ((identifier) @constant - (.match? @constant "^[A-Z][A-Z\\d_]*$")) + (#match? @constant "^[A-Z][A-Z\\d_]*$")) (identifier) @variable @@ -114,5 +114,5 @@ ( (identifier) @variable.builtin - (.match? @variable.builtin "^gl_") + (#match? @variable.builtin "^gl_") ) diff --git a/crates/zed/src/languages/heex/injections.scm b/crates/zed/src/languages/heex/injections.scm index 1b63005cbf..b503bcb28d 100644 --- a/crates/zed/src/languages/heex/injections.scm +++ b/crates/zed/src/languages/heex/injections.scm @@ -5,9 +5,9 @@ (expression_value) (ending_expression_value) ] @content) - (.set! language "elixir") - (.set! combined) + (#set! language "elixir") + (#set! combined) ) ((expression (expression_value) @content) - (.set! language "elixir")) + (#set! language "elixir")) diff --git a/crates/zed/src/languages/html/injections.scm b/crates/zed/src/languages/html/injections.scm index 7d2ed0a225..9084e373f2 100644 --- a/crates/zed/src/languages/html/injections.scm +++ b/crates/zed/src/languages/html/injections.scm @@ -1,7 +1,7 @@ (script_element (raw_text) @content - (.set! "language" "javascript")) + (#set! "language" "javascript")) (style_element (raw_text) @content - (.set! "language" "css")) + (#set! "language" "css")) diff --git a/crates/zed/src/languages/javascript/highlights.scm b/crates/zed/src/languages/javascript/highlights.scm index 7761bbb3a2..36ab21ca1e 100644 --- a/crates/zed/src/languages/javascript/highlights.scm +++ b/crates/zed/src/languages/javascript/highlights.scm @@ -44,7 +44,7 @@ ; Special identifiers ((identifier) @type - (.match? @type "^[A-Z]")) + (#match? @type "^[A-Z]")) (type_identifier) @type (predefined_type) @type.builtin @@ -53,7 +53,7 @@ (shorthand_property_identifier) (shorthand_property_identifier_pattern) ] @constant -(.match? @constant "^_*[A-Z_][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z_][A-Z\\d_]*$")) ; Literals @@ -214,4 +214,4 @@ "type" "readonly" "override" -] @keyword +] @keyword \ No newline at end of file diff --git a/crates/zed/src/languages/lua/highlights.scm b/crates/zed/src/languages/lua/highlights.scm index e00d0b9557..f061bbf8f9 100644 --- a/crates/zed/src/languages/lua/highlights.scm +++ b/crates/zed/src/languages/lua/highlights.scm @@ -127,7 +127,7 @@ (identifier) @variable ((identifier) @variable.special - (.eq? @variable.special "self")) + (#eq? @variable.special "self")) (variable_list attribute: (attribute @@ -137,7 +137,7 @@ ;; Constants ((identifier) @constant - (.match? @constant "^[A-Z][A-Z_0-9]*$")) + (#match? @constant "^[A-Z][A-Z_0-9]*$")) (vararg_expression) @constant @@ -158,7 +158,7 @@ [ "{" "}" -] @method.constructor) +] @constructor) ;; Functions @@ -180,7 +180,7 @@ (function_call (identifier) @function.builtin - (.any-of? @function.builtin + (#any-of? @function.builtin ;; built-in functions in Lua 5.1 "assert" "collectgarbage" "dofile" "error" "getfenv" "getmetatable" "ipairs" "load" "loadfile" "loadstring" "module" "next" "pairs" "pcall" "print" @@ -195,4 +195,4 @@ (number) @number -(string) @string +(string) @string \ No newline at end of file diff --git a/crates/zed/src/languages/php/highlights.scm b/crates/zed/src/languages/php/highlights.scm index fb85d997fa..fcb087c47d 100644 --- a/crates/zed/src/languages/php/highlights.scm +++ b/crates/zed/src/languages/php/highlights.scm @@ -43,15 +43,15 @@ (relative_scope) @variable.builtin ((name) @constant - (.match? @constant "^_?[A-Z][A-Z\\d_]+$")) + (#match? @constant "^_?[A-Z][A-Z\\d_]+$")) ((name) @constant.builtin - (.match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) + (#match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) -((name) @method.constructor -(.match? @method.constructor "^[A-Z]")) +((name) @constructor + (#match? @constructor "^[A-Z]")) ((name) @variable.builtin - (.eq? @variable.builtin "this")) + (#eq? @variable.builtin "this")) (variable_name) @variable diff --git a/crates/zed/src/languages/php/injections.scm b/crates/zed/src/languages/php/injections.scm index 725729337b..57abd8ea2b 100644 --- a/crates/zed/src/languages/php/injections.scm +++ b/crates/zed/src/languages/php/injections.scm @@ -1,3 +1,3 @@ ((text) @content - (.set! "language" "html") - (.set! "combined")) + (#set! "language" "html") + (#set! "combined")) diff --git a/crates/zed/src/languages/python/highlights.scm b/crates/zed/src/languages/python/highlights.scm index b31bddaeb5..71ab963d82 100644 --- a/crates/zed/src/languages/python/highlights.scm +++ b/crates/zed/src/languages/python/highlights.scm @@ -18,16 +18,16 @@ ; Identifier naming conventions ((identifier) @type - (.match? @type "^[A-Z]")) + (#match? @type "^[A-Z]")) ((identifier) @constant - (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) ; Builtin functions ((call function: (identifier) @function.builtin) - (.match? + (#match? @function.builtin "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) @@ -122,4 +122,4 @@ "yield" "match" "case" -] @keyword +] @keyword \ No newline at end of file diff --git a/crates/zed/src/languages/racket/highlights.scm b/crates/zed/src/languages/racket/highlights.scm index 304b10a018..2c0caf8935 100644 --- a/crates/zed/src/languages/racket/highlights.scm +++ b/crates/zed/src/languages/racket/highlights.scm @@ -22,7 +22,7 @@ (lang_name) @variable.special ((symbol) @operator - (.match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) + (#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) (list . @@ -31,9 +31,10 @@ (list . (symbol) @keyword - (.match? @keyword + (#match? @keyword "^(unit-from-context|for/last|syntax-case|match-let\\*-values|define-for-syntax|define/subexpression-pos-prop|set-field!|class-field-accessor|invoke-unit|#%stratified-body|for\\*/and|for\\*/weak-set|flat-rec-contract|for\\*/stream|planet|for/mutable-seteqv|log-error|delay|#%declare|prop:dict/contract|->d|lib|override\\*|define-local-member-name|send-generic|for\\*/hasheq|define-syntax|submod|except|include-at/relative-to/reader|public\\*|define-member-name|define/public|let\\*|for/and|for\\*/first|for|delay/strict|define-values-for-export|==|match-define-values|for/weak-seteq|for\\*/async|for/stream|for/weak-seteqv|set!-values|lambda|for\\*/product|augment-final\\*|pubment\\*|command-line|contract|case|struct-field-index|contract-struct|unless|for/hasheq|for/seteqv|with-method|define-values-for-syntax|for-template|pubment|for\\*/list|syntax-case\\*|init-field|define-serializable-class|=>|for/foldr/derived|letrec-syntaxes|overment\\*|unquote-splicing|_|inherit-field|for\\*|stream-lazy|match-lambda\\*|contract-pos/neg-doubling|unit/c|match-define|for\\*/set|unit/s|nor|#%expression|class/c|this%|place/context|super-make-object|when|set!|parametric->/c|syntax-id-rules|include/reader|compound-unit|override-final|get-field|gen:dict|for\\*/seteqv|for\\*/hash|#%provide|combine-out|link|with-contract-continuation-mark|define-struct/derived|stream\\*|λ|rename-out|define-serializable-class\\*|augment|define/augment|let|define-signature-form|letrec-syntax|abstract|define-namespace-anchor|#%module-begin|#%top-interaction|for\\*/weak-seteqv|do|define/subexpression-pos-prop/name|absent|send/apply|with-handlers\\*|all-from-out|provide-signature-elements|gen:stream|define/override-final|for\\*/mutable-seteqv|rename|quasisyntax/loc|instantiate|for/list|extends|include-at/relative-to|mixin|define/pubment|#%plain-lambda|except-out|#%plain-module-begin|init|for\\*/last|relative-in|define-unit/new-import-export|->dm|member-name-key|nand|interface\\*|struct|define/override|else|define/augment-final|failure-cont|open|log-info|define/final-prop|all-defined-out|for/sum|for\\*/sum|recursive-contract|define|define-logger|match\\*|log-debug|rename-inner|->|struct/derived|unit|class\\*|prefix-out|any|define/overment|define-signature|match-letrec-values|let-syntaxes|for/mutable-set|define/match|cond|super-instantiate|define-contract-struct|import|hash/dc|define-custom-set-types|public-final|for/vector|for-label|prefix-in|for\\*/foldr/derived|define-unit-binding|object-contract|syntax-rules|augride|for\\*/mutable-seteq|quasisyntax|inner|for-syntax|overment|send/keyword-apply|generic|let\\*-values|->m|define-values|struct-copy|init-depend|struct/ctc|match-lambda|#%printing-module-begin|match\\*/derived|case->m|this|file|stream-cons|inspect|field|for/weak-set|struct\\*|gen:custom-write|thunk\\*|combine-in|unquote|for/lists|define/private|for\\*/foldr|define-unit/s|with-continuation-mark|begin|prefix|quote-syntax/prune|object/c|interface|match/derived|for/hasheqv|current-contract-region|define-compound-unit|override|define/public-final|recontract-out|let/cc|augride\\*|inherit|send|define-values/invoke-unit|for/mutable-seteq|#%datum|for/first|match-let\\*|invoke-unit/infer|define/contract|syntax/loc|for\\*/hasheqv|define-sequence-syntax|let/ec|for/product|for\\*/fold/derived|define-syntax-rule|lazy|unconstrained-domain->|augment-final|private|class|define-splicing-for-clause-syntax|for\\*/fold|prompt-tag/c|contract-out|match/values|public-final\\*|case-lambda|for/fold|unsyntax|for/set|begin0|#%require|time|public|define-struct|include|define-values/invoke-unit/infer|only-space-in|struct/c|only-meta-in|unit/new-import-export|place|begin-for-syntax|shared|inherit/super|quote|for/or|struct/contract|export|inherit/inner|struct-out|let-syntax|augment\\*|for\\*/vector|rename-in|match-let|define-unit|:do-in|~@|for\\*/weak-seteq|private\\*|and|except-in|log-fatal|gen:equal\\+hash|provide|require|thunk|invariant-assertion|define-match-expander|init-rest|->\\*|class/derived|super-new|for/fold/derived|for\\*/mutable-set|match-lambda\\*\\*|only|with-contract|~\\?|opt/c|let-values|delay/thread|->i|for/foldr|for-meta|only-in|send\\+|\\.\\.\\.|struct-guard/c|->\\*m|gen:set|struct/dc|define-syntaxes|if|parameterize|module\\*|module|send\\*|#%variable-reference|compound-unit/infer|#%plain-app|for/hash|contracted|case->|match|for\\*/lists|#%app|letrec-values|log-warning|super|define/augride|local-require|provide/contract|define-struct/contract|match-let-values|quote-syntax|for\\*/seteq|define-compound-unit/infer|parameterize\\*|values/drop|for/seteq|tag|stream|delay/idle|module\\+|define-custom-hash-types|cons/dc|define-module-boundary-contract|or|protect-out|define-opt/c|implies|letrec-syntaxes\\+values|for\\*/or|unsyntax-splicing|override-final\\*|for/async|parameterize-break|syntax|place\\*|for-space|quasiquote|with-handlers|delay/sync|define-unit-from-context|match-letrec|#%top|define-unit/contract|delay/name|new|field-bound\\?|letrec|class-field-mutator|with-syntax|flat-murec-contract|rename-super|local)$" )) ((symbol) @comment - (.match? @comment "^#[cC][iIsS]$")) + (#match? @comment "^#[cC][iIsS]$")) + diff --git a/crates/zed/src/languages/racket/outline.scm b/crates/zed/src/languages/racket/outline.scm index 188067078d..604e052a63 100644 --- a/crates/zed/src/languages/racket/outline.scm +++ b/crates/zed/src/languages/racket/outline.scm @@ -6,5 +6,5 @@ (symbol) @name (list . (symbol) @name) ] - (.match? @start-symbol "^define") -) @item + (#match? @start-symbol "^define") +) @item \ No newline at end of file diff --git a/crates/zed/src/languages/ruby/brackets.scm b/crates/zed/src/languages/ruby/brackets.scm index f5129f8f31..957b20ecdb 100644 --- a/crates/zed/src/languages/ruby/brackets.scm +++ b/crates/zed/src/languages/ruby/brackets.scm @@ -11,4 +11,4 @@ (begin "begin" @open "end" @close) (module "module" @open "end" @close) (_ . "def" @open "end" @close) -(_ . "class" @open "end" @close) +(_ . "class" @open "end" @close) \ No newline at end of file diff --git a/crates/zed/src/languages/ruby/highlights.scm b/crates/zed/src/languages/ruby/highlights.scm index 93cf2608f4..2610cfa1cc 100644 --- a/crates/zed/src/languages/ruby/highlights.scm +++ b/crates/zed/src/languages/ruby/highlights.scm @@ -33,12 +33,12 @@ (identifier) @variable ((identifier) @keyword - (.match? @keyword "^(private|protected|public)$")) + (#match? @keyword "^(private|protected|public)$")) ; Function calls ((identifier) @function.method.builtin - (.eq? @function.method.builtin "require")) + (#eq? @function.method.builtin "require")) "defined?" @function.method.builtin @@ -60,7 +60,7 @@ ] @property ((identifier) @constant.builtin - (.match? @constant.builtin "^__(FILE|LINE|ENCODING)__$")) + (#match? @constant.builtin "^__(FILE|LINE|ENCODING)__$")) (file) @constant.builtin (line) @constant.builtin @@ -71,7 +71,7 @@ ) @constant.builtin ((constant) @constant - (.match? @constant "^[A-Z\\d_]+$")) + (#match? @constant "^[A-Z\\d_]+$")) (constant) @type diff --git a/crates/zed/src/languages/rust/highlights.scm b/crates/zed/src/languages/rust/highlights.scm index 54dbfa00bd..7240173a89 100644 --- a/crates/zed/src/languages/rust/highlights.scm +++ b/crates/zed/src/languages/rust/highlights.scm @@ -38,11 +38,11 @@ ; Assume uppercase names are types/enum-constructors ((identifier) @type - (.match? @type "^[A-Z]")) + (#match? @type "^[A-Z]")) ; Assume all-caps names are constants ((identifier) @constant - (.match? @constant "^_*[A-Z][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) [ "(" diff --git a/crates/zed/src/languages/rust/injections.scm b/crates/zed/src/languages/rust/injections.scm index 78fde3752f..57ebea8539 100644 --- a/crates/zed/src/languages/rust/injections.scm +++ b/crates/zed/src/languages/rust/injections.scm @@ -1,7 +1,7 @@ (macro_invocation (token_tree) @content - (.set! "language" "rust")) + (#set! "language" "rust")) (macro_rule (token_tree) @content - (.set! "language" "rust")) + (#set! "language" "rust")) \ No newline at end of file diff --git a/crates/zed/src/languages/scheme/highlights.scm b/crates/zed/src/languages/scheme/highlights.scm index 201b0e9276..40ba61cd05 100644 --- a/crates/zed/src/languages/scheme/highlights.scm +++ b/crates/zed/src/languages/scheme/highlights.scm @@ -14,7 +14,7 @@ (directive)] @comment ((symbol) @operator - (.match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) + (#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) (list . @@ -23,6 +23,6 @@ (list . (symbol) @keyword - (.match? @keyword + (#match? @keyword "^(define-syntax|let\\*|lambda|λ|case|=>|quote-splicing|unquote-splicing|set!|let|letrec|letrec-syntax|let-values|let\\*-values|do|else|define|cond|syntax-rules|unquote|begin|quote|let-syntax|and|if|quasiquote|letrec|delay|or|when|unless|identifier-syntax|assert|library|export|import|rename|only|except|prefix)$" )) diff --git a/crates/zed/src/languages/scheme/outline.scm b/crates/zed/src/languages/scheme/outline.scm index 188067078d..604e052a63 100644 --- a/crates/zed/src/languages/scheme/outline.scm +++ b/crates/zed/src/languages/scheme/outline.scm @@ -6,5 +6,5 @@ (symbol) @name (list . (symbol) @name) ] - (.match? @start-symbol "^define") -) @item + (#match? @start-symbol "^define") +) @item \ No newline at end of file diff --git a/crates/zed/src/languages/svelte/injections.scm b/crates/zed/src/languages/svelte/injections.scm index 17719b325c..8c1ac9fcd0 100755 --- a/crates/zed/src/languages/svelte/injections.scm +++ b/crates/zed/src/languages/svelte/injections.scm @@ -2,27 +2,27 @@ ; -------------- (script_element (raw_text) @content - (.set! "language" "javascript")) + (#set! "language" "javascript")) ((script_element (start_tag (attribute (quoted_attribute_value (attribute_value) @_language))) (raw_text) @content) - (.eq? @_language "ts") - (.set! "language" "typescript")) + (#eq? @_language "ts") + (#set! "language" "typescript")) ((script_element (start_tag (attribute (quoted_attribute_value (attribute_value) @_language))) (raw_text) @content) - (.eq? @_language "typescript") - (.set! "language" "typescript")) + (#eq? @_language "typescript") + (#set! "language" "typescript")) (style_element (raw_text) @content - (.set! "language" "css")) + (#set! "language" "css")) ((raw_text_expr) @content - (.set! "language" "javascript")) + (#set! "language" "javascript")) diff --git a/crates/zed/src/languages/typescript/highlights.scm b/crates/zed/src/languages/typescript/highlights.scm index 9272108670..bf086ea156 100644 --- a/crates/zed/src/languages/typescript/highlights.scm +++ b/crates/zed/src/languages/typescript/highlights.scm @@ -43,11 +43,11 @@ ; Special identifiers -((identifier) @method.constructor - (.match? @method.constructor "^[A-Z]")) +((identifier) @constructor + (#match? @constructor "^[A-Z]")) ((identifier) @type - (.match? @type "^[A-Z]")) + (#match? @type "^[A-Z]")) (type_identifier) @type (predefined_type) @type.builtin @@ -56,7 +56,7 @@ (shorthand_property_identifier) (shorthand_property_identifier_pattern) ] @constant -(.match? @constant "^_*[A-Z_][A-Z\\d_]*$")) + (#match? @constant "^_*[A-Z_][A-Z\\d_]*$")) ; Literals @@ -218,4 +218,4 @@ "type" "readonly" "override" -] @keyword +] @keyword \ No newline at end of file diff --git a/styles/package.json b/styles/package.json index 3a50ac5371..16e95d90d5 100644 --- a/styles/package.json +++ b/styles/package.json @@ -8,7 +8,6 @@ "build-licenses": "ts-node ./src/build_licenses.ts", "build-tokens": "ts-node ./src/build_tokens.ts", "build-types": "ts-node ./src/build_types.ts", - "generate-syntax": "ts-node ./src/types/extract_syntax_types.ts", "test": "vitest" }, "author": "Zed Industries (https://github.com/zed-industries/)", diff --git a/styles/src/build_themes.ts b/styles/src/build_themes.ts index 4d262f8146..17575663a1 100644 --- a/styles/src/build_themes.ts +++ b/styles/src/build_themes.ts @@ -21,7 +21,9 @@ function clear_themes(theme_directory: string) { } } -const all_themes: Theme[] = themes.map((theme) => create_theme(theme)) +const all_themes: Theme[] = themes.map((theme) => + create_theme(theme) +) function write_themes(themes: Theme[], output_directory: string) { clear_themes(output_directory) @@ -32,7 +34,10 @@ function write_themes(themes: Theme[], output_directory: string) { const style_tree = app() const style_tree_json = JSON.stringify(style_tree, null, 2) const temp_path = path.join(temp_directory, `${theme.name}.json`) - const out_path = path.join(output_directory, `${theme.name}.json`) + const out_path = path.join( + output_directory, + `${theme.name}.json` + ) fs.writeFileSync(temp_path, style_tree_json) fs.renameSync(temp_path, out_path) console.log(`- ${out_path} created`) diff --git a/styles/src/build_tokens.ts b/styles/src/build_tokens.ts index 3c52b6d989..fd6aa18ced 100644 --- a/styles/src/build_tokens.ts +++ b/styles/src/build_tokens.ts @@ -83,6 +83,8 @@ function write_tokens(themes: Theme[], tokens_directory: string) { console.log(`- ${METADATA_FILE} created`) } -const all_themes: Theme[] = themes.map((theme) => create_theme(theme)) +const all_themes: Theme[] = themes.map((theme) => + create_theme(theme) +) write_tokens(all_themes, TOKENS_DIRECTORY) diff --git a/styles/src/component/icon_button.ts b/styles/src/component/icon_button.ts index 13dfce6d77..6887fc7c30 100644 --- a/styles/src/component/icon_button.ts +++ b/styles/src/component/icon_button.ts @@ -10,7 +10,10 @@ export type Margin = { } interface IconButtonOptions { - layer?: Theme["lowest"] | Theme["middle"] | Theme["highest"] + layer?: + | Theme["lowest"] + | Theme["middle"] + | Theme["highest"] color?: keyof Theme["lowest"] margin?: Partial } diff --git a/styles/src/component/tab_bar_button.ts b/styles/src/component/tab_bar_button.ts index 9e7f9acfc3..0c43e7010e 100644 --- a/styles/src/component/tab_bar_button.ts +++ b/styles/src/component/tab_bar_button.ts @@ -12,47 +12,44 @@ type TabBarButtonProps = TabBarButtonOptions & { state?: Partial>> } -export function tab_bar_button( - theme: Theme, - { icon, color = "base" }: TabBarButtonProps -) { +export function tab_bar_button(theme: Theme, { icon, color = "base" }: TabBarButtonProps) { const button_spacing = 8 - return interactive({ - base: { - icon: { - color: foreground(theme.middle, color), - asset: icon, - dimensions: { - width: 15, - height: 15, + return ( + interactive({ + base: { + icon: { + color: foreground(theme.middle, color), + asset: icon, + dimensions: { + width: 15, + height: 15, + }, }, - }, - container: { - corner_radius: 4, - padding: { - top: 4, - bottom: 4, - left: 4, - right: 4, - }, - margin: { - left: button_spacing / 2, - right: button_spacing / 2, - }, - }, - }, - state: { - hovered: { container: { - background: background(theme.middle, color, "hovered"), + corner_radius: 4, + padding: { + top: 4, bottom: 4, left: 4, right: 4 + }, + margin: { + left: button_spacing / 2, + right: button_spacing / 2, + }, }, }, - clicked: { - container: { - background: background(theme.middle, color, "pressed"), + state: { + hovered: { + container: { + background: background(theme.middle, color, "hovered"), + + } + }, + clicked: { + container: { + background: background(theme.middle, color, "pressed"), + } }, }, - }, - }) + }) + ) } diff --git a/styles/src/component/text_button.ts b/styles/src/component/text_button.ts index 68ec01c92b..58b2a1cbf2 100644 --- a/styles/src/component/text_button.ts +++ b/styles/src/component/text_button.ts @@ -9,7 +9,10 @@ import { useTheme, Theme } from "../theme" import { Margin } from "./icon_button" interface TextButtonOptions { - layer?: Theme["lowest"] | Theme["middle"] | Theme["highest"] + layer?: + | Theme["lowest"] + | Theme["middle"] + | Theme["highest"] color?: keyof Theme["lowest"] margin?: Partial text_properties?: TextProperties diff --git a/styles/src/style_tree/app.ts b/styles/src/style_tree/app.ts index ee0aa133a0..ccfdd60a98 100644 --- a/styles/src/style_tree/app.ts +++ b/styles/src/style_tree/app.ts @@ -57,6 +57,6 @@ export default function app(): any { tooltip: tooltip(), terminal: terminal(), assistant: assistant(), - feedback: feedback(), + feedback: feedback() } } diff --git a/styles/src/style_tree/assistant.ts b/styles/src/style_tree/assistant.ts index 7df5434f91..cfc1f8d813 100644 --- a/styles/src/style_tree/assistant.ts +++ b/styles/src/style_tree/assistant.ts @@ -8,48 +8,50 @@ type RoleCycleButton = TextStyle & { } // TODO: Replace these with zed types type RemainingTokens = TextStyle & { - background: string - margin: { top: number; right: number } + background: string, + margin: { top: number, right: number }, padding: { - right: number - left: number - top: number - bottom: number - } - corner_radius: number + right: number, + left: number, + top: number, + bottom: number, + }, + corner_radius: number, } export default function assistant(): any { const theme = useTheme() - const interactive_role = ( - color: StyleSets - ): Interactive => { - return interactive({ - base: { - ...text(theme.highest, "sans", color, { size: "sm" }), - }, - state: { - hovered: { + const interactive_role = (color: StyleSets): Interactive => { + return ( + interactive({ + base: { ...text(theme.highest, "sans", color, { size: "sm" }), - background: background(theme.highest, color, "hovered"), }, - clicked: { - ...text(theme.highest, "sans", color, { size: "sm" }), - background: background(theme.highest, color, "pressed"), + state: { + hovered: { + ...text(theme.highest, "sans", color, { size: "sm" }), + background: background(theme.highest, color, "hovered"), + }, + clicked: { + ...text(theme.highest, "sans", color, { size: "sm" }), + background: background(theme.highest, color, "pressed"), + } }, - }, - }) + }) + ) } const tokens_remaining = (color: StyleSets): RemainingTokens => { - return { - ...text(theme.highest, "mono", color, { size: "xs" }), - background: background(theme.highest, "on", "default"), - margin: { top: 12, right: 20 }, - padding: { right: 4, left: 4, top: 1, bottom: 1 }, - corner_radius: 6, - } + return ( + { + ...text(theme.highest, "mono", color, { size: "xs" }), + background: background(theme.highest, "on", "default"), + margin: { top: 12, right: 20 }, + padding: { right: 4, left: 4, top: 1, bottom: 1 }, + corner_radius: 6, + } + ) } return { @@ -91,10 +93,7 @@ export default function assistant(): any { base: { background: background(theme.middle), padding: { top: 4, bottom: 4 }, - border: border(theme.middle, "default", { - top: true, - overlay: true, - }), + border: border(theme.middle, "default", { top: true, overlay: true }), }, state: { hovered: { @@ -102,7 +101,7 @@ export default function assistant(): any { }, clicked: { background: background(theme.middle, "pressed"), - }, + } }, }), saved_at: { diff --git a/styles/src/style_tree/editor.ts b/styles/src/style_tree/editor.ts index deab45d4b2..9ad008f38d 100644 --- a/styles/src/style_tree/editor.ts +++ b/styles/src/style_tree/editor.ts @@ -9,9 +9,9 @@ import { } from "./components" import hover_popover from "./hover_popover" +import { build_syntax } from "../theme/syntax" import { interactive, toggleable } from "../element" import { useTheme } from "../theme" -import chroma from "chroma-js" export default function editor(): any { const theme = useTheme() @@ -48,28 +48,16 @@ export default function editor(): any { } } + const syntax = build_syntax() + return { - text_color: theme.syntax.primary.color, + text_color: syntax.primary.color, background: background(layer), active_line_background: with_opacity(background(layer, "on"), 0.75), highlighted_line_background: background(layer, "on"), // Inline autocomplete suggestions, Co-pilot suggestions, etc. - hint: chroma - .mix( - theme.ramps.neutral(0.6).hex(), - theme.ramps.blue(0.4).hex(), - 0.45, - "lch" - ) - .hex(), - suggestion: chroma - .mix( - theme.ramps.neutral(0.4).hex(), - theme.ramps.blue(0.4).hex(), - 0.45, - "lch" - ) - .hex(), + hint: syntax.hint, + suggestion: syntax.predictive, code_actions: { indicator: toggleable({ base: interactive({ @@ -267,8 +255,8 @@ export default function editor(): any { invalid_warning_diagnostic: diagnostic(theme.middle, "base"), hover_popover: hover_popover(), link_definition: { - color: theme.syntax.link_uri.color, - underline: theme.syntax.link_uri.underline, + color: syntax.link_uri.color, + underline: syntax.link_uri.underline, }, jump_icon: interactive({ base: { @@ -318,7 +306,7 @@ export default function editor(): any { ? with_opacity(theme.ramps.green(0.5).hex(), 0.8) : with_opacity(theme.ramps.green(0.4).hex(), 0.8), }, - selections: foreground(layer, "accent"), + selections: foreground(layer, "accent") }, composition_mark: { underline: { @@ -326,6 +314,6 @@ export default function editor(): any { color: border_color(layer), }, }, - syntax: theme.syntax, + syntax, } } diff --git a/styles/src/style_tree/feedback.ts b/styles/src/style_tree/feedback.ts index 0349359533..b1bd96e165 100644 --- a/styles/src/style_tree/feedback.ts +++ b/styles/src/style_tree/feedback.ts @@ -37,7 +37,7 @@ export default function feedback(): any { ...text(theme.highest, "mono", "on", "disabled"), background: background(theme.highest, "on", "disabled"), border: border(theme.highest, "on", "disabled"), - }, + } }, }), button_margin: 8, diff --git a/styles/src/style_tree/picker.ts b/styles/src/style_tree/picker.ts index 317f600b1e..28ae854787 100644 --- a/styles/src/style_tree/picker.ts +++ b/styles/src/style_tree/picker.ts @@ -152,7 +152,7 @@ export default function picker(): any { 0.5 ), }, - }, + } }), } } diff --git a/styles/src/style_tree/project_panel.ts b/styles/src/style_tree/project_panel.ts index 51958af145..e239f9a840 100644 --- a/styles/src/style_tree/project_panel.ts +++ b/styles/src/style_tree/project_panel.ts @@ -64,17 +64,17 @@ export default function project_panel(): any { const unselected_default_style = merge( base_properties, unselected?.default ?? {}, - {} + {}, ) const unselected_hovered_style = merge( base_properties, { background: background(theme.middle, "hovered") }, - unselected?.hovered ?? {} + unselected?.hovered ?? {}, ) const unselected_clicked_style = merge( base_properties, { background: background(theme.middle, "pressed") }, - unselected?.clicked ?? {} + unselected?.clicked ?? {}, ) const selected_default_style = merge( base_properties, @@ -82,7 +82,7 @@ export default function project_panel(): any { background: background(theme.lowest), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.default ?? {} + selected_style?.default ?? {}, ) const selected_hovered_style = merge( base_properties, @@ -90,7 +90,7 @@ export default function project_panel(): any { background: background(theme.lowest, "hovered"), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.hovered ?? {} + selected_style?.hovered ?? {}, ) const selected_clicked_style = merge( base_properties, @@ -98,7 +98,7 @@ export default function project_panel(): any { background: background(theme.lowest, "pressed"), text: text(theme.lowest, "sans", { size: "sm" }), }, - selected_style?.clicked ?? {} + selected_style?.clicked ?? {}, ) return toggleable({ @@ -175,7 +175,7 @@ export default function project_panel(): any { default: { icon_color: foreground(theme.middle, "variant"), }, - } + }, ), cut_entry: entry( { @@ -190,7 +190,7 @@ export default function project_panel(): any { size: "sm", }), }, - } + }, ), filename_editor: { background: background(theme.middle, "on"), diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 45baf4e871..6261939994 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -34,14 +34,10 @@ export default function status_bar(): any { ...text(layer, "mono", "variant", { size: "xs" }), }, active_language: text_button({ - color: "variant", - }), - auto_update_progress_message: text(layer, "sans", "variant", { - size: "xs", - }), - auto_update_done_message: text(layer, "sans", "variant", { - size: "xs", + color: "variant" }), + auto_update_progress_message: text(layer, "sans", "variant", { size: "xs" }), + auto_update_done_message: text(layer, "sans", "variant", { size: "xs" }), lsp_status: interactive({ base: { ...diagnostic_status_container, diff --git a/styles/src/style_tree/titlebar.ts b/styles/src/style_tree/titlebar.ts index fe0c53e87d..177a8c5bd8 100644 --- a/styles/src/style_tree/titlebar.ts +++ b/styles/src/style_tree/titlebar.ts @@ -183,10 +183,10 @@ export function titlebar(): any { project_name_divider: text(theme.lowest, "sans", "variant"), project_menu_button: toggleable_text_button(theme, { - color: "base", + color: 'base', }), git_menu_button: toggleable_text_button(theme, { - color: "variant", + color: 'variant', }), // Collaborators diff --git a/styles/src/theme/create_theme.ts b/styles/src/theme/create_theme.ts index 6df36d7077..d2701f8341 100644 --- a/styles/src/theme/create_theme.ts +++ b/styles/src/theme/create_theme.ts @@ -1,28 +1,28 @@ import { Scale, Color } from "chroma-js" +import { Syntax, ThemeSyntax, SyntaxHighlightStyle } from "./syntax" +export { Syntax, ThemeSyntax, SyntaxHighlightStyle } import { ThemeConfig, ThemeAppearance, ThemeConfigInputColors, } from "./theme_config" import { get_ramps } from "./ramps" -import { syntaxStyle } from "./syntax" -import { Syntax } from "../types/syntax" export interface Theme { name: string is_light: boolean /** - * App background, other elements that should sit directly on top of the background. - */ + * App background, other elements that should sit directly on top of the background. + */ lowest: Layer /** - * Panels, tabs, other UI surfaces that sit on top of the background. - */ + * Panels, tabs, other UI surfaces that sit on top of the background. + */ middle: Layer /** - * Editors like code buffers, conversation editors, etc. - */ + * Editors like code buffers, conversation editors, etc. + */ highest: Layer ramps: RampSet @@ -31,7 +31,7 @@ export interface Theme { modal_shadow: Shadow players: Players - syntax: Syntax + syntax?: Partial } export interface Meta { @@ -115,7 +115,12 @@ export interface Style { } export function create_theme(theme: ThemeConfig): Theme { - const { name, appearance, input_color } = theme + const { + name, + appearance, + input_color, + override: { syntax }, + } = theme const is_light = appearance === ThemeAppearance.Light const color_ramps: ThemeConfigInputColors = input_color @@ -157,11 +162,6 @@ export function create_theme(theme: ThemeConfig): Theme { "7": player(ramps.yellow), } - const syntax = syntaxStyle( - ramps, - theme.override.syntax ? theme.override.syntax : {} - ) - return { name, is_light, diff --git a/styles/src/theme/syntax.ts b/styles/src/theme/syntax.ts index db8f98de66..540a1d0ff9 100644 --- a/styles/src/theme/syntax.ts +++ b/styles/src/theme/syntax.ts @@ -1,45 +1,325 @@ import deepmerge from "deepmerge" -import { font_weights, ThemeConfigInputSyntax, RampSet } from "../common" -import { Syntax, SyntaxHighlightStyle, allSyntaxKeys } from "../types/syntax" +import { FontWeight, font_weights, useTheme } from "../common" +import chroma from "chroma-js" -// Apply defaults to any missing syntax properties that are not defined manually -function apply_defaults( - ramps: RampSet, - syntax_highlights: Partial -): Syntax { - const restKeys: (keyof Syntax)[] = allSyntaxKeys.filter( - (key) => !syntax_highlights[key] - ) +export interface SyntaxHighlightStyle { + color?: string + weight?: FontWeight + underline?: boolean + italic?: boolean +} - const completeSyntax: Syntax = {} as Syntax +export interface Syntax { + // == Text Styles ====== / + comment: SyntaxHighlightStyle + // elixir: doc comment + "comment.doc": SyntaxHighlightStyle + primary: SyntaxHighlightStyle + predictive: SyntaxHighlightStyle + hint: SyntaxHighlightStyle - const defaults: SyntaxHighlightStyle = { - color: ramps.neutral(1).hex(), - } + // === Formatted Text ====== / + emphasis: SyntaxHighlightStyle + "emphasis.strong": SyntaxHighlightStyle + title: SyntaxHighlightStyle + link_uri: SyntaxHighlightStyle + link_text: SyntaxHighlightStyle + /** md: indented_code_block, fenced_code_block, code_span */ + "text.literal": SyntaxHighlightStyle - for (const key of restKeys) { - { - completeSyntax[key] = { - ...defaults, - } + // == Punctuation ====== / + punctuation: SyntaxHighlightStyle + /** Example: `(`, `[`, `{`...*/ + "punctuation.bracket": SyntaxHighlightStyle + /**., ;*/ + "punctuation.delimiter": SyntaxHighlightStyle + // js, ts: ${, } in a template literal + // yaml: *, &, ---, ... + "punctuation.special": SyntaxHighlightStyle + // md: list_marker_plus, list_marker_dot, etc + "punctuation.list_marker": SyntaxHighlightStyle + + // == Strings ====== / + + string: SyntaxHighlightStyle + // css: color_value + // js: this, super + // toml: offset_date_time, local_date_time... + "string.special": SyntaxHighlightStyle + // elixir: atom, quoted_atom, keyword, quoted_keyword + // ruby: simple_symbol, delimited_symbol... + "string.special.symbol"?: SyntaxHighlightStyle + // elixir, python, yaml...: escape_sequence + "string.escape"?: SyntaxHighlightStyle + // Regular expressions + "string.regex"?: SyntaxHighlightStyle + + // == Types ====== / + // We allow Function here because all JS objects literals have this property + constructor: SyntaxHighlightStyle | Function // eslint-disable-line @typescript-eslint/ban-types + variant: SyntaxHighlightStyle + type: SyntaxHighlightStyle + // js: predefined_type + "type.builtin"?: SyntaxHighlightStyle + + // == Values + variable: SyntaxHighlightStyle + // this, ... + // css: -- (var(--foo)) + // lua: self + "variable.special"?: SyntaxHighlightStyle + // c: statement_identifier, + label: SyntaxHighlightStyle + // css: tag_name, nesting_selector, universal_selector... + tag: SyntaxHighlightStyle + // css: attribute, pseudo_element_selector (tag_name), + attribute: SyntaxHighlightStyle + // css: class_name, property_name, namespace_name... + property: SyntaxHighlightStyle + // true, false, null, nullptr + constant: SyntaxHighlightStyle + // css: @media, @import, @supports... + // js: declare, implements, interface, keyof, public... + keyword: SyntaxHighlightStyle + // note: js enum is currently defined as a keyword + enum: SyntaxHighlightStyle + // -, --, ->, !=, &&, ||, <=... + operator: SyntaxHighlightStyle + number: SyntaxHighlightStyle + boolean: SyntaxHighlightStyle + // elixir: __MODULE__, __DIR__, __ENV__, etc + // go: nil, iota + "constant.builtin"?: SyntaxHighlightStyle + + // == Functions ====== / + + function: SyntaxHighlightStyle + // lua: assert, error, loadfile, tostring, unpack... + "function.builtin"?: SyntaxHighlightStyle + // go: call_expression, method_declaration + // js: call_expression, method_definition, pair (key, arrow function) + // rust: function_item name: (identifier) + "function.definition"?: SyntaxHighlightStyle + // rust: macro_definition name: (identifier) + "function.special.definition"?: SyntaxHighlightStyle + "function.method"?: SyntaxHighlightStyle + // ruby: identifier/"defined?" // Nate note: I don't fully understand this one. + "function.method.builtin"?: SyntaxHighlightStyle + + // == Unsorted ====== / + // lua: hash_bang_line + preproc: SyntaxHighlightStyle + // elixir, python: interpolation (ex: foo in ${foo}) + // js: template_substitution + embedded: SyntaxHighlightStyle +} + +export type ThemeSyntax = Partial + +const default_syntax_highlight_style: Omit = { + weight: "normal", + underline: false, + italic: false, +} + +function build_default_syntax(): Syntax { + const theme = useTheme() + + // Make a temporary object that is allowed to be missing + // the "color" property for each style + const syntax: { + [key: string]: Omit + } = {} + + // then spread the default to each style + for (const key of Object.keys({} as Syntax)) { + syntax[key as keyof Syntax] = { + ...default_syntax_highlight_style, } } - const mergedBaseSyntax = Object.assign(completeSyntax, syntax_highlights) + // Mix the neutral and blue colors to get a + // predictive color distinct from any other color in the theme + const predictive = chroma + .mix( + theme.ramps.neutral(0.4).hex(), + theme.ramps.blue(0.4).hex(), + 0.45, + "lch" + ) + .hex() + // Mix the neutral and green colors to get a + // hint color distinct from any other color in the theme + const hint = chroma + .mix( + theme.ramps.neutral(0.6).hex(), + theme.ramps.blue(0.4).hex(), + 0.45, + "lch" + ) + .hex() - return mergedBaseSyntax + const color = { + primary: theme.ramps.neutral(1).hex(), + comment: theme.ramps.neutral(0.71).hex(), + punctuation: theme.ramps.neutral(0.86).hex(), + predictive: predictive, + hint: hint, + emphasis: theme.ramps.blue(0.5).hex(), + string: theme.ramps.orange(0.5).hex(), + function: theme.ramps.yellow(0.5).hex(), + type: theme.ramps.cyan(0.5).hex(), + constructor: theme.ramps.blue(0.5).hex(), + variant: theme.ramps.blue(0.5).hex(), + property: theme.ramps.blue(0.5).hex(), + enum: theme.ramps.orange(0.5).hex(), + operator: theme.ramps.orange(0.5).hex(), + number: theme.ramps.green(0.5).hex(), + boolean: theme.ramps.green(0.5).hex(), + constant: theme.ramps.green(0.5).hex(), + keyword: theme.ramps.blue(0.5).hex(), + } + + // Then assign colors and use Syntax to enforce each style getting it's own color + const default_syntax: Syntax = { + ...syntax, + comment: { + color: color.comment, + }, + "comment.doc": { + color: color.comment, + }, + primary: { + color: color.primary, + }, + predictive: { + color: color.predictive, + italic: true, + }, + hint: { + color: color.hint, + weight: font_weights.bold, + }, + emphasis: { + color: color.emphasis, + }, + "emphasis.strong": { + color: color.emphasis, + weight: font_weights.bold, + }, + title: { + color: color.primary, + weight: font_weights.bold, + }, + link_uri: { + color: theme.ramps.green(0.5).hex(), + underline: true, + }, + link_text: { + color: theme.ramps.orange(0.5).hex(), + italic: true, + }, + "text.literal": { + color: color.string, + }, + punctuation: { + color: color.punctuation, + }, + "punctuation.bracket": { + color: color.punctuation, + }, + "punctuation.delimiter": { + color: color.punctuation, + }, + "punctuation.special": { + color: theme.ramps.neutral(0.86).hex(), + }, + "punctuation.list_marker": { + color: color.punctuation, + }, + string: { + color: color.string, + }, + "string.special": { + color: color.string, + }, + "string.special.symbol": { + color: color.string, + }, + "string.escape": { + color: color.comment, + }, + "string.regex": { + color: color.string, + }, + constructor: { + color: theme.ramps.blue(0.5).hex(), + }, + variant: { + color: theme.ramps.blue(0.5).hex(), + }, + type: { + color: color.type, + }, + variable: { + color: color.primary, + }, + label: { + color: theme.ramps.blue(0.5).hex(), + }, + tag: { + color: theme.ramps.blue(0.5).hex(), + }, + attribute: { + color: theme.ramps.blue(0.5).hex(), + }, + property: { + color: theme.ramps.blue(0.5).hex(), + }, + constant: { + color: color.constant, + }, + keyword: { + color: color.keyword, + }, + enum: { + color: color.enum, + }, + operator: { + color: color.operator, + }, + number: { + color: color.number, + }, + boolean: { + color: color.boolean, + }, + function: { + color: color.function, + }, + preproc: { + color: color.primary, + }, + embedded: { + color: color.primary, + }, + } + + return default_syntax } -// Merge the base syntax with the theme syntax overrides -// This is a deep merge, so any nested properties will be merged as well -// This allows for a theme to only override a single property of a syntax highlight style -const merge_syntax = ( - baseSyntax: Syntax, - theme_syntax_overrides: ThemeConfigInputSyntax -): Syntax => { - return deepmerge( - baseSyntax, - theme_syntax_overrides, +export function build_syntax(): Syntax { + const theme = useTheme() + + const default_syntax: Syntax = build_default_syntax() + + if (!theme.syntax) { + return default_syntax + } + + const syntax = deepmerge>( + default_syntax, + theme.syntax, { arrayMerge: (destinationArray, sourceArray) => [ ...destinationArray, @@ -47,49 +327,6 @@ const merge_syntax = ( ], } ) -} -/** Returns a complete Syntax object of the combined styles of a theme's syntax overrides and the default syntax styles */ -export const syntaxStyle = ( - ramps: RampSet, - theme_syntax_overrides: ThemeConfigInputSyntax -): Syntax => { - const syntax_highlights: Partial = { - comment: { color: ramps.neutral(0.71).hex() }, - "comment.doc": { color: ramps.neutral(0.71).hex() }, - primary: { color: ramps.neutral(1).hex() }, - emphasis: { color: ramps.blue(0.5).hex() }, - "emphasis.strong": { - color: ramps.blue(0.5).hex(), - weight: font_weights.bold, - }, - link_uri: { color: ramps.green(0.5).hex(), underline: true }, - link_text: { color: ramps.orange(0.5).hex(), italic: true }, - "text.literal": { color: ramps.orange(0.5).hex() }, - punctuation: { color: ramps.neutral(0.86).hex() }, - "punctuation.bracket": { color: ramps.neutral(0.86).hex() }, - "punctuation.special": { color: ramps.neutral(0.86).hex() }, - "punctuation.delimiter": { color: ramps.neutral(0.86).hex() }, - "punctuation.list_marker": { color: ramps.neutral(0.86).hex() }, - string: { color: ramps.orange(0.5).hex() }, - "string.special": { color: ramps.orange(0.5).hex() }, - "string.special.symbol": { color: ramps.orange(0.5).hex() }, - "string.escape": { color: ramps.neutral(0.71).hex() }, - "string.regex": { color: ramps.orange(0.5).hex() }, - "method.constructor": { color: ramps.blue(0.5).hex() }, - type: { color: ramps.cyan(0.5).hex() }, - label: { color: ramps.blue(0.5).hex() }, - attribute: { color: ramps.blue(0.5).hex() }, - property: { color: ramps.blue(0.5).hex() }, - constant: { color: ramps.green(0.5).hex() }, - keyword: { color: ramps.blue(0.5).hex() }, - operator: { color: ramps.orange(0.5).hex() }, - number: { color: ramps.green(0.5).hex() }, - boolean: { color: ramps.green(0.5).hex() }, - function: { color: ramps.yellow(0.5).hex() }, - } - - const baseSyntax = apply_defaults(ramps, syntax_highlights) - const mergedSyntax = merge_syntax(baseSyntax, theme_syntax_overrides) - return mergedSyntax + return syntax } diff --git a/styles/src/theme/theme_config.ts b/styles/src/theme/theme_config.ts index f5f8359074..bc8f07425f 100644 --- a/styles/src/theme/theme_config.ts +++ b/styles/src/theme/theme_config.ts @@ -1,5 +1,5 @@ import { Scale, Color } from "chroma-js" -import { SyntaxHighlightStyle, SyntaxProperty } from "../types/syntax" +import { Syntax } from "./syntax" interface ThemeMeta { /** The name of the theme */ @@ -55,9 +55,7 @@ export type ThemeConfigInputColorsKeys = keyof ThemeConfigInputColors * } * ``` */ -export type ThemeConfigInputSyntax = Partial< - Record> -> +export type ThemeConfigInputSyntax = Partial interface ThemeConfigOverrides { syntax: ThemeConfigInputSyntax diff --git a/styles/src/theme/tokens/theme.ts b/styles/src/theme/tokens/theme.ts index d930793669..f759bc8139 100644 --- a/styles/src/theme/tokens/theme.ts +++ b/styles/src/theme/tokens/theme.ts @@ -4,13 +4,17 @@ import { SingleOtherToken, TokenTypes, } from "@tokens-studio/types" -import { Shadow } from "../create_theme" +import { + Shadow, + SyntaxHighlightStyle, + ThemeSyntax, +} from "../create_theme" import { LayerToken, layer_token } from "./layer" import { PlayersToken, players_token } from "./players" import { color_token } from "./token" +import { Syntax } from "../syntax" import editor from "../../style_tree/editor" import { useTheme } from "../../../src/common" -import { Syntax, SyntaxHighlightStyle } from "../../types/syntax" interface ThemeTokens { name: SingleOtherToken @@ -47,7 +51,7 @@ const modal_shadow_token = (): SingleBoxShadowToken => { return create_shadow_token(shadow, "modal_shadow") } -type ThemeSyntaxColorTokens = Record +type ThemeSyntaxColorTokens = Record function syntax_highlight_style_color_tokens( syntax: Syntax diff --git a/styles/src/themes/atelier/common.ts b/styles/src/themes/atelier/common.ts index 9a0029581c..b76ccc5b60 100644 --- a/styles/src/themes/atelier/common.ts +++ b/styles/src/themes/atelier/common.ts @@ -1,8 +1,4 @@ -import { - ThemeLicenseType, - ThemeFamilyMeta, - ThemeConfigInputSyntax, -} from "../../common" +import { ThemeLicenseType, ThemeSyntax, ThemeFamilyMeta } from "../../common" export interface Variant { colors: { @@ -33,7 +29,7 @@ export const meta: ThemeFamilyMeta = { "https://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave/", } -export const build_syntax = (variant: Variant): ThemeConfigInputSyntax => { +export const build_syntax = (variant: Variant): ThemeSyntax => { const { colors } = variant return { primary: { color: colors.base06 }, @@ -54,6 +50,7 @@ export const build_syntax = (variant: Variant): ThemeConfigInputSyntax => { property: { color: colors.base08 }, variable: { color: colors.base06 }, "variable.special": { color: colors.base0E }, + variant: { color: colors.base0A }, keyword: { color: colors.base0E }, } } diff --git a/styles/src/themes/ayu/common.ts b/styles/src/themes/ayu/common.ts index 8704455886..2bd0bbf259 100644 --- a/styles/src/themes/ayu/common.ts +++ b/styles/src/themes/ayu/common.ts @@ -3,8 +3,8 @@ import { chroma, color_ramp, ThemeLicenseType, + ThemeSyntax, ThemeFamilyMeta, - ThemeConfigInputSyntax, } from "../../common" export const ayu = { @@ -27,7 +27,7 @@ export const build_theme = (t: typeof dark, light: boolean) => { purple: t.syntax.constant.hex(), } - const syntax: ThemeConfigInputSyntax = { + const syntax: ThemeSyntax = { constant: { color: t.syntax.constant.hex() }, "string.regex": { color: t.syntax.regexp.hex() }, string: { color: t.syntax.string.hex() }, @@ -61,7 +61,7 @@ export const build_theme = (t: typeof dark, light: boolean) => { } } -export const build_syntax = (t: typeof dark): ThemeConfigInputSyntax => { +export const build_syntax = (t: typeof dark): ThemeSyntax => { return { constant: { color: t.syntax.constant.hex() }, "string.regex": { color: t.syntax.regexp.hex() }, diff --git a/styles/src/themes/gruvbox/gruvbox-common.ts b/styles/src/themes/gruvbox/gruvbox-common.ts index 95e45efa95..2fa6b58faa 100644 --- a/styles/src/themes/gruvbox/gruvbox-common.ts +++ b/styles/src/themes/gruvbox/gruvbox-common.ts @@ -4,8 +4,8 @@ import { ThemeAppearance, ThemeLicenseType, ThemeConfig, + ThemeSyntax, ThemeFamilyMeta, - ThemeConfigInputSyntax, } from "../../common" const meta: ThemeFamilyMeta = { @@ -214,7 +214,7 @@ const build_variant = (variant: Variant): ThemeConfig => { magenta: color_ramp(chroma(variant.colors.gray)), } - const syntax: ThemeConfigInputSyntax = { + const syntax: ThemeSyntax = { primary: { color: neutral[is_light ? 0 : 8] }, "text.literal": { color: colors.blue }, comment: { color: colors.gray }, @@ -229,7 +229,7 @@ const build_variant = (variant: Variant): ThemeConfig => { "string.special.symbol": { color: colors.aqua }, "string.regex": { color: colors.orange }, type: { color: colors.yellow }, - // enum: { color: colors.orange }, + enum: { color: colors.orange }, tag: { color: colors.aqua }, constant: { color: colors.yellow }, keyword: { color: colors.red }, diff --git a/styles/src/themes/one/one-dark.ts b/styles/src/themes/one/one-dark.ts index 97f3922f36..f672b892ee 100644 --- a/styles/src/themes/one/one-dark.ts +++ b/styles/src/themes/one/one-dark.ts @@ -54,6 +54,7 @@ export const theme: ThemeConfig = { syntax: { boolean: { color: color.orange }, comment: { color: color.grey }, + enum: { color: color.red }, "emphasis.strong": { color: color.orange }, function: { color: color.blue }, keyword: { color: color.purple }, @@ -72,7 +73,8 @@ export const theme: ThemeConfig = { "text.literal": { color: color.green }, type: { color: color.teal }, "variable.special": { color: color.orange }, - "method.constructor": { color: color.blue }, + variant: { color: color.blue }, + constructor: { color: color.blue }, }, }, } diff --git a/styles/src/themes/one/one-light.ts b/styles/src/themes/one/one-light.ts index 6554287578..c3de7826c9 100644 --- a/styles/src/themes/one/one-light.ts +++ b/styles/src/themes/one/one-light.ts @@ -55,6 +55,7 @@ export const theme: ThemeConfig = { syntax: { boolean: { color: color.orange }, comment: { color: color.grey }, + enum: { color: color.red }, "emphasis.strong": { color: color.orange }, function: { color: color.blue }, keyword: { color: color.purple }, @@ -72,6 +73,7 @@ export const theme: ThemeConfig = { "text.literal": { color: color.green }, type: { color: color.teal }, "variable.special": { color: color.orange }, + variant: { color: color.blue }, }, }, } diff --git a/styles/src/themes/rose-pine/common.ts b/styles/src/themes/rose-pine/common.ts index decccc0a6d..5c5482a754 100644 --- a/styles/src/themes/rose-pine/common.ts +++ b/styles/src/themes/rose-pine/common.ts @@ -1,4 +1,4 @@ -import { ThemeConfigInputSyntax } from "../../common" +import { ThemeSyntax } from "../../common" export const color = { default: { @@ -54,7 +54,7 @@ export const color = { }, } -export const syntax = (c: typeof color.default): ThemeConfigInputSyntax => { +export const syntax = (c: typeof color.default): Partial => { return { comment: { color: c.muted }, operator: { color: c.pine }, diff --git a/styles/src/types/extract_syntax_types.ts b/styles/src/types/extract_syntax_types.ts deleted file mode 100644 index eb21d2418b..0000000000 --- a/styles/src/types/extract_syntax_types.ts +++ /dev/null @@ -1,111 +0,0 @@ -import fs from "fs" -import path from "path" -import readline from "readline" - -function escapeTypeName(name: string): string { - return `'${name.replace("@", "").toLowerCase()}'` -} - -const generatedNote = `// This file is generated by extract_syntax_types.ts -// Do not edit this file directly -// It is generated from the highlight.scm files in the zed crate - -// To regenerate this file manually: -// 'npm run extract-syntax-types' from ./styles` - -const defaultTextProperty = ` /** Default text color */ - | 'primary'` - -const main = async () => { - const pathFromRoot = "crates/zed/src/languages" - const directoryPath = path.join(__dirname, "../../../", pathFromRoot) - const stylesMap: Record> = {} - const propertyLanguageMap: Record> = {} - - const processFile = async (filePath: string, language: string) => { - const fileStream = fs.createReadStream(filePath) - const rl = readline.createInterface({ - input: fileStream, - crlfDelay: Infinity, - }) - - for await (const line of rl) { - const cleanedLine = line.replace(/"@[a-zA-Z0-9_.]*"/g, "") - const match = cleanedLine.match(/@(\w+\.*)*/g) - if (match) { - match.forEach((property) => { - const formattedProperty = escapeTypeName(property) - // Only add non-empty properties - if (formattedProperty !== "''") { - if (!propertyLanguageMap[formattedProperty]) { - propertyLanguageMap[formattedProperty] = new Set() - } - propertyLanguageMap[formattedProperty].add(language) - } - }) - } - } - } - - const directories = fs - .readdirSync(directoryPath, { withFileTypes: true }) - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => dirent.name) - - for (const dir of directories) { - const highlightsFilePath = path.join( - directoryPath, - dir, - "highlights.scm" - ) - if (fs.existsSync(highlightsFilePath)) { - await processFile(highlightsFilePath, dir) - } - } - - for (const [language, properties] of Object.entries(stylesMap)) { - console.log(`${language}: ${Array.from(properties).join(", ")}`) - } - - const sortedProperties = Object.entries(propertyLanguageMap).sort( - ([propA], [propB]) => propA.localeCompare(propB) - ) - - const outStream = fs.createWriteStream(path.join(__dirname, "syntax.ts")) - let allProperties = "" - const syntaxKeys = [] - for (const [property, languages] of sortedProperties) { - let languagesArray = Array.from(languages) - const moreThanSeven = languagesArray.length > 7 - // Limit to the first 7 languages, append "..." if more than 7 - languagesArray = languagesArray.slice(0, 7) - if (moreThanSeven) { - languagesArray.push("...") - } - const languagesString = languagesArray.join(", ") - const comment = `/** ${languagesString} */` - allProperties += ` ${comment}\n | ${property} \n` - syntaxKeys.push(property) - } - outStream.write(`${generatedNote} - -export type SyntaxHighlightStyle = { - color: string, - fade_out?: number, - italic?: boolean, - underline?: boolean, - weight?: string, -} - -export type Syntax = Record -export type SyntaxOverride = Partial - -export type SyntaxProperty = \n${defaultTextProperty}\n\n${allProperties} - -export const allSyntaxKeys: SyntaxProperty[] = [\n ${syntaxKeys.join( - ",\n " - )}\n]`) - outStream.end() -} - -main().catch(console.error) diff --git a/styles/src/types/syntax.ts b/styles/src/types/syntax.ts deleted file mode 100644 index 9b23dbde3c..0000000000 --- a/styles/src/types/syntax.ts +++ /dev/null @@ -1,202 +0,0 @@ -// This file is generated by extract_syntax_types.ts -// Do not edit this file directly -// It is generated from the highlight.scm files in the zed crate - -// To regenerate this file manually: -// 'npm run extract-syntax-types' from ./styles - -export type SyntaxHighlightStyle = { - color: string - fade_out?: number - italic?: boolean - underline?: boolean - weight?: string -} - -export type Syntax = Record -export type SyntaxOverride = Partial - -export type SyntaxProperty = - /** Default text color */ - | "primary" - - /** elixir */ - | "__attribute__" - /** elixir */ - | "__name__" - /** elixir */ - | "_sigil_name" - /** css, heex, lua */ - | "attribute" - /** javascript, lua, tsx, typescript, yaml */ - | "boolean" - /** elixir */ - | "comment.doc" - /** elixir */ - | "comment.unused" - /** bash, c, cpp, css, elixir, elm, erb, ... */ - | "comment" - /** elixir, go, javascript, lua, php, python, racket, ... */ - | "constant.builtin" - /** bash, c, cpp, elixir, elm, glsl, heex, ... */ - | "constant" - /** glsl */ - | "delimiter" - /** bash, elixir, javascript, python, ruby, tsx, typescript */ - | "embedded" - /** markdown */ - | "emphasis.strong" - /** markdown */ - | "emphasis" - /** go, python, racket, ruby, scheme */ - | "escape" - /** lua */ - | "field" - /** lua, php, python */ - | "function.builtin" - /** elm, lua, rust */ - | "function.definition" - /** ruby */ - | "function.method.builtin" - /** go, javascript, php, python, ruby, rust, tsx, ... */ - | "function.method" - /** rust */ - | "function.special.definition" - /** c, cpp, glsl, rust */ - | "function.special" - /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | "function" - /** elm */ - | "identifier" - /** glsl */ - | "keyword.function" - /** bash, c, cpp, css, elixir, elm, erb, ... */ - | "keyword" - /** c, cpp, glsl */ - | "label" - /** markdown */ - | "link_text" - /** markdown */ - | "link_uri" - /** lua, php, tsx, typescript */ - | "method.constructor" - /** lua */ - | "method" - /** heex */ - | "module" - /** svelte */ - | "none" - /** bash, c, cpp, css, elixir, glsl, go, ... */ - | "number" - /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | "operator" - /** lua */ - | "parameter" - /** lua */ - | "preproc" - /** bash, c, cpp, css, glsl, go, html, ... */ - | "property" - /** c, cpp, elixir, elm, heex, html, javascript, ... */ - | "punctuation.bracket" - /** c, cpp, css, elixir, elm, heex, javascript, ... */ - | "punctuation.delimiter" - /** markdown */ - | "punctuation.list_marker" - /** elixir, javascript, python, ruby, tsx, typescript, yaml */ - | "punctuation.special" - /** elixir */ - | "punctuation" - /** glsl */ - | "storageclass" - /** elixir, elm, yaml */ - | "string.escape" - /** elixir, javascript, racket, ruby, tsx, typescript */ - | "string.regex" - /** elixir, ruby */ - | "string.special.symbol" - /** css, elixir, toml */ - | "string.special" - /** bash, c, cpp, css, elixir, elm, glsl, ... */ - | "string" - /** svelte */ - | "tag.delimiter" - /** css, heex, php, svelte */ - | "tag" - /** markdown */ - | "text.literal" - /** markdown */ - | "title" - /** javascript, php, rust, tsx, typescript */ - | "type.builtin" - /** glsl */ - | "type.qualifier" - /** c, cpp, css, elixir, elm, glsl, go, ... */ - | "type" - /** glsl, php */ - | "variable.builtin" - /** cpp, css, javascript, lua, racket, ruby, rust, ... */ - | "variable.special" - /** c, cpp, elm, glsl, go, javascript, lua, ... */ - | "variable" - -export const allSyntaxKeys: SyntaxProperty[] = [ - "__attribute__", - "__name__", - "_sigil_name", - "attribute", - "boolean", - "comment.doc", - "comment.unused", - "comment", - "constant.builtin", - "constant", - "delimiter", - "embedded", - "emphasis.strong", - "emphasis", - "escape", - "field", - "function.builtin", - "function.definition", - "function.method.builtin", - "function.method", - "function.special.definition", - "function.special", - "function", - "identifier", - "keyword.function", - "keyword", - "label", - "link_text", - "link_uri", - "method.constructor", - "method", - "module", - "none", - "number", - "operator", - "parameter", - "preproc", - "property", - "punctuation.bracket", - "punctuation.delimiter", - "punctuation.list_marker", - "punctuation.special", - "punctuation", - "storageclass", - "string.escape", - "string.regex", - "string.special.symbol", - "string.special", - "string", - "tag.delimiter", - "tag", - "text.literal", - "title", - "type.builtin", - "type.qualifier", - "type", - "variable.builtin", - "variable.special", - "variable", -] diff --git a/styles/tsconfig.json b/styles/tsconfig.json index a1913027b7..281bd74b21 100644 --- a/styles/tsconfig.json +++ b/styles/tsconfig.json @@ -24,5 +24,7 @@ "useUnknownInCatchVariables": false, "baseUrl": "." }, - "exclude": ["node_modules"] + "exclude": [ + "node_modules" + ] } From 884cee6dfda9f4b887976cb14f87e82ac6b87fc0 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 2 Aug 2023 14:05:03 -0600 Subject: [PATCH 113/120] Get tests compiling returning WindowHandle from add_window --- crates/collab/src/tests.rs | 5 +- crates/collab/src/tests/integration_tests.rs | 52 +- .../src/incoming_call_notification.rs | 4 +- .../src/project_shared_notification.rs | 4 +- crates/command_palette/src/command_palette.rs | 4 +- crates/copilot/src/sign_in.rs | 8 +- crates/diagnostics/src/diagnostics.rs | 8 +- crates/editor/src/editor_tests.rs | 627 ++++++++++-------- crates/editor/src/element.rs | 30 +- crates/editor/src/inlay_hint_cache.rs | 30 +- .../src/test/editor_lsp_test_context.rs | 5 +- crates/editor/src/test/editor_test_context.rs | 12 +- crates/file_finder/src/file_finder.rs | 230 +++---- crates/gpui/src/app.rs | 26 +- crates/gpui/src/app/window.rs | 8 +- crates/language_tools/src/lsp_log_tests.rs | 4 +- crates/project_panel/src/project_panel.rs | 32 +- crates/project_symbols/src/project_symbols.rs | 4 +- crates/search/src/buffer_search.rs | 19 +- crates/search/src/project_search.rs | 16 +- crates/terminal_view/src/terminal_view.rs | 4 +- crates/workspace/src/pane.rs | 30 +- crates/workspace/src/workspace.rs | 108 +-- crates/zed/src/zed.rs | 34 +- 24 files changed, 726 insertions(+), 578 deletions(-) diff --git a/crates/collab/src/tests.rs b/crates/collab/src/tests.rs index b1d0bedb2c..4804f5b0f1 100644 --- a/crates/collab/src/tests.rs +++ b/crates/collab/src/tests.rs @@ -495,8 +495,9 @@ impl TestClient { // We use a workspace container so that we don't need to remove the window in order to // drop the workspace and we can use a ViewHandle instead. - let (window_id, container) = cx.add_window(|_| WorkspaceContainer { workspace: None }); - let workspace = cx.add_view(window_id, |cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|_| WorkspaceContainer { workspace: None }); + let container = window.root(cx); + let workspace = window.add_view(cx, |cx| Workspace::test_new(project.clone(), cx)); container.update(cx, |container, cx| { container.workspace = Some(workspace.downgrade()); cx.notify(); diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index ab94f16a07..1a8e6d938d 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -7,8 +7,7 @@ use client::{User, RECEIVE_TIMEOUT}; use collections::HashSet; use editor::{ test::editor_test_context::EditorTestContext, ConfirmCodeAction, ConfirmCompletion, - ConfirmRename, Editor, ExcerptRange, MultiBuffer, Redo, Rename, ToOffset, ToggleCodeActions, - Undo, + ConfirmRename, Editor, ExcerptRange, MultiBuffer, Redo, Rename, ToggleCodeActions, Undo, }; use fs::{repository::GitFileStatus, FakeFs, Fs as _, LineEnding, RemoveOptions}; use futures::StreamExt as _; @@ -1208,7 +1207,7 @@ async fn test_share_project( cx_c: &mut TestAppContext, ) { deterministic.forbid_parking(); - let (window_b, _) = cx_b.add_window(|_| EmptyView); + let window_b = cx_b.add_window(|_| EmptyView); let mut server = TestServer::start(&deterministic).await; let client_a = server.create_client(cx_a, "user_a").await; let client_b = server.create_client(cx_b, "user_b").await; @@ -1316,7 +1315,7 @@ async fn test_share_project( .await .unwrap(); - let editor_b = cx_b.add_view(window_b, |cx| Editor::for_buffer(buffer_b, None, cx)); + let editor_b = window_b.add_view(cx_b, |cx| Editor::for_buffer(buffer_b, None, cx)); // Client A sees client B's selection deterministic.run_until_parked(); @@ -1499,8 +1498,8 @@ async fn test_host_disconnect( deterministic.run_until_parked(); assert!(worktree_a.read_with(cx_a, |tree, _| tree.as_local().unwrap().is_shared())); - let (window_id_b, workspace_b) = - cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let window_b = cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let workspace_b = window_b.root(cx_b); let editor_b = workspace_b .update(cx_b, |workspace, cx| { workspace.open_path((worktree_id, "b.txt"), None, true, cx) @@ -1509,9 +1508,7 @@ async fn test_host_disconnect( .unwrap() .downcast::() .unwrap(); - assert!(cx_b - .read_window(window_id_b, |cx| editor_b.is_focused(cx)) - .unwrap()); + assert!(window_b.read_with(cx_b, |cx| editor_b.is_focused(cx))); editor_b.update(cx_b, |editor, cx| editor.insert("X", cx)); assert!(cx_b.is_window_edited(workspace_b.window_id())); @@ -1525,7 +1522,7 @@ async fn test_host_disconnect( assert!(worktree_a.read_with(cx_a, |tree, _| !tree.as_local().unwrap().is_shared())); // Ensure client B's edited state is reset and that the whole window is blurred. - cx_b.read_window(window_id_b, |cx| { + window_b.read_with(cx_b, |cx| { assert_eq!(cx.focused_view_id(), None); }); assert!(!cx_b.is_window_edited(workspace_b.window_id())); @@ -3445,13 +3442,11 @@ async fn test_newline_above_or_below_does_not_move_guest_cursor( .update(cx_a, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) .await .unwrap(); - let (window_a, _) = cx_a.add_window(|_| EmptyView); - let editor_a = cx_a.add_view(window_a, |cx| { - Editor::for_buffer(buffer_a, Some(project_a), cx) - }); + let window_a = cx_a.add_window(|_| EmptyView); + let editor_a = window_a.add_view(cx_a, |cx| Editor::for_buffer(buffer_a, Some(project_a), cx)); let mut editor_cx_a = EditorTestContext { cx: cx_a, - window_id: window_a, + window_id: window_a.id(), editor: editor_a, }; @@ -3460,13 +3455,11 @@ async fn test_newline_above_or_below_does_not_move_guest_cursor( .update(cx_b, |p, cx| p.open_buffer((worktree_id, "a.txt"), cx)) .await .unwrap(); - let (window_b, _) = cx_b.add_window(|_| EmptyView); - let editor_b = cx_b.add_view(window_b, |cx| { - Editor::for_buffer(buffer_b, Some(project_b), cx) - }); + let window_b = cx_b.add_window(|_| EmptyView); + let editor_b = window_b.add_view(cx_b, |cx| Editor::for_buffer(buffer_b, Some(project_b), cx)); let mut editor_cx_b = EditorTestContext { cx: cx_b, - window_id: window_b, + window_id: window_b.id(), editor: editor_b, }; @@ -4205,8 +4198,8 @@ async fn test_collaborating_with_completion( .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) .await .unwrap(); - let (window_b, _) = cx_b.add_window(|_| EmptyView); - let editor_b = cx_b.add_view(window_b, |cx| { + let window_b = cx_b.add_window(|_| EmptyView); + let editor_b = window_b.add_view(cx_b, |cx| { Editor::for_buffer(buffer_b.clone(), Some(project_b.clone()), cx) }); @@ -5316,7 +5309,8 @@ async fn test_collaborating_with_code_actions( // Join the project as client B. let project_b = client_b.build_remote_project(project_id, cx_b).await; - let (_window_b, workspace_b) = cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let window_b = cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let workspace_b = window_b.root(cx_b); let editor_b = workspace_b .update(cx_b, |workspace, cx| { workspace.open_path((worktree_id, "main.rs"), None, true, cx) @@ -5540,7 +5534,8 @@ async fn test_collaborating_with_renames( .unwrap(); let project_b = client_b.build_remote_project(project_id, cx_b).await; - let (_window_b, workspace_b) = cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let window_b = cx_b.add_window(|cx| Workspace::test_new(project_b.clone(), cx)); + let workspace_b = window_b.root(cx_b); let editor_b = workspace_b .update(cx_b, |workspace, cx| { workspace.open_path((worktree_id, "one.rs"), None, true, cx) @@ -5571,6 +5566,7 @@ async fn test_collaborating_with_renames( .unwrap(); prepare_rename.await.unwrap(); editor_b.update(cx_b, |editor, cx| { + use editor::ToOffset; let rename = editor.pending_rename().unwrap(); let buffer = editor.buffer().read(cx).snapshot(cx); assert_eq!( @@ -7601,8 +7597,8 @@ async fn test_on_input_format_from_host_to_guest( .update(cx_a, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) .await .unwrap(); - let (window_a, _) = cx_a.add_window(|_| EmptyView); - let editor_a = cx_a.add_view(window_a, |cx| { + let window_a = cx_a.add_window(|_| EmptyView); + let editor_a = window_a.add_view(cx_a, |cx| { Editor::for_buffer(buffer_a, Some(project_a.clone()), cx) }); @@ -7730,8 +7726,8 @@ async fn test_on_input_format_from_guest_to_host( .update(cx_b, |p, cx| p.open_buffer((worktree_id, "main.rs"), cx)) .await .unwrap(); - let (window_b, _) = cx_b.add_window(|_| EmptyView); - let editor_b = cx_b.add_view(window_b, |cx| { + let window_b = cx_b.add_window(|_| EmptyView); + let editor_b = window_b.add_view(cx_b, |cx| { Editor::for_buffer(buffer_b, Some(project_b.clone()), cx) }); diff --git a/crates/collab_ui/src/incoming_call_notification.rs b/crates/collab_ui/src/incoming_call_notification.rs index 4066b5b229..a9c5e697a5 100644 --- a/crates/collab_ui/src/incoming_call_notification.rs +++ b/crates/collab_ui/src/incoming_call_notification.rs @@ -31,7 +31,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { for screen in cx.platform().screens() { let screen_bounds = screen.bounds(); - let (window_id, _) = cx.add_window( + let window = cx.add_window( WindowOptions { bounds: WindowBounds::Fixed(RectF::new( screen_bounds.upper_right() @@ -49,7 +49,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { |_| IncomingCallNotification::new(incoming_call.clone(), app_state.clone()), ); - notification_windows.push(window_id); + notification_windows.push(window.id()); } } } diff --git a/crates/collab_ui/src/project_shared_notification.rs b/crates/collab_ui/src/project_shared_notification.rs index fea6118bdf..03ab91623b 100644 --- a/crates/collab_ui/src/project_shared_notification.rs +++ b/crates/collab_ui/src/project_shared_notification.rs @@ -26,7 +26,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { for screen in cx.platform().screens() { let screen_bounds = screen.bounds(); - let (window_id, _) = cx.add_window( + let window = cx.add_window( WindowOptions { bounds: WindowBounds::Fixed(RectF::new( screen_bounds.upper_right() - vec2f(PADDING + window_size.x(), PADDING), @@ -52,7 +52,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { notification_windows .entry(*project_id) .or_insert(Vec::new()) - .push(window_id); + .push(window.id()); } } room::Event::RemoteProjectUnshared { project_id } => { diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs index 7461fb28c7..7d4b4126b7 100644 --- a/crates/command_palette/src/command_palette.rs +++ b/crates/command_palette/src/command_palette.rs @@ -295,7 +295,9 @@ mod tests { let app_state = init_test(cx); let project = Project::test(app_state.fs.clone(), [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let editor = cx.add_view(window_id, |cx| { let mut editor = Editor::single_line(None, cx); editor.set_text("abc", cx); diff --git a/crates/copilot/src/sign_in.rs b/crates/copilot/src/sign_in.rs index fec8f27c97..659bee7445 100644 --- a/crates/copilot/src/sign_in.rs +++ b/crates/copilot/src/sign_in.rs @@ -27,7 +27,7 @@ pub fn init(cx: &mut AppContext) { if let Some(code_verification_handle) = code_verification.as_mut() { let window_id = code_verification_handle.id(); let updated = cx.update_window(window_id, |cx| { - code_verification_handle.update(cx, |code_verification, cx| { + code_verification_handle.update_root(cx, |code_verification, cx| { code_verification.set_status(status.clone(), cx) }); cx.activate_window(); @@ -41,9 +41,9 @@ pub fn init(cx: &mut AppContext) { } Status::Authorized | Status::Unauthorized => { if let Some(code_verification) = code_verification.as_ref() { - let window_id = code_verification.window_id(); + let window_id = code_verification.id(); cx.update_window(window_id, |cx| { - code_verification.update(cx, |code_verification, cx| { + code_verification.update_root(cx, |code_verification, cx| { code_verification.set_status(status, cx) }); @@ -54,7 +54,7 @@ pub fn init(cx: &mut AppContext) { } _ => { if let Some(code_verification) = code_verification.take() { - cx.update_window(code_verification.window_id(), |cx| cx.remove_window()); + code_verification.update(cx, |cx| cx.remove_window()); } } } diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index d0cd437946..2444465be6 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -855,7 +855,9 @@ mod tests { let language_server_id = LanguageServerId(0); let project = Project::test(fs.clone(), ["/test".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); // Create some diagnostics project.update(cx, |project, cx| { @@ -1248,7 +1250,9 @@ mod tests { let server_id_1 = LanguageServerId(100); let server_id_2 = LanguageServerId(101); let project = Project::test(fs.clone(), ["/test".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let view = cx.add_view(window_id, |cx| { ProjectDiagnosticsEditor::new(project.clone(), workspace.downgrade(), cx) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index eb03d2bdc0..96921643d4 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -48,36 +48,40 @@ fn test_edit_events(cx: &mut TestAppContext) { }); let events = Rc::new(RefCell::new(Vec::new())); - let (_, editor1) = cx.add_window({ - let events = events.clone(); - |cx| { - cx.subscribe(&cx.handle(), move |_, _, event, _| { - if matches!( - event, - Event::Edited | Event::BufferEdited | Event::DirtyChanged - ) { - events.borrow_mut().push(("editor1", event.clone())); - } - }) - .detach(); - Editor::for_buffer(buffer.clone(), None, cx) - } - }); - let (_, editor2) = cx.add_window({ - let events = events.clone(); - |cx| { - cx.subscribe(&cx.handle(), move |_, _, event, _| { - if matches!( - event, - Event::Edited | Event::BufferEdited | Event::DirtyChanged - ) { - events.borrow_mut().push(("editor2", event.clone())); - } - }) - .detach(); - Editor::for_buffer(buffer.clone(), None, cx) - } - }); + let editor1 = cx + .add_window({ + let events = events.clone(); + |cx| { + cx.subscribe(&cx.handle(), move |_, _, event, _| { + if matches!( + event, + Event::Edited | Event::BufferEdited | Event::DirtyChanged + ) { + events.borrow_mut().push(("editor1", event.clone())); + } + }) + .detach(); + Editor::for_buffer(buffer.clone(), None, cx) + } + }) + .detach(cx); + let editor2 = cx + .add_window({ + let events = events.clone(); + |cx| { + cx.subscribe(&cx.handle(), move |_, _, event, _| { + if matches!( + event, + Event::Edited | Event::BufferEdited | Event::DirtyChanged + ) { + events.borrow_mut().push(("editor2", event.clone())); + } + }) + .detach(); + Editor::for_buffer(buffer.clone(), None, cx) + } + }) + .detach(cx); assert_eq!(mem::take(&mut *events.borrow_mut()), []); // Mutating editor 1 will emit an `Edited` event only for that editor. @@ -173,7 +177,9 @@ fn test_undo_redo_with_selection_restoration(cx: &mut TestAppContext) { let buffer = cx.add_model(|cx| language::Buffer::new(0, "123456", cx)); let group_interval = buffer.read_with(cx, |buffer, _| buffer.transaction_group_interval()); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer.clone(), cx)); + let editor = cx + .add_window(|cx| build_editor(buffer.clone(), cx)) + .detach(cx); editor.update(cx, |editor, cx| { editor.start_transaction_at(now, cx); @@ -343,10 +349,12 @@ fn test_ime_composition(cx: &mut TestAppContext) { fn test_selection_with_mouse(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\nddddddd\n", cx); - build_editor(buffer, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\nddddddd\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); editor.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx); }); @@ -410,10 +418,12 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) { fn test_canceling_pending_selection(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx); @@ -456,10 +466,12 @@ fn test_clone(cx: &mut TestAppContext) { true, ); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&text, cx); - build_editor(buffer, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&text, cx); + build_editor(buffer, cx) + }) + .detach(cx); editor.update(cx, |editor, cx| { editor.change_selections(None, cx, |s| s.select_ranges(selection_ranges.clone())); @@ -473,9 +485,11 @@ fn test_clone(cx: &mut TestAppContext) { ); }); - let (_, cloned_editor) = editor.update(cx, |editor, cx| { - cx.add_window(Default::default(), |cx| editor.clone(cx)) - }); + let cloned_editor = editor + .update(cx, |editor, cx| { + cx.add_window(Default::default(), |cx| editor.clone(cx)) + }) + .detach(cx); let snapshot = editor.update(cx, |e, cx| e.snapshot(cx)); let cloned_snapshot = cloned_editor.update(cx, |e, cx| e.snapshot(cx)); @@ -509,7 +523,9 @@ async fn test_navigation_history(cx: &mut TestAppContext) { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); cx.add_view(window_id, |cx| { let buffer = MultiBuffer::build_simple(&sample_text(300, 5, 'a'), cx); @@ -618,10 +634,12 @@ async fn test_navigation_history(cx: &mut TestAppContext) { fn test_cancel(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(3, 4), false, 1, cx); @@ -661,9 +679,10 @@ fn test_cancel(cx: &mut TestAppContext) { fn test_fold_action(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple( - &" + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple( + &" impl Foo { // Hello! @@ -680,11 +699,12 @@ fn test_fold_action(cx: &mut TestAppContext) { } } " - .unindent(), - cx, - ); - build_editor(buffer.clone(), cx) - }); + .unindent(), + cx, + ); + build_editor(buffer.clone(), cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -752,7 +772,9 @@ fn test_move_cursor(cx: &mut TestAppContext) { init_test(cx, |_| {}); let buffer = cx.update(|cx| MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx)); - let (_, view) = cx.add_window(|cx| build_editor(buffer.clone(), cx)); + let view = cx + .add_window(|cx| build_editor(buffer.clone(), cx)) + .detach(cx); buffer.update(cx, |buffer, cx| { buffer.edit( @@ -827,10 +849,12 @@ fn test_move_cursor(cx: &mut TestAppContext) { fn test_move_cursor_multibyte(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcde\nαβγδε\n", cx); - build_editor(buffer.clone(), cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcde\nαβγδε\n", cx); + build_editor(buffer.clone(), cx) + }) + .detach(cx); assert_eq!('ⓐ'.len_utf8(), 3); assert_eq!('α'.len_utf8(), 2); @@ -932,10 +956,12 @@ fn test_move_cursor_multibyte(cx: &mut TestAppContext) { fn test_move_cursor_different_line_lengths(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcd\nαβγ\nabcd\nⓐⓑⓒⓓⓔ\n", cx); - build_editor(buffer.clone(), cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcd\nαβγ\nabcd\nⓐⓑⓒⓓⓔ\n", cx); + build_editor(buffer.clone(), cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([empty_range(0, "ⓐⓑⓒⓓⓔ".len())]); @@ -982,10 +1008,12 @@ fn test_move_cursor_different_line_lengths(cx: &mut TestAppContext) { fn test_beginning_end_of_line(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\n def", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\n def", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -1145,10 +1173,12 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) { fn test_prev_next_word_boundary(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("use std::str::{foo, bar}\n\n {baz.qux()}", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("use std::str::{foo, bar}\n\n {baz.qux()}", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -1197,10 +1227,13 @@ fn test_prev_next_word_boundary(cx: &mut TestAppContext) { fn test_prev_next_word_bounds_with_soft_wrap(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("use one::{\n two::three::four::five\n};", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = + MultiBuffer::build_simple("use one::{\n two::three::four::five\n};", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.set_wrap_width(Some(140.), cx); @@ -1530,10 +1563,12 @@ async fn test_delete_to_beginning_of_line(cx: &mut gpui::TestAppContext) { fn test_delete_to_word_boundary(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("one two three four", cx); - build_editor(buffer.clone(), cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("one two three four", cx); + build_editor(buffer.clone(), cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -1566,10 +1601,12 @@ fn test_delete_to_word_boundary(cx: &mut TestAppContext) { fn test_newline(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("aaaa\n bbbb\n", cx); - build_editor(buffer.clone(), cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("aaaa\n bbbb\n", cx); + build_editor(buffer.clone(), cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -1589,9 +1626,10 @@ fn test_newline(cx: &mut TestAppContext) { fn test_newline_with_old_selections(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple( - " + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple( + " a b( X @@ -1600,19 +1638,20 @@ fn test_newline_with_old_selections(cx: &mut TestAppContext) { X ) " - .unindent() - .as_str(), - cx, - ); - let mut editor = build_editor(buffer.clone(), cx); - editor.change_selections(None, cx, |s| { - s.select_ranges([ - Point::new(2, 4)..Point::new(2, 5), - Point::new(5, 4)..Point::new(5, 5), - ]) - }); - editor - }); + .unindent() + .as_str(), + cx, + ); + let mut editor = build_editor(buffer.clone(), cx); + editor.change_selections(None, cx, |s| { + s.select_ranges([ + Point::new(2, 4)..Point::new(2, 5), + Point::new(5, 4)..Point::new(5, 5), + ]) + }); + editor + }) + .detach(cx); editor.update(cx, |editor, cx| { // Edit the buffer directly, deleting ranges surrounding the editor's selections @@ -1817,12 +1856,14 @@ async fn test_newline_comments(cx: &mut gpui::TestAppContext) { fn test_insert_with_old_selections(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("a( X ), b( Y ), c( Z )", cx); - let mut editor = build_editor(buffer.clone(), cx); - editor.change_selections(None, cx, |s| s.select_ranges([3..4, 11..12, 19..20])); - editor - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("a( X ), b( Y ), c( Z )", cx); + let mut editor = build_editor(buffer.clone(), cx); + editor.change_selections(None, cx, |s| s.select_ranges([3..4, 11..12, 19..20])); + editor + }) + .detach(cx); editor.update(cx, |editor, cx| { // Edit the buffer directly, deleting ranges surrounding the editor's selections @@ -2329,10 +2370,12 @@ async fn test_delete(cx: &mut gpui::TestAppContext) { fn test_delete_line(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2352,10 +2395,12 @@ fn test_delete_line(cx: &mut TestAppContext) { ); }); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([DisplayPoint::new(2, 0)..DisplayPoint::new(0, 1)]) @@ -2654,10 +2699,12 @@ async fn test_manipulate_lines_with_multi_selection(cx: &mut TestAppContext) { fn test_duplicate_line(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2680,10 +2727,12 @@ fn test_duplicate_line(cx: &mut TestAppContext) { ); }); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2707,10 +2756,12 @@ fn test_duplicate_line(cx: &mut TestAppContext) { fn test_move_line_up_down(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.fold_ranges( vec![ @@ -2806,10 +2857,12 @@ fn test_move_line_up_down(cx: &mut TestAppContext) { fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); - build_editor(buffer, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); + build_editor(buffer, cx) + }) + .detach(cx); editor.update(cx, |editor, cx| { let snapshot = editor.buffer.read(cx).snapshot(cx); editor.insert_blocks( @@ -2834,102 +2887,94 @@ fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) { fn test_transpose(cx: &mut TestAppContext) { init_test(cx, |_| {}); - _ = cx - .add_window(|cx| { - let mut editor = build_editor(MultiBuffer::build_simple("abc", cx), cx); + _ = cx.add_window(|cx| { + let mut editor = build_editor(MultiBuffer::build_simple("abc", cx), cx); - editor.change_selections(None, cx, |s| s.select_ranges([1..1])); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bac"); - assert_eq!(editor.selections.ranges(cx), [2..2]); + editor.change_selections(None, cx, |s| s.select_ranges([1..1])); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bac"); + assert_eq!(editor.selections.ranges(cx), [2..2]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bca"); - assert_eq!(editor.selections.ranges(cx), [3..3]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bca"); + assert_eq!(editor.selections.ranges(cx), [3..3]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bac"); - assert_eq!(editor.selections.ranges(cx), [3..3]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bac"); + assert_eq!(editor.selections.ranges(cx), [3..3]); - editor - }) - .1; + editor + }); - _ = cx - .add_window(|cx| { - let mut editor = build_editor(MultiBuffer::build_simple("abc\nde", cx), cx); + _ = cx.add_window(|cx| { + let mut editor = build_editor(MultiBuffer::build_simple("abc\nde", cx), cx); - editor.change_selections(None, cx, |s| s.select_ranges([3..3])); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "acb\nde"); - assert_eq!(editor.selections.ranges(cx), [3..3]); + editor.change_selections(None, cx, |s| s.select_ranges([3..3])); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "acb\nde"); + assert_eq!(editor.selections.ranges(cx), [3..3]); - editor.change_selections(None, cx, |s| s.select_ranges([4..4])); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "acbd\ne"); - assert_eq!(editor.selections.ranges(cx), [5..5]); + editor.change_selections(None, cx, |s| s.select_ranges([4..4])); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "acbd\ne"); + assert_eq!(editor.selections.ranges(cx), [5..5]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "acbde\n"); - assert_eq!(editor.selections.ranges(cx), [6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "acbde\n"); + assert_eq!(editor.selections.ranges(cx), [6..6]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "acbd\ne"); - assert_eq!(editor.selections.ranges(cx), [6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "acbd\ne"); + assert_eq!(editor.selections.ranges(cx), [6..6]); - editor - }) - .1; + editor + }); - _ = cx - .add_window(|cx| { - let mut editor = build_editor(MultiBuffer::build_simple("abc\nde", cx), cx); + _ = cx.add_window(|cx| { + let mut editor = build_editor(MultiBuffer::build_simple("abc\nde", cx), cx); - editor.change_selections(None, cx, |s| s.select_ranges([1..1, 2..2, 4..4])); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bacd\ne"); - assert_eq!(editor.selections.ranges(cx), [2..2, 3..3, 5..5]); + editor.change_selections(None, cx, |s| s.select_ranges([1..1, 2..2, 4..4])); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bacd\ne"); + assert_eq!(editor.selections.ranges(cx), [2..2, 3..3, 5..5]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bcade\n"); - assert_eq!(editor.selections.ranges(cx), [3..3, 4..4, 6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bcade\n"); + assert_eq!(editor.selections.ranges(cx), [3..3, 4..4, 6..6]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bcda\ne"); - assert_eq!(editor.selections.ranges(cx), [4..4, 6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bcda\ne"); + assert_eq!(editor.selections.ranges(cx), [4..4, 6..6]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bcade\n"); - assert_eq!(editor.selections.ranges(cx), [4..4, 6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bcade\n"); + assert_eq!(editor.selections.ranges(cx), [4..4, 6..6]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "bcaed\n"); - assert_eq!(editor.selections.ranges(cx), [5..5, 6..6]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "bcaed\n"); + assert_eq!(editor.selections.ranges(cx), [5..5, 6..6]); - editor - }) - .1; + editor + }); - _ = cx - .add_window(|cx| { - let mut editor = build_editor(MultiBuffer::build_simple("🍐🏀✋", cx), cx); + _ = cx.add_window(|cx| { + let mut editor = build_editor(MultiBuffer::build_simple("🍐🏀✋", cx), cx); - editor.change_selections(None, cx, |s| s.select_ranges([4..4])); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "🏀🍐✋"); - assert_eq!(editor.selections.ranges(cx), [8..8]); + editor.change_selections(None, cx, |s| s.select_ranges([4..4])); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "🏀🍐✋"); + assert_eq!(editor.selections.ranges(cx), [8..8]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "🏀✋🍐"); - assert_eq!(editor.selections.ranges(cx), [11..11]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "🏀✋🍐"); + assert_eq!(editor.selections.ranges(cx), [11..11]); - editor.transpose(&Default::default(), cx); - assert_eq!(editor.text(cx), "🏀🍐✋"); - assert_eq!(editor.selections.ranges(cx), [11..11]); + editor.transpose(&Default::default(), cx); + assert_eq!(editor.text(cx), "🏀🍐✋"); + assert_eq!(editor.selections.ranges(cx), [11..11]); - editor - }) - .1; + editor + }); } #[gpui::test] @@ -3132,10 +3177,12 @@ async fn test_paste_multiline(cx: &mut gpui::TestAppContext) { fn test_select_all(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\nde\nfgh", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\nde\nfgh", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.select_all(&SelectAll, cx); assert_eq!( @@ -3149,10 +3196,12 @@ fn test_select_all(cx: &mut TestAppContext) { fn test_select_line(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(6, 5, 'a'), cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(6, 5, 'a'), cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -3196,10 +3245,12 @@ fn test_select_line(cx: &mut TestAppContext) { fn test_split_selection_into_lines(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(9, 5, 'a'), cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(9, 5, 'a'), cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.fold_ranges( vec![ @@ -3267,10 +3318,12 @@ fn test_split_selection_into_lines(cx: &mut TestAppContext) { fn test_add_selection_above_below(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, view) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("abc\ndefghi\n\njk\nlmno\n", cx); - build_editor(buffer, cx) - }); + let view = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("abc\ndefghi\n\njk\nlmno\n", cx); + build_editor(buffer, cx) + }) + .detach(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -3555,7 +3608,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, view) = cx.add_window(|cx| build_editor(buffer, cx)); + let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -3718,7 +3771,7 @@ async fn test_autoindent_selections(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor .condition(cx, |editor, cx| !editor.buffer.read(cx).is_parsing(cx)) .await; @@ -4281,7 +4334,7 @@ async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, view) = cx.add_window(|cx| build_editor(buffer, cx)); + let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -4429,7 +4482,7 @@ async fn test_delete_autoclose_pair(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor .condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -4519,7 +4572,7 @@ async fn test_snippets(cx: &mut gpui::TestAppContext) { ); let buffer = cx.update(|cx| MultiBuffer::build_simple(&text, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor.update(cx, |editor, cx| { let snippet = Snippet::parse("f(${1:one}, ${2:two}, ${1:three})$0").unwrap(); @@ -4649,7 +4702,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); assert!(cx.read(|cx| editor.is_dirty(cx))); @@ -4761,7 +4814,7 @@ async fn test_range_format_during_save(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); assert!(cx.read(|cx| editor.is_dirty(cx))); @@ -4875,7 +4928,7 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, editor) = cx.add_window(|cx| build_editor(buffer, cx)); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); let format = editor.update(cx, |editor, cx| { @@ -5653,7 +5706,7 @@ fn test_editing_disjoint_excerpts(cx: &mut TestAppContext) { multibuffer }); - let (_, view) = cx.add_window(|cx| build_editor(multibuffer, cx)); + let view = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); view.update(cx, |view, cx| { assert_eq!(view.text(cx), "aaaa\nbbbb"); view.change_selections(None, cx, |s| { @@ -5723,7 +5776,7 @@ fn test_editing_overlapping_excerpts(cx: &mut TestAppContext) { multibuffer }); - let (_, view) = cx.add_window(|cx| build_editor(multibuffer, cx)); + let view = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); view.update(cx, |view, cx| { let (expected_text, selection_ranges) = marked_text_ranges( indoc! {" @@ -5799,22 +5852,24 @@ fn test_refresh_selections(cx: &mut TestAppContext) { multibuffer }); - let (_, editor) = cx.add_window(|cx| { - let mut editor = build_editor(multibuffer.clone(), cx); - let snapshot = editor.snapshot(cx); - editor.change_selections(None, cx, |s| { - s.select_ranges([Point::new(1, 3)..Point::new(1, 3)]) - }); - editor.begin_selection(Point::new(2, 1).to_display_point(&snapshot), true, 1, cx); - assert_eq!( - editor.selections.ranges(cx), - [ - Point::new(1, 3)..Point::new(1, 3), - Point::new(2, 1)..Point::new(2, 1), - ] - ); - editor - }); + let editor = cx + .add_window(|cx| { + let mut editor = build_editor(multibuffer.clone(), cx); + let snapshot = editor.snapshot(cx); + editor.change_selections(None, cx, |s| { + s.select_ranges([Point::new(1, 3)..Point::new(1, 3)]) + }); + editor.begin_selection(Point::new(2, 1).to_display_point(&snapshot), true, 1, cx); + assert_eq!( + editor.selections.ranges(cx), + [ + Point::new(1, 3)..Point::new(1, 3), + Point::new(2, 1)..Point::new(2, 1), + ] + ); + editor + }) + .detach(cx); // Refreshing selections is a no-op when excerpts haven't changed. editor.update(cx, |editor, cx| { @@ -5884,16 +5939,18 @@ fn test_refresh_selections_while_selecting_with_mouse(cx: &mut TestAppContext) { multibuffer }); - let (_, editor) = cx.add_window(|cx| { - let mut editor = build_editor(multibuffer.clone(), cx); - let snapshot = editor.snapshot(cx); - editor.begin_selection(Point::new(1, 3).to_display_point(&snapshot), false, 1, cx); - assert_eq!( - editor.selections.ranges(cx), - [Point::new(1, 3)..Point::new(1, 3)] - ); - editor - }); + let editor = cx + .add_window(|cx| { + let mut editor = build_editor(multibuffer.clone(), cx); + let snapshot = editor.snapshot(cx); + editor.begin_selection(Point::new(1, 3).to_display_point(&snapshot), false, 1, cx); + assert_eq!( + editor.selections.ranges(cx), + [Point::new(1, 3)..Point::new(1, 3)] + ); + editor + }) + .detach(cx); multibuffer.update(cx, |multibuffer, cx| { multibuffer.remove_excerpts([excerpt1_id.unwrap()], cx); @@ -5956,7 +6013,7 @@ async fn test_extra_newline_insertion(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let (_, view) = cx.add_window(|cx| build_editor(buffer, cx)); + let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -5992,10 +6049,12 @@ async fn test_extra_newline_insertion(cx: &mut gpui::TestAppContext) { fn test_highlighted_ranges(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(16, 8, 'a'), cx); - build_editor(buffer.clone(), cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(16, 8, 'a'), cx); + build_editor(buffer.clone(), cx) + }) + .detach(cx); editor.update(cx, |editor, cx| { struct Type1; @@ -6084,16 +6143,20 @@ async fn test_following(cx: &mut gpui::TestAppContext) { .unwrap(); cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)) }); - let (_, leader) = cx.add_window(|cx| build_editor(buffer.clone(), cx)); - let (_, follower) = cx.update(|cx| { - cx.add_window( - WindowOptions { - bounds: WindowBounds::Fixed(RectF::from_points(vec2f(0., 0.), vec2f(10., 80.))), - ..Default::default() - }, - |cx| build_editor(buffer.clone(), cx), - ) - }); + let leader = cx + .add_window(|cx| build_editor(buffer.clone(), cx)) + .detach(cx); + let follower = cx + .update(|cx| { + cx.add_window( + WindowOptions { + bounds: WindowBounds::Fixed(RectF::from_points(vec2f(0., 0.), vec2f(10., 80.))), + ..Default::default() + }, + |cx| build_editor(buffer.clone(), cx), + ) + }) + .detach(cx); let is_still_following = Rc::new(RefCell::new(true)); let follower_edit_event_count = Rc::new(RefCell::new(0)); @@ -6224,7 +6287,9 @@ async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, ["/file.rs".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let leader = pane.update(cx, |_, cx| { @@ -6968,7 +7033,7 @@ async fn test_copilot_multibuffer( ); multibuffer }); - let (_, editor) = cx.add_window(|cx| build_editor(multibuffer, cx)); + let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); handle_copilot_completion_request( &copilot_lsp, @@ -7098,7 +7163,7 @@ async fn test_copilot_disabled_globs( ); multibuffer }); - let (_, editor) = cx.add_window(|cx| build_editor(multibuffer, cx)); + let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); let mut copilot_requests = copilot_lsp .handle_request::(move |_params, _cx| async move { @@ -7177,7 +7242,9 @@ async fn test_on_type_formatting_not_triggered(cx: &mut gpui::TestAppContext) { .await; let project = Project::test(fs, ["/a".as_ref()], cx).await; project.update(cx, |project, _| project.languages().add(Arc::new(language))); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -7282,7 +7349,7 @@ async fn test_language_server_restart_due_to_settings_change(cx: &mut gpui::Test .await; let project = Project::test(fs, ["/a".as_ref()], cx).await; project.update(cx, |project, _| project.languages().add(Arc::new(language))); - let (_, _workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let _window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let _buffer = project .update(cx, |project, cx| { project.open_local_buffer("/a/main.rs", cx) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 750beaea13..dc40e7fb85 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3002,10 +3002,12 @@ mod tests { fn test_layout_line_numbers(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx); - Editor::new(EditorMode::Full, buffer, None, None, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx); + Editor::new(EditorMode::Full, buffer, None, None, cx) + }) + .detach(cx); let element = EditorElement::new(editor.read_with(cx, |editor, cx| editor.style(cx))); let layouts = editor.update(cx, |editor, cx| { @@ -3021,10 +3023,12 @@ mod tests { fn test_layout_with_placeholder_text_and_blocks(cx: &mut TestAppContext) { init_test(cx, |_| {}); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple("", cx); - Editor::new(EditorMode::Full, buffer, None, None, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple("", cx); + Editor::new(EditorMode::Full, buffer, None, None, cx) + }) + .detach(cx); editor.update(cx, |editor, cx| { editor.set_placeholder_text("hello", cx); @@ -3231,10 +3235,12 @@ mod tests { info!( "Creating editor with mode {editor_mode:?}, width {editor_width} and text '{input_text}'" ); - let (_, editor) = cx.add_window(|cx| { - let buffer = MultiBuffer::build_simple(&input_text, cx); - Editor::new(editor_mode, buffer, None, None, cx) - }); + let editor = cx + .add_window(|cx| { + let buffer = MultiBuffer::build_simple(&input_text, cx); + Editor::new(editor_mode, buffer, None, None, cx) + }) + .detach(cx); let mut element = EditorElement::new(editor.read_with(cx, |editor, cx| editor.style(cx))); let (_, layout_state) = editor.update(cx, |editor, cx| { diff --git a/crates/editor/src/inlay_hint_cache.rs b/crates/editor/src/inlay_hint_cache.rs index 63076ba234..089cbb2995 100644 --- a/crates/editor/src/inlay_hint_cache.rs +++ b/crates/editor/src/inlay_hint_cache.rs @@ -1136,7 +1136,9 @@ mod tests { ) .await; let project = Project::test(fs, ["/a".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -1836,7 +1838,9 @@ mod tests { .await; let project = Project::test(fs, ["/a".as_ref()], cx).await; project.update(cx, |project, _| project.languages().add(Arc::new(language))); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -1989,7 +1993,9 @@ mod tests { project.update(cx, |project, _| { project.languages().add(Arc::clone(&language)) }); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -2075,8 +2081,9 @@ mod tests { deterministic.run_until_parked(); cx.foreground().run_until_parked(); - let (_, editor) = - cx.add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)); + let editor = cx + .add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)) + .detach(cx); let editor_edited = Arc::new(AtomicBool::new(false)); let fake_server = fake_servers.next().await.unwrap(); let closure_editor_edited = Arc::clone(&editor_edited); @@ -2328,7 +2335,9 @@ all hints should be invalidated and requeried for all of its visible excerpts" project.update(cx, |project, _| { project.languages().add(Arc::clone(&language)) }); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -2373,8 +2382,9 @@ all hints should be invalidated and requeried for all of its visible excerpts" deterministic.run_until_parked(); cx.foreground().run_until_parked(); - let (_, editor) = - cx.add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)); + let editor = cx + .add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)) + .detach(cx); let editor_edited = Arc::new(AtomicBool::new(false)); let fake_server = fake_servers.next().await.unwrap(); let closure_editor_edited = Arc::clone(&editor_edited); @@ -2562,7 +2572,9 @@ all hints should be invalidated and requeried for all of its visible excerpts" let project = Project::test(fs, ["/a".as_ref()], cx).await; project.update(cx, |project, _| project.languages().add(Arc::new(language))); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() diff --git a/crates/editor/src/test/editor_lsp_test_context.rs b/crates/editor/src/test/editor_lsp_test_context.rs index 0fe49d4d04..f53115f224 100644 --- a/crates/editor/src/test/editor_lsp_test_context.rs +++ b/crates/editor/src/test/editor_lsp_test_context.rs @@ -69,7 +69,8 @@ impl<'a> EditorLspTestContext<'a> { .insert_tree("/root", json!({ "dir": { file_name.clone(): "" }})) .await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); project .update(cx, |project, cx| { project.find_or_create_local_worktree("/root", true, cx) @@ -98,7 +99,7 @@ impl<'a> EditorLspTestContext<'a> { Self { cx: EditorTestContext { cx, - window_id, + window_id: window.id(), editor, }, lsp, diff --git a/crates/editor/src/test/editor_test_context.rs b/crates/editor/src/test/editor_test_context.rs index bac70f139a..c7ea1b4f38 100644 --- a/crates/editor/src/test/editor_test_context.rs +++ b/crates/editor/src/test/editor_test_context.rs @@ -32,16 +32,14 @@ impl<'a> EditorTestContext<'a> { let buffer = project .update(cx, |project, cx| project.create_buffer("", None, cx)) .unwrap(); - let (window_id, editor) = cx.update(|cx| { - cx.add_window(Default::default(), |cx| { - cx.focus_self(); - build_editor(MultiBuffer::build_from_buffer(buffer, cx), cx) - }) + let window = cx.add_window(|cx| { + cx.focus_self(); + build_editor(MultiBuffer::build_from_buffer(buffer, cx), cx) }); - + let editor = window.root(cx); Self { cx, - window_id, + window_id: window.id(), editor, } } diff --git a/crates/file_finder/src/file_finder.rs b/crates/file_finder/src/file_finder.rs index b6701f12d6..2c9d9c0c71 100644 --- a/crates/file_finder/src/file_finder.rs +++ b/crates/file_finder/src/file_finder.rs @@ -617,8 +617,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - cx.dispatch_action(window_id, Toggle); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + cx.dispatch_action(window.id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); finder @@ -631,8 +632,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window_id, SelectNext); - cx.dispatch_action(window_id, Confirm); + cx.dispatch_action(window.id(), SelectNext); + cx.dispatch_action(window.id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -671,8 +672,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - cx.dispatch_action(window_id, Toggle); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + cx.dispatch_action(window.id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); let file_query = &first_file_name[..3]; @@ -704,8 +706,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window_id, SelectNext); - cx.dispatch_action(window_id, Confirm); + cx.dispatch_action(window.id(), SelectNext); + cx.dispatch_action(window.id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -754,8 +756,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - cx.dispatch_action(window_id, Toggle); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + cx.dispatch_action(window.id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); let file_query = &first_file_name[..3]; @@ -787,8 +790,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window_id, SelectNext); - cx.dispatch_action(window_id, Confirm); + cx.dispatch_action(window.id(), SelectNext); + cx.dispatch_action(window.id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -837,19 +840,23 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/dir".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - None, - Vec::new(), + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); + let finder = cx + .add_window(|cx| { + Picker::new( + FileFinderDelegate::new( + workspace.downgrade(), + workspace.read(cx).project().clone(), + None, + Vec::new(), + cx, + ), cx, - ), - cx, - ) - }); + ) + }) + .detach(cx); let query = test_path_like("hi"); finder @@ -931,19 +938,23 @@ mod tests { cx, ) .await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - None, - Vec::new(), + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); + let finder = cx + .add_window(|cx| { + Picker::new( + FileFinderDelegate::new( + workspace.downgrade(), + workspace.read(cx).project().clone(), + None, + Vec::new(), + cx, + ), cx, - ), - cx, - ) - }); + ) + }) + .detach(cx); finder .update(cx, |f, cx| { f.delegate_mut().spawn_search(test_path_like("hi"), cx) @@ -967,19 +978,23 @@ mod tests { cx, ) .await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - None, - Vec::new(), + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); + let finder = cx + .add_window(|cx| { + Picker::new( + FileFinderDelegate::new( + workspace.downgrade(), + workspace.read(cx).project().clone(), + None, + Vec::new(), + cx, + ), cx, - ), - cx, - ) - }); + ) + }) + .detach(cx); // Even though there is only one worktree, that worktree's filename // is included in the matching, because the worktree is a single file. @@ -1015,61 +1030,6 @@ mod tests { finder.read_with(cx, |f, _| assert_eq!(f.delegate().matches.len(), 0)); } - #[gpui::test] - async fn test_multiple_matches_with_same_relative_path(cx: &mut TestAppContext) { - let app_state = init_test(cx); - app_state - .fs - .as_fake() - .insert_tree( - "/root", - json!({ - "dir1": { "a.txt": "" }, - "dir2": { "a.txt": "" } - }), - ) - .await; - - let project = Project::test( - app_state.fs.clone(), - ["/root/dir1".as_ref(), "/root/dir2".as_ref()], - cx, - ) - .await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - None, - Vec::new(), - cx, - ), - cx, - ) - }); - - // Run a search that matches two files with the same relative path. - finder - .update(cx, |f, cx| { - f.delegate_mut().spawn_search(test_path_like("a.t"), cx) - }) - .await; - - // Can switch between different matches with the same relative path. - finder.update(cx, |finder, cx| { - let delegate = finder.delegate_mut(); - assert_eq!(delegate.matches.len(), 2); - assert_eq!(delegate.selected_index(), 0); - delegate.set_selected_index(1, cx); - assert_eq!(delegate.selected_index(), 1); - delegate.set_selected_index(0, cx); - assert_eq!(delegate.selected_index(), 0); - }); - } - #[gpui::test] async fn test_path_distance_ordering(cx: &mut TestAppContext) { let app_state = init_test(cx); @@ -1089,7 +1049,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1); @@ -1103,18 +1065,20 @@ mod tests { worktree_id, path: Arc::from(Path::new("/root/dir2/b.txt")), })); - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - b_path, - Vec::new(), + let finder = cx + .add_window(|cx| { + Picker::new( + FileFinderDelegate::new( + workspace.downgrade(), + workspace.read(cx).project().clone(), + b_path, + Vec::new(), + cx, + ), cx, - ), - cx, - ) - }); + ) + }) + .detach(cx); finder .update(cx, |f, cx| { @@ -1151,19 +1115,23 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); - let (_, finder) = cx.add_window(|cx| { - Picker::new( - FileFinderDelegate::new( - workspace.downgrade(), - workspace.read(cx).project().clone(), - None, - Vec::new(), + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); + let finder = cx + .add_window(|cx| { + Picker::new( + FileFinderDelegate::new( + workspace.downgrade(), + workspace.read(cx).project().clone(), + None, + Vec::new(), + cx, + ), cx, - ), - cx, - ) - }); + ) + }) + .detach(cx); finder .update(cx, |f, cx| { f.delegate_mut().spawn_search(test_path_like("dir"), cx) @@ -1198,7 +1166,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1); @@ -1404,7 +1374,9 @@ mod tests { .detach(); deterministic.run_until_parked(); - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1,); diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 9c0e50647c..45169ed3af 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1424,7 +1424,7 @@ impl AppContext { &mut self, window_id: usize, build_root_view: F, - ) -> Option> + ) -> Option> where V: View, F: FnOnce(&mut ViewContext) -> V, @@ -3826,6 +3826,15 @@ impl WindowHandle { self.read_with(cx, |cx| cx.root_view().clone().downcast().unwrap()) } + /// Keep this window open until it's explicitly closed. + // + // TODO: Implement window dropping behavior when we don't call this. + pub fn detach(mut self, cx: &impl BorrowAppContext) -> ViewHandle { + let root = self.root(cx); + self.any_handle.ref_counts.take(); + root + } + pub fn read_with(&self, cx: &C, read: F) -> R where C: BorrowAppContext, @@ -3893,7 +3902,7 @@ impl WindowHandle { pub struct AnyWindowHandle { window_id: usize, root_view_type: TypeId, - ref_counts: Arc>, + ref_counts: Option>>, #[cfg(any(test, feature = "test-support"))] handle_id: usize, @@ -3913,7 +3922,7 @@ impl AnyWindowHandle { Self { window_id, root_view_type: TypeId::of::(), - ref_counts, + ref_counts: Some(ref_counts), #[cfg(any(test, feature = "test-support"))] handle_id, } @@ -3937,7 +3946,16 @@ impl AnyWindowHandle { impl Drop for AnyWindowHandle { fn drop(&mut self) { - self.ref_counts.lock().dec_window(self.window_id) + if let Some(ref_counts) = self.ref_counts.as_ref() { + ref_counts.lock().dec_window(self.window_id); + + #[cfg(any(test, feature = "test-support"))] + ref_counts + .lock() + .leak_detector + .lock() + .handle_dropped(self.window_id, self.handle_id); + } } } diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 9dc5d99bc5..7cdcbc2c8f 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -15,7 +15,7 @@ use crate::{ util::post_inc, Action, AnyView, AnyViewHandle, AppContext, BorrowAppContext, BorrowWindowContext, Effect, Element, Entity, Handle, LayoutContext, MouseRegion, MouseRegionId, SceneBuilder, Subscription, - View, ViewContext, ViewHandle, WindowInvalidation, + View, ViewContext, ViewHandle, WindowHandle, WindowInvalidation, }; use anyhow::{anyhow, bail, Result}; use collections::{HashMap, HashSet}; @@ -1151,15 +1151,15 @@ impl<'a> WindowContext<'a> { self.window.platform_window.prompt(level, msg, answers) } - pub fn replace_root_view(&mut self, build_root_view: F) -> ViewHandle + pub fn replace_root_view(&mut self, build_root_view: F) -> WindowHandle where V: View, F: FnOnce(&mut ViewContext) -> V, { let root_view = self.add_view(|cx| build_root_view(cx)); - self.window.root_view = Some(root_view.clone().into_any()); self.window.focused_view_id = Some(root_view.id()); - root_view + self.window.root_view = Some(root_view.into_any()); + WindowHandle::new(self.window_id, self.ref_counts.clone()) } pub fn add_view(&mut self, build_view: F) -> ViewHandle diff --git a/crates/language_tools/src/lsp_log_tests.rs b/crates/language_tools/src/lsp_log_tests.rs index d4a16b5758..ce05a417ad 100644 --- a/crates/language_tools/src/lsp_log_tests.rs +++ b/crates/language_tools/src/lsp_log_tests.rs @@ -61,7 +61,9 @@ async fn test_lsp_logs(cx: &mut TestAppContext) { .receive_notification::() .await; - let (_, log_view) = cx.add_window(|cx| LspLogView::new(project.clone(), log_store.clone(), cx)); + let log_view = cx + .add_window(|cx| LspLogView::new(project.clone(), log_store.clone(), cx)) + .detach(cx); language_server.notify::(lsp::LogMessageParams { message: "hello from the server".into(), diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 0be52646e6..fdc5ea108a 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -1780,7 +1780,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); assert_eq!( visible_entries_as_strings(&panel, 0..50, cx), @@ -1868,7 +1870,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "root1", cx); @@ -2219,7 +2223,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "root1", cx); @@ -2319,7 +2325,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/root1".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); panel.update(cx, |panel, cx| { @@ -2392,7 +2400,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); toggle_expand_dir(&panel, "src/test", cx); @@ -2481,7 +2491,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "src/", cx); @@ -2627,7 +2639,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); let new_search_events_count = Arc::new(AtomicUsize::new(0)); @@ -2714,7 +2728,9 @@ mod tests { .await; let project = Project::test(fs.clone(), ["/project_root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); panel.update(cx, |panel, cx| { diff --git a/crates/project_symbols/src/project_symbols.rs b/crates/project_symbols/src/project_symbols.rs index cbf914230d..8471f3a3a7 100644 --- a/crates/project_symbols/src/project_symbols.rs +++ b/crates/project_symbols/src/project_symbols.rs @@ -326,7 +326,9 @@ mod tests { }, ); - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); + let window_id = window.id(); // Create the project symbols view. let symbols = cx.add_view(window_id, |cx| { diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 45842aa561..1e635432bd 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -849,11 +849,13 @@ mod tests { cx, ) }); - let (window_id, _root_view) = cx.add_window(|_| EmptyView); + let window = cx.add_window(|_| EmptyView); - let editor = cx.add_view(window_id, |cx| Editor::for_buffer(buffer.clone(), None, cx)); + let editor = cx.add_view(window.id(), |cx| { + Editor::for_buffer(buffer.clone(), None, cx) + }); - let search_bar = cx.add_view(window_id, |cx| { + let search_bar = cx.add_view(window.id(), |cx| { let mut search_bar = BufferSearchBar::new(cx); search_bar.set_active_pane_item(Some(&editor), cx); search_bar.show(cx); @@ -1229,7 +1231,8 @@ mod tests { "Should pick a query with multiple results" ); let buffer = cx.add_model(|cx| Buffer::new(0, buffer_text, cx)); - let (window_id, _root_view) = cx.add_window(|_| EmptyView); + let window = cx.add_window(|_| EmptyView); + let window_id = window.id(); let editor = cx.add_view(window_id, |cx| Editor::for_buffer(buffer.clone(), None, cx)); @@ -1416,11 +1419,13 @@ mod tests { "# .unindent(); let buffer = cx.add_model(|cx| Buffer::new(0, buffer_text, cx)); - let (window_id, _root_view) = cx.add_window(|_| EmptyView); + let window = cx.add_window(|_| EmptyView); - let editor = cx.add_view(window_id, |cx| Editor::for_buffer(buffer.clone(), None, cx)); + let editor = cx.add_view(window.id(), |cx| { + Editor::for_buffer(buffer.clone(), None, cx) + }); - let search_bar = cx.add_view(window_id, |cx| { + let search_bar = cx.add_view(window.id(), |cx| { let mut search_bar = BufferSearchBar::new(cx); search_bar.set_active_pane_item(Some(&editor), cx); search_bar.show(cx); diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 1b4e32f4b8..e57edd3b14 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1447,7 +1447,9 @@ pub mod tests { .await; let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; let search = cx.add_model(|cx| ProjectSearch::new(project, cx)); - let (_, search_view) = cx.add_window(|cx| ProjectSearchView::new(search.clone(), cx)); + let search_view = cx + .add_window(|cx| ProjectSearchView::new(search.clone(), cx)) + .detach(cx); search_view.update(cx, |search_view, cx| { search_view @@ -1564,7 +1566,9 @@ pub mod tests { ) .await; let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let active_item = cx.read(|cx| { workspace @@ -1748,7 +1752,9 @@ pub mod tests { let worktree_id = project.read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() }); - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); let active_item = cx.read(|cx| { workspace @@ -1866,7 +1872,9 @@ pub mod tests { ) .await; let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); workspace.update(cx, |workspace, cx| { ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) }); diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index e108a05ccc..874978b4fc 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -1070,7 +1070,9 @@ mod tests { }); let project = Project::test(params.fs.clone(), [], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); (project, workspace) } diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index ee658c9cc9..98883fac33 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -1972,7 +1972,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); pane.update(cx, |pane, cx| { @@ -1987,7 +1988,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); // 1. Add with a destination index @@ -2065,7 +2067,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); // 1. Add with a destination index @@ -2141,7 +2144,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); // singleton view @@ -2209,7 +2213,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); add_labeled_item(&pane, "A", false, cx); @@ -2256,7 +2261,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); set_labeled_items(&pane, ["A", "B", "C*", "D", "E"], cx); @@ -2276,7 +2282,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); add_labeled_item(&pane, "A", true, cx); @@ -2299,7 +2306,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); set_labeled_items(&pane, ["A", "B", "C*", "D", "E"], cx); @@ -2319,7 +2327,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); set_labeled_items(&pane, ["A", "B", "C*", "D", "E"], cx); @@ -2339,7 +2348,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); add_labeled_item(&pane, "A", false, cx); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 434975216a..3222ea2eb8 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -793,7 +793,7 @@ impl Workspace { DB.next_id().await.unwrap_or(0) }; - let workspace = requesting_window_id + let window = requesting_window_id .and_then(|window_id| { cx.update(|cx| { cx.replace_root_view(window_id, |cx| { @@ -852,9 +852,9 @@ impl Workspace { ) }, ) - .1 }); + let workspace = window.root(&cx); (app_state.initialize_workspace)( workspace.downgrade(), serialized_workspace.is_some(), @@ -864,7 +864,7 @@ impl Workspace { .await .log_err(); - cx.update_window(workspace.window_id(), |cx| cx.activate_window()); + window.update(&mut cx, |cx| cx.activate_window()); let workspace = workspace.downgrade(); notify_if_database_failed(&workspace, &mut cx); @@ -3977,7 +3977,7 @@ pub fn join_remote_project( .await?; let window_bounds_override = window_bounds_env_override(&cx); - let (_, workspace) = cx.add_window( + let window = cx.add_window( (app_state.build_window_options)( window_bounds_override, None, @@ -3985,6 +3985,7 @@ pub fn join_remote_project( ), |cx| Workspace::new(0, project, app_state.clone(), cx), ); + let workspace = window.root(&cx); (app_state.initialize_workspace)( workspace.downgrade(), false, @@ -4113,10 +4114,11 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); // Adding an item with no ambiguity renders the tab without detail. - let item1 = cx.add_view(window_id, |_| { + let item1 = window.add_view(cx, |_| { let mut item = TestItem::new(); item.tab_descriptions = Some(vec!["c", "b1/c", "a/b1/c"]); item @@ -4128,7 +4130,7 @@ mod tests { // Adding an item that creates ambiguity increases the level of detail on // both tabs. - let item2 = cx.add_view(window_id, |_| { + let item2 = window.add_view(cx, |_| { let mut item = TestItem::new(); item.tab_descriptions = Some(vec!["c", "b2/c", "a/b2/c"]); item @@ -4142,7 +4144,7 @@ mod tests { // Adding an item that creates ambiguity increases the level of detail only // on the ambiguous tabs. In this case, the ambiguity can't be resolved so // we stop at the highest detail available. - let item3 = cx.add_view(window_id, |_| { + let item3 = window.add_view(cx, |_| { let mut item = TestItem::new(); item.tab_descriptions = Some(vec!["c", "b2/c", "a/b2/c"]); item @@ -4177,16 +4179,17 @@ mod tests { .await; let project = Project::test(fs, ["root1".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let worktree_id = project.read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() }); - let item1 = cx.add_view(window_id, |cx| { + let item1 = window.add_view(cx, |cx| { TestItem::new().with_project_items(&[TestProjectItem::new(1, "one.txt", cx)]) }); - let item2 = cx.add_view(window_id, |cx| { + let item2 = window.add_view(cx, |cx| { TestItem::new().with_project_items(&[TestProjectItem::new(2, "two.txt", cx)]) }); @@ -4201,14 +4204,14 @@ mod tests { ); }); assert_eq!( - cx.current_window_title(window_id).as_deref(), + cx.current_window_title(window.id()).as_deref(), Some("one.txt — root1") ); // Add a second item to a non-empty pane workspace.update(cx, |workspace, cx| workspace.add_item(Box::new(item2), cx)); assert_eq!( - cx.current_window_title(window_id).as_deref(), + cx.current_window_title(window.id()).as_deref(), Some("two.txt — root1") ); project.read_with(cx, |project, cx| { @@ -4227,7 +4230,7 @@ mod tests { .await .unwrap(); assert_eq!( - cx.current_window_title(window_id).as_deref(), + cx.current_window_title(window.id()).as_deref(), Some("one.txt — root1") ); project.read_with(cx, |project, cx| { @@ -4247,14 +4250,14 @@ mod tests { .await .unwrap(); assert_eq!( - cx.current_window_title(window_id).as_deref(), + cx.current_window_title(window.id()).as_deref(), Some("one.txt — root1, root2") ); // Remove a project folder project.update(cx, |project, cx| project.remove_worktree(worktree_id, cx)); assert_eq!( - cx.current_window_title(window_id).as_deref(), + cx.current_window_title(window.id()).as_deref(), Some("one.txt — root2") ); } @@ -4267,18 +4270,19 @@ mod tests { fs.insert_tree("/root", json!({ "one": "" })).await; let project = Project::test(fs, ["root".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = window.root(cx); // When there are no dirty items, there's nothing to do. - let item1 = cx.add_view(window_id, |_| TestItem::new()); + let item1 = window.add_view(cx, |_| TestItem::new()); workspace.update(cx, |w, cx| w.add_item(Box::new(item1.clone()), cx)); let task = workspace.update(cx, |w, cx| w.prepare_to_close(false, cx)); assert!(task.await.unwrap()); // When there are dirty untitled items, prompt to save each one. If the user // cancels any prompt, then abort. - let item2 = cx.add_view(window_id, |_| TestItem::new().with_dirty(true)); - let item3 = cx.add_view(window_id, |cx| { + let item2 = window.add_view(cx, |_| TestItem::new().with_dirty(true)); + let item3 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_project_items(&[TestProjectItem::new(1, "1.txt", cx)]) @@ -4289,9 +4293,9 @@ mod tests { }); let task = workspace.update(cx, |w, cx| w.prepare_to_close(false, cx)); cx.foreground().run_until_parked(); - cx.simulate_prompt_answer(window_id, 2 /* cancel */); + cx.simulate_prompt_answer(window.id(), 2 /* cancel */); cx.foreground().run_until_parked(); - assert!(!cx.has_pending_prompt(window_id)); + assert!(!cx.has_pending_prompt(window.id())); assert!(!task.await.unwrap()); } @@ -4302,26 +4306,27 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, None, cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); - let item1 = cx.add_view(window_id, |cx| { + let item1 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_project_items(&[TestProjectItem::new(1, "1.txt", cx)]) }); - let item2 = cx.add_view(window_id, |cx| { + let item2 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_conflict(true) .with_project_items(&[TestProjectItem::new(2, "2.txt", cx)]) }); - let item3 = cx.add_view(window_id, |cx| { + let item3 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_conflict(true) .with_project_items(&[TestProjectItem::new(3, "3.txt", cx)]) }); - let item4 = cx.add_view(window_id, |cx| { + let item4 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_project_items(&[TestProjectItem::new_untitled(cx)]) @@ -4349,10 +4354,10 @@ mod tests { assert_eq!(pane.items_len(), 4); assert_eq!(pane.active_item().unwrap().id(), item1.id()); }); - assert!(cx.has_pending_prompt(window_id)); + assert!(cx.has_pending_prompt(window.id())); // Confirm saving item 1. - cx.simulate_prompt_answer(window_id, 0); + cx.simulate_prompt_answer(window.id(), 0); cx.foreground().run_until_parked(); // Item 1 is saved. There's a prompt to save item 3. @@ -4363,10 +4368,10 @@ mod tests { assert_eq!(pane.items_len(), 3); assert_eq!(pane.active_item().unwrap().id(), item3.id()); }); - assert!(cx.has_pending_prompt(window_id)); + assert!(cx.has_pending_prompt(window.id())); // Cancel saving item 3. - cx.simulate_prompt_answer(window_id, 1); + cx.simulate_prompt_answer(window.id(), 1); cx.foreground().run_until_parked(); // Item 3 is reloaded. There's a prompt to save item 4. @@ -4377,10 +4382,10 @@ mod tests { assert_eq!(pane.items_len(), 2); assert_eq!(pane.active_item().unwrap().id(), item4.id()); }); - assert!(cx.has_pending_prompt(window_id)); + assert!(cx.has_pending_prompt(window.id())); // Confirm saving item 4. - cx.simulate_prompt_answer(window_id, 0); + cx.simulate_prompt_answer(window.id(), 0); cx.foreground().run_until_parked(); // There's a prompt for a path for item 4. @@ -4404,13 +4409,14 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); // Create several workspace items with single project entries, and two // workspace items with multiple project entries. let single_entry_items = (0..=4) .map(|project_entry_id| { - cx.add_view(window_id, |cx| { + window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_project_items(&[TestProjectItem::new( @@ -4421,7 +4427,7 @@ mod tests { }) }) .collect::>(); - let item_2_3 = cx.add_view(window_id, |cx| { + let item_2_3 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_singleton(false) @@ -4430,7 +4436,7 @@ mod tests { single_entry_items[3].read(cx).project_items[0].clone(), ]) }); - let item_3_4 = cx.add_view(window_id, |cx| { + let item_3_4 = window.add_view(cx, |cx| { TestItem::new() .with_dirty(true) .with_singleton(false) @@ -4482,7 +4488,7 @@ mod tests { &[ProjectEntryId::from_proto(0)] ); }); - cx.simulate_prompt_answer(window_id, 0); + cx.simulate_prompt_answer(window.id(), 0); cx.foreground().run_until_parked(); left_pane.read_with(cx, |pane, cx| { @@ -4491,7 +4497,7 @@ mod tests { &[ProjectEntryId::from_proto(2)] ); }); - cx.simulate_prompt_answer(window_id, 0); + cx.simulate_prompt_answer(window.id(), 0); cx.foreground().run_until_parked(); close.await.unwrap(); @@ -4507,10 +4513,11 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); - let item = cx.add_view(window_id, |cx| { + let item = window.add_view(cx, |cx| { TestItem::new().with_project_items(&[TestProjectItem::new(1, "1.txt", cx)]) }); let item_id = item.id(); @@ -4550,7 +4557,7 @@ mod tests { item.read_with(cx, |item, _| assert_eq!(item.save_count, 2)); // Deactivating the window still saves the file. - cx.simulate_window_activation(Some(window_id)); + cx.simulate_window_activation(Some(window.id())); item.update(cx, |item, cx| { cx.focus_self(); item.is_dirty = true; @@ -4592,7 +4599,7 @@ mod tests { pane.update(cx, |pane, cx| pane.close_items(cx, move |id| id == item_id)) .await .unwrap(); - assert!(!cx.has_pending_prompt(window_id)); + assert!(!cx.has_pending_prompt(window.id())); item.read_with(cx, |item, _| assert_eq!(item.save_count, 5)); // Add the item again, ensuring autosave is prevented if the underlying file has been deleted. @@ -4613,7 +4620,7 @@ mod tests { let _close_items = pane.update(cx, |pane, cx| pane.close_items(cx, move |id| id == item_id)); deterministic.run_until_parked(); - assert!(cx.has_pending_prompt(window_id)); + assert!(cx.has_pending_prompt(window.id())); item.read_with(cx, |item, _| assert_eq!(item.save_count, 5)); } @@ -4624,9 +4631,10 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); - let item = cx.add_view(window_id, |cx| { + let item = window.add_view(cx, |cx| { TestItem::new().with_project_items(&[TestProjectItem::new(1, "1.txt", cx)]) }); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); @@ -4677,7 +4685,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); let panel = workspace.update(cx, |workspace, cx| { let panel = cx.add_view(|_| TestPanel::new(DockPosition::Right)); @@ -4824,7 +4833,8 @@ mod tests { let fs = FakeFs::new(cx.background()); let project = Project::test(fs, [], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); let (panel_1, panel_2) = workspace.update(cx, |workspace, cx| { // Add panel_1 on the left, panel_2 on the right. @@ -4979,7 +4989,7 @@ mod tests { // If focus is transferred to another view that's not a panel or another pane, we still show // the panel as zoomed. - let focus_receiver = cx.add_view(window_id, |_| EmptyView); + let focus_receiver = window.add_view(cx, |_| EmptyView); focus_receiver.update(cx, |_, cx| cx.focus_self()); workspace.read_with(cx, |workspace, _| { assert_eq!(workspace.zoomed, Some(panel_1.downgrade().into_any())); diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 4b0bf1cd4c..1770c5648e 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -983,7 +983,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); let entries = cx.read(|cx| workspace.file_project_paths(cx)); let file1 = entries[0].clone(); @@ -1295,7 +1297,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); // Open a file within an existing worktree. workspace @@ -1336,7 +1340,9 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; project.update(cx, |project, _| project.languages().add(rust_lang())); - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let worktree = cx.read(|cx| workspace.read(cx).worktrees(cx).next().unwrap()); // Create a new untitled buffer @@ -1429,7 +1435,9 @@ mod tests { let project = Project::test(app_state.fs.clone(), [], cx).await; project.update(cx, |project, _| project.languages().add(rust_lang())); - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); // Create a new untitled buffer cx.dispatch_action(window_id, NewFile); @@ -1480,7 +1488,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (window_id, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let window = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = window.root(cx); + let window_id = window.id(); let entries = cx.read(|cx| workspace.file_project_paths(cx)); let file1 = entries[0].clone(); @@ -1554,7 +1564,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project.clone(), cx)) + .detach(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let entries = cx.read(|cx| workspace.file_project_paths(cx)); @@ -1831,7 +1843,9 @@ mod tests { .await; let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; - let (_, workspace) = cx.add_window(|cx| Workspace::test_new(project, cx)); + let workspace = cx + .add_window(|cx| Workspace::test_new(project, cx)) + .detach(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let entries = cx.read(|cx| workspace.file_project_paths(cx)); @@ -2073,7 +2087,8 @@ mod tests { cx.foreground().run_until_parked(); - let (window_id, _view) = cx.add_window(|_| TestView); + let window = cx.add_window(|_| TestView); + let window_id = window.id(); // Test loading the keymap base at all assert_key_bindings_for( @@ -2243,7 +2258,8 @@ mod tests { cx.foreground().run_until_parked(); - let (window_id, _view) = cx.add_window(|_| TestView); + let window = cx.add_window(|_| TestView); + let window_id = window.id(); // Test loading the keymap base at all assert_key_bindings_for( From 8e36da1382e84c87c5d3576a848eb06645bb21ab Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 2 Aug 2023 15:02:55 -0600 Subject: [PATCH 114/120] Get tests passing --- crates/gpui/src/app.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 45169ed3af..bd615522c2 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -3831,7 +3831,14 @@ impl WindowHandle { // TODO: Implement window dropping behavior when we don't call this. pub fn detach(mut self, cx: &impl BorrowAppContext) -> ViewHandle { let root = self.root(cx); - self.any_handle.ref_counts.take(); + let ref_counts = self.any_handle.ref_counts.take(); + #[cfg(any(test, feature = "test-support"))] + ref_counts + .unwrap() + .lock() + .leak_detector + .lock() + .handle_dropped(self.id(), self.any_handle.handle_id); root } From df4480ba52aede20b416afb87a0b0e17eb025682 Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 2 Aug 2023 17:33:56 -0400 Subject: [PATCH 115/120] Use the same font size for hovered state of LSP status This element is used for the update state as well for some reason so while we don't normally ever see this state, it is used when the status is acting as the restart to update button --- styles/src/style_tree/status_bar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles/src/style_tree/status_bar.ts b/styles/src/style_tree/status_bar.ts index 6261939994..d35b721c6c 100644 --- a/styles/src/style_tree/status_bar.ts +++ b/styles/src/style_tree/status_bar.ts @@ -49,7 +49,7 @@ export default function status_bar(): any { }, state: { hovered: { - message: text(layer, "sans"), + message: text(layer, "sans", { size: "xs" }), icon_color: foreground(layer), background: background(layer, "hovered"), }, From 3c938a7377bbc2a3147f71da53ef05a1f45eaa5a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 3 Aug 2023 08:10:16 -0600 Subject: [PATCH 116/120] WIP --- crates/gpui/src/app.rs | 16 ++++++++++++---- crates/gpui/src/app/test_app_context.rs | 2 ++ crates/gpui/src/app/window.rs | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index bd615522c2..9b847e9c0c 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -130,10 +130,12 @@ pub trait BorrowAppContext { } pub trait BorrowWindowContext { - fn read_with(&self, window_id: usize, f: F) -> T + type Return; + + fn read_with(&self, window_id: usize, f: F) -> Self::Return where F: FnOnce(&WindowContext) -> T; - fn update(&mut self, window_id: usize, f: F) -> T + fn update(&mut self, window_id: usize, f: F) -> Self::Return where F: FnOnce(&mut WindowContext) -> T; } @@ -3358,6 +3360,8 @@ impl BorrowAppContext for ViewContext<'_, '_, V> { } impl BorrowWindowContext for ViewContext<'_, '_, V> { + type Return = T; + fn read_with T>(&self, window_id: usize, f: F) -> T { BorrowWindowContext::read_with(&*self.window_context, window_id, f) } @@ -3463,6 +3467,8 @@ impl BorrowAppContext for LayoutContext<'_, '_, '_, V> { } impl BorrowWindowContext for LayoutContext<'_, '_, '_, V> { + type Return = T; + fn read_with T>(&self, window_id: usize, f: F) -> T { BorrowWindowContext::read_with(&*self.view_context, window_id, f) } @@ -3515,6 +3521,8 @@ impl BorrowAppContext for EventContext<'_, '_, '_, V> { } impl BorrowWindowContext for EventContext<'_, '_, '_, V> { + type Return = T; + fn read_with T>(&self, window_id: usize, f: F) -> T { BorrowWindowContext::read_with(&*self.view_context, window_id, f) } @@ -4013,7 +4021,7 @@ impl ViewHandle { cx.read_view(self) } - pub fn read_with(&self, cx: &C, read: F) -> S + pub fn read_with(&self, cx: &C, read: F) -> C::Return where C: BorrowWindowContext, F: FnOnce(&T, &ViewContext) -> S, @@ -4024,7 +4032,7 @@ impl ViewHandle { }) } - pub fn update(&self, cx: &mut C, update: F) -> S + pub fn update(&self, cx: &mut C, update: F) -> C::Return where C: BorrowWindowContext, F: FnOnce(&mut T, &mut ViewContext) -> S, diff --git a/crates/gpui/src/app/test_app_context.rs b/crates/gpui/src/app/test_app_context.rs index 80f1037466..5c7947a448 100644 --- a/crates/gpui/src/app/test_app_context.rs +++ b/crates/gpui/src/app/test_app_context.rs @@ -406,6 +406,8 @@ impl BorrowAppContext for TestAppContext { } impl BorrowWindowContext for TestAppContext { + type Return = T; + fn read_with T>(&self, window_id: usize, f: F) -> T { self.cx .borrow() diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 7cdcbc2c8f..671d2b38c7 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -142,6 +142,8 @@ impl BorrowAppContext for WindowContext<'_> { } impl BorrowWindowContext for WindowContext<'_> { + type Return = T; + fn read_with T>(&self, window_id: usize, f: F) -> T { if self.window_id == window_id { f(self) From ee1b4a52cc41cb7c331ad9936f1c1cbfb220057e Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Thu, 3 Aug 2023 18:57:43 -0400 Subject: [PATCH 117/120] Add `PathExt` trait (#2823) This PR adds a `PathExt` trait. It pulls in our existing `compact()` function, as a method, and then adds a method, and testing, for `icon_suffix()`. A test was added to fix: - https://github.com/zed-industries/community/issues/1877 Release Notes: - Fixed a bug where file icons would not be registered for files with with `.` characters in their name ([#1877](https://github.com/zed-industries/community/issues/1877)). --- crates/editor/src/items.rs | 9 +- crates/project_panel/src/file_associations.rs | 11 +- .../src/highlighted_workspace_location.rs | 3 +- crates/recent_projects/src/recent_projects.rs | 3 +- crates/util/src/paths.rs | 118 ++++++++++++------ 5 files changed, 88 insertions(+), 56 deletions(-) diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 7c8fe12aa0..b99977a60e 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -28,7 +28,10 @@ use std::{ path::{Path, PathBuf}, }; use text::Selection; -use util::{paths::FILE_ROW_COLUMN_DELIMITER, ResultExt, TryFutureExt}; +use util::{ + paths::{PathExt, FILE_ROW_COLUMN_DELIMITER}, + ResultExt, TryFutureExt, +}; use workspace::item::{BreadcrumbText, FollowableItemHandle}; use workspace::{ item::{FollowableItem, Item, ItemEvent, ItemHandle, ProjectItem}, @@ -546,9 +549,7 @@ impl Item for Editor { .and_then(|f| f.as_local())? .abs_path(cx); - let file_path = util::paths::compact(&file_path) - .to_string_lossy() - .to_string(); + let file_path = file_path.compact().to_string_lossy().to_string(); Some(file_path.into()) } diff --git a/crates/project_panel/src/file_associations.rs b/crates/project_panel/src/file_associations.rs index 2694fa1697..f2692b96db 100644 --- a/crates/project_panel/src/file_associations.rs +++ b/crates/project_panel/src/file_associations.rs @@ -4,7 +4,7 @@ use collections::HashMap; use gpui::{AppContext, AssetSource}; use serde_derive::Deserialize; -use util::iife; +use util::{iife, paths::PathExt}; #[derive(Deserialize, Debug)] struct TypeConfig { @@ -48,14 +48,7 @@ impl FileAssociations { // FIXME: Associate a type with the languages and have the file's langauge // override these associations iife!({ - let suffix = path - .file_name() - .and_then(|os_str| os_str.to_str()) - .and_then(|file_name| { - file_name - .find('.') - .and_then(|dot_index| file_name.get(dot_index + 1..)) - })?; + let suffix = path.icon_suffix()?; this.suffixes .get(suffix) diff --git a/crates/recent_projects/src/highlighted_workspace_location.rs b/crates/recent_projects/src/highlighted_workspace_location.rs index d3ecfb74fb..f915cb24ed 100644 --- a/crates/recent_projects/src/highlighted_workspace_location.rs +++ b/crates/recent_projects/src/highlighted_workspace_location.rs @@ -5,6 +5,7 @@ use gpui::{ elements::{Label, LabelStyle}, AnyElement, Element, View, }; +use util::paths::PathExt; use workspace::WorkspaceLocation; pub struct HighlightedText { @@ -61,7 +62,7 @@ impl HighlightedWorkspaceLocation { .paths() .iter() .map(|path| { - let path = util::paths::compact(&path); + let path = path.compact(); let highlighted_text = Self::highlights_for_path( path.as_ref(), &string_match.positions, diff --git a/crates/recent_projects/src/recent_projects.rs b/crates/recent_projects/src/recent_projects.rs index 5bf9ba6ccf..7a09ac259f 100644 --- a/crates/recent_projects/src/recent_projects.rs +++ b/crates/recent_projects/src/recent_projects.rs @@ -11,6 +11,7 @@ use highlighted_workspace_location::HighlightedWorkspaceLocation; use ordered_float::OrderedFloat; use picker::{Picker, PickerDelegate, PickerEvent}; use std::sync::Arc; +use util::paths::PathExt; use workspace::{ notifications::simple_message_notification::MessageNotification, Workspace, WorkspaceLocation, WORKSPACE_DB, @@ -134,7 +135,7 @@ impl PickerDelegate for RecentProjectsDelegate { let combined_string = location .paths() .iter() - .map(|path| util::paths::compact(&path).to_string_lossy().into_owned()) + .map(|path| path.compact().to_string_lossy().into_owned()) .collect::>() .join(""); StringMatchCandidate::new(id, combined_string) diff --git a/crates/util/src/paths.rs b/crates/util/src/paths.rs index 5df0ed12e9..7e0b240570 100644 --- a/crates/util/src/paths.rs +++ b/crates/util/src/paths.rs @@ -30,49 +30,47 @@ pub mod legacy { } } -/// Compacts a given file path by replacing the user's home directory -/// prefix with a tilde (`~`). -/// -/// # Arguments -/// -/// * `path` - A reference to a `Path` representing the file path to compact. -/// -/// # Examples -/// -/// ``` -/// use std::path::{Path, PathBuf}; -/// use util::paths::compact; -/// let path: PathBuf = [ -/// util::paths::HOME.to_string_lossy().to_string(), -/// "some_file.txt".to_string(), -/// ] -/// .iter() -/// .collect(); -/// if cfg!(target_os = "linux") || cfg!(target_os = "macos") { -/// assert_eq!(compact(&path).to_str(), Some("~/some_file.txt")); -/// } else { -/// assert_eq!(compact(&path).to_str(), path.to_str()); -/// } -/// ``` -/// -/// # Returns -/// -/// * A `PathBuf` containing the compacted file path. If the input path -/// does not have the user's home directory prefix, or if we are not on -/// Linux or macOS, the original path is returned unchanged. -pub fn compact(path: &Path) -> PathBuf { - if cfg!(target_os = "linux") || cfg!(target_os = "macos") { - match path.strip_prefix(HOME.as_path()) { - Ok(relative_path) => { - let mut shortened_path = PathBuf::new(); - shortened_path.push("~"); - shortened_path.push(relative_path); - shortened_path +pub trait PathExt { + fn compact(&self) -> PathBuf; + fn icon_suffix(&self) -> Option<&str>; +} + +impl> PathExt for T { + /// Compacts a given file path by replacing the user's home directory + /// prefix with a tilde (`~`). + /// + /// # Returns + /// + /// * A `PathBuf` containing the compacted file path. If the input path + /// does not have the user's home directory prefix, or if we are not on + /// Linux or macOS, the original path is returned unchanged. + fn compact(&self) -> PathBuf { + if cfg!(target_os = "linux") || cfg!(target_os = "macos") { + match self.as_ref().strip_prefix(HOME.as_path()) { + Ok(relative_path) => { + let mut shortened_path = PathBuf::new(); + shortened_path.push("~"); + shortened_path.push(relative_path); + shortened_path + } + Err(_) => self.as_ref().to_path_buf(), } - Err(_) => path.to_path_buf(), + } else { + self.as_ref().to_path_buf() } - } else { - path.to_path_buf() + } + + fn icon_suffix(&self) -> Option<&str> { + let file_name = self.as_ref().file_name()?.to_str()?; + + if file_name.starts_with(".") { + return file_name.strip_prefix("."); + } + + self.as_ref() + .extension() + .map(|extension| extension.to_str()) + .flatten() } } @@ -279,4 +277,42 @@ mod tests { ); } } + + #[test] + fn test_path_compact() { + let path: PathBuf = [ + HOME.to_string_lossy().to_string(), + "some_file.txt".to_string(), + ] + .iter() + .collect(); + if cfg!(target_os = "linux") || cfg!(target_os = "macos") { + assert_eq!(path.compact().to_str(), Some("~/some_file.txt")); + } else { + assert_eq!(path.compact().to_str(), path.to_str()); + } + } + + #[test] + fn test_path_suffix() { + // No dots in name + let path = Path::new("/a/b/c/file_name.rs"); + assert_eq!(path.icon_suffix(), Some("rs")); + + // Single dot in name + let path = Path::new("/a/b/c/file.name.rs"); + assert_eq!(path.icon_suffix(), Some("rs")); + + // Multiple dots in name + let path = Path::new("/a/b/c/long.file.name.rs"); + assert_eq!(path.icon_suffix(), Some("rs")); + + // Hidden file, no extension + let path = Path::new("/a/b/c/.gitignore"); + assert_eq!(path.icon_suffix(), Some("gitignore")); + + // Hidden file, with extension + let path = Path::new("/a/b/c/.eslintrc.js"); + assert_eq!(path.icon_suffix(), Some("eslintrc.js")); + } } From afcc0d621b8524d4b3cfa9a5ed19b00c11666348 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 3 Aug 2023 17:03:39 -0600 Subject: [PATCH 118/120] WIP --- crates/editor/src/editor_tests.rs | 98 ++++---- crates/editor/src/element.rs | 6 +- crates/editor/src/inlay_hint_cache.rs | 14 +- crates/file_finder/src/file_finder.rs | 20 +- crates/gpui/src/app.rs | 278 ++++++++++++--------- crates/gpui/src/app/test_app_context.rs | 10 +- crates/gpui/src/app/window.rs | 10 +- crates/language_tools/src/lsp_log_tests.rs | 2 +- crates/project_panel/src/project_panel.rs | 8 +- crates/search/src/project_search.rs | 4 +- crates/terminal_view/src/terminal_view.rs | 2 +- crates/workspace/src/workspace.rs | 104 ++++---- crates/zed/src/zed.rs | 6 +- 13 files changed, 300 insertions(+), 262 deletions(-) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 96921643d4..a114cd437b 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -64,7 +64,7 @@ fn test_edit_events(cx: &mut TestAppContext) { Editor::for_buffer(buffer.clone(), None, cx) } }) - .detach(cx); + .root(cx); let editor2 = cx .add_window({ let events = events.clone(); @@ -81,7 +81,7 @@ fn test_edit_events(cx: &mut TestAppContext) { Editor::for_buffer(buffer.clone(), None, cx) } }) - .detach(cx); + .root(cx); assert_eq!(mem::take(&mut *events.borrow_mut()), []); // Mutating editor 1 will emit an `Edited` event only for that editor. @@ -179,7 +179,7 @@ fn test_undo_redo_with_selection_restoration(cx: &mut TestAppContext) { let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); let editor = cx .add_window(|cx| build_editor(buffer.clone(), cx)) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { editor.start_transaction_at(now, cx); @@ -354,7 +354,7 @@ fn test_selection_with_mouse(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\nddddddd\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); editor.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx); }); @@ -423,7 +423,7 @@ fn test_canceling_pending_selection(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(2, 2), false, 1, cx); @@ -471,7 +471,7 @@ fn test_clone(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&text, cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { editor.change_selections(None, cx, |s| s.select_ranges(selection_ranges.clone())); @@ -489,7 +489,7 @@ fn test_clone(cx: &mut TestAppContext) { .update(cx, |editor, cx| { cx.add_window(Default::default(), |cx| editor.clone(cx)) }) - .detach(cx); + .root(cx); let snapshot = editor.update(cx, |e, cx| e.snapshot(cx)); let cloned_snapshot = cloned_editor.update(cx, |e, cx| e.snapshot(cx)); @@ -639,7 +639,7 @@ fn test_cancel(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("aaaaaa\nbbbbbb\ncccccc\ndddddd\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.begin_selection(DisplayPoint::new(3, 4), false, 1, cx); @@ -704,7 +704,7 @@ fn test_fold_action(cx: &mut TestAppContext) { ); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -774,7 +774,7 @@ fn test_move_cursor(cx: &mut TestAppContext) { let buffer = cx.update(|cx| MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx)); let view = cx .add_window(|cx| build_editor(buffer.clone(), cx)) - .detach(cx); + .root(cx); buffer.update(cx, |buffer, cx| { buffer.edit( @@ -854,7 +854,7 @@ fn test_move_cursor_multibyte(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcde\nαβγδε\n", cx); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); assert_eq!('ⓐ'.len_utf8(), 3); assert_eq!('α'.len_utf8(), 2); @@ -961,7 +961,7 @@ fn test_move_cursor_different_line_lengths(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("ⓐⓑⓒⓓⓔ\nabcd\nαβγ\nabcd\nⓐⓑⓒⓓⓔ\n", cx); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([empty_range(0, "ⓐⓑⓒⓓⓔ".len())]); @@ -1013,7 +1013,7 @@ fn test_beginning_end_of_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\n def", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -1178,7 +1178,7 @@ fn test_prev_next_word_boundary(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("use std::str::{foo, bar}\n\n {baz.qux()}", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -1233,7 +1233,7 @@ fn test_prev_next_word_bounds_with_soft_wrap(cx: &mut TestAppContext) { MultiBuffer::build_simple("use one::{\n two::three::four::five\n};", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.set_wrap_width(Some(140.), cx); @@ -1568,7 +1568,7 @@ fn test_delete_to_word_boundary(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("one two three four", cx); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -1606,7 +1606,7 @@ fn test_newline(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("aaaa\n bbbb\n", cx); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -1651,7 +1651,7 @@ fn test_newline_with_old_selections(cx: &mut TestAppContext) { }); editor }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { // Edit the buffer directly, deleting ranges surrounding the editor's selections @@ -1863,7 +1863,7 @@ fn test_insert_with_old_selections(cx: &mut TestAppContext) { editor.change_selections(None, cx, |s| s.select_ranges([3..4, 11..12, 19..20])); editor }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { // Edit the buffer directly, deleting ranges surrounding the editor's selections @@ -2375,7 +2375,7 @@ fn test_delete_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2400,7 +2400,7 @@ fn test_delete_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([DisplayPoint::new(2, 0)..DisplayPoint::new(0, 1)]) @@ -2704,7 +2704,7 @@ fn test_duplicate_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2732,7 +2732,7 @@ fn test_duplicate_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\ndef\nghi\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -2761,7 +2761,7 @@ fn test_move_line_up_down(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.fold_ranges( vec![ @@ -2862,7 +2862,7 @@ fn test_move_line_up_down_with_blocks(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&sample_text(10, 5, 'a'), cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { let snapshot = editor.buffer.read(cx).snapshot(cx); editor.insert_blocks( @@ -3182,7 +3182,7 @@ fn test_select_all(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\nde\nfgh", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.select_all(&SelectAll, cx); assert_eq!( @@ -3201,7 +3201,7 @@ fn test_select_line(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&sample_text(6, 5, 'a'), cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { s.select_display_ranges([ @@ -3250,7 +3250,7 @@ fn test_split_selection_into_lines(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&sample_text(9, 5, 'a'), cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.fold_ranges( vec![ @@ -3323,7 +3323,7 @@ fn test_add_selection_above_below(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple("abc\ndefghi\n\njk\nlmno\n", cx); build_editor(buffer, cx) }) - .detach(cx); + .root(cx); view.update(cx, |view, cx| { view.change_selections(None, cx, |s| { @@ -3608,7 +3608,7 @@ async fn test_select_larger_smaller_syntax_node(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let view = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -3771,7 +3771,7 @@ async fn test_autoindent_selections(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor .condition(cx, |editor, cx| !editor.buffer.read(cx).is_parsing(cx)) .await; @@ -4334,7 +4334,7 @@ async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let view = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -4482,7 +4482,7 @@ async fn test_delete_autoclose_pair(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor .condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -4572,7 +4572,7 @@ async fn test_snippets(cx: &mut gpui::TestAppContext) { ); let buffer = cx.update(|cx| MultiBuffer::build_simple(&text, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor.update(cx, |editor, cx| { let snippet = Snippet::parse("f(${1:one}, ${2:two}, ${1:three})$0").unwrap(); @@ -4702,7 +4702,7 @@ async fn test_document_format_during_save(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); assert!(cx.read(|cx| editor.is_dirty(cx))); @@ -4814,7 +4814,7 @@ async fn test_range_format_during_save(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); assert!(cx.read(|cx| editor.is_dirty(cx))); @@ -4928,7 +4928,7 @@ async fn test_document_format_manual_trigger(cx: &mut gpui::TestAppContext) { let fake_server = fake_servers.next().await.unwrap(); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let editor = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); editor.update(cx, |editor, cx| editor.set_text("one\ntwo\nthree\n", cx)); let format = editor.update(cx, |editor, cx| { @@ -5706,7 +5706,7 @@ fn test_editing_disjoint_excerpts(cx: &mut TestAppContext) { multibuffer }); - let view = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); + let view = cx.add_window(|cx| build_editor(multibuffer, cx)).root(cx); view.update(cx, |view, cx| { assert_eq!(view.text(cx), "aaaa\nbbbb"); view.change_selections(None, cx, |s| { @@ -5776,7 +5776,7 @@ fn test_editing_overlapping_excerpts(cx: &mut TestAppContext) { multibuffer }); - let view = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); + let view = cx.add_window(|cx| build_editor(multibuffer, cx)).root(cx); view.update(cx, |view, cx| { let (expected_text, selection_ranges) = marked_text_ranges( indoc! {" @@ -5869,7 +5869,7 @@ fn test_refresh_selections(cx: &mut TestAppContext) { ); editor }) - .detach(cx); + .root(cx); // Refreshing selections is a no-op when excerpts haven't changed. editor.update(cx, |editor, cx| { @@ -5950,7 +5950,7 @@ fn test_refresh_selections_while_selecting_with_mouse(cx: &mut TestAppContext) { ); editor }) - .detach(cx); + .root(cx); multibuffer.update(cx, |multibuffer, cx| { multibuffer.remove_excerpts([excerpt1_id.unwrap()], cx); @@ -6013,7 +6013,7 @@ async fn test_extra_newline_insertion(cx: &mut gpui::TestAppContext) { let buffer = cx.add_model(|cx| Buffer::new(0, text, cx).with_language(language, cx)); let buffer = cx.add_model(|cx| MultiBuffer::singleton(buffer, cx)); - let view = cx.add_window(|cx| build_editor(buffer, cx)).detach(cx); + let view = cx.add_window(|cx| build_editor(buffer, cx)).root(cx); view.condition(cx, |view, cx| !view.buffer.read(cx).is_parsing(cx)) .await; @@ -6054,7 +6054,7 @@ fn test_highlighted_ranges(cx: &mut TestAppContext) { let buffer = MultiBuffer::build_simple(&sample_text(16, 8, 'a'), cx); build_editor(buffer.clone(), cx) }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { struct Type1; @@ -6145,7 +6145,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) { }); let leader = cx .add_window(|cx| build_editor(buffer.clone(), cx)) - .detach(cx); + .root(cx); let follower = cx .update(|cx| { cx.add_window( @@ -6156,7 +6156,7 @@ async fn test_following(cx: &mut gpui::TestAppContext) { |cx| build_editor(buffer.clone(), cx), ) }) - .detach(cx); + .root(cx); let is_still_following = Rc::new(RefCell::new(true)); let follower_edit_event_count = Rc::new(RefCell::new(0)); @@ -6289,7 +6289,7 @@ async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) { let project = Project::test(fs, ["/file.rs".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let leader = pane.update(cx, |_, cx| { @@ -7033,7 +7033,7 @@ async fn test_copilot_multibuffer( ); multibuffer }); - let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).root(cx); handle_copilot_completion_request( &copilot_lsp, @@ -7163,7 +7163,7 @@ async fn test_copilot_disabled_globs( ); multibuffer }); - let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).detach(cx); + let editor = cx.add_window(|cx| build_editor(multibuffer, cx)).root(cx); let mut copilot_requests = copilot_lsp .handle_request::(move |_params, _cx| async move { @@ -7244,7 +7244,7 @@ async fn test_on_type_formatting_not_triggered(cx: &mut gpui::TestAppContext) { project.update(cx, |project, _| project.languages().add(Arc::new(language))); let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index dc40e7fb85..2d4b273f5e 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -3007,7 +3007,7 @@ mod tests { let buffer = MultiBuffer::build_simple(&sample_text(6, 6, 'a'), cx); Editor::new(EditorMode::Full, buffer, None, None, cx) }) - .detach(cx); + .root(cx); let element = EditorElement::new(editor.read_with(cx, |editor, cx| editor.style(cx))); let layouts = editor.update(cx, |editor, cx| { @@ -3028,7 +3028,7 @@ mod tests { let buffer = MultiBuffer::build_simple("", cx); Editor::new(EditorMode::Full, buffer, None, None, cx) }) - .detach(cx); + .root(cx); editor.update(cx, |editor, cx| { editor.set_placeholder_text("hello", cx); @@ -3240,7 +3240,7 @@ mod tests { let buffer = MultiBuffer::build_simple(&input_text, cx); Editor::new(editor_mode, buffer, None, None, cx) }) - .detach(cx); + .root(cx); let mut element = EditorElement::new(editor.read_with(cx, |editor, cx| editor.style(cx))); let (_, layout_state) = editor.update(cx, |editor, cx| { diff --git a/crates/editor/src/inlay_hint_cache.rs b/crates/editor/src/inlay_hint_cache.rs index 089cbb2995..47a27c049f 100644 --- a/crates/editor/src/inlay_hint_cache.rs +++ b/crates/editor/src/inlay_hint_cache.rs @@ -1138,7 +1138,7 @@ mod tests { let project = Project::test(fs, ["/a".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -1840,7 +1840,7 @@ mod tests { project.update(cx, |project, _| project.languages().add(Arc::new(language))); let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -1995,7 +1995,7 @@ mod tests { }); let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -2083,7 +2083,7 @@ mod tests { cx.foreground().run_until_parked(); let editor = cx .add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)) - .detach(cx); + .root(cx); let editor_edited = Arc::new(AtomicBool::new(false)); let fake_server = fake_servers.next().await.unwrap(); let closure_editor_edited = Arc::clone(&editor_edited); @@ -2337,7 +2337,7 @@ all hints should be invalidated and requeried for all of its visible excerpts" }); let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() @@ -2384,7 +2384,7 @@ all hints should be invalidated and requeried for all of its visible excerpts" cx.foreground().run_until_parked(); let editor = cx .add_window(|cx| Editor::for_multibuffer(multibuffer, Some(project.clone()), cx)) - .detach(cx); + .root(cx); let editor_edited = Arc::new(AtomicBool::new(false)); let fake_server = fake_servers.next().await.unwrap(); let closure_editor_edited = Arc::clone(&editor_edited); @@ -2574,7 +2574,7 @@ all hints should be invalidated and requeried for all of its visible excerpts" project.update(cx, |project, _| project.languages().add(Arc::new(language))); let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let worktree_id = workspace.update(cx, |workspace, cx| { workspace.project().read_with(cx, |project, cx| { project.worktrees(cx).next().unwrap().read(cx).id() diff --git a/crates/file_finder/src/file_finder.rs b/crates/file_finder/src/file_finder.rs index 2c9d9c0c71..12bf324262 100644 --- a/crates/file_finder/src/file_finder.rs +++ b/crates/file_finder/src/file_finder.rs @@ -842,7 +842,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/dir".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let finder = cx .add_window(|cx| { Picker::new( @@ -856,7 +856,7 @@ mod tests { cx, ) }) - .detach(cx); + .root(cx); let query = test_path_like("hi"); finder @@ -940,7 +940,7 @@ mod tests { .await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let finder = cx .add_window(|cx| { Picker::new( @@ -954,7 +954,7 @@ mod tests { cx, ) }) - .detach(cx); + .root(cx); finder .update(cx, |f, cx| { f.delegate_mut().spawn_search(test_path_like("hi"), cx) @@ -980,7 +980,7 @@ mod tests { .await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let finder = cx .add_window(|cx| { Picker::new( @@ -994,7 +994,7 @@ mod tests { cx, ) }) - .detach(cx); + .root(cx); // Even though there is only one worktree, that worktree's filename // is included in the matching, because the worktree is a single file. @@ -1051,7 +1051,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1); @@ -1078,7 +1078,7 @@ mod tests { cx, ) }) - .detach(cx); + .root(cx); finder .update(cx, |f, cx| { @@ -1117,7 +1117,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let finder = cx .add_window(|cx| { Picker::new( @@ -1131,7 +1131,7 @@ mod tests { cx, ) }) - .detach(cx); + .root(cx); finder .update(cx, |f, cx| { f.delegate_mut().spawn_search(test_path_like("dir"), cx) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 9b847e9c0c..dce0b0e5f0 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -130,12 +130,12 @@ pub trait BorrowAppContext { } pub trait BorrowWindowContext { - type Return; + type Result; - fn read_with(&self, window_id: usize, f: F) -> Self::Return + fn read_window_with(&self, window_id: usize, f: F) -> Self::Result where F: FnOnce(&WindowContext) -> T; - fn update(&mut self, window_id: usize, f: F) -> Self::Return + fn update_window(&mut self, window_id: usize, f: F) -> Self::Result where F: FnOnce(&mut WindowContext) -> T; } @@ -458,6 +458,26 @@ impl BorrowAppContext for AsyncAppContext { } } +impl BorrowWindowContext for AsyncAppContext { + type Result = Option; + + fn read_window_with(&self, window_id: usize, f: F) -> Self::Result + where + F: FnOnce(&WindowContext) -> T, + { + self.0.borrow().read_with(|cx| cx.read_window(window_id, f)) + } + + fn update_window(&mut self, window_id: usize, f: F) -> Self::Result + where + F: FnOnce(&mut WindowContext) -> T, + { + self.0 + .borrow_mut() + .update(|cx| cx.update_window(window_id, f)) + } +} + type ActionCallback = dyn FnMut(&mut dyn AnyView, &dyn Action, &mut WindowContext, usize); type GlobalActionCallback = dyn FnMut(&dyn Action, &mut AppContext); @@ -2162,6 +2182,24 @@ impl BorrowAppContext for AppContext { } } +impl BorrowWindowContext for AppContext { + type Result = Option; + + fn read_window_with(&self, window_id: usize, f: F) -> Self::Result + where + F: FnOnce(&WindowContext) -> T, + { + AppContext::read_window(self, window_id, f) + } + + fn update_window(&mut self, window_id: usize, f: F) -> Self::Result + where + F: FnOnce(&mut WindowContext) -> T, + { + AppContext::update_window(self, window_id, f) + } +} + #[derive(Debug)] pub enum ParentId { View(usize), @@ -3360,14 +3398,18 @@ impl BorrowAppContext for ViewContext<'_, '_, V> { } impl BorrowWindowContext for ViewContext<'_, '_, V> { - type Return = T; + type Result = T; - fn read_with T>(&self, window_id: usize, f: F) -> T { - BorrowWindowContext::read_with(&*self.window_context, window_id, f) + fn read_window_with T>(&self, window_id: usize, f: F) -> T { + BorrowWindowContext::read_window_with(&*self.window_context, window_id, f) } - fn update T>(&mut self, window_id: usize, f: F) -> T { - BorrowWindowContext::update(&mut *self.window_context, window_id, f) + fn update_window T>( + &mut self, + window_id: usize, + f: F, + ) -> T { + BorrowWindowContext::update_window(&mut *self.window_context, window_id, f) } } @@ -3467,14 +3509,18 @@ impl BorrowAppContext for LayoutContext<'_, '_, '_, V> { } impl BorrowWindowContext for LayoutContext<'_, '_, '_, V> { - type Return = T; + type Result = T; - fn read_with T>(&self, window_id: usize, f: F) -> T { - BorrowWindowContext::read_with(&*self.view_context, window_id, f) + fn read_window_with T>(&self, window_id: usize, f: F) -> T { + BorrowWindowContext::read_window_with(&*self.view_context, window_id, f) } - fn update T>(&mut self, window_id: usize, f: F) -> T { - BorrowWindowContext::update(&mut *self.view_context, window_id, f) + fn update_window T>( + &mut self, + window_id: usize, + f: F, + ) -> T { + BorrowWindowContext::update_window(&mut *self.view_context, window_id, f) } } @@ -3521,14 +3567,18 @@ impl BorrowAppContext for EventContext<'_, '_, '_, V> { } impl BorrowWindowContext for EventContext<'_, '_, '_, V> { - type Return = T; + type Result = T; - fn read_with T>(&self, window_id: usize, f: F) -> T { - BorrowWindowContext::read_with(&*self.view_context, window_id, f) + fn read_window_with T>(&self, window_id: usize, f: F) -> T { + BorrowWindowContext::read_window_with(&*self.view_context, window_id, f) } - fn update T>(&mut self, window_id: usize, f: F) -> T { - BorrowWindowContext::update(&mut *self.view_context, window_id, f) + fn update_window T>( + &mut self, + window_id: usize, + f: F, + ) -> T { + BorrowWindowContext::update_window(&mut *self.view_context, window_id, f) } } @@ -3830,32 +3880,16 @@ impl WindowHandle { self.any_handle.id() } - pub fn root(&self, cx: &impl BorrowAppContext) -> ViewHandle { + pub fn root(&self, cx: &C) -> C::Result> { self.read_with(cx, |cx| cx.root_view().clone().downcast().unwrap()) } - /// Keep this window open until it's explicitly closed. - // - // TODO: Implement window dropping behavior when we don't call this. - pub fn detach(mut self, cx: &impl BorrowAppContext) -> ViewHandle { - let root = self.root(cx); - let ref_counts = self.any_handle.ref_counts.take(); - #[cfg(any(test, feature = "test-support"))] - ref_counts - .unwrap() - .lock() - .leak_detector - .lock() - .handle_dropped(self.id(), self.any_handle.handle_id); - root - } - - pub fn read_with(&self, cx: &C, read: F) -> R + pub fn read_with(&self, cx: &C, read: F) -> C::Result where - C: BorrowAppContext, + C: BorrowWindowContext, F: FnOnce(&WindowContext) -> R, { - cx.read_with(|cx| cx.read_window(self.id(), read).unwrap()) + cx.read_window_with(self.id(), |cx| read(cx)) } pub fn update(&self, cx: &mut C, update: F) -> R @@ -3891,9 +3925,9 @@ impl WindowHandle { root_view.read(cx) } - pub fn read_root_with(&self, cx: &C, read: F) -> R + pub fn read_root_with(&self, cx: &C, read: F) -> C::Result where - C: BorrowAppContext, + C: BorrowWindowContext, F: FnOnce(&V, &ViewContext) -> R, { self.read_with(cx, |cx| { @@ -4021,25 +4055,25 @@ impl ViewHandle { cx.read_view(self) } - pub fn read_with(&self, cx: &C, read: F) -> C::Return + pub fn read_with(&self, cx: &C, read: F) -> C::Result where C: BorrowWindowContext, F: FnOnce(&T, &ViewContext) -> S, { - cx.read_with(self.window_id, |cx| { + cx.read_window_with(self.window_id, |cx| { let cx = ViewContext::immutable(cx, self.view_id); read(cx.read_view(self), &cx) }) } - pub fn update(&self, cx: &mut C, update: F) -> C::Return + pub fn update(&self, cx: &mut C, update: F) -> C::Result where C: BorrowWindowContext, F: FnOnce(&mut T, &mut ViewContext) -> S, { let mut update = Some(update); - cx.update(self.window_id, |cx| { + cx.update_window(self.window_id, |cx| { cx.update_view(self, &mut |view, cx| { let update = update.take().unwrap(); update(view, cx) @@ -5005,7 +5039,7 @@ mod tests { } #[crate::test(self)] - fn test_entity_release_hooks(cx: &mut AppContext) { + fn test_entity_release_hooks(cx: &mut TestAppContext) { struct Model { released: Rc>, } @@ -5048,7 +5082,7 @@ mod tests { let model = cx.add_model(|_| Model { released: model_released.clone(), }); - let window = cx.add_window(Default::default(), |_| View { + let window = cx.add_window(|_| View { released: view_released.clone(), }); let view = window.root(cx); @@ -5056,16 +5090,18 @@ mod tests { assert!(!model_released.get()); assert!(!view_released.get()); - cx.observe_release(&model, { - let model_release_observed = model_release_observed.clone(); - move |_, _| model_release_observed.set(true) - }) - .detach(); - cx.observe_release(&view, { - let view_release_observed = view_release_observed.clone(); - move |_, _| view_release_observed.set(true) - }) - .detach(); + cx.update(|cx| { + cx.observe_release(&model, { + let model_release_observed = model_release_observed.clone(); + move |_, _| model_release_observed.set(true) + }) + .detach(); + cx.observe_release(&view, { + let view_release_observed = view_release_observed.clone(); + move |_, _| view_release_observed.set(true) + }) + .detach(); + }); cx.update(move |_| { drop(model); @@ -5795,7 +5831,7 @@ mod tests { } #[crate::test(self)] - fn test_dispatch_action(cx: &mut AppContext) { + fn test_dispatch_action(cx: &mut TestAppContext) { struct ViewA { id: usize, child: Option, @@ -5846,68 +5882,70 @@ mod tests { impl_actions!(test, [Action]); let actions = Rc::new(RefCell::new(Vec::new())); - - cx.add_global_action({ - let actions = actions.clone(); - move |_: &Action, _: &mut AppContext| { - actions.borrow_mut().push("global".to_string()); - } - }); - - cx.add_action({ - let actions = actions.clone(); - move |view: &mut ViewA, action: &Action, cx| { - assert_eq!(action.0, "bar"); - cx.propagate_action(); - actions.borrow_mut().push(format!("{} a", view.id)); - } - }); - - cx.add_action({ - let actions = actions.clone(); - move |view: &mut ViewA, _: &Action, cx| { - if view.id != 1 { - cx.add_view(|cx| { - cx.propagate_action(); // Still works on a nested ViewContext - ViewB { id: 5, child: None } - }); - } - actions.borrow_mut().push(format!("{} b", view.id)); - } - }); - - cx.add_action({ - let actions = actions.clone(); - move |view: &mut ViewB, _: &Action, cx| { - cx.propagate_action(); - actions.borrow_mut().push(format!("{} c", view.id)); - } - }); - - cx.add_action({ - let actions = actions.clone(); - move |view: &mut ViewB, _: &Action, cx| { - cx.propagate_action(); - actions.borrow_mut().push(format!("{} d", view.id)); - } - }); - - cx.capture_action({ - let actions = actions.clone(); - move |view: &mut ViewA, _: &Action, cx| { - cx.propagate_action(); - actions.borrow_mut().push(format!("{} capture", view.id)); - } - }); - let observed_actions = Rc::new(RefCell::new(Vec::new())); - cx.observe_actions({ - let observed_actions = observed_actions.clone(); - move |action_id, _| observed_actions.borrow_mut().push(action_id) - }) - .detach(); - let window = cx.add_window(Default::default(), |_| ViewA { id: 1, child: None }); + cx.update(|cx| { + cx.add_global_action({ + let actions = actions.clone(); + move |_: &Action, _: &mut AppContext| { + actions.borrow_mut().push("global".to_string()); + } + }); + + cx.add_action({ + let actions = actions.clone(); + move |view: &mut ViewA, action: &Action, cx| { + assert_eq!(action.0, "bar"); + cx.propagate_action(); + actions.borrow_mut().push(format!("{} a", view.id)); + } + }); + + cx.add_action({ + let actions = actions.clone(); + move |view: &mut ViewA, _: &Action, cx| { + if view.id != 1 { + cx.add_view(|cx| { + cx.propagate_action(); // Still works on a nested ViewContext + ViewB { id: 5, child: None } + }); + } + actions.borrow_mut().push(format!("{} b", view.id)); + } + }); + + cx.add_action({ + let actions = actions.clone(); + move |view: &mut ViewB, _: &Action, cx| { + cx.propagate_action(); + actions.borrow_mut().push(format!("{} c", view.id)); + } + }); + + cx.add_action({ + let actions = actions.clone(); + move |view: &mut ViewB, _: &Action, cx| { + cx.propagate_action(); + actions.borrow_mut().push(format!("{} d", view.id)); + } + }); + + cx.capture_action({ + let actions = actions.clone(); + move |view: &mut ViewA, _: &Action, cx| { + cx.propagate_action(); + actions.borrow_mut().push(format!("{} capture", view.id)); + } + }); + + cx.observe_actions({ + let observed_actions = observed_actions.clone(); + move |action_id, _| observed_actions.borrow_mut().push(action_id) + }) + .detach(); + }); + + let window = cx.add_window(|_| ViewA { id: 1, child: None }); let view_1 = window.root(cx); let view_2 = window.update(cx, |cx| { let child = cx.add_view(|_| ViewB { id: 2, child: None }); @@ -5956,7 +5994,7 @@ mod tests { // Remove view_1, which doesn't propagate the action - let window = cx.add_window(Default::default(), |_| ViewB { id: 2, child: None }); + let window = cx.add_window(|_| ViewB { id: 2, child: None }); let view_2 = window.root(cx); let view_3 = window.update(cx, |cx| { let child = cx.add_view(|_| ViewA { id: 3, child: None }); @@ -6457,7 +6495,7 @@ mod tests { } #[crate::test(self)] - fn test_refresh_windows(cx: &mut AppContext) { + fn test_refresh_windows(cx: &mut TestAppContext) { struct View(usize); impl super::Entity for View { @@ -6474,7 +6512,7 @@ mod tests { } } - let window = cx.add_window(Default::default(), |_| View(0)); + let window = cx.add_window(|_| View(0)); let root_view = window.root(cx); window.update(cx, |cx| { assert_eq!( diff --git a/crates/gpui/src/app/test_app_context.rs b/crates/gpui/src/app/test_app_context.rs index 5c7947a448..0165c52e9f 100644 --- a/crates/gpui/src/app/test_app_context.rs +++ b/crates/gpui/src/app/test_app_context.rs @@ -406,16 +406,20 @@ impl BorrowAppContext for TestAppContext { } impl BorrowWindowContext for TestAppContext { - type Return = T; + type Result = T; - fn read_with T>(&self, window_id: usize, f: F) -> T { + fn read_window_with T>(&self, window_id: usize, f: F) -> T { self.cx .borrow() .read_window(window_id, f) .expect("window was closed") } - fn update T>(&mut self, window_id: usize, f: F) -> T { + fn update_window T>( + &mut self, + window_id: usize, + f: F, + ) -> T { self.cx .borrow_mut() .update_window(window_id, f) diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 671d2b38c7..0149c310da 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -142,9 +142,9 @@ impl BorrowAppContext for WindowContext<'_> { } impl BorrowWindowContext for WindowContext<'_> { - type Return = T; + type Result = T; - fn read_with T>(&self, window_id: usize, f: F) -> T { + fn read_window_with T>(&self, window_id: usize, f: F) -> T { if self.window_id == window_id { f(self) } else { @@ -152,7 +152,11 @@ impl BorrowWindowContext for WindowContext<'_> { } } - fn update T>(&mut self, window_id: usize, f: F) -> T { + fn update_window T>( + &mut self, + window_id: usize, + f: F, + ) -> T { if self.window_id == window_id { f(self) } else { diff --git a/crates/language_tools/src/lsp_log_tests.rs b/crates/language_tools/src/lsp_log_tests.rs index ce05a417ad..d26000ebc7 100644 --- a/crates/language_tools/src/lsp_log_tests.rs +++ b/crates/language_tools/src/lsp_log_tests.rs @@ -63,7 +63,7 @@ async fn test_lsp_logs(cx: &mut TestAppContext) { let log_view = cx .add_window(|cx| LspLogView::new(project.clone(), log_store.clone(), cx)) - .detach(cx); + .root(cx); language_server.notify::(lsp::LogMessageParams { message: "hello from the server".into(), diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index fdc5ea108a..021ea2d3bc 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -1782,7 +1782,7 @@ mod tests { let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); assert_eq!( visible_entries_as_strings(&panel, 0..50, cx), @@ -2327,7 +2327,7 @@ mod tests { let project = Project::test(fs.clone(), ["/root1".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); panel.update(cx, |panel, cx| { @@ -2641,7 +2641,7 @@ mod tests { let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); let new_search_events_count = Arc::new(AtomicUsize::new(0)); @@ -2730,7 +2730,7 @@ mod tests { let project = Project::test(fs.clone(), ["/project_root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); panel.update(cx, |panel, cx| { diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index e57edd3b14..0db66b4e37 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1449,7 +1449,7 @@ pub mod tests { let search = cx.add_model(|cx| ProjectSearch::new(project, cx)); let search_view = cx .add_window(|cx| ProjectSearchView::new(search.clone(), cx)) - .detach(cx); + .root(cx); search_view.update(cx, |search_view, cx| { search_view @@ -1754,7 +1754,7 @@ pub mod tests { }); let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let active_item = cx.read(|cx| { workspace diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index 874978b4fc..a600046ac2 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -1072,7 +1072,7 @@ mod tests { let project = Project::test(params.fs.clone(), [], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); (project, workspace) } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 3222ea2eb8..2efa9f8daa 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -793,68 +793,60 @@ impl Workspace { DB.next_id().await.unwrap_or(0) }; - let window = requesting_window_id - .and_then(|window_id| { - cx.update(|cx| { - cx.replace_root_view(window_id, |cx| { - Workspace::new( - workspace_id, - project_handle.clone(), - app_state.clone(), - cx, - ) - }) + let window = requesting_window_id.and_then(|window_id| { + cx.update(|cx| { + cx.replace_root_view(window_id, |cx| { + Workspace::new(workspace_id, project_handle.clone(), app_state.clone(), cx) }) }) - .unwrap_or_else(|| { - let window_bounds_override = window_bounds_env_override(&cx); - let (bounds, display) = if let Some(bounds) = window_bounds_override { - (Some(bounds), None) - } else { - serialized_workspace - .as_ref() - .and_then(|serialized_workspace| { - let display = serialized_workspace.display?; - let mut bounds = serialized_workspace.bounds?; + }); + let window = window.unwrap_or_else(|| { + let window_bounds_override = window_bounds_env_override(&cx); + let (bounds, display) = if let Some(bounds) = window_bounds_override { + (Some(bounds), None) + } else { + serialized_workspace + .as_ref() + .and_then(|serialized_workspace| { + let display = serialized_workspace.display?; + let mut bounds = serialized_workspace.bounds?; - // Stored bounds are relative to the containing display. - // So convert back to global coordinates if that screen still exists - if let WindowBounds::Fixed(mut window_bounds) = bounds { - if let Some(screen) = cx.platform().screen_by_id(display) { - let screen_bounds = screen.bounds(); - window_bounds.set_origin_x( - window_bounds.origin_x() + screen_bounds.origin_x(), - ); - window_bounds.set_origin_y( - window_bounds.origin_y() + screen_bounds.origin_y(), - ); - bounds = WindowBounds::Fixed(window_bounds); - } else { - // Screen no longer exists. Return none here. - return None; - } + // Stored bounds are relative to the containing display. + // So convert back to global coordinates if that screen still exists + if let WindowBounds::Fixed(mut window_bounds) = bounds { + if let Some(screen) = cx.platform().screen_by_id(display) { + let screen_bounds = screen.bounds(); + window_bounds.set_origin_x( + window_bounds.origin_x() + screen_bounds.origin_x(), + ); + window_bounds.set_origin_y( + window_bounds.origin_y() + screen_bounds.origin_y(), + ); + bounds = WindowBounds::Fixed(window_bounds); + } else { + // Screen no longer exists. Return none here. + return None; } + } - Some((bounds, display)) - }) - .unzip() - }; + Some((bounds, display)) + }) + .unzip() + }; - // Use the serialized workspace to construct the new window - cx.add_window( - (app_state.build_window_options)(bounds, display, cx.platform().as_ref()), - |cx| { - Workspace::new( - workspace_id, - project_handle.clone(), - app_state.clone(), - cx, - ) - }, - ) - }); + // Use the serialized workspace to construct the new window + cx.add_window( + (app_state.build_window_options)(bounds, display, cx.platform().as_ref()), + |cx| { + Workspace::new(workspace_id, project_handle.clone(), app_state.clone(), cx) + }, + ) + }); + + // We haven't yielded the main thread since obtaining the window handle, + // so the window exists. + let workspace = window.root(&cx).unwrap(); - let workspace = window.root(&cx); (app_state.initialize_workspace)( workspace.downgrade(), serialized_workspace.is_some(), @@ -3985,7 +3977,7 @@ pub fn join_remote_project( ), |cx| Workspace::new(0, project, app_state.clone(), cx), ); - let workspace = window.root(&cx); + let workspace = window.root(&cx).unwrap(); (app_state.initialize_workspace)( workspace.downgrade(), false, diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 1770c5648e..a459122cfc 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -985,7 +985,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let entries = cx.read(|cx| workspace.file_project_paths(cx)); let file1 = entries[0].clone(); @@ -1566,7 +1566,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project.clone(), cx)) - .detach(cx); + .root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let entries = cx.read(|cx| workspace.file_project_paths(cx)); @@ -1845,7 +1845,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let workspace = cx .add_window(|cx| Workspace::test_new(project, cx)) - .detach(cx); + .root(cx); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); let entries = cx.read(|cx| workspace.file_project_paths(cx)); From 485c0a482ee8e7b2a2014f1129ca060d4554af0c Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 3 Aug 2023 17:11:47 -0600 Subject: [PATCH 119/120] Don't refcount window handles --- crates/collab/src/tests/integration_tests.rs | 4 +- .../src/incoming_call_notification.rs | 2 +- .../src/project_shared_notification.rs | 2 +- crates/command_palette/src/command_palette.rs | 2 +- crates/copilot/src/sign_in.rs | 4 +- crates/diagnostics/src/diagnostics.rs | 4 +- crates/editor/src/editor_tests.rs | 2 +- .../src/test/editor_lsp_test_context.rs | 2 +- crates/editor/src/test/editor_test_context.rs | 2 +- crates/file_finder/src/file_finder.rs | 22 ++-- crates/gpui/src/app.rs | 100 ++++-------------- crates/gpui/src/app/ref_counts.rs | 22 ---- crates/gpui/src/app/test_app_context.rs | 4 +- crates/gpui/src/app/window.rs | 2 +- crates/project_panel/src/project_panel.rs | 8 +- crates/project_symbols/src/project_symbols.rs | 2 +- crates/search/src/buffer_search.rs | 10 +- crates/search/src/project_search.rs | 4 +- crates/workspace/src/workspace.rs | 36 +++---- crates/zed/src/zed.rs | 12 +-- 20 files changed, 83 insertions(+), 163 deletions(-) diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index 1a8e6d938d..037f97f71a 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -3446,7 +3446,7 @@ async fn test_newline_above_or_below_does_not_move_guest_cursor( let editor_a = window_a.add_view(cx_a, |cx| Editor::for_buffer(buffer_a, Some(project_a), cx)); let mut editor_cx_a = EditorTestContext { cx: cx_a, - window_id: window_a.id(), + window_id: window_a.window_id(), editor: editor_a, }; @@ -3459,7 +3459,7 @@ async fn test_newline_above_or_below_does_not_move_guest_cursor( let editor_b = window_b.add_view(cx_b, |cx| Editor::for_buffer(buffer_b, Some(project_b), cx)); let mut editor_cx_b = EditorTestContext { cx: cx_b, - window_id: window_b.id(), + window_id: window_b.window_id(), editor: editor_b, }; diff --git a/crates/collab_ui/src/incoming_call_notification.rs b/crates/collab_ui/src/incoming_call_notification.rs index a9c5e697a5..770f5d5795 100644 --- a/crates/collab_ui/src/incoming_call_notification.rs +++ b/crates/collab_ui/src/incoming_call_notification.rs @@ -49,7 +49,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { |_| IncomingCallNotification::new(incoming_call.clone(), app_state.clone()), ); - notification_windows.push(window.id()); + notification_windows.push(window.window_id()); } } } diff --git a/crates/collab_ui/src/project_shared_notification.rs b/crates/collab_ui/src/project_shared_notification.rs index 03ab91623b..5be7e33bf3 100644 --- a/crates/collab_ui/src/project_shared_notification.rs +++ b/crates/collab_ui/src/project_shared_notification.rs @@ -52,7 +52,7 @@ pub fn init(app_state: &Arc, cx: &mut AppContext) { notification_windows .entry(*project_id) .or_insert(Vec::new()) - .push(window.id()); + .push(window.window_id()); } } room::Event::RemoteProjectUnshared { project_id } => { diff --git a/crates/command_palette/src/command_palette.rs b/crates/command_palette/src/command_palette.rs index 7d4b4126b7..935358c2a1 100644 --- a/crates/command_palette/src/command_palette.rs +++ b/crates/command_palette/src/command_palette.rs @@ -297,7 +297,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), [], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let editor = cx.add_view(window_id, |cx| { let mut editor = Editor::single_line(None, cx); editor.set_text("abc", cx); diff --git a/crates/copilot/src/sign_in.rs b/crates/copilot/src/sign_in.rs index 659bee7445..0d5bb28ed6 100644 --- a/crates/copilot/src/sign_in.rs +++ b/crates/copilot/src/sign_in.rs @@ -25,7 +25,7 @@ pub fn init(cx: &mut AppContext) { match &status { crate::Status::SigningIn { prompt } => { if let Some(code_verification_handle) = code_verification.as_mut() { - let window_id = code_verification_handle.id(); + let window_id = code_verification_handle.window_id(); let updated = cx.update_window(window_id, |cx| { code_verification_handle.update_root(cx, |code_verification, cx| { code_verification.set_status(status.clone(), cx) @@ -41,7 +41,7 @@ pub fn init(cx: &mut AppContext) { } Status::Authorized | Status::Unauthorized => { if let Some(code_verification) = code_verification.as_ref() { - let window_id = code_verification.id(); + let window_id = code_verification.window_id(); cx.update_window(window_id, |cx| { code_verification.update_root(cx, |code_verification, cx| { code_verification.set_status(status, cx) diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 2444465be6..f2db0a7763 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -857,7 +857,7 @@ mod tests { let project = Project::test(fs.clone(), ["/test".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); // Create some diagnostics project.update(cx, |project, cx| { @@ -1252,7 +1252,7 @@ mod tests { let project = Project::test(fs.clone(), ["/test".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let view = cx.add_view(window_id, |cx| { ProjectDiagnosticsEditor::new(project.clone(), workspace.downgrade(), cx) diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index a114cd437b..e8913505ca 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -525,7 +525,7 @@ async fn test_navigation_history(cx: &mut TestAppContext) { let project = Project::test(fs, [], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let pane = workspace.read_with(cx, |workspace, _| workspace.active_pane().clone()); cx.add_view(window_id, |cx| { let buffer = MultiBuffer::build_simple(&sample_text(300, 5, 'a'), cx); diff --git a/crates/editor/src/test/editor_lsp_test_context.rs b/crates/editor/src/test/editor_lsp_test_context.rs index f53115f224..d25ca7bb88 100644 --- a/crates/editor/src/test/editor_lsp_test_context.rs +++ b/crates/editor/src/test/editor_lsp_test_context.rs @@ -99,7 +99,7 @@ impl<'a> EditorLspTestContext<'a> { Self { cx: EditorTestContext { cx, - window_id: window.id(), + window_id: window.window_id(), editor, }, lsp, diff --git a/crates/editor/src/test/editor_test_context.rs b/crates/editor/src/test/editor_test_context.rs index c7ea1b4f38..ac519764fd 100644 --- a/crates/editor/src/test/editor_test_context.rs +++ b/crates/editor/src/test/editor_test_context.rs @@ -39,7 +39,7 @@ impl<'a> EditorTestContext<'a> { let editor = window.root(cx); Self { cx, - window_id: window.id(), + window_id: window.window_id(), editor, } } diff --git a/crates/file_finder/src/file_finder.rs b/crates/file_finder/src/file_finder.rs index 12bf324262..84a45b083e 100644 --- a/crates/file_finder/src/file_finder.rs +++ b/crates/file_finder/src/file_finder.rs @@ -619,7 +619,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - cx.dispatch_action(window.id(), Toggle); + cx.dispatch_action(window.window_id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); finder @@ -632,8 +632,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window.id(), SelectNext); - cx.dispatch_action(window.id(), Confirm); + cx.dispatch_action(window.window_id(), SelectNext); + cx.dispatch_action(window.window_id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -674,7 +674,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - cx.dispatch_action(window.id(), Toggle); + cx.dispatch_action(window.window_id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); let file_query = &first_file_name[..3]; @@ -706,8 +706,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window.id(), SelectNext); - cx.dispatch_action(window.id(), Confirm); + cx.dispatch_action(window.window_id(), SelectNext); + cx.dispatch_action(window.window_id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -758,7 +758,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - cx.dispatch_action(window.id(), Toggle); + cx.dispatch_action(window.window_id(), Toggle); let finder = cx.read(|cx| workspace.read(cx).modal::().unwrap()); let file_query = &first_file_name[..3]; @@ -790,8 +790,8 @@ mod tests { }); let active_pane = cx.read(|cx| workspace.read(cx).active_pane().clone()); - cx.dispatch_action(window.id(), SelectNext); - cx.dispatch_action(window.id(), Confirm); + cx.dispatch_action(window.window_id(), SelectNext); + cx.dispatch_action(window.window_id(), Confirm); active_pane .condition(cx, |pane, _| pane.active_item().is_some()) .await; @@ -1168,7 +1168,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/src".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1); @@ -1376,7 +1376,7 @@ mod tests { let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let worktree_id = cx.read(|cx| { let worktrees = workspace.read(cx).worktrees(cx).collect::>(); assert_eq!(worktrees.len(), 1,); diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index dce0b0e5f0..90f910d255 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1337,7 +1337,7 @@ impl AppContext { .open_window(window_id, window_options, this.foreground.clone()); let window = this.build_window(window_id, platform_window, build_root_view); this.windows.insert(window_id, window); - WindowHandle::new(window_id, this.ref_counts.clone()) + WindowHandle::new(window_id) }) } @@ -3863,21 +3863,21 @@ impl Clone for WeakModelHandle { impl Copy for WeakModelHandle {} pub struct WindowHandle { - any_handle: AnyWindowHandle, - view_type: PhantomData, + window_id: usize, + root_view_type: PhantomData, } #[allow(dead_code)] impl WindowHandle { - fn new(window_id: usize, ref_counts: Arc>) -> Self { + fn new(window_id: usize) -> Self { WindowHandle { - any_handle: AnyWindowHandle::new::(window_id, ref_counts), - view_type: PhantomData, + window_id, + root_view_type: PhantomData, } } - pub fn id(&self) -> usize { - self.any_handle.id() + pub fn window_id(&self) -> usize { + self.window_id } pub fn root(&self, cx: &C) -> C::Result> { @@ -3889,7 +3889,7 @@ impl WindowHandle { C: BorrowWindowContext, F: FnOnce(&WindowContext) -> R, { - cx.read_window_with(self.id(), |cx| read(cx)) + cx.read_window_with(self.window_id(), |cx| read(cx)) } pub fn update(&self, cx: &mut C, update: F) -> R @@ -3897,7 +3897,7 @@ impl WindowHandle { C: BorrowAppContext, F: FnOnce(&mut WindowContext) -> R, { - cx.update(|cx| cx.update_window(self.id(), update).unwrap()) + cx.update(|cx| cx.update_window(self.window_id(), update).unwrap()) } pub fn update_root(&self, cx: &mut C, update: F) -> R @@ -3905,7 +3905,7 @@ impl WindowHandle { C: BorrowAppContext, F: FnOnce(&mut V, &mut ViewContext) -> R, { - let window_id = self.id(); + let window_id = self.window_id(); cx.update(|cx| { cx.update_window(window_id, |cx| { cx.root_view() @@ -3920,7 +3920,9 @@ impl WindowHandle { pub fn read_root<'a>(&self, cx: &'a AppContext) -> &'a V { let root_view = cx - .read_window(self.id(), |cx| cx.root_view().clone().downcast().unwrap()) + .read_window(self.window_id(), |cx| { + cx.root_view().clone().downcast().unwrap() + }) .unwrap(); root_view.read(cx) } @@ -3948,66 +3950,6 @@ impl WindowHandle { } } -pub struct AnyWindowHandle { - window_id: usize, - root_view_type: TypeId, - ref_counts: Option>>, - - #[cfg(any(test, feature = "test-support"))] - handle_id: usize, -} - -impl AnyWindowHandle { - fn new(window_id: usize, ref_counts: Arc>) -> Self { - ref_counts.lock().inc_window(window_id); - - #[cfg(any(test, feature = "test-support"))] - let handle_id = ref_counts - .lock() - .leak_detector - .lock() - .handle_created(None, window_id); - - Self { - window_id, - root_view_type: TypeId::of::(), - ref_counts: Some(ref_counts), - #[cfg(any(test, feature = "test-support"))] - handle_id, - } - } - - pub fn id(&self) -> usize { - self.window_id - } - - pub fn downcast(self) -> Option> { - if TypeId::of::() == self.root_view_type { - Some(WindowHandle { - any_handle: self, - view_type: PhantomData, - }) - } else { - None - } - } -} - -impl Drop for AnyWindowHandle { - fn drop(&mut self) { - if let Some(ref_counts) = self.ref_counts.as_ref() { - ref_counts.lock().dec_window(self.window_id); - - #[cfg(any(test, feature = "test-support"))] - ref_counts - .lock() - .leak_detector - .lock() - .handle_dropped(self.window_id, self.handle_id); - } - } -} - #[repr(transparent)] pub struct ViewHandle { any_handle: AnyViewHandle, @@ -6281,7 +6223,7 @@ mod tests { // Check that global actions do not have a binding, even if a binding does exist in another view assert_eq!( - &available_actions(window.id(), view_1.id(), cx), + &available_actions(window.window_id(), view_1.id(), cx), &[ ("test::Action1", vec![Keystroke::parse("a").unwrap()]), ("test::GlobalAction", vec![]) @@ -6290,7 +6232,7 @@ mod tests { // Check that view 1 actions and bindings are available even when called from view 2 assert_eq!( - &available_actions(window.id(), view_2.id(), cx), + &available_actions(window.window_id(), view_2.id(), cx), &[ ("test::Action1", vec![Keystroke::parse("a").unwrap()]), ("test::Action2", vec![Keystroke::parse("b").unwrap()]), @@ -6353,7 +6295,7 @@ mod tests { ]); }); - let actions = cx.available_actions(window.id(), view.id()); + let actions = cx.available_actions(window.window_id(), view.id()); assert_eq!( actions[0].1.as_any().downcast_ref::(), Some(&ActionWithArg { arg: false }) @@ -6639,25 +6581,25 @@ mod tests { [("window 2", false), ("window 3", true)] ); - cx.simulate_window_activation(Some(window_2.id())); + cx.simulate_window_activation(Some(window_2.window_id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 3", false), ("window 2", true)] ); - cx.simulate_window_activation(Some(window_1.id())); + cx.simulate_window_activation(Some(window_1.window_id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 2", false), ("window 1", true)] ); - cx.simulate_window_activation(Some(window_3.id())); + cx.simulate_window_activation(Some(window_3.window_id())); assert_eq!( mem::take(&mut *events.borrow_mut()), [("window 1", false), ("window 3", true)] ); - cx.simulate_window_activation(Some(window_3.id())); + cx.simulate_window_activation(Some(window_3.window_id())); assert_eq!(mem::take(&mut *events.borrow_mut()), []); } diff --git a/crates/gpui/src/app/ref_counts.rs b/crates/gpui/src/app/ref_counts.rs index 74563d05bc..f0c1699f16 100644 --- a/crates/gpui/src/app/ref_counts.rs +++ b/crates/gpui/src/app/ref_counts.rs @@ -25,7 +25,6 @@ struct ElementStateRefCount { pub struct RefCounts { entity_counts: HashMap, element_state_counts: HashMap, - dropped_windows: HashSet, dropped_models: HashSet, dropped_views: HashSet<(usize, usize)>, dropped_element_states: HashSet, @@ -44,18 +43,6 @@ impl RefCounts { } } - pub fn inc_window(&mut self, window_id: usize) { - match self.entity_counts.entry(window_id) { - Entry::Occupied(mut entry) => { - *entry.get_mut() += 1; - } - Entry::Vacant(entry) => { - entry.insert(1); - self.dropped_windows.remove(&window_id); - } - } - } - pub fn inc_model(&mut self, model_id: usize) { match self.entity_counts.entry(model_id) { Entry::Occupied(mut entry) => { @@ -98,15 +85,6 @@ impl RefCounts { } } - pub fn dec_window(&mut self, window_id: usize) { - let count = self.entity_counts.get_mut(&window_id).unwrap(); - *count -= 1; - if *count == 0 { - self.entity_counts.remove(&window_id); - self.dropped_windows.insert(window_id); - } - } - pub fn dec_model(&mut self, model_id: usize) { let count = self.entity_counts.get_mut(&model_id).unwrap(); *count -= 1; diff --git a/crates/gpui/src/app/test_app_context.rs b/crates/gpui/src/app/test_app_context.rs index 0165c52e9f..3b574eb03e 100644 --- a/crates/gpui/src/app/test_app_context.rs +++ b/crates/gpui/src/app/test_app_context.rs @@ -157,9 +157,9 @@ impl TestAppContext { .cx .borrow_mut() .add_window(Default::default(), build_root_view); - self.simulate_window_activation(Some(window.id())); + self.simulate_window_activation(Some(window.window_id())); - WindowHandle::new(window.id(), self.cx.borrow_mut().ref_counts.clone()) + WindowHandle::new(window.window_id()) } pub fn add_view(&mut self, window_id: usize, build_view: F) -> ViewHandle diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 0149c310da..789341d46f 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -1165,7 +1165,7 @@ impl<'a> WindowContext<'a> { let root_view = self.add_view(|cx| build_root_view(cx)); self.window.focused_view_id = Some(root_view.id()); self.window.root_view = Some(root_view.into_any()); - WindowHandle::new(self.window_id, self.ref_counts.clone()) + WindowHandle::new(self.window_id) } pub fn add_view(&mut self, build_view: F) -> ViewHandle diff --git a/crates/project_panel/src/project_panel.rs b/crates/project_panel/src/project_panel.rs index 021ea2d3bc..80847f9f4b 100644 --- a/crates/project_panel/src/project_panel.rs +++ b/crates/project_panel/src/project_panel.rs @@ -1872,7 +1872,7 @@ mod tests { let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "root1", cx); @@ -2225,7 +2225,7 @@ mod tests { let project = Project::test(fs.clone(), ["/root1".as_ref(), "/root2".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "root1", cx); @@ -2402,7 +2402,7 @@ mod tests { let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); toggle_expand_dir(&panel, "src/test", cx); @@ -2493,7 +2493,7 @@ mod tests { let project = Project::test(fs.clone(), ["/src".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let panel = workspace.update(cx, |workspace, cx| ProjectPanel::new(workspace, cx)); select_path(&panel, "src/", cx); diff --git a/crates/project_symbols/src/project_symbols.rs b/crates/project_symbols/src/project_symbols.rs index 8471f3a3a7..4bd186fc98 100644 --- a/crates/project_symbols/src/project_symbols.rs +++ b/crates/project_symbols/src/project_symbols.rs @@ -328,7 +328,7 @@ mod tests { let window = cx.add_window(|cx| Workspace::test_new(project.clone(), cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); // Create the project symbols view. let symbols = cx.add_view(window_id, |cx| { diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index 1e635432bd..265e4f0206 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -851,11 +851,11 @@ mod tests { }); let window = cx.add_window(|_| EmptyView); - let editor = cx.add_view(window.id(), |cx| { + let editor = cx.add_view(window.window_id(), |cx| { Editor::for_buffer(buffer.clone(), None, cx) }); - let search_bar = cx.add_view(window.id(), |cx| { + let search_bar = cx.add_view(window.window_id(), |cx| { let mut search_bar = BufferSearchBar::new(cx); search_bar.set_active_pane_item(Some(&editor), cx); search_bar.show(cx); @@ -1232,7 +1232,7 @@ mod tests { ); let buffer = cx.add_model(|cx| Buffer::new(0, buffer_text, cx)); let window = cx.add_window(|_| EmptyView); - let window_id = window.id(); + let window_id = window.window_id(); let editor = cx.add_view(window_id, |cx| Editor::for_buffer(buffer.clone(), None, cx)); @@ -1421,11 +1421,11 @@ mod tests { let buffer = cx.add_model(|cx| Buffer::new(0, buffer_text, cx)); let window = cx.add_window(|_| EmptyView); - let editor = cx.add_view(window.id(), |cx| { + let editor = cx.add_view(window.window_id(), |cx| { Editor::for_buffer(buffer.clone(), None, cx) }); - let search_bar = cx.add_view(window.id(), |cx| { + let search_bar = cx.add_view(window.window_id(), |cx| { let mut search_bar = BufferSearchBar::new(cx); search_bar.set_active_pane_item(Some(&editor), cx); search_bar.show(cx); diff --git a/crates/search/src/project_search.rs b/crates/search/src/project_search.rs index 0db66b4e37..febd564050 100644 --- a/crates/search/src/project_search.rs +++ b/crates/search/src/project_search.rs @@ -1568,7 +1568,7 @@ pub mod tests { let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let active_item = cx.read(|cx| { workspace @@ -1874,7 +1874,7 @@ pub mod tests { let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); workspace.update(cx, |workspace, cx| { ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx) }); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 2efa9f8daa..09e4c4c219 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -4196,14 +4196,14 @@ mod tests { ); }); assert_eq!( - cx.current_window_title(window.id()).as_deref(), + cx.current_window_title(window.window_id()).as_deref(), Some("one.txt — root1") ); // Add a second item to a non-empty pane workspace.update(cx, |workspace, cx| workspace.add_item(Box::new(item2), cx)); assert_eq!( - cx.current_window_title(window.id()).as_deref(), + cx.current_window_title(window.window_id()).as_deref(), Some("two.txt — root1") ); project.read_with(cx, |project, cx| { @@ -4222,7 +4222,7 @@ mod tests { .await .unwrap(); assert_eq!( - cx.current_window_title(window.id()).as_deref(), + cx.current_window_title(window.window_id()).as_deref(), Some("one.txt — root1") ); project.read_with(cx, |project, cx| { @@ -4242,14 +4242,14 @@ mod tests { .await .unwrap(); assert_eq!( - cx.current_window_title(window.id()).as_deref(), + cx.current_window_title(window.window_id()).as_deref(), Some("one.txt — root1, root2") ); // Remove a project folder project.update(cx, |project, cx| project.remove_worktree(worktree_id, cx)); assert_eq!( - cx.current_window_title(window.id()).as_deref(), + cx.current_window_title(window.window_id()).as_deref(), Some("one.txt — root2") ); } @@ -4285,9 +4285,9 @@ mod tests { }); let task = workspace.update(cx, |w, cx| w.prepare_to_close(false, cx)); cx.foreground().run_until_parked(); - cx.simulate_prompt_answer(window.id(), 2 /* cancel */); + cx.simulate_prompt_answer(window.window_id(), 2 /* cancel */); cx.foreground().run_until_parked(); - assert!(!cx.has_pending_prompt(window.id())); + assert!(!cx.has_pending_prompt(window.window_id())); assert!(!task.await.unwrap()); } @@ -4346,10 +4346,10 @@ mod tests { assert_eq!(pane.items_len(), 4); assert_eq!(pane.active_item().unwrap().id(), item1.id()); }); - assert!(cx.has_pending_prompt(window.id())); + assert!(cx.has_pending_prompt(window.window_id())); // Confirm saving item 1. - cx.simulate_prompt_answer(window.id(), 0); + cx.simulate_prompt_answer(window.window_id(), 0); cx.foreground().run_until_parked(); // Item 1 is saved. There's a prompt to save item 3. @@ -4360,10 +4360,10 @@ mod tests { assert_eq!(pane.items_len(), 3); assert_eq!(pane.active_item().unwrap().id(), item3.id()); }); - assert!(cx.has_pending_prompt(window.id())); + assert!(cx.has_pending_prompt(window.window_id())); // Cancel saving item 3. - cx.simulate_prompt_answer(window.id(), 1); + cx.simulate_prompt_answer(window.window_id(), 1); cx.foreground().run_until_parked(); // Item 3 is reloaded. There's a prompt to save item 4. @@ -4374,10 +4374,10 @@ mod tests { assert_eq!(pane.items_len(), 2); assert_eq!(pane.active_item().unwrap().id(), item4.id()); }); - assert!(cx.has_pending_prompt(window.id())); + assert!(cx.has_pending_prompt(window.window_id())); // Confirm saving item 4. - cx.simulate_prompt_answer(window.id(), 0); + cx.simulate_prompt_answer(window.window_id(), 0); cx.foreground().run_until_parked(); // There's a prompt for a path for item 4. @@ -4480,7 +4480,7 @@ mod tests { &[ProjectEntryId::from_proto(0)] ); }); - cx.simulate_prompt_answer(window.id(), 0); + cx.simulate_prompt_answer(window.window_id(), 0); cx.foreground().run_until_parked(); left_pane.read_with(cx, |pane, cx| { @@ -4489,7 +4489,7 @@ mod tests { &[ProjectEntryId::from_proto(2)] ); }); - cx.simulate_prompt_answer(window.id(), 0); + cx.simulate_prompt_answer(window.window_id(), 0); cx.foreground().run_until_parked(); close.await.unwrap(); @@ -4549,7 +4549,7 @@ mod tests { item.read_with(cx, |item, _| assert_eq!(item.save_count, 2)); // Deactivating the window still saves the file. - cx.simulate_window_activation(Some(window.id())); + cx.simulate_window_activation(Some(window.window_id())); item.update(cx, |item, cx| { cx.focus_self(); item.is_dirty = true; @@ -4591,7 +4591,7 @@ mod tests { pane.update(cx, |pane, cx| pane.close_items(cx, move |id| id == item_id)) .await .unwrap(); - assert!(!cx.has_pending_prompt(window.id())); + assert!(!cx.has_pending_prompt(window.window_id())); item.read_with(cx, |item, _| assert_eq!(item.save_count, 5)); // Add the item again, ensuring autosave is prevented if the underlying file has been deleted. @@ -4612,7 +4612,7 @@ mod tests { let _close_items = pane.update(cx, |pane, cx| pane.close_items(cx, move |id| id == item_id)); deterministic.run_until_parked(); - assert!(cx.has_pending_prompt(window.id())); + assert!(cx.has_pending_prompt(window.window_id())); item.read_with(cx, |item, _| assert_eq!(item.save_count, 5)); } diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index a459122cfc..1c65317c41 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -1299,7 +1299,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); // Open a file within an existing worktree. workspace @@ -1342,7 +1342,7 @@ mod tests { project.update(cx, |project, _| project.languages().add(rust_lang())); let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let worktree = cx.read(|cx| workspace.read(cx).worktrees(cx).next().unwrap()); // Create a new untitled buffer @@ -1437,7 +1437,7 @@ mod tests { project.update(cx, |project, _| project.languages().add(rust_lang())); let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); // Create a new untitled buffer cx.dispatch_action(window_id, NewFile); @@ -1490,7 +1490,7 @@ mod tests { let project = Project::test(app_state.fs.clone(), ["/root".as_ref()], cx).await; let window = cx.add_window(|cx| Workspace::test_new(project, cx)); let workspace = window.root(cx); - let window_id = window.id(); + let window_id = window.window_id(); let entries = cx.read(|cx| workspace.file_project_paths(cx)); let file1 = entries[0].clone(); @@ -2088,7 +2088,7 @@ mod tests { cx.foreground().run_until_parked(); let window = cx.add_window(|_| TestView); - let window_id = window.id(); + let window_id = window.window_id(); // Test loading the keymap base at all assert_key_bindings_for( @@ -2259,7 +2259,7 @@ mod tests { cx.foreground().run_until_parked(); let window = cx.add_window(|_| TestView); - let window_id = window.id(); + let window_id = window.window_id(); // Test loading the keymap base at all assert_key_bindings_for( From 2d96388be369259c5e8b6006bfe81cfe979889a3 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 3 Aug 2023 17:46:34 -0600 Subject: [PATCH 120/120] Use WindowHandles in a couple places --- crates/copilot/src/sign_in.rs | 44 +++++++++++++++++------------------ crates/gpui/src/app.rs | 43 +++++++++++++++------------------- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/crates/copilot/src/sign_in.rs b/crates/copilot/src/sign_in.rs index 0d5bb28ed6..d03a2d393b 100644 --- a/crates/copilot/src/sign_in.rs +++ b/crates/copilot/src/sign_in.rs @@ -18,42 +18,42 @@ const COPILOT_SIGN_UP_URL: &'static str = "https://github.com/features/copilot"; pub fn init(cx: &mut AppContext) { if let Some(copilot) = Copilot::global(cx) { - let mut code_verification: Option> = None; + let mut verification_window: Option> = None; cx.observe(&copilot, move |copilot, cx| { let status = copilot.read(cx).status(); match &status { crate::Status::SigningIn { prompt } => { - if let Some(code_verification_handle) = code_verification.as_mut() { - let window_id = code_verification_handle.window_id(); - let updated = cx.update_window(window_id, |cx| { - code_verification_handle.update_root(cx, |code_verification, cx| { - code_verification.set_status(status.clone(), cx) - }); - cx.activate_window(); - }); - if updated.is_none() { - code_verification = Some(create_copilot_auth_window(cx, &status)); + if let Some(window) = verification_window.as_mut() { + let updated = window + .root(cx) + .map(|root| { + root.update(cx, |verification, cx| { + verification.set_status(status.clone(), cx); + cx.activate_window(); + }) + }) + .is_some(); + if !updated { + verification_window = Some(create_copilot_auth_window(cx, &status)); } } else if let Some(_prompt) = prompt { - code_verification = Some(create_copilot_auth_window(cx, &status)); + verification_window = Some(create_copilot_auth_window(cx, &status)); } } Status::Authorized | Status::Unauthorized => { - if let Some(code_verification) = code_verification.as_ref() { - let window_id = code_verification.window_id(); - cx.update_window(window_id, |cx| { - code_verification.update_root(cx, |code_verification, cx| { - code_verification.set_status(status, cx) + if let Some(window) = verification_window.as_ref() { + if let Some(verification) = window.root(cx) { + verification.update(cx, |verification, cx| { + verification.set_status(status, cx); + cx.platform().activate(true); + cx.activate_window(); }); - - cx.platform().activate(true); - cx.activate_window(); - }); + } } } _ => { - if let Some(code_verification) = code_verification.take() { + if let Some(code_verification) = verification_window.take() { code_verification.update(cx, |cx| cx.remove_window()); } } diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 90f910d255..d98033820b 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -808,7 +808,7 @@ impl AppContext { result } - pub fn read_window T>( + fn read_window T>( &self, window_id: usize, callback: F, @@ -3892,31 +3892,26 @@ impl WindowHandle { cx.read_window_with(self.window_id(), |cx| read(cx)) } - pub fn update(&self, cx: &mut C, update: F) -> R + pub fn update(&self, cx: &mut C, update: F) -> C::Result where - C: BorrowAppContext, + C: BorrowWindowContext, F: FnOnce(&mut WindowContext) -> R, { - cx.update(|cx| cx.update_window(self.window_id(), update).unwrap()) + cx.update_window(self.window_id(), update) } - pub fn update_root(&self, cx: &mut C, update: F) -> R - where - C: BorrowAppContext, - F: FnOnce(&mut V, &mut ViewContext) -> R, - { - let window_id = self.window_id(); - cx.update(|cx| { - cx.update_window(window_id, |cx| { - cx.root_view() - .clone() - .downcast::() - .unwrap() - .update(cx, update) - }) - .unwrap() - }) - } + // pub fn update_root(&self, cx: &mut C, update: F) -> C::Result> + // where + // C: BorrowWindowContext, + // F: FnOnce(&mut V, &mut ViewContext) -> R, + // { + // cx.update_window(self.window_id, |cx| { + // cx.root_view() + // .clone() + // .downcast::() + // .map(|v| v.update(cx, update)) + // }) + // } pub fn read_root<'a>(&self, cx: &'a AppContext) -> &'a V { let root_view = cx @@ -3940,9 +3935,9 @@ impl WindowHandle { }) } - pub fn add_view(&self, cx: &mut C, build_view: F) -> ViewHandle + pub fn add_view(&self, cx: &mut C, build_view: F) -> C::Result> where - C: BorrowAppContext, + C: BorrowWindowContext, U: View, F: FnOnce(&mut ViewContext) -> U, { @@ -4836,7 +4831,7 @@ mod tests { let called_defer = Rc::new(AtomicBool::new(false)); let called_after_window_update = Rc::new(AtomicBool::new(false)); - window.update_root(cx, |this, cx| { + window.root(cx).update(cx, |this, cx| { assert_eq!(this.render_count, 1); cx.defer({ let called_defer = called_defer.clone();

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