From 7fbe0b86386368456c6c61798f876f8a5c507add Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 9 Jan 2024 10:14:05 -0800 Subject: [PATCH 01/17] Start work on language docs --- crates/language/src/buffer.rs | 103 +++++++++++++++++++++-- crates/language/src/language.rs | 36 +++++++- crates/language/src/language_settings.rs | 62 +++++++++++++- crates/language/src/markdown.rs | 35 +++++++- crates/language/src/proto.rs | 9 ++ 5 files changed, 231 insertions(+), 14 deletions(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index d9472e8a77afc2dc7222d003aa23f513448ed661..f4917780b318e7e3cc4d0e81eac5656822d17e6d 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -42,7 +42,13 @@ use std::{ }; use sum_tree::TreeMap; use text::operation_queue::OperationQueue; -pub use text::{Buffer as TextBuffer, BufferSnapshot as TextBufferSnapshot, *}; +use text::*; +pub use text::{ + Anchor, Bias, Buffer as TextBuffer, BufferSnapshot as TextBufferSnapshot, Edit, OffsetRangeExt, + OffsetUtf16, Patch, Point, PointUtf16, Rope, RopeFingerprint, Selection, SelectionGoal, + Subscription, TextDimension, TextSummary, ToOffset, ToOffsetUtf16, ToPoint, ToPointUtf16, + Transaction, TransactionId, Unclipped, +}; use theme::SyntaxTheme; #[cfg(any(test, feature = "test-support"))] use util::RandomCharIter; @@ -63,6 +69,7 @@ pub enum Capability { ReadOnly, } +/// An in-memory representation of a source code file. pub struct Buffer { text: TextBuffer, diff_base: Option, @@ -99,6 +106,8 @@ pub struct Buffer { capability: Capability, } +/// An immutable, cheaply cloneable representation of a certain +/// state of a buffer. pub struct BufferSnapshot { text: text::BufferSnapshot, pub git_diff: git::diff::BufferDiff, @@ -150,6 +159,7 @@ pub struct GroupId { id: usize, } +/// A diagnostic associated with a certain range of a buffer. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Diagnostic { pub source: Option, @@ -257,6 +267,7 @@ pub enum Event { Closed, } +/// The file associated with a buffer. pub trait File: Send + Sync { fn as_local(&self) -> Option<&dyn LocalFile>; @@ -306,6 +317,10 @@ pub trait LocalFile: File { ); } +/// The auto-indent behavior associated with an editing operation. +/// For some editing operations, each affected line of text has its +/// indentation recomputed. For other operations, the entire block +/// of edited text is adjusted uniformly. #[derive(Clone, Debug)] pub enum AutoindentMode { /// Indent each line of inserted text. @@ -353,6 +368,8 @@ struct BufferChunkHighlights<'a> { highlight_maps: Vec, } +/// An iterator that yields chunks of a buffer's text, along with their +/// syntax highlights and diagnostic status. pub struct BufferChunks<'a> { range: Range, chunks: text::Chunks<'a>, @@ -365,6 +382,8 @@ pub struct BufferChunks<'a> { highlights: Option>, } +/// A chunk of a buffer's text, along with its syntax highlight and +/// diagnostic status. #[derive(Clone, Copy, Debug, Default)] pub struct Chunk<'a> { pub text: &'a str, @@ -375,6 +394,7 @@ pub struct Chunk<'a> { pub is_tab: bool, } +/// A set of edits to a given version of a buffer, computed asynchronously. pub struct Diff { pub(crate) base_version: clock::Global, line_ending: LineEnding, @@ -407,6 +427,7 @@ impl CharKind { } impl Buffer { + /// Create a new buffer with the given base text. pub fn new>(replica_id: ReplicaId, id: u64, base_text: T) -> Self { Self::build( TextBuffer::new(replica_id, id, base_text.into()), @@ -416,6 +437,7 @@ impl Buffer { ) } + /// Create a new buffer that is a replica of a remote buffer. pub fn remote( remote_id: u64, replica_id: ReplicaId, @@ -430,6 +452,8 @@ impl Buffer { ) } + /// Create a new buffer that is a replica of a remote buffer, populating its + /// state from the given protobuf message. pub fn from_proto( replica_id: ReplicaId, capability: Capability, @@ -456,6 +480,7 @@ impl Buffer { Ok(this) } + /// Serialize the buffer's state to a protobuf message. pub fn to_proto(&self) -> proto::BufferState { proto::BufferState { id: self.remote_id(), @@ -469,6 +494,7 @@ impl Buffer { } } + /// Serialize as protobufs all of the changes to the buffer since the given version. pub fn serialize_ops( &self, since: Option, @@ -515,6 +541,7 @@ impl Buffer { }) } + /// Assign a language to the buffer, returning the buffer. pub fn with_language(mut self, language: Arc, cx: &mut ModelContext) -> Self { self.set_language(Some(language), cx); self @@ -572,6 +599,8 @@ impl Buffer { } } + /// Retrieve a snapshot of the buffer's current state. This is computationally + /// cheap, and allows reading from the buffer on a background thread. pub fn snapshot(&self) -> BufferSnapshot { let text = self.text.snapshot(); let mut syntax_map = self.syntax_map.lock(); @@ -594,18 +623,22 @@ impl Buffer { } } - pub fn as_text_snapshot(&self) -> &text::BufferSnapshot { + pub(crate) fn as_text_snapshot(&self) -> &text::BufferSnapshot { &self.text } + /// Retrieve a snapshot of the buffer's raw text, without any + /// language-related state like the syntax tree or diagnostics. pub fn text_snapshot(&self) -> text::BufferSnapshot { self.text.snapshot() } + /// The file associated with the buffer, if any. pub fn file(&self) -> Option<&Arc> { self.file.as_ref() } + /// The version of the buffer that was last saved or reloaded from disk. pub fn saved_version(&self) -> &clock::Global { &self.saved_version } @@ -614,10 +647,12 @@ impl Buffer { self.file_fingerprint } + /// The mtime of the buffer's file when the buffer was last saved or reloaded from disk. pub fn saved_mtime(&self) -> SystemTime { self.saved_mtime } + /// Assign a language to the buffer. pub fn set_language(&mut self, language: Option>, cx: &mut ModelContext) { self.syntax_map.lock().clear(); self.language = language; @@ -625,6 +660,8 @@ impl Buffer { cx.emit(Event::LanguageChanged); } + /// Assign a language registry to the buffer. This allows the buffer to retrieve + /// other languages if parts of the buffer are written in different languages. pub fn set_language_registry(&mut self, language_registry: Arc) { self.syntax_map .lock() @@ -935,6 +972,7 @@ impl Buffer { cx.notify(); } + /// Assign to the buffer a set of diagnostics created by a given language server. pub fn update_diagnostics( &mut self, server_id: LanguageServerId, @@ -1164,9 +1202,9 @@ impl Buffer { self.edit(edits, None, cx); } - // Create a minimal edit that will cause the the given row to be indented - // with the given size. After applying this edit, the length of the line - // will always be at least `new_size.len`. + /// Create a minimal edit that will cause the the given row to be indented + /// with the given size. After applying this edit, the length of the line + /// will always be at least `new_size.len`. pub fn edit_for_indent_size_adjustment( row: u32, current_size: IndentSize, @@ -1201,6 +1239,8 @@ impl Buffer { } } + /// Spawns a background task that asynchronously computes a `Diff` between the buffer's text + /// and the given new text. pub fn diff(&self, mut new_text: String, cx: &AppContext) -> Task { let old_text = self.as_rope().clone(); let base_version = self.version(); @@ -1272,7 +1312,7 @@ impl Buffer { }) } - /// Spawn a background task that searches the buffer for any whitespace + /// Spawns a background task that searches the buffer for any whitespace /// at the ends of a lines, and returns a `Diff` that removes that whitespace. pub fn remove_trailing_whitespace(&self, cx: &AppContext) -> Task { let old_text = self.as_rope().clone(); @@ -1292,7 +1332,7 @@ impl Buffer { }) } - /// Ensure that the buffer ends with a single newline character, and + /// Ensures that the buffer ends with a single newline character, and /// no other whitespace. pub fn ensure_final_newline(&mut self, cx: &mut ModelContext) { let len = self.len(); @@ -1313,7 +1353,7 @@ impl Buffer { self.edit([(offset..len, "\n")], None, cx); } - /// Apply a diff to the buffer. If the buffer has changed since the given diff was + /// Applies a diff to the buffer. If the buffer has changed since the given diff was /// calculated, then adjust the diff to account for those changes, and discard any /// parts of the diff that conflict with those changes. pub fn apply_diff(&mut self, diff: Diff, cx: &mut ModelContext) -> Option { @@ -1352,11 +1392,14 @@ impl Buffer { self.end_transaction(cx) } + /// Checks if the buffer has unsaved changes. pub fn is_dirty(&self) -> bool { self.file_fingerprint != self.as_rope().fingerprint() || self.file.as_ref().map_or(false, |file| file.is_deleted()) } + /// Checks if the buffer and its file have both changed since the buffer + /// was last saved or reloaded. pub fn has_conflict(&self) -> bool { self.file_fingerprint != self.as_rope().fingerprint() && self @@ -1365,14 +1408,23 @@ impl Buffer { .map_or(false, |file| file.mtime() > self.saved_mtime) } + /// Gets a [`Subscription`] that tracks all of the changes to the buffer's text. pub fn subscribe(&mut self) -> Subscription { self.text.subscribe() } + /// Starts a transaction, if one is not already in-progress. When undoing or + /// redoing edits, all of the edits performed within a transaction are undone + /// or redone together. pub fn start_transaction(&mut self) -> Option { self.start_transaction_at(Instant::now()) } + /// Starts a transaction, providing the current time. Subsequent transactions + /// that occur within a short period of time will be grouped together. This + /// is controlled by the buffer's undo grouping duration. + /// + /// See [`Buffer::set_group_interval`]. pub fn start_transaction_at(&mut self, now: Instant) -> Option { self.transaction_depth += 1; if self.was_dirty_before_starting_transaction.is_none() { @@ -1381,10 +1433,16 @@ impl Buffer { self.text.start_transaction_at(now) } + /// Terminates the current transaction, if this is the outermost transaction. pub fn end_transaction(&mut self, cx: &mut ModelContext) -> Option { self.end_transaction_at(Instant::now(), cx) } + /// Terminates the current transaction, providing the current time. Subsequent transactions + /// that occur within a short period of time will be grouped together. This + /// is controlled by the buffer's undo grouping duration. + /// + /// See [`Buffer::set_group_interval`]. pub fn end_transaction_at( &mut self, now: Instant, @@ -1405,26 +1463,33 @@ impl Buffer { } } + /// Manually add a transaction to the buffer's undo history. pub fn push_transaction(&mut self, transaction: Transaction, now: Instant) { self.text.push_transaction(transaction, now); } + /// Prevent the last transaction from being grouped with any subsequent transactions, + /// even if they occur with the buffer's undo grouping duration. pub fn finalize_last_transaction(&mut self) -> Option<&Transaction> { self.text.finalize_last_transaction() } + /// Manually group all changes since a given transaction. pub fn group_until_transaction(&mut self, transaction_id: TransactionId) { self.text.group_until_transaction(transaction_id); } + /// Manually remove a transaction from the buffer's undo history pub fn forget_transaction(&mut self, transaction_id: TransactionId) { self.text.forget_transaction(transaction_id); } + /// Manually merge two adjacent transactions in the buffer's undo history. pub fn merge_transactions(&mut self, transaction: TransactionId, destination: TransactionId) { self.text.merge_transactions(transaction, destination); } + /// Waits for the buffer to receive operations with the given timestamps. pub fn wait_for_edits( &mut self, edit_ids: impl IntoIterator, @@ -1432,6 +1497,7 @@ impl Buffer { self.text.wait_for_edits(edit_ids) } + /// Waits for the buffer to receive the operations necessary for resolving the given anchors. pub fn wait_for_anchors( &mut self, anchors: impl IntoIterator, @@ -1439,14 +1505,18 @@ impl Buffer { self.text.wait_for_anchors(anchors) } + /// Waits for the buffer to receive operations up to the given version. pub fn wait_for_version(&mut self, version: clock::Global) -> impl Future> { self.text.wait_for_version(version) } + /// Forces all futures returned by [`Buffer::wait_for_version`], [`Buffer::wait_for_edits`], or + /// [`Buffer::wait_for_version`] to resolve with an error. pub fn give_up_waiting(&mut self) { self.text.give_up_waiting(); } + /// Stores a set of selections that should be broadcasted to all of the buffer's replicas. pub fn set_active_selections( &mut self, selections: Arc<[Selection]>, @@ -1475,6 +1545,8 @@ impl Buffer { ); } + /// Clears the selections, so that other replicas of the buffer do not see any selections for + /// this replica. pub fn remove_active_selections(&mut self, cx: &mut ModelContext) { if self .remote_selections @@ -1485,6 +1557,7 @@ impl Buffer { } } + /// Replaces the buffer's entire text. pub fn set_text(&mut self, text: T, cx: &mut ModelContext) -> Option where T: Into>, @@ -1493,6 +1566,15 @@ impl Buffer { self.edit([(0..self.len(), text)], None, cx) } + /// Applies the given edits to the buffer. Each edit is specified as a range of text to + /// delete, and a string of text to insert at that location. + /// + /// If an [`AutoindentMode`] is provided, then the buffer will enqueue an auto-indent + /// request for the edited ranges, which will be processed when the buffer finishes + /// parsing. + /// + /// Parsing takes place at the end of a transaction, and may compute synchronously + /// or asynchronously, depending on the changes. pub fn edit( &mut self, edits_iter: I, @@ -1626,6 +1708,7 @@ impl Buffer { cx.notify(); } + /// Applies the given remote operations to the buffer. pub fn apply_ops>( &mut self, ops: I, @@ -1773,11 +1856,13 @@ impl Buffer { cx.emit(Event::Operation(operation)); } + /// Removes the selections for a given peer. pub fn remove_peer(&mut self, replica_id: ReplicaId, cx: &mut ModelContext) { self.remote_selections.remove(&replica_id); cx.notify(); } + /// Undoes the most recent transaction. pub fn undo(&mut self, cx: &mut ModelContext) -> Option { let was_dirty = self.is_dirty(); let old_version = self.version.clone(); @@ -1791,6 +1876,7 @@ impl Buffer { } } + /// Manually undoes a specific transaction in the buffer's undo history. pub fn undo_transaction( &mut self, transaction_id: TransactionId, @@ -1807,6 +1893,7 @@ impl Buffer { } } + /// Manually undoes all changes after a given transaction in the buffer's undo history. pub fn undo_to_transaction( &mut self, transaction_id: TransactionId, diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 366d2b0098ca36437252044c50825bceaed96081..df12a270c95f64cd15bc5d4fb73908d0b4f3f9a3 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -1,3 +1,7 @@ +//! The `language` crate provides... ??? + +#![warn(missing_docs)] + mod buffer; mod diagnostic_set; mod highlight_map; @@ -58,6 +62,9 @@ pub use syntax_map::{OwnedSyntaxLayerInfo, SyntaxLayerInfo}; pub use text::LineEnding; pub use tree_sitter::{Parser, Tree}; +/// Initializes the `language` crate. +/// +/// This should be called before making use of items from the create. pub fn init(cx: &mut AppContext) { language_settings::init(cx); } @@ -90,7 +97,7 @@ thread_local! { } lazy_static! { - pub static ref NEXT_GRAMMAR_ID: AtomicUsize = Default::default(); + pub(crate) static ref NEXT_GRAMMAR_ID: AtomicUsize = Default::default(); pub static ref PLAIN_TEXT: Arc = Arc::new(Language::new( LanguageConfig { name: "Plain Text".into(), @@ -358,14 +365,22 @@ pub struct CodeLabel { #[derive(Clone, Deserialize)] pub struct LanguageConfig { + /// Human-readable name of the language. pub name: Arc, + // The name of the grammar in a WASM bundle. pub grammar_name: Option>, + /// Given a list of `LanguageConfig`'s, the language of a file can be determined based on the path extension matching any of the `path_suffixes`. pub path_suffixes: Vec, + /// List of pub brackets: BracketPairConfig, + /// A regex pattern that determines whether the language should be assigned to a file or not. #[serde(default, deserialize_with = "deserialize_regex")] pub first_line_pattern: Option, + /// If set to true, auto indentation uses last non empty line to determine + /// the indentation level for a new line. #[serde(default = "auto_indent_using_last_non_empty_line_default")] pub auto_indent_using_last_non_empty_line: bool, + /// A regex that is used to determine whether the #[serde(default, deserialize_with = "deserialize_regex")] pub increase_indent_pattern: Option, #[serde(default, deserialize_with = "deserialize_regex")] @@ -382,12 +397,16 @@ pub struct LanguageConfig { pub scope_opt_in_language_servers: Vec, #[serde(default)] pub overrides: HashMap, + /// A list of characters that Zed should treat as word characters for the + /// purpose of features that operate on word boundaries, like 'move to next word end' + /// or a whole-word search in buffer search. #[serde(default)] pub word_characters: HashSet, #[serde(default)] pub prettier_parser_name: Option, } +/// Tree-sitter language queries for a given language. #[derive(Debug, Default)] pub struct LanguageQueries { pub highlights: Option>, @@ -399,6 +418,9 @@ pub struct LanguageQueries { pub overrides: Option>, } +/// Represents a language for the given range. Some languages (e.g. HTML) +/// interleave several languages together, thus a single buffer might actually contain +/// several nested scopes. #[derive(Clone, Debug)] pub struct LanguageScope { language: Arc, @@ -491,7 +513,10 @@ pub struct FakeLspAdapter { #[derive(Clone, Debug, Default)] pub struct BracketPairConfig { + /// A list of character pairs that should be treated as brackets in the context of a given language. pub pairs: Vec, + /// A list of tree-sitter scopes for which a given bracket should not be active. + /// N-th entry in `[Self::disabled_scopes_by_bracket_ix]` contains a list of disabled scopes for an n-th entry in `[Self::pairs]` pub disabled_scopes_by_bracket_ix: Vec>, } @@ -1641,6 +1666,8 @@ impl LanguageScope { self.language.config.collapsed_placeholder.as_ref() } + /// Returns line prefix that is inserted in e.g. line continuations or + /// in `toggle comments` action. pub fn line_comment_prefix(&self) -> Option<&Arc> { Override::as_option( self.config_override().map(|o| &o.line_comment), @@ -1656,6 +1683,11 @@ impl LanguageScope { .map(|e| (&e.0, &e.1)) } + /// Returns a list of language-specific word characters. + /// + /// By default, Zed treats alphanumeric characters (and '_') as word characters for + /// the purpose of actions like 'move to next word end` or whole-word search. + /// It additionally accounts for language's additional word characters. pub fn word_characters(&self) -> Option<&HashSet> { Override::as_option( self.config_override().map(|o| &o.word_characters), @@ -1663,6 +1695,8 @@ impl LanguageScope { ) } + /// Returns a list of bracket pairs for a given language with an additional + /// piece of information about whether the particular bracket pair is currently active for a given language. pub fn brackets(&self) -> impl Iterator { let mut disabled_ids = self .config_override() diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index 5359d184d65a9249f8fc82b1eae9c95d71beda6c..3ac8842243abf28823db57c9b9d15eec29bc9c6c 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -1,3 +1,5 @@ +//! Provides `language`-related settings. + use crate::{File, Language}; use anyhow::Result; use collections::{HashMap, HashSet}; @@ -11,10 +13,12 @@ use serde::{Deserialize, Serialize}; use settings::Settings; use std::{num::NonZeroU32, path::Path, sync::Arc}; -pub fn init(cx: &mut AppContext) { +/// Initializes the language settings. +pub(crate) fn init(cx: &mut AppContext) { AllLanguageSettings::register(cx); } +/// Returns the settings for the specified language from the provided file. pub fn language_settings<'a>( language: Option<&Arc>, file: Option<&Arc>, @@ -24,6 +28,7 @@ pub fn language_settings<'a>( all_language_settings(file, cx).language(language_name.as_deref()) } +/// Returns the settings for all languages from the provided file. pub fn all_language_settings<'a>( file: Option<&Arc>, cx: &'a AppContext, @@ -32,36 +37,68 @@ pub fn all_language_settings<'a>( AllLanguageSettings::get(location, cx) } +/// The settings for all languages. #[derive(Debug, Clone)] pub struct AllLanguageSettings { + /// The settings for GitHub Copilot. pub copilot: CopilotSettings, defaults: LanguageSettings, languages: HashMap, LanguageSettings>, } +/// The settings for a particular language. #[derive(Debug, Clone, Deserialize)] pub struct LanguageSettings { + /// How many columns a tab should occupy. pub tab_size: NonZeroU32, + /// Whether to indent lines using tab characters, as opposed to multiple + /// spaces. pub hard_tabs: bool, + /// How to soft-wrap long lines of text. pub soft_wrap: SoftWrap, + /// The column at which to soft-wrap lines, for buffers where soft-wrap + /// is enabled. pub preferred_line_length: u32, + /// Whether to show wrap guides in the editor. Setting this to true will + /// show a guide at the 'preferred_line_length' value if softwrap is set to + /// 'preferred_line_length', and will show any additional guides as specified + /// by the 'wrap_guides' setting. pub show_wrap_guides: bool, + /// Character counts at which to show wrap guides in the editor. pub wrap_guides: Vec, + /// Whether or not to perform a buffer format before saving. pub format_on_save: FormatOnSave, + /// Whether or not to remove any trailing whitespace from lines of a buffer + /// before saving it. pub remove_trailing_whitespace_on_save: bool, + /// Whether or not to ensure there's a single newline at the end of a buffer + /// when saving it. pub ensure_final_newline_on_save: bool, + /// How to perform a buffer format. pub formatter: Formatter, + /// Zed's Prettier integration settings. + /// If Prettier is enabled, Zed will use this its Prettier instance for any applicable file, if + /// the project has no other Prettier installed. pub prettier: HashMap, + /// Whether to use language servers to provide code intelligence. pub enable_language_server: bool, + /// Controls whether Copilot provides suggestion immediately (true) + /// or waits for a `copilot::Toggle` (false). pub show_copilot_suggestions: bool, + /// Whether to show tabs and spaces in the editor. pub show_whitespaces: ShowWhitespaceSetting, + /// Whether to start a new line with a comment when a previous line is a comment as well. pub extend_comment_on_newline: bool, + /// Inlay hint related settings. pub inlay_hints: InlayHintSettings, } +/// The settings for [GitHub Copilot](https://github.com/features/copilot). #[derive(Clone, Debug, Default)] pub struct CopilotSettings { + /// Whether Copilit is enabled. pub feature_enabled: bool, + /// A list of globs representing files that Copilot should be disabled for. pub disabled_globs: Vec, } @@ -138,7 +175,7 @@ pub struct LanguageSettingsContent { pub formatter: Option, /// Zed's Prettier integration settings. /// If Prettier is enabled, Zed will use this its Prettier instance for any applicable file, if - /// project has no other Prettier installed. + /// the project has no other Prettier installed. /// /// Default: {} #[serde(default)] @@ -148,7 +185,7 @@ pub struct LanguageSettingsContent { /// Default: true #[serde(default)] pub enable_language_server: Option, - /// Controls whether copilot provides suggestion immediately (true) + /// Controls whether Copilot provides suggestion immediately (true) /// or waits for a `copilot::Toggle` (false). /// /// Default: true @@ -176,9 +213,11 @@ pub struct CopilotSettingsContent { #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct FeaturesContent { + /// Whether the GitHub Copilot feature is enabled. pub copilot: Option, } +/// Controls the soft-wrapping behavior in the editor. #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum SoftWrap { @@ -190,14 +229,20 @@ pub enum SoftWrap { PreferredLineLength, } +/// Controls the behavior of formatting files when they are saved. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum FormatOnSave { + /// Files should be formatted on save. On, + /// Files should not be formatted on save. Off, LanguageServer, + /// The external program to use to format the files on save. External { + /// The external program to run. command: Arc, + /// The arguments to pass to the program. arguments: Arc<[String]>, }, } @@ -231,6 +276,7 @@ pub enum Formatter { }, } +/// The settings for inlay hints. #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] pub struct InlayHintSettings { /// Global switch to toggle hints on and off. @@ -238,10 +284,19 @@ pub struct InlayHintSettings { /// Default: false #[serde(default)] pub enabled: bool, + /// Whether type hints should be shown. + /// + /// Default: true #[serde(default = "default_true")] pub show_type_hints: bool, + /// Whether parameter hints should be shown. + /// + /// Default: true #[serde(default = "default_true")] pub show_parameter_hints: bool, + /// Whether other hints should be shown. + /// + /// Default: true #[serde(default = "default_true")] pub show_other_hints: bool, } @@ -251,6 +306,7 @@ fn default_true() -> bool { } impl InlayHintSettings { + /// Returns the kinds of inlay hints that are enabled based on the settings. pub fn enabled_inlay_hint_kinds(&self) -> HashSet> { let mut kinds = HashSet::default(); if self.show_type_hints { diff --git a/crates/language/src/markdown.rs b/crates/language/src/markdown.rs index df75b610ef844ec858d74ae7a3a8bafa5a59edbe..863f38667f27c4124dc76702cffd12ed0a8ad0be 100644 --- a/crates/language/src/markdown.rs +++ b/crates/language/src/markdown.rs @@ -1,3 +1,5 @@ +//! Provides Markdown-related constructs. + use std::sync::Arc; use std::{ops::Range, path::PathBuf}; @@ -5,21 +7,30 @@ use crate::{HighlightId, Language, LanguageRegistry}; use gpui::{px, FontStyle, FontWeight, HighlightStyle, UnderlineStyle}; use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag}; +/// Parsed Markdown content. #[derive(Debug, Clone)] pub struct ParsedMarkdown { + /// The Markdown text. pub text: String, + /// The list of highlights contained in the Markdown document. pub highlights: Vec<(Range, MarkdownHighlight)>, + /// The regions of the various ranges in the Markdown document. pub region_ranges: Vec>, + /// The regions of the Markdown document. pub regions: Vec, } +/// A run of highlighted Markdown text. #[derive(Debug, Clone, PartialEq, Eq)] pub enum MarkdownHighlight { + /// A styled Markdown highlight. Style(MarkdownHighlightStyle), + /// A highlighted code block. Code(HighlightId), } impl MarkdownHighlight { + /// Converts this [`MarkdownHighlight`] to a [`HighlightStyle`]. pub fn to_highlight_style(&self, theme: &theme::SyntaxTheme) -> Option { match self { MarkdownHighlight::Style(style) => { @@ -48,23 +59,39 @@ impl MarkdownHighlight { } } +/// The style for a Markdown highlight. #[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct MarkdownHighlightStyle { + /// Whether the text should be italicized. pub italic: bool, + /// Whether the text should be underlined. pub underline: bool, + /// The weight of the text. pub weight: FontWeight, } +/// A parsed region in a Markdown document. #[derive(Debug, Clone)] pub struct ParsedRegion { + /// Whether the region is a code block. pub code: bool, + /// The link contained in this region, if it has one. pub link: Option, } +/// A Markdown link. #[derive(Debug, Clone)] pub enum Link { - Web { url: String }, - Path { path: PathBuf }, + /// A link to a webpage. + Web { + /// The URL of the webpage. + url: String, + }, + /// A link to a path on the filesystem. + Path { + /// The path to the item. + path: PathBuf, + }, } impl Link { @@ -82,6 +109,7 @@ impl Link { } } +/// Parses a string of Markdown. pub async fn parse_markdown( markdown: &str, language_registry: &Arc, @@ -111,6 +139,7 @@ pub async fn parse_markdown( } } +/// Parses a Markdown block. pub async fn parse_markdown_block( markdown: &str, language_registry: &Arc, @@ -261,6 +290,7 @@ pub async fn parse_markdown_block( } } +/// Appends a highlighted run of text to the provided `text` buffer. pub fn highlight_code( text: &mut String, highlights: &mut Vec<(Range, MarkdownHighlight)>, @@ -275,6 +305,7 @@ pub fn highlight_code( } } +/// Appends a new paragraph to the provided `text` buffer. pub fn new_paragraph(text: &mut String, list_stack: &mut Vec<(Option, bool)>) { let mut is_subsequent_paragraph_of_list = false; if let Some((_, has_content)) = list_stack.last_mut() { diff --git a/crates/language/src/proto.rs b/crates/language/src/proto.rs index 957f4ee7fbc4da251698fd640d33d37d5cf4a06b..8d71e6e397af8ff11c24e3ba2b7c322395952d93 100644 --- a/crates/language/src/proto.rs +++ b/crates/language/src/proto.rs @@ -1,3 +1,5 @@ +//! Handles conversions of `language` items to and from the [`rpc`] protocol. + use crate::{ diagnostic_set::DiagnosticEntry, CodeAction, CodeLabel, Completion, CursorShape, Diagnostic, Language, @@ -11,15 +13,18 @@ use text::*; pub use proto::{BufferState, Operation}; +/// Serializes a [`RopeFingerprint`] to be sent over the wire. pub fn serialize_fingerprint(fingerprint: RopeFingerprint) -> String { fingerprint.to_hex() } +/// Deserializes a [`RopeFingerprint`] from the wire format. pub fn deserialize_fingerprint(fingerprint: &str) -> Result { RopeFingerprint::from_hex(fingerprint) .map_err(|error| anyhow!("invalid fingerprint: {}", error)) } +/// Deserializes a `[text::LineEnding]` from the wire format. pub fn deserialize_line_ending(message: proto::LineEnding) -> text::LineEnding { match message { proto::LineEnding::Unix => text::LineEnding::Unix, @@ -27,6 +32,7 @@ pub fn deserialize_line_ending(message: proto::LineEnding) -> text::LineEnding { } } +/// Serializes a [`text::LineEnding`] to be sent over the wire. pub fn serialize_line_ending(message: text::LineEnding) -> proto::LineEnding { match message { text::LineEnding::Unix => proto::LineEnding::Unix, @@ -34,6 +40,7 @@ pub fn serialize_line_ending(message: text::LineEnding) -> proto::LineEnding { } } +/// Serializes a [`crate::Operation`] to be sent over the wire. pub fn serialize_operation(operation: &crate::Operation) -> proto::Operation { proto::Operation { variant: Some(match operation { @@ -96,6 +103,7 @@ pub fn serialize_operation(operation: &crate::Operation) -> proto::Operation { } } +/// Serializes an [`operation::EditOperation`] to be sent over the wire. pub fn serialize_edit_operation(operation: &EditOperation) -> proto::operation::Edit { proto::operation::Edit { replica_id: operation.timestamp.replica_id as u32, @@ -110,6 +118,7 @@ pub fn serialize_edit_operation(operation: &EditOperation) -> proto::operation:: } } +/// Serializes an entry in the undo map to be sent over the wire. pub fn serialize_undo_map_entry( (edit_id, counts): (&clock::Lamport, &[(clock::Lamport, u32)]), ) -> proto::UndoMapEntry { From b02f37083b2e703cadb6752ba75ed7f8be626d15 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 9 Jan 2024 10:53:57 -0800 Subject: [PATCH 02/17] More docs --- crates/language/src/buffer.rs | 26 +++++++++--- crates/language/src/language.rs | 32 ++++++++++++--- crates/language/src/language_settings.rs | 33 +++++++++++++-- crates/language/src/outline.rs | 1 + crates/language/src/proto.rs | 41 +++++++++++++++---- crates/language/src/syntax_map.rs | 36 ++++++++-------- crates/language_tools/src/syntax_tree_view.rs | 6 +-- 7 files changed, 133 insertions(+), 42 deletions(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index f4917780b318e7e3cc4d0e81eac5656822d17e6d..b745ff6f43fbb88908989ca71dcdc11d9ed6657a 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -10,7 +10,7 @@ use crate::{ markdown::parse_markdown, outline::OutlineItem, syntax_map::{ - SyntaxLayerInfo, SyntaxMap, SyntaxMapCapture, SyntaxMapCaptures, SyntaxMapMatches, + SyntaxLayer, SyntaxMap, SyntaxMapCapture, SyntaxMapCaptures, SyntaxMapMatches, SyntaxSnapshot, ToTreeSitterPoint, }, CodeLabel, LanguageScope, Outline, @@ -69,7 +69,8 @@ pub enum Capability { ReadOnly, } -/// An in-memory representation of a source code file. +/// An in-memory representation of a source code file, including its text, +/// syntax trees, git status, and diagnostics. pub struct Buffer { text: TextBuffer, diff_base: Option, @@ -123,12 +124,15 @@ pub struct BufferSnapshot { parse_count: usize, } +/// The kind and amount of indentation in a particular line. For now, +/// assumes that indentation is all the same character. #[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] pub struct IndentSize { pub len: u32, pub kind: IndentKind, } +/// A whitespace character that's used for indentation. #[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] pub enum IndentKind { #[default] @@ -136,6 +140,7 @@ pub enum IndentKind { Tab, } +/// The shape of a selection cursor. #[derive(Copy, Clone, PartialEq, Eq, Debug, Default)] pub enum CursorShape { #[default] @@ -300,6 +305,7 @@ pub trait File: Send + Sync { fn to_proto(&self) -> rpc::proto::File; } +/// The file associated with a buffer, in the case where the file is on the local disk. pub trait LocalFile: File { /// Returns the absolute path of this file. fn abs_path(&self, cx: &AppContext) -> PathBuf; @@ -409,6 +415,7 @@ pub(crate) struct DiagnosticEndpoint { is_unnecessary: bool, } +/// A class of characters, used for characterizing a run of text. #[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Debug)] pub enum CharKind { Whitespace, @@ -2048,6 +2055,8 @@ impl BufferSnapshot { } } + /// Retrieve the suggested indent size for all of the given rows. The unit of indentation + /// is passed in as `single_indent_size`. pub fn suggested_indents( &self, rows: impl Iterator, @@ -2294,6 +2303,10 @@ impl BufferSnapshot { None } + /// Iterates over chunks of text in the given range of the buffer. Text is chunked + /// in an arbitrary way due to being stored in a [`rope::Rope`]. The text is also + /// returned in chunks where each chunk has a single syntax highlighting style and + /// diagnostic status. pub fn chunks(&self, range: Range, language_aware: bool) -> BufferChunks { let range = range.start.to_offset(self)..range.end.to_offset(self); @@ -2330,7 +2343,9 @@ impl BufferSnapshot { BufferChunks::new(self.text.as_rope(), range, syntax, diagnostic_endpoints) } - pub fn for_each_line(&self, range: Range, mut callback: impl FnMut(u32, &str)) { + /// Invokes the given callback for each line of text in the given range of the buffer. + /// Uses callback to avoid allocating a string for each line. + fn for_each_line(&self, range: Range, mut callback: impl FnMut(u32, &str)) { let mut line = String::new(); let mut row = range.start.row; for chunk in self @@ -2349,11 +2364,12 @@ impl BufferSnapshot { } } - pub fn syntax_layers(&self) -> impl Iterator + '_ { + /// Iterates over every [`SyntaxLayer`] in the buffer. + pub fn syntax_layers(&self) -> impl Iterator + '_ { self.syntax.layers_for_range(0..self.len(), &self.text) } - pub fn syntax_layer_at(&self, position: D) -> Option { + pub fn syntax_layer_at(&self, position: D) -> Option { let offset = position.to_offset(self); self.syntax .layers_for_range(offset..offset, &self.text) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index df12a270c95f64cd15bc5d4fb73908d0b4f3f9a3..8182af1e54054c0b973afd296a18c1a3c993a405 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -58,7 +58,7 @@ pub use buffer::*; pub use diagnostic_set::DiagnosticEntry; pub use lsp::LanguageServerId; pub use outline::{Outline, OutlineItem}; -pub use syntax_map::{OwnedSyntaxLayerInfo, SyntaxLayerInfo}; +pub use syntax_map::{OwnedSyntaxLayer, SyntaxLayer}; pub use text::LineEnding; pub use tree_sitter::{Parser, Tree}; @@ -246,6 +246,8 @@ impl CachedLspAdapter { } } +/// [`LspAdapterDelegate`] allows [`LspAdapter]` implementations to interface with the application +// e.g. to display a notification or fetch data from the web. pub trait LspAdapterDelegate: Send + Sync { fn show_notification(&self, message: &str, cx: &mut AppContext); fn http_client(&self) -> Arc; @@ -291,6 +293,10 @@ pub trait LspAdapter: 'static + Send + Sync { delegate: &dyn LspAdapterDelegate, ) -> Option; + /// Returns true if a language server can be reinstalled. + /// If language server initialization fails, a reinstallation will be attempted unless the value returned from this method is false. + /// Implementations that rely on software already installed on user's system + /// should have [`can_be_reinstalled`] return false. fn can_be_reinstalled(&self) -> bool { true } @@ -302,6 +308,9 @@ pub trait LspAdapter: 'static + Send + Sync { fn process_diagnostics(&self, _: &mut lsp::PublishDiagnosticsParams) {} + /// A callback called for each [`lsp_types::CompletionItem`] obtained from LSP server. + /// Some LspAdapter implementations might want to modify the obtained item to + /// change how it's displayed. async fn process_completion(&self, _: &mut lsp::CompletionItem) {} async fn label_for_completion( @@ -321,6 +330,7 @@ pub trait LspAdapter: 'static + Send + Sync { None } + /// Returns initialization options that are going to be sent to a LSP server as a part of [`lsp_types::InitializeParams`] async fn initialization_options(&self) -> Option { None } @@ -329,6 +339,7 @@ pub trait LspAdapter: 'static + Send + Sync { futures::future::ready(serde_json::json!({})).boxed() } + /// Returns a list of code actions supported by a given LspAdapter fn code_action_kinds(&self) -> Option> { Some(vec![ CodeActionKind::EMPTY, @@ -380,19 +391,29 @@ pub struct LanguageConfig { /// the indentation level for a new line. #[serde(default = "auto_indent_using_last_non_empty_line_default")] pub auto_indent_using_last_non_empty_line: bool, - /// A regex that is used to determine whether the + /// A regex that is used to determine whether the indentation level should be + /// increased in the following line. #[serde(default, deserialize_with = "deserialize_regex")] pub increase_indent_pattern: Option, + /// A regex that is used to determine whether the indentation level should be + /// decreased in the following line. #[serde(default, deserialize_with = "deserialize_regex")] pub decrease_indent_pattern: Option, + /// A list of characters that trigger the automatic insertion of a closing + /// bracket when they immediately precede the point where an opening + /// bracket is inserted. #[serde(default)] pub autoclose_before: String, - #[serde(default)] - pub line_comment: Option>, + /// A placeholder used internally by Semantic Index. #[serde(default)] pub collapsed_placeholder: String, + /// A line comment string that is inserted in e.g. `toggle comments` action. + #[serde(default)] + pub line_comment: Option>, + /// Starting and closing characters of a block comment. #[serde(default)] pub block_comment: Option<(Arc, Arc)>, + /// A list of language servers that are allowed to run on subranges of a given language. #[serde(default)] pub scope_opt_in_language_servers: Vec, #[serde(default)] @@ -402,6 +423,7 @@ pub struct LanguageConfig { /// or a whole-word search in buffer search. #[serde(default)] pub word_characters: HashSet, + /// The name of a Prettier parser that should be used for this language. #[serde(default)] pub prettier_parser_name: Option, } @@ -480,9 +502,9 @@ impl Default for LanguageConfig { block_comment: Default::default(), scope_opt_in_language_servers: Default::default(), overrides: Default::default(), - collapsed_placeholder: Default::default(), word_characters: Default::default(), prettier_parser_name: None, + collapsed_placeholder: Default::default(), } } } diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index 3ac8842243abf28823db57c9b9d15eec29bc9c6c..c1bd3aa57fa723231a3de6b36566adad5b749c55 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -96,24 +96,30 @@ pub struct LanguageSettings { /// The settings for [GitHub Copilot](https://github.com/features/copilot). #[derive(Clone, Debug, Default)] pub struct CopilotSettings { - /// Whether Copilit is enabled. + /// Whether Copilot is enabled. pub feature_enabled: bool, /// A list of globs representing files that Copilot should be disabled for. pub disabled_globs: Vec, } +/// The settings for all languages. #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct AllLanguageSettingsContent { + /// The settings for enabling/disabling features. #[serde(default)] pub features: Option, + /// The settings for GitHub Copilot. #[serde(default)] pub copilot: Option, + /// The default language settings. #[serde(flatten)] pub defaults: LanguageSettingsContent, + /// The settings for individual languages. #[serde(default, alias = "language_overrides")] pub languages: HashMap, LanguageSettingsContent>, } +/// The settings for a particular language. #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] pub struct LanguageSettingsContent { /// How many columns a tab should occupy. @@ -204,12 +210,15 @@ pub struct LanguageSettingsContent { pub inlay_hints: Option, } +/// The contents of the GitHub Copilot settings. #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] pub struct CopilotSettingsContent { + /// A list of globs representing files that Copilot should be disabled for. #[serde(default)] pub disabled_globs: Option>, } +/// The settings for enabling/disabling features. #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct FeaturesContent { @@ -237,6 +246,7 @@ pub enum FormatOnSave { On, /// Files should not be formatted on save. Off, + /// Files should be formatted using the current language server. LanguageServer, /// The external program to use to format the files on save. External { @@ -247,17 +257,19 @@ pub enum FormatOnSave { }, } +/// Controls how whitespace should be displayedin the editor. #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum ShowWhitespaceSetting { - /// Draw tabs and spaces only for the selected text. + /// Draw whitespace only for the selected text. Selection, - /// Do not draw any tabs or spaces + /// Do not draw any tabs or spaces. None, - /// Draw all invisible symbols + /// Draw all invisible symbols. All, } +/// Controls which formatter should be used when formatting code. #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub enum Formatter { @@ -271,7 +283,9 @@ pub enum Formatter { Prettier, /// Format code using an external command. External { + /// The external program to run. command: Arc, + /// The arguments to pass to the program. arguments: Arc<[String]>, }, } @@ -323,6 +337,7 @@ impl InlayHintSettings { } impl AllLanguageSettings { + /// Returns the [`LanguageSettings`] for the language with the specified name. pub fn language<'a>(&'a self, language_name: Option<&str>) -> &'a LanguageSettings { if let Some(name) = language_name { if let Some(overrides) = self.languages.get(name) { @@ -332,6 +347,7 @@ impl AllLanguageSettings { &self.defaults } + /// Returns whether GitHub Copilot is enabled for the given path. pub fn copilot_enabled_for_path(&self, path: &Path) -> bool { !self .copilot @@ -340,6 +356,7 @@ impl AllLanguageSettings { .any(|glob| glob.is_match(path)) } + /// Returns whether GitHub Copilot is enabled for the given language and path. pub fn copilot_enabled(&self, language: Option<&Arc>, path: Option<&Path>) -> bool { if !self.copilot.feature_enabled { return false; @@ -356,13 +373,20 @@ impl AllLanguageSettings { } } +/// The kind of an inlay hint. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum InlayHintKind { + /// An inlay hint for a type. Type, + /// An inlay hint for a parameter. Parameter, } impl InlayHintKind { + /// Returns the [`InlayHintKind`] from the given name. + /// + /// Returns `None` if `name` does not match any of the expected + /// string representations. pub fn from_name(name: &str) -> Option { match name { "type" => Some(InlayHintKind::Type), @@ -371,6 +395,7 @@ impl InlayHintKind { } } + /// Returns the name of this [`InlayHintKind`]. pub fn name(&self) -> &'static str { match self { InlayHintKind::Type => "type", diff --git a/crates/language/src/outline.rs b/crates/language/src/outline.rs index df1a3c629e75e7695fcf9bd1f6c6a796df2c01f1..014b32676af586bb3b0f69f3b14e4ee8ec99f6c9 100644 --- a/crates/language/src/outline.rs +++ b/crates/language/src/outline.rs @@ -2,6 +2,7 @@ use fuzzy::{StringMatch, StringMatchCandidate}; use gpui::{BackgroundExecutor, HighlightStyle}; use std::ops::Range; +/// An outline of all the symbols contained in a buffer. #[derive(Debug)] pub struct Outline { pub items: Vec>, diff --git a/crates/language/src/proto.rs b/crates/language/src/proto.rs index 8d71e6e397af8ff11c24e3ba2b7c322395952d93..0497a4c4593e8307fc3f90809e32e9b5e4a6ab7e 100644 --- a/crates/language/src/proto.rs +++ b/crates/language/src/proto.rs @@ -13,18 +13,18 @@ use text::*; pub use proto::{BufferState, Operation}; -/// Serializes a [`RopeFingerprint`] to be sent over the wire. +/// Serializes a [`RopeFingerprint`] to be sent over RPC. pub fn serialize_fingerprint(fingerprint: RopeFingerprint) -> String { fingerprint.to_hex() } -/// Deserializes a [`RopeFingerprint`] from the wire format. +/// Deserializes a [`RopeFingerprint`] from the RPC representation. pub fn deserialize_fingerprint(fingerprint: &str) -> Result { RopeFingerprint::from_hex(fingerprint) .map_err(|error| anyhow!("invalid fingerprint: {}", error)) } -/// Deserializes a `[text::LineEnding]` from the wire format. +/// Deserializes a `[text::LineEnding]` from the RPC representation. pub fn deserialize_line_ending(message: proto::LineEnding) -> text::LineEnding { match message { proto::LineEnding::Unix => text::LineEnding::Unix, @@ -32,7 +32,7 @@ pub fn deserialize_line_ending(message: proto::LineEnding) -> text::LineEnding { } } -/// Serializes a [`text::LineEnding`] to be sent over the wire. +/// Serializes a [`text::LineEnding`] to be sent over RPC. pub fn serialize_line_ending(message: text::LineEnding) -> proto::LineEnding { match message { text::LineEnding::Unix => proto::LineEnding::Unix, @@ -40,7 +40,7 @@ pub fn serialize_line_ending(message: text::LineEnding) -> proto::LineEnding { } } -/// Serializes a [`crate::Operation`] to be sent over the wire. +/// Serializes a [`crate::Operation`] to be sent over RPC. pub fn serialize_operation(operation: &crate::Operation) -> proto::Operation { proto::Operation { variant: Some(match operation { @@ -103,7 +103,7 @@ pub fn serialize_operation(operation: &crate::Operation) -> proto::Operation { } } -/// Serializes an [`operation::EditOperation`] to be sent over the wire. +/// Serializes an [`operation::EditOperation`] to be sent over RPC. pub fn serialize_edit_operation(operation: &EditOperation) -> proto::operation::Edit { proto::operation::Edit { replica_id: operation.timestamp.replica_id as u32, @@ -118,7 +118,7 @@ pub fn serialize_edit_operation(operation: &EditOperation) -> proto::operation:: } } -/// Serializes an entry in the undo map to be sent over the wire. +/// Serializes an entry in the undo map to be sent over RPC. pub fn serialize_undo_map_entry( (edit_id, counts): (&clock::Lamport, &[(clock::Lamport, u32)]), ) -> proto::UndoMapEntry { @@ -136,6 +136,7 @@ pub fn serialize_undo_map_entry( } } +/// Splits the given list of operations into chunks. pub fn split_operations( mut operations: Vec, ) -> impl Iterator> { @@ -161,10 +162,12 @@ pub fn split_operations( }) } +/// Serializes selections to be sent over RPC. pub fn serialize_selections(selections: &Arc<[Selection]>) -> Vec { selections.iter().map(serialize_selection).collect() } +/// Serializes a [`Selection`] to be sent over RPC. pub fn serialize_selection(selection: &Selection) -> proto::Selection { proto::Selection { id: selection.id as u64, @@ -180,6 +183,7 @@ pub fn serialize_selection(selection: &Selection) -> proto::Selection { } } +/// Serializes a [`CursorShape`] to be sent over RPC. pub fn serialize_cursor_shape(cursor_shape: &CursorShape) -> proto::CursorShape { match cursor_shape { CursorShape::Bar => proto::CursorShape::CursorBar, @@ -189,6 +193,7 @@ pub fn serialize_cursor_shape(cursor_shape: &CursorShape) -> proto::CursorShape } } +/// Deserializes a [`CursorShape`] from the RPC representation. pub fn deserialize_cursor_shape(cursor_shape: proto::CursorShape) -> CursorShape { match cursor_shape { proto::CursorShape::CursorBar => CursorShape::Bar, @@ -198,6 +203,7 @@ pub fn deserialize_cursor_shape(cursor_shape: proto::CursorShape) -> CursorShape } } +/// Serializes a list of diagnostics to be sent over RPC. pub fn serialize_diagnostics<'a>( diagnostics: impl IntoIterator>, ) -> Vec { @@ -225,6 +231,7 @@ pub fn serialize_diagnostics<'a>( .collect() } +/// Serializes an [`Anchor`] to be sent over RPC. pub fn serialize_anchor(anchor: &Anchor) -> proto::Anchor { proto::Anchor { replica_id: anchor.timestamp.replica_id as u32, @@ -239,6 +246,7 @@ pub fn serialize_anchor(anchor: &Anchor) -> proto::Anchor { } // This behavior is currently copied in the collab database, for snapshotting channel notes +/// Deserializes an [`crate::Operation`] from the RPC representation. pub fn deserialize_operation(message: proto::Operation) -> Result { Ok( match message @@ -321,6 +329,7 @@ pub fn deserialize_operation(message: proto::Operation) -> Result EditOperation { EditOperation { timestamp: clock::Lamport { @@ -333,6 +342,7 @@ pub fn deserialize_edit_operation(edit: proto::operation::Edit) -> EditOperation } } +/// Deserializes an entry in the undo map from the RPC representation. pub fn deserialize_undo_map_entry( entry: proto::UndoMapEntry, ) -> (clock::Lamport, Vec<(clock::Lamport, u32)>) { @@ -357,6 +367,7 @@ pub fn deserialize_undo_map_entry( ) } +/// Deserializes selections from the RPC representation. pub fn deserialize_selections(selections: Vec) -> Arc<[Selection]> { Arc::from( selections @@ -366,6 +377,7 @@ pub fn deserialize_selections(selections: Vec) -> Arc<[Selecti ) } +/// Deserializes a [`Selection`] from the RPC representation. pub fn deserialize_selection(selection: proto::Selection) -> Option> { Some(Selection { id: selection.id as usize, @@ -376,6 +388,7 @@ pub fn deserialize_selection(selection: proto::Selection) -> Option, ) -> Arc<[DiagnosticEntry]> { @@ -406,6 +419,7 @@ pub fn deserialize_diagnostics( .collect() } +/// Deserializes an [`Anchor`] from the RPC representation. pub fn deserialize_anchor(anchor: proto::Anchor) -> Option { Some(Anchor { timestamp: clock::Lamport { @@ -421,6 +435,7 @@ pub fn deserialize_anchor(anchor: proto::Anchor) -> Option { }) } +/// Returns a `[clock::Lamport`] timestamp for the given [`proto::Operation`]. pub fn lamport_timestamp_for_operation(operation: &proto::Operation) -> Option { let replica_id; let value; @@ -453,6 +468,7 @@ pub fn lamport_timestamp_for_operation(operation: &proto::Operation) -> Option proto::Completion { proto::Completion { old_start: Some(serialize_anchor(&completion.old_range.start)), @@ -463,6 +479,7 @@ pub fn serialize_completion(completion: &Completion) -> proto::Completion { } } +/// Deserializes a [`Completion`] from the RPC representation. pub async fn deserialize_completion( completion: proto::Completion, language: Option>, @@ -497,6 +514,7 @@ pub async fn deserialize_completion( }) } +/// Serializes a [`CodeAction`] to be sent over RPC. pub fn serialize_code_action(action: &CodeAction) -> proto::CodeAction { proto::CodeAction { server_id: action.server_id.0 as u64, @@ -506,6 +524,7 @@ pub fn serialize_code_action(action: &CodeAction) -> proto::CodeAction { } } +/// Deserializes a [`CodeAction`] from the RPC representation. pub fn deserialize_code_action(action: proto::CodeAction) -> Result { let start = action .start @@ -523,6 +542,7 @@ pub fn deserialize_code_action(action: proto::CodeAction) -> Result }) } +/// Serializes a [`Transaction`] to be sent over RPC. pub fn serialize_transaction(transaction: &Transaction) -> proto::Transaction { proto::Transaction { id: Some(serialize_timestamp(transaction.id)), @@ -536,6 +556,7 @@ pub fn serialize_transaction(transaction: &Transaction) -> proto::Transaction { } } +/// Deserializes a [`Transaction`] from the RPC representation. pub fn deserialize_transaction(transaction: proto::Transaction) -> Result { Ok(Transaction { id: deserialize_timestamp( @@ -552,6 +573,7 @@ pub fn deserialize_transaction(transaction: proto::Transaction) -> Result proto::LamportTimestamp { proto::LamportTimestamp { replica_id: timestamp.replica_id as u32, @@ -559,6 +581,7 @@ pub fn serialize_timestamp(timestamp: clock::Lamport) -> proto::LamportTimestamp } } +/// Deserializes a [`clock::Lamport`] timestamp from the RPC representation. pub fn deserialize_timestamp(timestamp: proto::LamportTimestamp) -> clock::Lamport { clock::Lamport { replica_id: timestamp.replica_id as ReplicaId, @@ -566,6 +589,7 @@ pub fn deserialize_timestamp(timestamp: proto::LamportTimestamp) -> clock::Lampo } } +/// Serializes a range of [`FullOffset`]s to be sent over RPC. pub fn serialize_range(range: &Range) -> proto::Range { proto::Range { start: range.start.0 as u64, @@ -573,10 +597,12 @@ pub fn serialize_range(range: &Range) -> proto::Range { } } +/// Deserializes a range of [`FullOffset`]s from the RPC representation. pub fn deserialize_range(range: proto::Range) -> Range { FullOffset(range.start as usize)..FullOffset(range.end as usize) } +/// Deserializes a clock version from the RPC representation. pub fn deserialize_version(message: &[proto::VectorClockEntry]) -> clock::Global { let mut version = clock::Global::new(); for entry in message { @@ -588,6 +614,7 @@ pub fn deserialize_version(message: &[proto::VectorClockEntry]) -> clock::Global version } +/// Serializes a clock version to be sent over RPC. pub fn serialize_version(version: &clock::Global) -> Vec { version .iter() diff --git a/crates/language/src/syntax_map.rs b/crates/language/src/syntax_map.rs index c22ece48aff0b41a089538cba70424f81cd4e042..9174dc7df9e8e45663a75a268ede925460cc6139 100644 --- a/crates/language/src/syntax_map.rs +++ b/crates/language/src/syntax_map.rs @@ -29,7 +29,7 @@ pub struct SyntaxMap { #[derive(Clone, Default)] pub struct SyntaxSnapshot { - layers: SumTree, + layers: SumTree, parsed_version: clock::Global, interpolated_version: clock::Global, language_registry_version: usize, @@ -84,7 +84,7 @@ struct SyntaxMapMatchesLayer<'a> { } #[derive(Clone)] -struct SyntaxLayer { +struct SyntaxLayerEntry { depth: usize, range: Range, content: SyntaxLayerContent, @@ -118,7 +118,7 @@ impl SyntaxLayerContent { } #[derive(Debug)] -pub struct SyntaxLayerInfo<'a> { +pub struct SyntaxLayer<'a> { pub depth: usize, pub language: &'a Arc, tree: &'a Tree, @@ -126,7 +126,7 @@ pub struct SyntaxLayerInfo<'a> { } #[derive(Clone)] -pub struct OwnedSyntaxLayerInfo { +pub struct OwnedSyntaxLayer { pub depth: usize, pub language: Arc, tree: tree_sitter::Tree, @@ -691,7 +691,7 @@ impl SyntaxSnapshot { }; layers.push( - SyntaxLayer { + SyntaxLayerEntry { depth: step.depth, range: step.range, content, @@ -741,7 +741,7 @@ impl SyntaxSnapshot { SyntaxMapCaptures::new( range.clone(), text, - [SyntaxLayerInfo { + [SyntaxLayer { language, tree, depth: 0, @@ -781,7 +781,7 @@ impl SyntaxSnapshot { } #[cfg(test)] - pub fn layers<'a>(&'a self, buffer: &'a BufferSnapshot) -> Vec { + pub fn layers<'a>(&'a self, buffer: &'a BufferSnapshot) -> Vec { self.layers_for_range(0..buffer.len(), buffer).collect() } @@ -789,7 +789,7 @@ impl SyntaxSnapshot { &'a self, range: Range, buffer: &'a BufferSnapshot, - ) -> impl 'a + Iterator { + ) -> impl 'a + Iterator { let start_offset = range.start.to_offset(buffer); let end_offset = range.end.to_offset(buffer); let start = buffer.anchor_before(start_offset); @@ -813,7 +813,7 @@ impl SyntaxSnapshot { let layer_start_offset = layer.range.start.to_offset(buffer); let layer_start_point = layer.range.start.to_point(buffer).to_ts_point(); - info = Some(SyntaxLayerInfo { + info = Some(SyntaxLayer { tree, language, depth: layer.depth, @@ -842,7 +842,7 @@ impl<'a> SyntaxMapCaptures<'a> { fn new( range: Range, text: &'a Rope, - layers: impl Iterator>, + layers: impl Iterator>, query: fn(&Grammar) -> Option<&Query>, ) -> Self { let mut result = Self { @@ -964,7 +964,7 @@ impl<'a> SyntaxMapMatches<'a> { fn new( range: Range, text: &'a Rope, - layers: impl Iterator>, + layers: impl Iterator>, query: fn(&Grammar) -> Option<&Query>, ) -> Self { let mut result = Self::default(); @@ -1436,16 +1436,16 @@ fn insert_newlines_between_ranges( } } -impl OwnedSyntaxLayerInfo { +impl OwnedSyntaxLayer { pub fn node(&self) -> Node { self.tree .root_node_with_offset(self.offset.0, self.offset.1) } } -impl<'a> SyntaxLayerInfo<'a> { - pub fn to_owned(&self) -> OwnedSyntaxLayerInfo { - OwnedSyntaxLayerInfo { +impl<'a> SyntaxLayer<'a> { + pub fn to_owned(&self) -> OwnedSyntaxLayer { + OwnedSyntaxLayer { tree: self.tree.clone(), offset: self.offset, depth: self.depth, @@ -1564,7 +1564,7 @@ impl ChangeRegionSet { ) } - fn intersects(&self, layer: &SyntaxLayer, text: &BufferSnapshot) -> bool { + fn intersects(&self, layer: &SyntaxLayerEntry, text: &BufferSnapshot) -> bool { for region in &self.0 { if region.depth < layer.depth { continue; @@ -1675,7 +1675,7 @@ impl<'a> SeekTarget<'a, SyntaxLayerSummary, SyntaxLayerSummary> } } -impl sum_tree::Item for SyntaxLayer { +impl sum_tree::Item for SyntaxLayerEntry { type Summary = SyntaxLayerSummary; fn summary(&self) -> Self::Summary { @@ -1690,7 +1690,7 @@ impl sum_tree::Item for SyntaxLayer { } } -impl std::fmt::Debug for SyntaxLayer { +impl std::fmt::Debug for SyntaxLayerEntry { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("SyntaxLayer") .field("depth", &self.depth) diff --git a/crates/language_tools/src/syntax_tree_view.rs b/crates/language_tools/src/syntax_tree_view.rs index c30564e9bfe3f8c0e0fd1f5c2f6827a4f070fd81..493ce162cb060f3a7df890b481c1d7cba1485535 100644 --- a/crates/language_tools/src/syntax_tree_view.rs +++ b/crates/language_tools/src/syntax_tree_view.rs @@ -5,7 +5,7 @@ use gpui::{ MouseButton, MouseDownEvent, MouseMoveEvent, ParentElement, Pixels, Render, Styled, UniformListScrollHandle, View, ViewContext, VisualContext, WeakView, WindowContext, }; -use language::{Buffer, OwnedSyntaxLayerInfo}; +use language::{Buffer, OwnedSyntaxLayer}; use settings::Settings; use std::{mem, ops::Range}; use theme::{ActiveTheme, ThemeSettings}; @@ -57,7 +57,7 @@ struct EditorState { struct BufferState { buffer: Model, excerpt_id: ExcerptId, - active_layer: Option, + active_layer: Option, } impl SyntaxTreeView { @@ -491,7 +491,7 @@ impl SyntaxTreeToolbarItemView { }) } - fn render_header(active_layer: &OwnedSyntaxLayerInfo) -> ButtonLike { + fn render_header(active_layer: &OwnedSyntaxLayer) -> ButtonLike { ButtonLike::new("syntax tree header") .child(Label::new(active_layer.language.name())) .child(Label::new(format_node_range(active_layer.node()))) From 686dce85dda1fef979c532a749c3c80c0739e6b4 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:32:50 +0100 Subject: [PATCH 03/17] Document bracket pairs --- crates/language/src/language.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 8182af1e54054c0b973afd296a18c1a3c993a405..49a87df35d72d71d4071a4239d6d88724b2e8f01 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -98,6 +98,8 @@ thread_local! { lazy_static! { pub(crate) static ref NEXT_GRAMMAR_ID: AtomicUsize = Default::default(); + /// A shared grammar for plain text, exposed for reuse by downstream crates. + #[doc(hidden)] pub static ref PLAIN_TEXT: Arc = Arc::new(Language::new( LanguageConfig { name: "Plain Text".into(), @@ -382,7 +384,7 @@ pub struct LanguageConfig { pub grammar_name: Option>, /// Given a list of `LanguageConfig`'s, the language of a file can be determined based on the path extension matching any of the `path_suffixes`. pub path_suffixes: Vec, - /// List of + /// List of bracket types in a language. pub brackets: BracketPairConfig, /// A regex pattern that determines whether the language should be assigned to a file or not. #[serde(default, deserialize_with = "deserialize_regex")] @@ -522,6 +524,7 @@ fn deserialize_regex<'de, D: Deserializer<'de>>(d: D) -> Result, D } } +#[doc(hidden)] #[cfg(any(test, feature = "test-support"))] pub struct FakeLspAdapter { pub name: &'static str, @@ -533,6 +536,10 @@ pub struct FakeLspAdapter { pub prettier_plugins: Vec<&'static str>, } +/// Configuration of handling bracket pairs for a given language. +/// +/// This struct includes settings for defining which pairs of characters are considered brackets and +/// also specifies any language-specific scopes where these pairs should be ignored for bracket matching purposes. #[derive(Clone, Debug, Default)] pub struct BracketPairConfig { /// A list of character pairs that should be treated as brackets in the context of a given language. @@ -570,11 +577,18 @@ impl<'de> Deserialize<'de> for BracketPairConfig { } } +/// Describes a single bracket pair and how an editor should react to e.g. inserting +/// an opening bracket or to a newline character insertion inbetween `start` and `end` characters. #[derive(Clone, Debug, Default, Deserialize, PartialEq)] pub struct BracketPair { + /// Starting substring for a bracket. pub start: String, + /// Ending substring for a bracket. pub end: String, + /// True if `end` should be automatically inserted right after `start` characters. pub close: bool, + /// True if an extra newline should be inserted while the cursor is in the middle + /// of that bracket pair. pub newline: bool, } From 6144ee1b5dcf793d90d05c0404e7cbf7f2e4aa78 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Tue, 9 Jan 2024 20:50:34 +0100 Subject: [PATCH 04/17] Docs for indent_size_for_line and co --- crates/language/src/buffer.rs | 10 +++++++++- crates/language/src/highlight_map.rs | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index b745ff6f43fbb88908989ca71dcdc11d9ed6657a..7863be8b9396c3da6a9a165365b68d17d7619ff7 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -1920,6 +1920,7 @@ impl Buffer { undone } + /// Manually redoes a specific transaction in the buffer's redo history. pub fn redo(&mut self, cx: &mut ModelContext) -> Option { let was_dirty = self.is_dirty(); let old_version = self.version.clone(); @@ -1933,6 +1934,7 @@ impl Buffer { } } + /// Manually undoes all changes until a given transaction in the buffer's redo history. pub fn redo_to_transaction( &mut self, transaction_id: TransactionId, @@ -1952,6 +1954,7 @@ impl Buffer { redone } + /// Override current completion triggers with the user-provided completion triggers. pub fn set_completion_triggers(&mut self, triggers: Vec, cx: &mut ModelContext) { self.completion_triggers = triggers.clone(); self.completion_triggers_timestamp = self.text.lamport_clock.tick(); @@ -1965,11 +1968,14 @@ impl Buffer { cx.notify(); } + /// Returns a list of strings which trigger a completion menu for this language. + /// Usually this is driven by LSP server which returns a list of trigger characters for completions. pub fn completion_triggers(&self) -> &[String] { &self.completion_triggers } } +#[doc(hidden)] #[cfg(any(test, feature = "test-support"))] impl Buffer { pub fn edit_via_marked_text( @@ -2042,10 +2048,12 @@ impl Deref for Buffer { } impl BufferSnapshot { + /// Returns [`IndentSize`] for a given line that respects user settings and /// language preferences. pub fn indent_size_for_line(&self, row: u32) -> IndentSize { indent_size_for_line(self, row) } - + /// Returns [`IndentSize`] for a given position that respects user settings + /// and language preferences. pub fn language_indent_size_at(&self, position: T, cx: &AppContext) -> IndentSize { let settings = language_settings(self.language_at(position), self.file(), cx); if settings.hard_tabs { diff --git a/crates/language/src/highlight_map.rs b/crates/language/src/highlight_map.rs index 270ac259c9d78eff8d36a2ee8c8038f117d33260..8829eb94ac576be4b1ad7bc6512fd4720cf81dcb 100644 --- a/crates/language/src/highlight_map.rs +++ b/crates/language/src/highlight_map.rs @@ -11,7 +11,7 @@ pub struct HighlightId(pub u32); const DEFAULT_SYNTAX_HIGHLIGHT_ID: HighlightId = HighlightId(u32::MAX); impl HighlightMap { - pub fn new(capture_names: &[&str], theme: &SyntaxTheme) -> Self { + pub(crate) fn new(capture_names: &[&str], theme: &SyntaxTheme) -> Self { // For each capture name in the highlight query, find the longest // key in the theme's syntax styles that matches all of the // dot-separated components of the capture name. @@ -51,7 +51,7 @@ impl HighlightMap { } impl HighlightId { - pub fn is_default(&self) -> bool { + pub(crate) fn is_default(&self) -> bool { *self == DEFAULT_SYNTAX_HIGHLIGHT_ID } From ebe2c3658cf93fc88d12d6b284ae40875b6d3a93 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Tue, 9 Jan 2024 21:08:01 +0100 Subject: [PATCH 05/17] Add short top-level description of a crate --- crates/language/src/language.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 49a87df35d72d71d4071a4239d6d88724b2e8f01..fdb086ebc6ac85a91ccb1e0ece95385d8bc94fd3 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -1,7 +1,12 @@ -//! The `language` crate provides... ??? - #![warn(missing_docs)] - +//! The `language` crate provides a large chunk of Zed's language-related +//! features (the other big contributors being project and lsp crates that revolve around LSP features). +//! Namely, this crate: +//! - Provides [`Language`], [`Grammar`] and [`LanguageRegistry`] types that +//! use Tree-sitter to provide syntax highlighting to the editor; note though that `language` doesn't perform the highlighting by itself. It only maps ranges in a buffer to colors. Treesitter is also used for buffer outlines (lists of symbols in a buffer) +//! - Exposes [`LanguageConfig`] that describes how constructs (like brackets or line comments) should be handled by the editor for a source file of a particular language. +//! +//! Notably we do *not* assign a single language to a single file; in real world a single file can consist of multiple programming languages - HTML is a good example of that - and `language` crate tends to reflect that status quo in it's API. mod buffer; mod diagnostic_set; mod highlight_map; From 6457ccf9ece3b36a37e675783abee9748a443115 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 17 Jan 2024 10:08:42 -0800 Subject: [PATCH 06/17] Add docs for buffer.rs Co-authored-by: Antonio --- crates/language/src/buffer.rs | 203 ++++++++++++++++++++---- crates/language/src/proto.rs | 3 +- crates/multi_buffer/src/multi_buffer.rs | 2 +- crates/project/src/project.rs | 2 - crates/rpc/proto/zed.proto | 3 + crates/vim/src/motion.rs | 20 ++- 6 files changed, 194 insertions(+), 39 deletions(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 7863be8b9396c3da6a9a165365b68d17d7619ff7..8feb566c7e7b0a9819eeed6e644856690fc46e86 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -60,12 +60,15 @@ pub use {tree_sitter_rust, tree_sitter_typescript}; pub use lsp::DiagnosticSeverity; lazy_static! { - pub static ref BUFFER_DIFF_TASK: TaskLabel = TaskLabel::new(); + static ref BUFFER_DIFF_TASK: TaskLabel = TaskLabel::new(); } +/// Indicate whether a [Buffer] has permissions to edit. #[derive(PartialEq, Clone, Copy, Debug)] pub enum Capability { + /// The buffer is a mutable replica. ReadWrite, + /// The buffer is a read-only replica. ReadOnly, } @@ -107,11 +110,11 @@ pub struct Buffer { capability: Capability, } -/// An immutable, cheaply cloneable representation of a certain +/// An immutable, cheaply cloneable representation of a fixed /// state of a buffer. pub struct BufferSnapshot { text: text::BufferSnapshot, - pub git_diff: git::diff::BufferDiff, + git_diff: git::diff::BufferDiff, pub(crate) syntax: SyntaxSnapshot, file: Option>, diagnostics: SmallVec<[(LanguageServerId, DiagnosticSet); 2]>, @@ -128,25 +131,33 @@ pub struct BufferSnapshot { /// assumes that indentation is all the same character. #[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] pub struct IndentSize { + /// The number of bytes that comprise the indentation. pub len: u32, + /// The kind of whitespace used for indentation. pub kind: IndentKind, } /// A whitespace character that's used for indentation. #[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] pub enum IndentKind { + /// An ASCII space character. #[default] Space, + /// An ASCII tab chracter. Tab, } /// The shape of a selection cursor. #[derive(Copy, Clone, PartialEq, Eq, Debug, Default)] pub enum CursorShape { + /// A vertical bar #[default] Bar, + /// A block that surrounds the following character Block, + /// An underline that runs along the following character Underscore, + /// A box drawn around the following character Hollow, } @@ -158,26 +169,40 @@ struct SelectionSet { lamport_timestamp: clock::Lamport, } -#[derive(Clone, Debug, PartialEq, Eq)] -pub struct GroupId { - source: Arc, - id: usize, -} - /// A diagnostic associated with a certain range of a buffer. #[derive(Clone, Debug, PartialEq, Eq)] pub struct Diagnostic { + /// The name of the service that produced this diagnostic. pub source: Option, + /// A machine-readable code that identifies this diagnostic. pub code: Option, + /// Whether this diagnostic is a hint, warning, or error. pub severity: DiagnosticSeverity, + /// The human-readable message associated with this diagnostic. pub message: String, + /// An id that identifies the group to which this diagnostic belongs. + /// + /// When a language server produces a diagnostic with + /// one or more associated diagnostics, those diagnostics are all + /// assigned a single group id. pub group_id: usize, - pub is_valid: bool, + /// Whether this diagnostic is the primary diagnostic for its group. + /// + /// In a given group, the primary diagnostic is the top-level diagnostic + /// returned by the language server. The non-primary diagnostics are the + /// associated diagnostics. pub is_primary: bool, + /// Whether this diagnostic is considered to originate from an analysis of + /// files on disk, as opposed to any unsaved buffer contents. This is a + /// property of a given diagnostic source, and is configured for a given + /// language server via the [LspAdapter::disk_based_diagnostic_sources] method + /// for the language server. pub is_disk_based: bool, + /// Whether this diagnostic marks unnecessary code. pub is_unnecessary: bool, } +/// TODO - move this into the `project` crate and make it private. pub async fn prepare_completion_documentation( documentation: &lsp::Documentation, language_registry: &Arc, @@ -209,77 +234,125 @@ pub async fn prepare_completion_documentation( } } +/// Documentation associated with a [Completion]. #[derive(Clone, Debug)] pub enum Documentation { + /// There is no documentation for this completion. Undocumented, + /// A single line of documentation. SingleLine(String), + /// Multiple lines of plain text documentation. MultiLinePlainText(String), + /// Markdown documentation. MultiLineMarkdown(ParsedMarkdown), } +/// A completion provided by a language server #[derive(Clone, Debug)] pub struct Completion { + /// The range of the buffer that will be replaced. pub old_range: Range, + /// The new text that will be inserted. pub new_text: String, + /// A label for this completion that is shown in the menu. pub label: CodeLabel, + /// The id of the language server that produced this completion. pub server_id: LanguageServerId, + /// The documentation for this completion. pub documentation: Option, + /// The raw completion provided by the language server. pub lsp_completion: lsp::CompletionItem, } +/// A code action provided by a language server. #[derive(Clone, Debug)] pub struct CodeAction { + /// The id of the language server that produced this code action. pub server_id: LanguageServerId, + /// The range of the buffer where this code action is applicable. pub range: Range, + /// The raw code action provided by the language server. pub lsp_action: lsp::CodeAction, } +/// An operation used to synchronize this buffer with its other replicas. #[derive(Clone, Debug, PartialEq)] pub enum Operation { + /// A text operation. Buffer(text::Operation), + /// An update to the buffer's diagnostics. UpdateDiagnostics { + /// The id of the language server that produced the new diagnostics. server_id: LanguageServerId, + /// The diagnostics. diagnostics: Arc<[DiagnosticEntry]>, + /// The buffer's lamport timestamp. lamport_timestamp: clock::Lamport, }, + /// An update to the most recent selections in this buffer. UpdateSelections { + /// The selections. selections: Arc<[Selection]>, + /// The buffer's lamport timestamp. lamport_timestamp: clock::Lamport, + /// Whether the selections are in 'line mode'. line_mode: bool, + /// The [CursorShape] associated with these selections. cursor_shape: CursorShape, }, + /// An update to the characters that should trigger autocompletion + /// for this buffer. UpdateCompletionTriggers { + /// The characters that trigger autocompletion. triggers: Vec, + /// The buffer's lamport timestamp. lamport_timestamp: clock::Lamport, }, } +/// An event that occurs in a buffer. #[derive(Clone, Debug, PartialEq)] pub enum Event { + /// The buffer was changed in a way that must be + /// propagated to its other replicas. Operation(Operation), + /// The buffer was edited. Edited, + /// The buffer's `dirty` bit changed. DirtyChanged, + /// The buffer was saved. Saved, + /// The buffer's file was changed on disk. FileHandleChanged, + /// The buffer was reloaded. Reloaded, + /// The buffer's diff_base changed. DiffBaseChanged, + /// The buffer's language was changed. LanguageChanged, + /// The buffer's syntax trees were updated. Reparsed, + /// The buffer's diagnostics were updated. DiagnosticsUpdated, + /// The buffer was explicitly requested to close. Closed, } /// The file associated with a buffer. pub trait File: Send + Sync { + /// Returns the [LocalFile] associated with this file, if the + /// file is local. fn as_local(&self) -> Option<&dyn LocalFile>; + /// Returns whether this file is local. fn is_local(&self) -> bool { self.as_local().is_some() } + /// Returns the file's mtime. fn mtime(&self) -> SystemTime; /// Returns the path of this file relative to the worktree's root directory. @@ -298,10 +371,13 @@ pub trait File: Send + Sync { /// This is needed for looking up project-specific settings. fn worktree_id(&self) -> usize; + /// Returns whether the file has been deleted. fn is_deleted(&self) -> bool; + /// Converts this file into an [Any] trait object. fn as_any(&self) -> &dyn Any; + /// Converts this file into a protobuf message. fn to_proto(&self) -> rpc::proto::File; } @@ -310,8 +386,10 @@ pub trait LocalFile: File { /// Returns the absolute path of this file. fn abs_path(&self, cx: &AppContext) -> PathBuf; + /// Loads the file's contents from disk. fn load(&self, cx: &AppContext) -> Task>; + /// Called when the buffer is reloaded from disk. fn buffer_reloaded( &self, buffer_id: u64, @@ -392,11 +470,18 @@ pub struct BufferChunks<'a> { /// diagnostic status. #[derive(Clone, Copy, Debug, Default)] pub struct Chunk<'a> { + /// The text of the chunk. pub text: &'a str, + /// The syntax highlighting style of the chunk. pub syntax_highlight_id: Option, + /// The highlight style that has been applied to this chunk in + /// the editor. pub highlight_style: Option, + /// The severity of diagnostic associated with this chunk, if any. pub diagnostic_severity: Option, + /// Whether this chunk of text is marked as unnecessary. pub is_unnecessary: bool, + /// Whether this chunk of text was originally a tab character. pub is_tab: bool, } @@ -418,21 +503,14 @@ pub(crate) struct DiagnosticEndpoint { /// A class of characters, used for characterizing a run of text. #[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Debug)] pub enum CharKind { + /// Whitespace. Whitespace, + /// Punctuation. Punctuation, + /// Word. Word, } -impl CharKind { - pub fn coerce_punctuation(self, treat_punctuation_as_word: bool) -> Self { - if treat_punctuation_as_word && self == CharKind::Punctuation { - CharKind::Word - } else { - self - } - } -} - impl Buffer { /// Create a new buffer with the given base text. pub fn new>(replica_id: ReplicaId, id: u64, base_text: T) -> Self { @@ -554,14 +632,17 @@ impl Buffer { self } + /// Returns the [Capability] of this buffer. pub fn capability(&self) -> Capability { self.capability } + /// Whether this buffer can only be read. pub fn read_only(&self) -> bool { self.capability == Capability::ReadOnly } + /// Builds a [Buffer] with the given underlying [TextBuffer], diff base, [File] and [Capability]. pub fn build( buffer: TextBuffer, diff_base: Option, @@ -675,6 +756,7 @@ impl Buffer { .set_language_registry(language_registry); } + /// This method is called to signal that the buffer has been saved. pub fn did_save( &mut self, version: clock::Global, @@ -689,6 +771,7 @@ impl Buffer { cx.notify(); } + /// Reloads the contents of the buffer from disk. pub fn reload( &mut self, cx: &mut ModelContext, @@ -737,6 +820,7 @@ impl Buffer { rx } + /// This method is called to signal that the buffer has been reloaded. pub fn did_reload( &mut self, version: clock::Global, @@ -763,6 +847,8 @@ impl Buffer { cx.notify(); } + /// Updates the [File] backing this buffer. This should be called when + /// the file has changed or has been deleted. pub fn file_updated(&mut self, new_file: Arc, cx: &mut ModelContext) { let mut file_changed = false; @@ -800,16 +886,20 @@ impl Buffer { } } + /// Returns the current diff base, see [Buffer::set_diff_base]. pub fn diff_base(&self) -> Option<&str> { self.diff_base.as_deref() } + /// Sets the text that will be used to compute a Git diff + /// against the buffer text. pub fn set_diff_base(&mut self, diff_base: Option, cx: &mut ModelContext) { self.diff_base = diff_base; self.git_diff_recalc(cx); cx.emit(Event::DiffBaseChanged); } + /// Recomputes the Git diff status. pub fn git_diff_recalc(&mut self, cx: &mut ModelContext) -> Option> { let diff_base = self.diff_base.clone()?; // TODO: Make this an Arc let snapshot = self.snapshot(); @@ -830,14 +920,12 @@ impl Buffer { })) } - pub fn close(&mut self, cx: &mut ModelContext) { - cx.emit(Event::Closed); - } - + /// Returns the primary [Language] assigned to this [Buffer]. pub fn language(&self) -> Option<&Arc> { self.language.as_ref() } + /// Returns the [Language] at the given location. pub fn language_at(&self, position: D) -> Option> { let offset = position.to_offset(self); self.syntax_map @@ -848,26 +936,32 @@ impl Buffer { .or_else(|| self.language.clone()) } + /// The number of times the buffer was parsed. pub fn parse_count(&self) -> usize { self.parse_count } + /// The number of times selections were updated. pub fn selections_update_count(&self) -> usize { self.selections_update_count } + /// The number of times diagnostics were updated. pub fn diagnostics_update_count(&self) -> usize { self.diagnostics_update_count } + /// The number of times the underlying file was updated. pub fn file_update_count(&self) -> usize { self.file_update_count } + /// The number of times the git diff status was updated. pub fn git_diff_update_count(&self) -> usize { self.git_diff_update_count } + /// Whether the buffer is being parsed in the background. #[cfg(any(test, feature = "test-support"))] pub fn is_parsing(&self) -> bool { self.parsing_in_background @@ -2377,7 +2471,7 @@ impl BufferSnapshot { self.syntax.layers_for_range(0..self.len(), &self.text) } - pub fn syntax_layer_at(&self, position: D) -> Option { + fn syntax_layer_at(&self, position: D) -> Option { let offset = position.to_offset(self); self.syntax .layers_for_range(offset..offset, &self.text) @@ -2385,12 +2479,14 @@ impl BufferSnapshot { .last() } + /// Returns the [Language] at the given location. pub fn language_at(&self, position: D) -> Option<&Arc> { self.syntax_layer_at(position) .map(|info| info.language) .or(self.language.as_ref()) } + /// Returns the settings for the language at the given location. pub fn settings_at<'a, D: ToOffset>( &self, position: D, @@ -2399,6 +2495,7 @@ impl BufferSnapshot { language_settings(self.language_at(position), self.file.as_ref(), cx) } + /// Returns the [LanguageScope] at the given location. pub fn language_scope_at(&self, position: D) -> Option { let offset = position.to_offset(self); let mut scope = None; @@ -2443,6 +2540,8 @@ impl BufferSnapshot { }) } + /// Returns a tuple of the range and character kind of the word + /// surrounding the given position. pub fn surrounding_word(&self, start: T) -> (Range, Option) { let mut start = start.to_offset(self); let mut end = start; @@ -2475,6 +2574,7 @@ impl BufferSnapshot { (start..end, word_kind) } + /// Returns the range for the closes syntax node enclosing the given range. pub fn range_for_syntax_ancestor(&self, range: Range) -> Option> { let range = range.start.to_offset(self)..range.end.to_offset(self); let mut result: Option> = None; @@ -2543,11 +2643,19 @@ impl BufferSnapshot { result } + /// Returns the outline for the buffer. + /// + /// This method allows passing an optional [SyntaxTheme] to + /// syntax-highlight the returned symbols. pub fn outline(&self, theme: Option<&SyntaxTheme>) -> Option> { self.outline_items_containing(0..self.len(), true, theme) .map(Outline::new) } + /// Returns all the symbols that contain the given position. + /// + /// This method allows passing an optional [SyntaxTheme] to + /// syntax-highlight the returned symbols. pub fn symbols_containing( &self, position: T, @@ -2699,6 +2807,8 @@ impl BufferSnapshot { Some(items) } + /// For each grammar in the language, runs the provided + /// [tree_sitter::Query] against the given range. pub fn matches( &self, range: Range, @@ -2755,6 +2865,7 @@ impl BufferSnapshot { }) } + /// Returns selections for remote peers intersecting the given range. #[allow(clippy::type_complexity)] pub fn remote_selections_in_range( &self, @@ -2793,6 +2904,13 @@ impl BufferSnapshot { }) } + /// Whether the buffer contains any git changes. + pub fn has_git_diff(&self) -> bool { + !self.git_diff.is_empty() + } + + /// Returns all the Git diff hunks intersecting the given + /// row range. pub fn git_diff_hunks_in_row_range<'a>( &'a self, range: Range, @@ -2800,6 +2918,8 @@ impl BufferSnapshot { self.git_diff.hunks_in_row_range(range, self) } + /// Returns all the Git diff hunks intersecting the given + /// range. pub fn git_diff_hunks_intersecting_range<'a>( &'a self, range: Range, @@ -2807,6 +2927,8 @@ impl BufferSnapshot { self.git_diff.hunks_intersecting_range(range, self) } + /// Returns all the Git diff hunks intersecting the given + /// range, in reverse order. pub fn git_diff_hunks_intersecting_range_rev<'a>( &'a self, range: Range, @@ -2814,6 +2936,7 @@ impl BufferSnapshot { self.git_diff.hunks_intersecting_range_rev(range, self) } + /// Returns all the diagnostics intersecting the given range. pub fn diagnostics_in_range<'a, T, O>( &'a self, search_range: Range, @@ -2843,6 +2966,9 @@ impl BufferSnapshot { }) } + /// Returns all the diagnostic groups associated with the given + /// language server id. If no language server id is provided, + /// all diagnostics groups are returned. pub fn diagnostic_groups( &self, language_server_id: Option, @@ -2873,6 +2999,7 @@ impl BufferSnapshot { groups } + /// Returns an iterator over the diagnostics for the given group. pub fn diagnostic_group<'a, O>( &'a self, group_id: usize, @@ -2885,22 +3012,27 @@ impl BufferSnapshot { .flat_map(move |(_, set)| set.group(group_id, self)) } + /// The number of times diagnostics were updated. pub fn diagnostics_update_count(&self) -> usize { self.diagnostics_update_count } + /// The number of times the buffer was parsed. pub fn parse_count(&self) -> usize { self.parse_count } + /// The number of times selections were updated. pub fn selections_update_count(&self) -> usize { self.selections_update_count } + /// Returns a snapshot of underlying file. pub fn file(&self) -> Option<&Arc> { self.file.as_ref() } + /// Resolves the file path (relative to the worktree root) associated with the underlying file. pub fn resolve_file_path(&self, cx: &AppContext, include_root: bool) -> Option { if let Some(file) = self.file() { if file.path().file_name().is_none() || include_root { @@ -2913,10 +3045,12 @@ impl BufferSnapshot { } } + /// The number of times the underlying file was updated. pub fn file_update_count(&self) -> usize { self.file_update_count } + /// The number of times the git diff status was updated. pub fn git_diff_update_count(&self) -> usize { self.git_diff_update_count } @@ -2926,7 +3060,7 @@ fn indent_size_for_line(text: &text::BufferSnapshot, row: u32) -> IndentSize { indent_size_for_text(text.chars_at(Point::new(row, 0))) } -pub fn indent_size_for_text(text: impl Iterator) -> IndentSize { +fn indent_size_for_text(text: impl Iterator) -> IndentSize { let mut result = IndentSize::spaces(0); for c in text { let kind = match c { @@ -3004,6 +3138,7 @@ impl<'a> BufferChunks<'a> { } } + /// Seeks to the given byte offset in the buffer. pub fn seek(&mut self, offset: usize) { self.range.start = offset; self.chunks.seek(self.range.start); @@ -3027,6 +3162,7 @@ impl<'a> BufferChunks<'a> { } } + /// The current byte offset in the buffer. pub fn offset(&self) -> usize { self.range.start } @@ -3179,7 +3315,6 @@ impl Default for Diagnostic { message: Default::default(), group_id: 0, is_primary: false, - is_valid: true, is_disk_based: false, is_unnecessary: false, } @@ -3187,6 +3322,7 @@ impl Default for Diagnostic { } impl IndentSize { + /// Returns an [IndentSize] representing the given spaces. pub fn spaces(len: u32) -> Self { Self { len, @@ -3194,6 +3330,7 @@ impl IndentSize { } } + /// Returns an [IndentSize] representing a tab. pub fn tab() -> Self { Self { len: 1, @@ -3201,10 +3338,12 @@ impl IndentSize { } } + /// An iterator over the characters represented by this [IndentSize]. pub fn chars(&self) -> impl Iterator { iter::repeat(self.char()).take(self.len as usize) } + /// The character representation of this [IndentSize]. pub fn char(&self) -> char { match self.kind { IndentKind::Space => ' ', @@ -3212,6 +3351,8 @@ impl IndentSize { } } + /// Consumes the current [IndentSize] and returns a new one that has + /// been shrunk or enlarged by the given size along the given direction. pub fn with_delta(mut self, direction: Ordering, size: IndentSize) -> Self { match direction { Ordering::Less => { @@ -3233,6 +3374,8 @@ impl IndentSize { } impl Completion { + /// A key that can be used to sort completions when displaying + /// them to the user. pub fn sort_key(&self) -> (usize, &str) { let kind_key = match self.lsp_completion.kind { Some(lsp::CompletionItemKind::VARIABLE) => 0, @@ -3241,12 +3384,13 @@ impl Completion { (kind_key, &self.label.text[self.label.filter_range.clone()]) } + /// Whether this completion is a snippet. pub fn is_snippet(&self) -> bool { self.lsp_completion.insert_text_format == Some(lsp::InsertTextFormat::SNIPPET) } } -pub fn contiguous_ranges( +pub(crate) fn contiguous_ranges( values: impl Iterator, max_len: usize, ) -> impl Iterator> { @@ -3272,6 +3416,9 @@ pub fn contiguous_ranges( }) } +/// Returns the [CharKind] for the given character. When a scope is provided, +/// the function checks if the character is considered a word character +/// based on the language scope's word character settings. pub fn char_kind(scope: &Option, c: char) -> CharKind { if c.is_whitespace() { return CharKind::Whitespace; diff --git a/crates/language/src/proto.rs b/crates/language/src/proto.rs index 0497a4c4593e8307fc3f90809e32e9b5e4a6ab7e..d4b553de47966847916794a327b315272bbff3d1 100644 --- a/crates/language/src/proto.rs +++ b/crates/language/src/proto.rs @@ -223,7 +223,7 @@ pub fn serialize_diagnostics<'a>( } as i32, group_id: entry.diagnostic.group_id as u64, is_primary: entry.diagnostic.is_primary, - is_valid: entry.diagnostic.is_valid, + is_valid: true, code: entry.diagnostic.code.clone(), is_disk_based: entry.diagnostic.is_disk_based, is_unnecessary: entry.diagnostic.is_unnecessary, @@ -409,7 +409,6 @@ pub fn deserialize_diagnostics( message: diagnostic.message, group_id: diagnostic.group_id as usize, code: diagnostic.code, - is_valid: diagnostic.is_valid, is_primary: diagnostic.is_primary, is_disk_based: diagnostic.is_disk_based, is_unnecessary: diagnostic.is_unnecessary, diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index 946e6af5ab5fd9a97439edb5acb296972068cf44..e02f19155bdda86748fc6b0daf09a886c9ecb086 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -3023,7 +3023,7 @@ impl MultiBufferSnapshot { pub fn has_git_diffs(&self) -> bool { for excerpt in self.excerpts.iter() { - if !excerpt.buffer.git_diff.is_empty() { + if excerpt.buffer.has_git_diff() { return true; } } diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 044b750ad9d7cecce1a00f491e0fd66199989bb7..fdaab47bc1bdeb9a677c9f9c7d1817c0f8762144 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -3912,7 +3912,6 @@ impl Project { message: diagnostic.message.clone(), group_id, is_primary: true, - is_valid: true, is_disk_based, is_unnecessary, }, @@ -3930,7 +3929,6 @@ impl Project { message: info.message.clone(), group_id, is_primary: false, - is_valid: true, is_disk_based, is_unnecessary: false, }, diff --git a/crates/rpc/proto/zed.proto b/crates/rpc/proto/zed.proto index e423441a30218674c4d6b68098a8f724c8a32654..086deeef119153d151c02b59b4184ec9b3cae06a 100644 --- a/crates/rpc/proto/zed.proto +++ b/crates/rpc/proto/zed.proto @@ -1471,7 +1471,10 @@ message Diagnostic { optional string code = 6; uint64 group_id = 7; bool is_primary = 8; + + // TODO: remove this field bool is_valid = 9; + bool is_disk_based = 10; bool is_unnecessary = 11; diff --git a/crates/vim/src/motion.rs b/crates/vim/src/motion.rs index 73ba70d5add11f33d55e001e2637c05bcca0afe5..685c7a28f9b91de84686d7a9e876ab1e49dd5594 100644 --- a/crates/vim/src/motion.rs +++ b/crates/vim/src/motion.rs @@ -681,8 +681,8 @@ pub(crate) fn next_word_start( for _ in 0..times { let mut crossed_newline = false; point = movement::find_boundary(map, point, FindRange::MultiLine, |left, right| { - let left_kind = char_kind(&scope, left).coerce_punctuation(ignore_punctuation); - let right_kind = char_kind(&scope, right).coerce_punctuation(ignore_punctuation); + let left_kind = coerce_punctuation(char_kind(&scope, left), ignore_punctuation); + let right_kind = coerce_punctuation(char_kind(&scope, right), ignore_punctuation); let at_newline = right == '\n'; let found = (left_kind != right_kind && right_kind != CharKind::Whitespace) @@ -711,8 +711,8 @@ fn next_word_end( *point.column_mut() = 0; } point = movement::find_boundary(map, point, FindRange::MultiLine, |left, right| { - let left_kind = char_kind(&scope, left).coerce_punctuation(ignore_punctuation); - let right_kind = char_kind(&scope, right).coerce_punctuation(ignore_punctuation); + let left_kind = coerce_punctuation(char_kind(&scope, left), ignore_punctuation); + let right_kind = ccoerce_punctuation(har_kind(&scope, right), ignore_punctuation); left_kind != right_kind && left_kind != CharKind::Whitespace }); @@ -744,8 +744,8 @@ fn previous_word_start( // cursor because the newline is checked only once. point = movement::find_preceding_boundary(map, point, FindRange::MultiLine, |left, right| { - let left_kind = char_kind(&scope, left).coerce_punctuation(ignore_punctuation); - let right_kind = char_kind(&scope, right).coerce_punctuation(ignore_punctuation); + let left_kind = coerce_punctuation(char_kind(&scope, left), ignore_punctuation); + let right_kind = coerce_punctuation(char_kind(&scope, right), ignore_punctuation); (left_kind != right_kind && !right.is_whitespace()) || left == '\n' }); @@ -952,6 +952,14 @@ pub(crate) fn next_line_end( end_of_line(map, false, point) } +fn coerce_punctuation(kind: CharKind, treat_punctuation_as_word: bool) -> Self { + if treat_punctuation_as_word && kind == CharKind::Punctuation { + CharKind::Word + } else { + kind + } +} + #[cfg(test)] mod test { From 058f39c180b6dc36d86ff58586d7fe99633a1dc2 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 18 Jan 2024 15:34:04 -0800 Subject: [PATCH 07/17] Document DiagnosticSet, SyntaxMap --- crates/language/src/buffer.rs | 2 +- crates/language/src/diagnostic_set.rs | 31 ++++++++++++++++++++++++++- crates/language/src/language.rs | 4 ++++ crates/language/src/syntax_map.rs | 13 ++++++++--- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index bfb37e91ebe80fd289a8d94279f42453ee014933..ce8b5281f01dc786a7505146a4fbc4444b4ae82d 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -145,7 +145,7 @@ pub enum IndentKind { /// An ASCII space character. #[default] Space, - /// An ASCII tab chracter. + /// An ASCII tab character. Tab, } diff --git a/crates/language/src/diagnostic_set.rs b/crates/language/src/diagnostic_set.rs index f269fce88d694c8efe2f255e302bbef7aed865ea..48e3bd78c7c24066a3dd0b4c29237f347dc835f5 100644 --- a/crates/language/src/diagnostic_set.rs +++ b/crates/language/src/diagnostic_set.rs @@ -9,20 +9,36 @@ use std::{ use sum_tree::{self, Bias, SumTree}; use text::{Anchor, FromAnchor, PointUtf16, ToOffset}; +/// A set of diagnostics associated with a given buffer, provided +/// by a single language server. +/// +/// The diagnostics are stored in a [SumTree], which allows this struct +/// to be cheaply copied, and allows for efficient retrieval of the +/// diagnostics that intersect a given range of the buffer. #[derive(Clone, Debug, Default)] pub struct DiagnosticSet { diagnostics: SumTree>, } +/// A single diagnostic in a set. Generic over its range type, because +/// the diagnostics are stored internally as [Anchor]s, but can be +/// resolved to different coordinates types like [usize] byte offsets or +/// [Point]s. #[derive(Clone, Debug, PartialEq, Eq)] pub struct DiagnosticEntry { + /// The range of the buffer where the diagnostic applies. pub range: Range, + /// The information about the diagnostic. pub diagnostic: Diagnostic, } +/// A group of related diagnostics, ordered by their start position +/// in the buffer. #[derive(Debug)] pub struct DiagnosticGroup { + /// The diagnostics. pub entries: Vec>, + /// The index into `entries` where the primary diagnostic is stored. pub primary_ix: usize, } @@ -36,7 +52,8 @@ pub struct Summary { } impl DiagnosticEntry { - // Used to provide diagnostic context to lsp codeAction request + /// Returns a raw LSP diagnostic ssed to provide diagnostic context to lsp + /// codeAction request pub fn to_lsp_diagnostic_stub(&self) -> lsp::Diagnostic { let code = self .diagnostic @@ -53,6 +70,8 @@ impl DiagnosticEntry { } impl DiagnosticSet { + /// Constructs a [DiagnosticSet] from a sequence of entries, ordered by + /// their position in the buffer. pub fn from_sorted_entries(iter: I, buffer: &text::BufferSnapshot) -> Self where I: IntoIterator>, @@ -62,6 +81,7 @@ impl DiagnosticSet { } } + /// Constructs a [DiagnosticSet] from a sequence of entries in an arbitrary order. pub fn new(iter: I, buffer: &text::BufferSnapshot) -> Self where I: IntoIterator>, @@ -80,14 +100,18 @@ impl DiagnosticSet { } } + /// Returns the number of diagnostics in the set. pub fn len(&self) -> usize { self.diagnostics.summary().count } + /// Returns an iterator over the diagnostic entries in the set. pub fn iter(&self) -> impl Iterator> { self.diagnostics.iter() } + /// Returns an iterator over the diagnostic entries that intersect the + /// given range of the buffer. pub fn range<'a, T, O>( &'a self, range: Range, @@ -134,6 +158,7 @@ impl DiagnosticSet { }) } + /// Adds all of this set's diagnostic groups to the given output vector. pub fn groups( &self, language_server_id: LanguageServerId, @@ -173,6 +198,8 @@ impl DiagnosticSet { }); } + /// Returns all of the diagnostics in a particular diagnostic group, + /// in order of their position in the buffer. pub fn group<'a, O: FromAnchor>( &'a self, group_id: usize, @@ -183,6 +210,7 @@ impl DiagnosticSet { .map(|entry| entry.resolve(buffer)) } } + impl sum_tree::Item for DiagnosticEntry { type Summary = Summary; @@ -198,6 +226,7 @@ impl sum_tree::Item for DiagnosticEntry { } impl DiagnosticEntry { + /// Converts the [DiagnosticEntry] to a different buffer coordinate type. pub fn resolve(&self, buffer: &text::BufferSnapshot) -> DiagnosticEntry { DiagnosticEntry { range: O::from_anchor(&self.range.start, buffer) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 9a292cbd8819615f11f96a8d12bd3c017568c6c8..534d313453f08ec54b559dd798b15a2e10bab6ae 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -114,10 +114,14 @@ lazy_static! { )); } +/// Types that represent a position in a buffer, and can be converted into +/// an LSP position, to send to a language server. pub trait ToLspPosition { + /// Converts the value into an LSP position. fn to_lsp_position(self) -> lsp::Position; } +/// A name of a language server. #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct LanguageServerName(pub Arc); diff --git a/crates/language/src/syntax_map.rs b/crates/language/src/syntax_map.rs index 9174dc7df9e8e45663a75a268ede925460cc6139..8c489a30cbcadc10ee248510d112c99cddcefb13 100644 --- a/crates/language/src/syntax_map.rs +++ b/crates/language/src/syntax_map.rs @@ -117,17 +117,22 @@ impl SyntaxLayerContent { } } +/// A layer of syntax highlighting, corresponding to a single syntax +/// tree in a particular language. #[derive(Debug)] pub struct SyntaxLayer<'a> { - pub depth: usize, + /// The language for this layer. pub language: &'a Arc, + depth: usize, tree: &'a Tree, offset: (usize, tree_sitter::Point), } +/// A layer of syntax highlighting. Like [SyntaxLayer], but holding +/// owned data instead of references. #[derive(Clone)] pub struct OwnedSyntaxLayer { - pub depth: usize, + /// The language for this layer. pub language: Arc, tree: tree_sitter::Tree, offset: (usize, tree_sitter::Point), @@ -1437,6 +1442,7 @@ fn insert_newlines_between_ranges( } impl OwnedSyntaxLayer { + /// Returns the root syntax node for this layer. pub fn node(&self) -> Node { self.tree .root_node_with_offset(self.offset.0, self.offset.1) @@ -1444,15 +1450,16 @@ impl OwnedSyntaxLayer { } impl<'a> SyntaxLayer<'a> { + /// Returns an owned version of this layer. pub fn to_owned(&self) -> OwnedSyntaxLayer { OwnedSyntaxLayer { tree: self.tree.clone(), offset: self.offset, - depth: self.depth, language: self.language.clone(), } } + /// Returns the root node for this layer. pub fn node(&self) -> Node<'a> { self.tree .root_node_with_offset(self.offset.0, self.offset.1) From f11d676641d6a8260d23bcddd1a1e3bc344f54bc Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 18 Jan 2024 15:51:25 -0800 Subject: [PATCH 08/17] Remove missing docs warning for now --- crates/language/src/language.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 534d313453f08ec54b559dd798b15a2e10bab6ae..7d44250a0f21b289ff51b4ef88b589aed8bc62c3 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -1,4 +1,3 @@ -#![warn(missing_docs)] //! The `language` crate provides a large chunk of Zed's language-related //! features (the other big contributors being project and lsp crates that revolve around LSP features). //! Namely, this crate: @@ -389,7 +388,7 @@ pub struct CodeLabel { pub struct LanguageConfig { /// Human-readable name of the language. pub name: Arc, - // The name of the grammar in a WASM bundle. + // The name of the grammar in a WASM bundle (experimental). pub grammar_name: Option>, /// Given a list of `LanguageConfig`'s, the language of a file can be determined based on the path extension matching any of the `path_suffixes`. pub path_suffixes: Vec, From 87d60beda714c18c9a7b216cfa7216f72cebc561 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 18 Jan 2024 20:47:29 -0700 Subject: [PATCH 09/17] Fix a double borrow error in window.open It seems that sometimes calling toggleFullScreen will cause the display_layer callback of a different window to fire. --- crates/gpui/src/platform/mac/window.rs | 40 ++++++++++++++------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index 134390bb79900b0cc09efba720b373303d8cd26b..ee7411bc4f8aa67e7b6eee9162c415b2b46da0b8 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -516,25 +516,6 @@ impl MacWindow { NSArray::arrayWithObject(nil, NSFilenamesPboardType) ]; - let screen = native_window.screen(); - match options.bounds { - WindowBounds::Fullscreen => { - native_window.toggleFullScreen_(nil); - } - WindowBounds::Maximized => { - native_window.setFrame_display_(screen.visibleFrame(), YES); - } - WindowBounds::Fixed(bounds) => { - let display_bounds = display.bounds(); - let frame = if bounds.intersects(&display_bounds) { - display_bounds_to_native(bounds) - } else { - display_bounds_to_native(display_bounds) - }; - native_window.setFrame_display_(mem::transmute::(frame), YES); - } - } - let native_view: id = msg_send![VIEW_CLASS, alloc]; let native_view = NSView::init(native_view); @@ -656,6 +637,27 @@ impl MacWindow { native_window.orderFront_(nil); } + let screen = native_window.screen(); + match options.bounds { + WindowBounds::Fullscreen => { + // We need to toggle full screen asynchronously as doing so may + // call back into the platform handlers. + window.toggle_full_screen() + } + WindowBounds::Maximized => { + native_window.setFrame_display_(screen.visibleFrame(), YES); + } + WindowBounds::Fixed(bounds) => { + let display_bounds = display.bounds(); + let frame = if bounds.intersects(&display_bounds) { + display_bounds_to_native(bounds) + } else { + display_bounds_to_native(display_bounds) + }; + native_window.setFrame_display_(mem::transmute::(frame), YES); + } + } + window.0.lock().move_traffic_light(); pool.drain(); From 0062cc000b825e3437221b408f826b7288638086 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 19 Jan 2024 02:54:52 -0500 Subject: [PATCH 10/17] Allow cursors to be shown via a command --- assets/keymaps/default.json | 3 ++- crates/editor/src/actions.rs | 1 + crates/editor/src/editor.rs | 30 +++++++++++++++++++----------- crates/editor/src/element.rs | 1 + 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index f18cc2a111ec432a283f9f08f3fd1acecdddda52..c4cfed2916cf7a44d63a4fe212f66001b5879aed 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -349,7 +349,8 @@ "alt-cmd-]": "editor::UnfoldLines", "ctrl-space": "editor::ShowCompletions", "cmd-.": "editor::ToggleCodeActions", - "alt-cmd-r": "editor::RevealInFinder" + "alt-cmd-r": "editor::RevealInFinder", + "ctrl-cmd-c": "editor::ShowCursors" } }, { diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index 9532bb642d85b15ae5cd8edf68e2338b1cefa174..dd489c039398b21cc5148884f0d8742558fa03f8 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -214,5 +214,6 @@ gpui::actions!( Undo, UndoSelection, UnfoldLines, + ShowCursors ] ); diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 8876feeceff1daf1dfb85277d2cd958f1051544d..3b7b99cb82e66a931e39737d9ba85116c87ff176 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -3899,6 +3899,24 @@ impl Editor { self.update_visible_copilot_suggestion(cx); } + pub fn show_cursors(&mut self, _: &ShowCursors, cx: &mut ViewContext) { + self.display_cursors(cx); + } + + fn display_cursors(&mut self, cx: &mut ViewContext) { + self.recently_focused = true; + cx.notify(); + cx.spawn(|this, mut cx| async move { + cx.background_executor().timer(Duration::from_secs(2)).await; + this.update(&mut cx, |this, cx| { + this.recently_focused = false; + cx.notify() + }) + .ok() + }) + .detach(); + } + fn next_copilot_suggestion(&mut self, _: &copilot::NextSuggestion, cx: &mut ViewContext) { if self.has_active_copilot_suggestion(cx) { self.cycle_copilot_suggestions(Direction::Next, cx); @@ -9003,17 +9021,7 @@ impl Editor { cx.focus(&rename_editor_focus_handle); } else { self.blink_manager.update(cx, BlinkManager::enable); - self.recently_focused = true; - cx.notify(); - cx.spawn(|this, mut cx| async move { - cx.background_executor().timer(Duration::from_secs(2)).await; - this.update(&mut cx, |this, cx| { - this.recently_focused = false; - cx.notify() - }) - .ok() - }) - .detach(); + self.display_cursors(cx); self.buffer.update(cx, |buffer, cx| { buffer.finalize_last_transaction(cx); if self.leader_peer_id.is_none() { diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 6c6bfba190c70b6aac155783a312cbb5af4f31a0..2f7afe2d06e44ee1f9539fbc2064ac7bdc73c5dc 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -327,6 +327,7 @@ impl EditorElement { register_action(view, cx, Editor::context_menu_prev); register_action(view, cx, Editor::context_menu_next); register_action(view, cx, Editor::context_menu_last); + register_action(view, cx, Editor::show_cursors); } fn register_key_listeners(&self, cx: &mut WindowContext) { From bcc13e151cc92e9af11ba4438499c88eff694388 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 19 Jan 2024 07:52:28 -0500 Subject: [PATCH 11/17] Change struct field name --- crates/editor/src/editor.rs | 8 ++++---- crates/editor/src/element.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 3b7b99cb82e66a931e39737d9ba85116c87ff176..7de6a69f1187ca97ab70aa0a5d6b808701adf329 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -367,7 +367,7 @@ pub struct Editor { project: Option>, collaboration_hub: Option>, blink_manager: Model, - recently_focused: bool, + display_cursors: bool, hovered_cursor: Option, pub show_local_selections: bool, mode: EditorMode, @@ -1613,7 +1613,7 @@ impl Editor { pixel_position_of_newest_cursor: None, gutter_width: Default::default(), style: None, - recently_focused: false, + display_cursors: false, hovered_cursor: Default::default(), editor_actions: Default::default(), show_copilot_suggestions: mode == EditorMode::Full, @@ -3904,12 +3904,12 @@ impl Editor { } fn display_cursors(&mut self, cx: &mut ViewContext) { - self.recently_focused = true; + self.display_cursors = true; cx.notify(); cx.spawn(|this, mut cx| async move { cx.background_executor().timer(Duration::from_secs(2)).await; this.update(&mut cx, |this, cx| { - this.recently_focused = false; + this.display_cursors = false; cx.notify() }) .ok() diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 2f7afe2d06e44ee1f9539fbc2064ac7bdc73c5dc..adb82b492c499668cdb237e6930d9831259e1ba9 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1999,7 +1999,7 @@ impl EditorElement { if Some(selection.peer_id) == editor.leader_peer_id { continue; } - let is_shown = editor.recently_focused || editor.hovered_cursor.as_ref().is_some_and(|c| c.replica_id == selection.replica_id && c.selection_id == selection.selection.id); + let is_shown = editor.display_cursors || editor.hovered_cursor.as_ref().is_some_and(|c| c.replica_id == selection.replica_id && c.selection_id == selection.selection.id); remote_selections .entry(selection.replica_id) From 01f06f96a15887703a06e5953c564005c308a9c9 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 19 Jan 2024 11:18:50 -0500 Subject: [PATCH 12/17] Update tenses of doc comment summary lines (#4161) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR updates the tenses used by the summary line of doc comments to match the [Rust API documentation conventions](https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html#summary-sentence). Specifically: > The summary line should be written in third person singular present indicative form. Basically, this means write ‘Returns’ instead of ‘Return’. I'm sure there are plenty occurrences that I missed. Release Notes: - N/A --- crates/collab/src/db/queries/notifications.rs | 2 +- crates/collab/src/db/queries/users.rs | 4 +- crates/collab/src/rpc.rs | 16 +++---- crates/gpui/src/app.rs | 8 ++-- crates/gpui/src/app/entity_map.rs | 6 +-- crates/gpui/src/app/model_context.rs | 2 +- crates/gpui/src/app/test_context.rs | 2 +- crates/gpui/src/executor.rs | 2 +- crates/gpui/src/view.rs | 4 +- crates/gpui/src/window.rs | 46 +++++++++---------- crates/language/src/syntax_map.rs | 2 +- crates/plugin_runtime/src/plugin.rs | 6 +-- crates/project/src/worktree.rs | 2 +- crates/settings/src/settings_store.rs | 10 ++-- crates/terminal/src/terminal.rs | 2 +- crates/terminal/src/terminal_settings.rs | 14 +++--- crates/terminal_view/src/terminal_view.rs | 2 +- crates/ui/src/components/label/label.rs | 2 +- crates/vim/src/object.rs | 16 ++++--- 19 files changed, 75 insertions(+), 73 deletions(-) diff --git a/crates/collab/src/db/queries/notifications.rs b/crates/collab/src/db/queries/notifications.rs index 57685e141b78e5aa6c4a541c385bf056b1802000..ccdda65342fcbcbf3a6837e0725cee8763e7f311 100644 --- a/crates/collab/src/db/queries/notifications.rs +++ b/crates/collab/src/db/queries/notifications.rs @@ -66,7 +66,7 @@ impl Database { .await } - /// Create a notification. If `avoid_duplicates` is set to true, then avoid + /// Creates a notification. If `avoid_duplicates` is set to true, then avoid /// creating a new notification if the given recipient already has an /// unread notification with the given kind and entity id. pub async fn create_notification( diff --git a/crates/collab/src/db/queries/users.rs b/crates/collab/src/db/queries/users.rs index 8f975b5cbe5d8b4239e34e8770b57b979d6ac378..d6dfe480427fc8ed6dce8f460b5b307e7735317e 100644 --- a/crates/collab/src/db/queries/users.rs +++ b/crates/collab/src/db/queries/users.rs @@ -153,7 +153,7 @@ impl Database { .await } - /// Set "connected_once" on the user for analytics. + /// Sets "connected_once" on the user for analytics. pub async fn set_user_connected_once(&self, id: UserId, connected_once: bool) -> Result<()> { self.transaction(|tx| async move { user::Entity::update_many() @@ -252,7 +252,7 @@ impl Database { .await } - /// Return the active flags for the user. + /// Returns the active flags for the user. pub async fn get_user_flags(&self, user: UserId) -> Result> { self.transaction(|tx| async move { #[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 4e9807acfb562a67732147e26b12d36afaa07340..2a715fa4a456ccd0564b88a2afe662136e151d6a 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -950,7 +950,7 @@ async fn ping(_: proto::Ping, response: Response, _session: Session Ok(()) } -/// Create a new room for calling (outside of channels) +/// Creates a new room for calling (outside of channels) async fn create_room( _request: proto::CreateRoom, response: Response, @@ -1276,7 +1276,7 @@ async fn leave_room( Ok(()) } -/// Update the permissions of someone else in the room. +/// Updates the permissions of someone else in the room. async fn set_room_participant_role( request: proto::SetRoomParticipantRole, response: Response, @@ -1460,7 +1460,7 @@ async fn decline_call(message: proto::DeclineCall, session: Session) -> Result<( Ok(()) } -/// Update other participants in the room with your current location. +/// Updates other participants in the room with your current location. async fn update_participant_location( request: proto::UpdateParticipantLocation, response: Response, @@ -1673,7 +1673,7 @@ async fn leave_project(request: proto::LeaveProject, session: Session) -> Result Ok(()) } -/// Update other participants with changes to the project +/// Updates other participants with changes to the project async fn update_project( request: proto::UpdateProject, response: Response, @@ -1700,7 +1700,7 @@ async fn update_project( Ok(()) } -/// Update other participants with changes to the worktree +/// Updates other participants with changes to the worktree async fn update_worktree( request: proto::UpdateWorktree, response: Response, @@ -1725,7 +1725,7 @@ async fn update_worktree( Ok(()) } -/// Update other participants with changes to the diagnostics +/// Updates other participants with changes to the diagnostics async fn update_diagnostic_summary( message: proto::UpdateDiagnosticSummary, session: Session, @@ -1749,7 +1749,7 @@ async fn update_diagnostic_summary( Ok(()) } -/// Update other participants with changes to the worktree settings +/// Updates other participants with changes to the worktree settings async fn update_worktree_settings( message: proto::UpdateWorktreeSettings, session: Session, @@ -2293,7 +2293,7 @@ async fn remove_contact( Ok(()) } -/// Create a new channel. +/// Creates a new channel. async fn create_channel( request: proto::CreateChannel, response: Response, diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index c7a6a92a17dce204412fa2c088132789d33b0cc4..d898d865164a61c9935f8fe1ed5e957a28026ee5 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -864,7 +864,7 @@ impl AppContext { .unwrap() } - /// Set the value of the global of the given type. + /// Sets the value of the global of the given type. pub fn set_global(&mut self, global: G) { let global_type = TypeId::of::(); self.push_effect(Effect::NotifyGlobalObservers { global_type }); @@ -889,7 +889,7 @@ impl AppContext { .unwrap() } - /// Update the global of the given type with a closure. Unlike `global_mut`, this method provides + /// Updates the global of the given type with a closure. Unlike `global_mut`, this method provides /// your closure with mutable access to the `AppContext` and the global simultaneously. pub fn update_global(&mut self, f: impl FnOnce(&mut G, &mut Self) -> R) -> R { self.update(|cx| { @@ -1106,7 +1106,7 @@ impl AppContext { .contains_key(&action.as_any().type_id()) } - /// Set the menu bar for this application. This will replace any existing menu bar. + /// Sets the menu bar for this application. This will replace any existing menu bar. pub fn set_menus(&mut self, menus: Vec) { self.platform.set_menus(menus, &self.keymap.lock()); } @@ -1190,7 +1190,7 @@ impl Context for AppContext { }) } - /// Update the entity referenced by the given model. The function is passed a mutable reference to the + /// Updates the entity referenced by the given model. The function is passed a mutable reference to the /// entity along with a `ModelContext` for the entity. fn update_model( &mut self, diff --git a/crates/gpui/src/app/entity_map.rs b/crates/gpui/src/app/entity_map.rs index 7ab21a5477526d064d70283a04442b33cffcedfa..db5d844d17c173bbc0541d49aaf5f67e70f139a0 100644 --- a/crates/gpui/src/app/entity_map.rs +++ b/crates/gpui/src/app/entity_map.rs @@ -104,7 +104,7 @@ impl EntityMap { } } - /// Return an entity after moving it to the stack. + /// Returns an entity after moving it to the stack. pub fn end_lease(&mut self, mut lease: Lease) { self.entities .insert(lease.model.entity_id, lease.entity.take().unwrap()); @@ -391,7 +391,7 @@ impl Model { cx.read_model(self, f) } - /// Update the entity referenced by this model with the given function. + /// Updates the entity referenced by this model with the given function. /// /// The update function receives a context appropriate for its environment. /// When updating in an `AppContext`, it receives a `ModelContext`. @@ -571,7 +571,7 @@ impl WeakModel { Model::upgrade_from(self) } - /// Update the entity referenced by this model with the given function if + /// Updates the entity referenced by this model with the given function if /// the referenced entity still exists. Returns an error if the entity has /// been released. pub fn update( diff --git a/crates/gpui/src/app/model_context.rs b/crates/gpui/src/app/model_context.rs index e2aad9fee93aeba5c0c022a5d619f8cdd57b0e63..268410245e95aae8e1f1a091f9b98d0ce359dfdb 100644 --- a/crates/gpui/src/app/model_context.rs +++ b/crates/gpui/src/app/model_context.rs @@ -189,7 +189,7 @@ impl<'a, T: 'static> ModelContext<'a, T> { } } - /// Update the given global + /// Updates the given global pub fn update_global(&mut self, f: impl FnOnce(&mut G, &mut Self) -> R) -> R where G: 'static, diff --git a/crates/gpui/src/app/test_context.rs b/crates/gpui/src/app/test_context.rs index d11c1239dd576d9db944f605cad7d4140624feb9..66f74a91b38871da18829ce9539f48d3e397fcbb 100644 --- a/crates/gpui/src/app/test_context.rs +++ b/crates/gpui/src/app/test_context.rs @@ -578,7 +578,7 @@ impl<'a> VisualTestContext { self.cx.update_window(self.window, |_, cx| f(cx)).unwrap() } - /// Create a new VisualTestContext. You would typically shadow the passed in + /// Creates a new VisualTestContext. You would typically shadow the passed in /// TestAppContext with this, as this is typically more useful. /// `let cx = VisualTestContext::from_window(window, cx);` pub fn from_window(window: AnyWindowHandle, cx: &TestAppContext) -> Self { diff --git a/crates/gpui/src/executor.rs b/crates/gpui/src/executor.rs index 3e233854bc38cf63f2582c1bdb38fc482881276a..88e46c28c4714c860d2db8c0c735a0bca2813fb6 100644 --- a/crates/gpui/src/executor.rs +++ b/crates/gpui/src/executor.rs @@ -46,7 +46,7 @@ pub enum Task { } impl Task { - /// Create a new task that will resolve with the value + /// Creates a new task that will resolve with the value pub fn ready(val: T) -> Self { Task::Ready(Some(val)) } diff --git a/crates/gpui/src/view.rs b/crates/gpui/src/view.rs index ede1bd8b7fd33c01f31b65ba06e70001debb428e..c5d759c61599a6082f5fa2531471ea4a9da34e4c 100644 --- a/crates/gpui/src/view.rs +++ b/crates/gpui/src/view.rs @@ -64,7 +64,7 @@ impl View { Entity::downgrade(self) } - /// Update the view's state with the given function, which is passed a mutable reference and a context. + /// Updates the view's state with the given function, which is passed a mutable reference and a context. pub fn update( &self, cx: &mut C, @@ -156,7 +156,7 @@ impl WeakView { Entity::upgrade_from(self) } - /// Update this view's state if it hasn't been released. + /// Updates this view's state if it hasn't been released. /// Returns an error if this view has been released. pub fn update( &self, diff --git a/crates/gpui/src/window.rs b/crates/gpui/src/window.rs index 2329a5251ed010791e043bc08b70fb2e5e19d895..4e7ba2001a373e1a66406373ade0182fedd9fe34 100644 --- a/crates/gpui/src/window.rs +++ b/crates/gpui/src/window.rs @@ -721,7 +721,7 @@ impl<'a> WindowContext<'a> { subscription } - /// Create an `AsyncWindowContext`, which has a static lifetime and can be held across + /// Creates an [`AsyncWindowContext`], which has a static lifetime and can be held across /// await points in async code. pub fn to_async(&self) -> AsyncWindowContext { AsyncWindowContext::new(self.app.to_async(), self.window.handle) @@ -794,7 +794,7 @@ impl<'a> WindowContext<'a> { .spawn(|app| f(AsyncWindowContext::new(app, self.window.handle))) } - /// Update the global of the given type. The given closure is given simultaneous mutable + /// Updates the global of the given type. The given closure is given simultaneous mutable /// access both to the global and the context. pub fn update_global(&mut self, f: impl FnOnce(&mut G, &mut Self) -> R) -> R where @@ -913,7 +913,7 @@ impl<'a> WindowContext<'a> { self.window.platform_window.zoom(); } - /// Update the window's title at the platform level. + /// Updates the window's title at the platform level. pub fn set_window_title(&mut self, title: &str) { self.window.platform_window.set_title(title); } @@ -1063,14 +1063,14 @@ impl<'a> WindowContext<'a> { self.window.modifiers } - /// Update the cursor style at the platform level. + /// Updates the cursor style at the platform level. pub fn set_cursor_style(&mut self, style: CursorStyle) { let view_id = self.parent_view_id(); self.window.next_frame.cursor_styles.insert(view_id, style); self.window.next_frame.requested_cursor_style = Some(style); } - /// Set a tooltip to be rendered for the upcoming frame + /// Sets a tooltip to be rendered for the upcoming frame pub fn set_tooltip(&mut self, tooltip: AnyTooltip) { let view_id = self.parent_view_id(); self.window.next_frame.tooltip_request = Some(TooltipRequest { view_id, tooltip }); @@ -2080,8 +2080,8 @@ impl<'a> WindowContext<'a> { }) } - /// Update or initialize state for an element with the given id that lives across multiple - /// frames. If an element with this id existed in the rendered frame, its state will be passed + /// Updates or initializes state for an element with the given id that lives across multiple + /// frames. If an element with this ID existed in the rendered frame, its state will be passed /// to the given closure. The state returned by the closure will be stored so it can be referenced /// when drawing the next frame. pub(crate) fn with_element_state( @@ -2182,7 +2182,7 @@ impl<'a> WindowContext<'a> { .expect("a view should always be on the stack while drawing") } - /// Set an input handler, such as [`ElementInputHandler`][element_input_handler], which interfaces with the + /// Sets an input handler, such as [`ElementInputHandler`][element_input_handler], which interfaces with the /// platform to receive textual input with proper integration with concerns such /// as IME interactions. This handler will be active for the upcoming frame until the following frame is /// rendered. @@ -2322,7 +2322,7 @@ impl VisualContext for WindowContext<'_> { view } - /// Update the given view. Prefer calling `View::update` instead, which calls this method. + /// Updates the given view. Prefer calling [`View::update`] instead, which calls this method. fn update_view( &mut self, view: &View, @@ -2491,7 +2491,7 @@ pub trait BorrowWindow: BorrowMut + BorrowMut { result } - /// Update the global element offset relative to the current offset. This is used to implement + /// Updates the global element offset relative to the current offset. This is used to implement /// scrolling. fn with_element_offset( &mut self, @@ -2506,7 +2506,7 @@ pub trait BorrowWindow: BorrowMut + BorrowMut { self.with_absolute_element_offset(abs_offset, f) } - /// Update the global element offset based on the given offset. This is used to implement + /// Updates the global element offset based on the given offset. This is used to implement /// drag handles and other manual painting of elements. fn with_absolute_element_offset( &mut self, @@ -2629,7 +2629,7 @@ impl<'a, V: 'static> ViewContext<'a, V> { &mut self.window_cx } - /// Set a given callback to be run on the next frame. + /// Sets a given callback to be run on the next frame. pub fn on_next_frame(&mut self, f: impl FnOnce(&mut V, &mut ViewContext) + 'static) where V: 'static, @@ -2957,7 +2957,7 @@ impl<'a, V: 'static> ViewContext<'a, V> { self.window_cx.spawn(|cx| f(view, cx)) } - /// Update the global state of the given type. + /// Updates the global state of the given type. pub fn update_global(&mut self, f: impl FnOnce(&mut G, &mut Self) -> R) -> R where G: 'static, @@ -3189,7 +3189,7 @@ pub struct WindowHandle { } impl WindowHandle { - /// Create a new handle from a window ID. + /// Creates a new handle from a window ID. /// This does not check if the root type of the window is `V`. pub fn new(id: WindowId) -> Self { WindowHandle { @@ -3215,7 +3215,7 @@ impl WindowHandle { })) } - /// Update the root view of this window. + /// Updates the root view of this window. /// /// This will fail if the window has been closed or if the root view's type does not match pub fn update( @@ -3337,7 +3337,7 @@ impl AnyWindowHandle { } } - /// Update the state of the root view of this window. + /// Updates the state of the root view of this window. /// /// This will fail if the window has been closed. pub fn update( @@ -3477,7 +3477,7 @@ pub struct PaintQuad { } impl PaintQuad { - /// Set the corner radii of the quad. + /// Sets the corner radii of the quad. pub fn corner_radii(self, corner_radii: impl Into>) -> Self { PaintQuad { corner_radii: corner_radii.into(), @@ -3485,7 +3485,7 @@ impl PaintQuad { } } - /// Set the border widths of the quad. + /// Sets the border widths of the quad. pub fn border_widths(self, border_widths: impl Into>) -> Self { PaintQuad { border_widths: border_widths.into(), @@ -3493,7 +3493,7 @@ impl PaintQuad { } } - /// Set the border color of the quad. + /// Sets the border color of the quad. pub fn border_color(self, border_color: impl Into) -> Self { PaintQuad { border_color: border_color.into(), @@ -3501,7 +3501,7 @@ impl PaintQuad { } } - /// Set the background color of the quad. + /// Sets the background color of the quad. pub fn background(self, background: impl Into) -> Self { PaintQuad { background: background.into(), @@ -3510,7 +3510,7 @@ impl PaintQuad { } } -/// Create a quad with the given parameters. +/// Creates a quad with the given parameters. pub fn quad( bounds: Bounds, corner_radii: impl Into>, @@ -3527,7 +3527,7 @@ pub fn quad( } } -/// Create a filled quad with the given bounds and background color. +/// Creates a filled quad with the given bounds and background color. pub fn fill(bounds: impl Into>, background: impl Into) -> PaintQuad { PaintQuad { bounds: bounds.into(), @@ -3538,7 +3538,7 @@ pub fn fill(bounds: impl Into>, background: impl Into) -> P } } -/// Create a rectangle outline with the given bounds, border color, and a 1px border width +/// Creates a rectangle outline with the given bounds, border color, and a 1px border width pub fn outline(bounds: impl Into>, border_color: impl Into) -> PaintQuad { PaintQuad { bounds: bounds.into(), diff --git a/crates/language/src/syntax_map.rs b/crates/language/src/syntax_map.rs index c22ece48aff0b41a089538cba70424f81cd4e042..b5e243e7ff705e5091f3c73fdbbf5f801922a392 100644 --- a/crates/language/src/syntax_map.rs +++ b/crates/language/src/syntax_map.rs @@ -1296,7 +1296,7 @@ fn get_injections( } } -/// Update the given list of included `ranges`, removing any ranges that intersect +/// Updates the given list of included `ranges`, removing any ranges that intersect /// `removed_ranges`, and inserting the given `new_ranges`. /// /// Returns a new vector of ranges, and the range of the vector that was changed, diff --git a/crates/plugin_runtime/src/plugin.rs b/crates/plugin_runtime/src/plugin.rs index 8070539b35da3ab2ec438c3886defe3e8cff8578..a19a49c47a678e8f0fe78877de5e7a177c340c60 100644 --- a/crates/plugin_runtime/src/plugin.rs +++ b/crates/plugin_runtime/src/plugin.rs @@ -69,7 +69,7 @@ impl Default for Metering { } /// This struct is used to build a new [`Plugin`], using the builder pattern. -/// Create a new default plugin with `PluginBuilder::new_with_default_ctx`, +/// Creates a new default plugin with `PluginBuilder::new_with_default_ctx`, /// and add host-side exported functions using `host_function` and `host_function_async`. /// Finalize the plugin by calling [`init`]. pub struct PluginBuilder { @@ -90,7 +90,7 @@ fn create_default_engine() -> Result { } impl PluginBuilder { - /// Create a new [`PluginBuilder`] with the given WASI context. + /// Creates a new [`PluginBuilder`] with the given WASI context. /// Using the default context is a safe bet, see [`new_with_default_context`]. /// This plugin will yield after a configurable amount of fuel is consumed. pub fn new(wasi_ctx: WasiCtx, metering: Metering) -> Result { @@ -105,7 +105,7 @@ impl PluginBuilder { }) } - /// Create a new `PluginBuilder` with the default `WasiCtx` (see [`default_ctx`]). + /// Creates a new `PluginBuilder` with the default `WasiCtx` (see [`default_ctx`]). /// This plugin will yield after a configurable amount of fuel is consumed. pub fn new_default() -> Result { let default_ctx = WasiCtxBuilder::new() diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 461ea303b3d42cedb577d53f22c9e1de75a14b6a..6a29725b05efcb7a2fa7506c73bf49ddb976a019 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -1866,7 +1866,7 @@ impl Snapshot { }) } - /// Update the `git_status` of the given entries such that files' + /// Updates the `git_status` of the given entries such that files' /// statuses bubble up to their ancestor directories. pub fn propagate_git_statuses(&self, result: &mut [Entry]) { let mut cursor = self diff --git a/crates/settings/src/settings_store.rs b/crates/settings/src/settings_store.rs index aa351bc8c2e0572231280de300c32f7c5165edc3..4f6179e2532b343b29bcb361377619a6a800844a 100644 --- a/crates/settings/src/settings_store.rs +++ b/crates/settings/src/settings_store.rs @@ -246,7 +246,7 @@ impl SettingsStore { this } - /// Update the value of a setting in the user's global configuration. + /// Updates the value of a setting in the user's global configuration. /// /// This is only for tests. Normally, settings are only loaded from /// JSON files. @@ -261,7 +261,7 @@ impl SettingsStore { self.set_user_settings(&new_text, cx).unwrap(); } - /// Update the value of a setting in a JSON file, returning the new text + /// Updates the value of a setting in a JSON file, returning the new text /// for that JSON file. pub fn new_text_for_update( &self, @@ -276,7 +276,7 @@ impl SettingsStore { new_text } - /// Update the value of a setting in a JSON file, returning a list + /// Updates the value of a setting in a JSON file, returning a list /// of edits to apply to the JSON file. pub fn edits_for_update( &self, @@ -344,7 +344,7 @@ impl SettingsStore { DEFAULT_JSON_TAB_SIZE } - /// Set the default settings via a JSON string. + /// Sets the default settings via a JSON string. /// /// The string should contain a JSON object with a default value for every setting. pub fn set_default_settings( @@ -362,7 +362,7 @@ impl SettingsStore { } } - /// Set the user settings via a JSON string. + /// Sets the user settings via a JSON string. pub fn set_user_settings( &mut self, user_settings_content: &str, diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 0b87ed1d976daf247b7b84efe3280290602911f3..ede9dc1af0a9fef1134d485c5fae3f70475ed258 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -599,7 +599,7 @@ impl Terminal { } } - /// Update the cached process info, returns whether the Zed-relevant info has changed + /// Updates the cached process info, returns whether the Zed-relevant info has changed fn update_process_info(&mut self) -> bool { let mut pid = unsafe { libc::tcgetpgrp(self.shell_fd as i32) }; if pid < 0 { diff --git a/crates/terminal/src/terminal_settings.rs b/crates/terminal/src/terminal_settings.rs index b9b79c9c6b6996e674f1af25485343a093b3fe85..7fcbcf954180fd32eb674339a439f5f433087585 100644 --- a/crates/terminal/src/terminal_settings.rs +++ b/crates/terminal/src/terminal_settings.rs @@ -90,17 +90,17 @@ pub struct TerminalSettingsContent { /// /// Default: current_project_directory pub working_directory: Option, - /// Set the terminal's font size. + /// Sets the terminal's font size. /// /// If this option is not included, /// the terminal will default to matching the buffer's font size. pub font_size: Option, - /// Set the terminal's font family. + /// Sets the terminal's font family. /// /// If this option is not included, /// the terminal will default to matching the buffer's font family. pub font_family: Option, - /// Set the terminal's line height. + /// Sets the terminal's line height. /// /// Default: comfortable pub line_height: Option, @@ -110,18 +110,18 @@ pub struct TerminalSettingsContent { /// /// Default: {} pub env: Option>, - /// Set the cursor blinking behavior in the terminal. + /// Sets the cursor blinking behavior in the terminal. /// /// Default: terminal_controlled pub blinking: Option, - /// Set whether Alternate Scroll mode (code: ?1007) is active by default. + /// Sets whether Alternate Scroll mode (code: ?1007) is active by default. /// Alternate Scroll mode converts mouse scroll events into up / down key /// presses when in the alternate screen (e.g. when running applications /// like vim or less). The terminal can still set and unset this mode. /// /// Default: off pub alternate_scroll: Option, - /// Set whether the option key behaves as the meta key. + /// Sets whether the option key behaves as the meta key. /// /// Default: false pub option_as_meta: Option, @@ -139,7 +139,7 @@ pub struct TerminalSettingsContent { /// /// Default: 320 pub default_height: Option, - /// Activate the python virtual environment, if one is found, in the + /// Activates the python virtual environment, if one is found, in the /// terminal's working directory (as resolved by the working_directory /// setting). Set this to "off" to disable this behavior. /// diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index fc5829ba00058d686bd67676e85755fbbb955197..25e67aa8f472c14c2943f55b75a0909ec831426d 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -832,7 +832,7 @@ impl SearchableItem for TerminalView { self.terminal().update(cx, |term, _| term.matches = matches) } - /// Return the selection content to pre-load into this search + /// Returns the selection content to pre-load into this search fn query_suggestion(&mut self, cx: &mut ViewContext) -> String { self.terminal() .read(cx) diff --git a/crates/ui/src/components/label/label.rs b/crates/ui/src/components/label/label.rs index 0ba67286a22ccaeec1505612ec34cbc3b1b5883e..13ee4161451444282d951b3b8f80daf3fb7b6568 100644 --- a/crates/ui/src/components/label/label.rs +++ b/crates/ui/src/components/label/label.rs @@ -37,7 +37,7 @@ pub struct Label { } impl Label { - /// Create a new [`Label`] with the given text. + /// Creates a new [`Label`] with the given text. /// /// # Examples /// diff --git a/crates/vim/src/object.rs b/crates/vim/src/object.rs index 1e9361618c5cd6874a3d869dabe9ba01e411599c..f65ed763b900d386f8d71c1a3e07aeade0e209cd 100644 --- a/crates/vim/src/object.rs +++ b/crates/vim/src/object.rs @@ -195,9 +195,10 @@ impl Object { } } -/// Return a range that surrounds the word relative_to is in -/// If relative_to is at the start of a word, return the word. -/// If relative_to is between words, return the space between +/// Returns a range that surrounds the word `relative_to` is in. +/// +/// If `relative_to` is at the start of a word, return the word. +/// If `relative_to` is between words, return the space between. fn in_word( map: &DisplaySnapshot, relative_to: DisplayPoint, @@ -225,11 +226,12 @@ fn in_word( Some(start..end) } -/// Return a range that surrounds the word and following whitespace +/// Returns a range that surrounds the word and following whitespace /// relative_to is in. -/// If relative_to is at the start of a word, return the word and following whitespace. -/// If relative_to is between words, return the whitespace back and the following word - +/// +/// If `relative_to` is at the start of a word, return the word and following whitespace. +/// If `relative_to` is between words, return the whitespace back and the following word. +/// /// if in word /// delete that word /// if there is whitespace following the word, delete that as well From 595428a8b1eb3aba68ba0d07217f5a25d68be148 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Fri, 19 Jan 2024 11:37:57 -0500 Subject: [PATCH 13/17] Rename `show cursors` to `display cursor names` --- assets/keymaps/default.json | 2 +- crates/editor/src/actions.rs | 2 +- crates/editor/src/editor.rs | 16 ++++++++-------- crates/editor/src/element.rs | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assets/keymaps/default.json b/assets/keymaps/default.json index c4cfed2916cf7a44d63a4fe212f66001b5879aed..cd353d776749c6da998821ec20e68672e79aa835 100644 --- a/assets/keymaps/default.json +++ b/assets/keymaps/default.json @@ -350,7 +350,7 @@ "ctrl-space": "editor::ShowCompletions", "cmd-.": "editor::ToggleCodeActions", "alt-cmd-r": "editor::RevealInFinder", - "ctrl-cmd-c": "editor::ShowCursors" + "ctrl-cmd-c": "editor::DisplayCursorNames" } }, { diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index dd489c039398b21cc5148884f0d8742558fa03f8..4edc1d12ea744c53f4e9878573684a95387c0ea5 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -214,6 +214,6 @@ gpui::actions!( Undo, UndoSelection, UnfoldLines, - ShowCursors + DisplayCursorNames ] ); diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 7de6a69f1187ca97ab70aa0a5d6b808701adf329..b31dd54208a52df335e7b1af55f163d758e91293 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -367,7 +367,7 @@ pub struct Editor { project: Option>, collaboration_hub: Option>, blink_manager: Model, - display_cursors: bool, + show_cursor_names: bool, hovered_cursor: Option, pub show_local_selections: bool, mode: EditorMode, @@ -1613,7 +1613,7 @@ impl Editor { pixel_position_of_newest_cursor: None, gutter_width: Default::default(), style: None, - display_cursors: false, + show_cursor_names: false, hovered_cursor: Default::default(), editor_actions: Default::default(), show_copilot_suggestions: mode == EditorMode::Full, @@ -3899,17 +3899,17 @@ impl Editor { self.update_visible_copilot_suggestion(cx); } - pub fn show_cursors(&mut self, _: &ShowCursors, cx: &mut ViewContext) { - self.display_cursors(cx); + pub fn display_cursor_names(&mut self, _: &DisplayCursorNames, cx: &mut ViewContext) { + self.show_cursor_names(cx); } - fn display_cursors(&mut self, cx: &mut ViewContext) { - self.display_cursors = true; + fn show_cursor_names(&mut self, cx: &mut ViewContext) { + self.show_cursor_names = true; cx.notify(); cx.spawn(|this, mut cx| async move { cx.background_executor().timer(Duration::from_secs(2)).await; this.update(&mut cx, |this, cx| { - this.display_cursors = false; + this.show_cursor_names = false; cx.notify() }) .ok() @@ -9021,7 +9021,7 @@ impl Editor { cx.focus(&rename_editor_focus_handle); } else { self.blink_manager.update(cx, BlinkManager::enable); - self.display_cursors(cx); + self.show_cursor_names(cx); self.buffer.update(cx, |buffer, cx| { buffer.finalize_last_transaction(cx); if self.leader_peer_id.is_none() { diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 7e35ff61ac2dd2cd82a308fd12731884db87939f..1c4fafb26898ec0ed05ed1ef9f5e98ce8b3fe3bd 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -327,7 +327,7 @@ impl EditorElement { register_action(view, cx, Editor::context_menu_prev); register_action(view, cx, Editor::context_menu_next); register_action(view, cx, Editor::context_menu_last); - register_action(view, cx, Editor::show_cursors); + register_action(view, cx, Editor::display_cursor_names); } fn register_key_listeners(&self, cx: &mut WindowContext) { @@ -2001,7 +2001,7 @@ impl EditorElement { if Some(selection.peer_id) == editor.leader_peer_id { continue; } - let is_shown = editor.display_cursors || editor.hovered_cursor.as_ref().is_some_and(|c| c.replica_id == selection.replica_id && c.selection_id == selection.selection.id); + let is_shown = editor.show_cursor_names || editor.hovered_cursor.as_ref().is_some_and(|c| c.replica_id == selection.replica_id && c.selection_id == selection.selection.id); remote_selections .entry(selection.replica_id) From 0578c1bdae18f3d1321d2452d2e7c2cfd9516733 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 19 Jan 2024 11:46:28 -0500 Subject: [PATCH 14/17] Style notifications for notification panel (#4163) This PR styles the notifications for the notification panel. These are the notification toasts you receive when you have a new notification (e.g., a mention in chat): Screenshot 2024-01-19 at 11 39 16 AM Release Notes: - Improved the look of toasts for incoming notifications. --- crates/collab_ui/src/notification_panel.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/collab_ui/src/notification_panel.rs b/crates/collab_ui/src/notification_panel.rs index b30f8d15f035b5bc49e08449d20efd21b0e5b8c9..6f4ee1baaec8e2b93cdd47373a96f79ebd931be7 100644 --- a/crates/collab_ui/src/notification_panel.rs +++ b/crates/collab_ui/src/notification_panel.rs @@ -713,6 +713,9 @@ impl Render for NotificationToast { h_flex() .id("notification_panel_toast") + .elevation_3(cx) + .p_2() + .gap_2() .children(user.map(|user| Avatar::new(user.avatar_uri.clone()))) .child(Label::new(self.text.clone())) .child( From 4a92506a32a57a48e4bbaaf0978c292f53e82733 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 19 Jan 2024 10:10:34 -0700 Subject: [PATCH 15/17] Watch deploys a little closer --- script/deploy-collab | 1 + 1 file changed, 1 insertion(+) diff --git a/script/deploy-collab b/script/deploy-collab index 8dbee18e3b78cfb1a26a74338509a69db54b0307..54442d5ddfc89fe74475914e5c99e4a63c8b059b 100755 --- a/script/deploy-collab +++ b/script/deploy-collab @@ -19,5 +19,6 @@ export ZED_IMAGE_ID=${image_id} target_zed_kube_cluster envsubst < crates/collab/k8s/collab.template.yml | kubectl apply -f - +kubectl -n "$environment" rollout status deployment/collab --watch echo "deployed collab v${version} to ${environment}" From 1cc7f66f86987c55a6c5d3d13f5f363de44ab680 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 19 Jan 2024 14:01:09 -0500 Subject: [PATCH 16/17] Fix documentation labels obscuring other content in completion menu (#4167) This PF fixes an issue where the documentation labels in the completion menu could end up completing obscuring the primary content. #### Before Screenshot 2024-01-19 at 1 42 19 PM #### After Screenshot 2024-01-19 at 1 39 45 PM Since this involved changes to the `ListItem`, I also made sure to test the other problematic case that was fixed in #3845 to make sure we didn't regress there: Screenshot 2024-01-19 at 1 39 11 PM I also tried to capture these cases in the `ListItem` stories to make it easier to test all of them at once: Screenshot 2024-01-19 at 1 40 03 PM Release Notes: - Fixed an issue where documentation labels could obscure other content in the editor completion menu ([#2419](https://github.com/zed-industries/community/issues/2419)). --- crates/gpui/src/styled.rs | 21 +++++++++++++++ crates/ui/src/components/list/list_item.rs | 10 ++++--- crates/ui/src/components/stories/list_item.rs | 26 +++++++++++++++++++ 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/crates/gpui/src/styled.rs b/crates/gpui/src/styled.rs index 508dca958349a9cb52ad69df70c5c8f2b570ba88..535cc3e0536bdb1db084016765e1aeffb4b62efa 100644 --- a/crates/gpui/src/styled.rs +++ b/crates/gpui/src/styled.rs @@ -307,6 +307,13 @@ pub trait Styled: Sized { self } + /// Sets the initial size of flex items for this element. + /// [Docs](https://tailwindcss.com/docs/flex-basis) + fn flex_basis(mut self, basis: impl Into) -> Self { + self.style().flex_basis = Some(basis.into()); + self + } + /// Sets the element to allow a flex item to grow to fill any available space. /// [Docs](https://tailwindcss.com/docs/flex-grow) fn flex_grow(mut self) -> Self { @@ -314,6 +321,20 @@ pub trait Styled: Sized { self } + /// Sets the element to allow a flex item to shrink if needed. + /// [Docs](https://tailwindcss.com/docs/flex-shrink) + fn flex_shrink(mut self) -> Self { + self.style().flex_shrink = Some(1.); + self + } + + /// Sets the element to prevent a flex item from shrinking. + /// [Docs](https://tailwindcss.com/docs/flex-shrink#dont-shrink) + fn flex_shrink_0(mut self) -> Self { + self.style().flex_shrink = Some(0.); + self + } + /// Sets the element to align flex items to the start of the container's cross axis. /// [Docs](https://tailwindcss.com/docs/align-items#start) fn items_start(mut self) -> Self { diff --git a/crates/ui/src/components/list/list_item.rs b/crates/ui/src/components/list/list_item.rs index ed1edc0864c7f6ee7435779dd7daeff9f2d329f9..33676ee11d1c27c5f36ca1faeb02c2eb6cfa3cb1 100644 --- a/crates/ui/src/components/list/list_item.rs +++ b/crates/ui/src/components/list/list_item.rs @@ -222,17 +222,19 @@ impl RenderOnce for ListItem { })) .child( h_flex() - // HACK: We need to set *any* width value here in order for this container to size correctly. - // Without this the `h_flex` will overflow the parent `inner_list_item`. - .w_px() - .flex_1() + .flex_grow() + .flex_shrink_0() + .flex_basis(relative(0.25)) .gap_1() + .overflow_hidden() .children(self.start_slot) .children(self.children), ) .when_some(self.end_slot, |this, end_slot| { this.justify_between().child( h_flex() + .flex_shrink() + .overflow_hidden() .when(self.end_hover_slot.is_some(), |this| { this.visible() .group_hover("list_item", |this| this.invisible()) diff --git a/crates/ui/src/components/stories/list_item.rs b/crates/ui/src/components/stories/list_item.rs index f2af011db8e8554b07434e699b61c8492040ede8..ae7be9b9c74c6ce2084ae84615ae7468ec64dbe0 100644 --- a/crates/ui/src/components/stories/list_item.rs +++ b/crates/ui/src/components/stories/list_item.rs @@ -4,6 +4,8 @@ use story::Story; use crate::{prelude::*, Avatar}; use crate::{IconName, ListItem}; +const OVERFLOWING_TEXT: &'static str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean mauris ligula, luctus vel dignissim eu, vestibulum sed libero. Sed at convallis velit."; + pub struct ListItemStory; impl Render for ListItemStory { @@ -98,5 +100,29 @@ impl Render for ListItemStory { println!("Right mouse down!"); }), ) + .child(Story::label("With overflowing content in the `end_slot`")) + .child( + ListItem::new("with_overflowing_content_in_end_slot") + .child("An excerpt") + .end_slot(Label::new(OVERFLOWING_TEXT).color(Color::Muted)), + ) + .child(Story::label( + "`inset` with overflowing content in the `end_slot`", + )) + .child( + ListItem::new("inset_with_overflowing_content_in_end_slot") + .inset(true) + .child("An excerpt") + .end_slot(Label::new(OVERFLOWING_TEXT).color(Color::Muted)), + ) + .child(Story::label( + "`inset` with overflowing content in `children` and `end_slot`", + )) + .child( + ListItem::new("inset_with_overflowing_content_in_children_and_end_slot") + .inset(true) + .child(Label::new(OVERFLOWING_TEXT)) + .end_slot(Label::new(OVERFLOWING_TEXT).color(Color::Muted)), + ) } } From df2b0f6d2ea2f49eb631b303682314105c278df3 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Fri, 19 Jan 2024 14:22:53 -0500 Subject: [PATCH 17/17] Add more terminal colors to the theme (#4168) This PR adds more terminal colors that were present in the Zed1 themes to the Zed2 theme. Namely, we now have the `dim_` variants for the various ANSI colors and various `foreground` colors. Release Notes: - Improved terminal colors. --- crates/terminal/src/terminal.rs | 48 +- crates/terminal_view/src/terminal_element.rs | 62 +-- crates/theme/src/default_colors.rs | 38 +- crates/theme/src/one_themes.rs | 11 + crates/theme/src/styles/colors.rs | 73 ++- crates/theme/src/themes/andromeda.rs | 27 +- crates/theme/src/themes/atelier.rs | 540 +++++++++++++------ crates/theme/src/themes/ayu.rs | 81 ++- crates/theme/src/themes/gruvbox.rs | 162 ++++-- crates/theme/src/themes/one.rs | 54 +- crates/theme/src/themes/rose_pine.rs | 81 ++- crates/theme/src/themes/sandcastle.rs | 27 +- crates/theme/src/themes/solarized.rs | 54 +- crates/theme/src/themes/summercamp.rs | 27 +- crates/theme_importer/src/theme_printer.rs | 33 +- crates/theme_importer/src/zed1/converter.rs | 27 +- 16 files changed, 926 insertions(+), 419 deletions(-) diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index ede9dc1af0a9fef1134d485c5fae3f70475ed258..502706eb5b30bebe35507e1a9fddeb951d674c53 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -52,9 +52,9 @@ use std::{ use thiserror::Error; use gpui::{ - actions, black, px, red, AnyWindowHandle, AppContext, Bounds, ClipboardItem, EventEmitter, - Hsla, Keystroke, ModelContext, Modifiers, MouseButton, MouseDownEvent, MouseMoveEvent, - MouseUpEvent, Pixels, Point, Rgba, ScrollWheelEvent, Size, Task, TouchPhase, + actions, black, px, AnyWindowHandle, AppContext, Bounds, ClipboardItem, EventEmitter, Hsla, + Keystroke, ModelContext, Modifiers, MouseButton, MouseDownEvent, MouseMoveEvent, MouseUpEvent, + Pixels, Point, Rgba, ScrollWheelEvent, Size, Task, TouchPhase, }; use crate::mappings::{colors::to_alac_rgb, keys::to_esc_str}; @@ -1380,7 +1380,7 @@ pub fn get_color_at_index(index: usize, theme: &Theme) -> Hsla { let colors = theme.colors(); match index { - //0-15 are the same as the named colors above + // 0-15 are the same as the named colors above 0 => colors.terminal_ansi_black, 1 => colors.terminal_ansi_red, 2 => colors.terminal_ansi_green, @@ -1397,34 +1397,32 @@ pub fn get_color_at_index(index: usize, theme: &Theme) -> Hsla { 13 => colors.terminal_ansi_bright_magenta, 14 => colors.terminal_ansi_bright_cyan, 15 => colors.terminal_ansi_bright_white, - //16-231 are mapped to their RGB colors on a 0-5 range per channel + // 16-231 are mapped to their RGB colors on a 0-5 range per channel 16..=231 => { - let (r, g, b) = rgb_for_index(&(index as u8)); //Split the index into it's ANSI-RGB components - let step = (u8::MAX as f32 / 5.).floor() as u8; //Split the RGB range into 5 chunks, with floor so no overflow - rgba_color(r * step, g * step, b * step) //Map the ANSI-RGB components to an RGB color + let (r, g, b) = rgb_for_index(&(index as u8)); // Split the index into it's ANSI-RGB components + let step = (u8::MAX as f32 / 5.).floor() as u8; // Split the RGB range into 5 chunks, with floor so no overflow + rgba_color(r * step, g * step, b * step) // Map the ANSI-RGB components to an RGB color } - //232-255 are a 24 step grayscale from black to white + // 232-255 are a 24 step grayscale from black to white 232..=255 => { - let i = index as u8 - 232; //Align index to 0..24 - let step = (u8::MAX as f32 / 24.).floor() as u8; //Split the RGB grayscale values into 24 chunks - rgba_color(i * step, i * step, i * step) //Map the ANSI-grayscale components to the RGB-grayscale + let i = index as u8 - 232; // Align index to 0..24 + let step = (u8::MAX as f32 / 24.).floor() as u8; // Split the RGB grayscale values into 24 chunks + rgba_color(i * step, i * step, i * step) // Map the ANSI-grayscale components to the RGB-grayscale } - //For compatibility with the alacritty::Colors interface + // For compatibility with the alacritty::Colors interface 256 => colors.text, 257 => colors.background, 258 => theme.players().local().cursor, - - // todo!(more colors) - 259 => red(), //style.dim_black, - 260 => red(), //style.dim_red, - 261 => red(), //style.dim_green, - 262 => red(), //style.dim_yellow, - 263 => red(), //style.dim_blue, - 264 => red(), //style.dim_magenta, - 265 => red(), //style.dim_cyan, - 266 => red(), //style.dim_white, - 267 => red(), //style.bright_foreground, - 268 => colors.terminal_ansi_black, //'Dim Background', non-standard color + 259 => colors.terminal_ansi_dim_black, + 260 => colors.terminal_ansi_dim_red, + 261 => colors.terminal_ansi_dim_green, + 262 => colors.terminal_ansi_dim_yellow, + 263 => colors.terminal_ansi_dim_blue, + 264 => colors.terminal_ansi_dim_magenta, + 265 => colors.terminal_ansi_dim_cyan, + 266 => colors.terminal_ansi_dim_white, + 267 => colors.terminal_bright_foreground, + 268 => colors.terminal_ansi_black, // 'Dim Background', non-standard color _ => black(), } diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index 42428c04f8f026e916478589340da9a9e4208594..78235c3579624d510d47c64fd854ab46b82c8b96 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -1,12 +1,11 @@ use editor::{Cursor, HighlightedRange, HighlightedRangeLine}; use gpui::{ - div, fill, point, px, red, relative, AnyElement, AsyncWindowContext, AvailableSpace, - BorrowWindow, Bounds, DispatchPhase, Element, ElementId, FocusHandle, Font, FontStyle, - FontWeight, HighlightStyle, Hsla, InteractiveBounds, InteractiveElement, - InteractiveElementState, Interactivity, IntoElement, LayoutId, Model, ModelContext, - ModifiersChangedEvent, MouseButton, MouseMoveEvent, Pixels, PlatformInputHandler, Point, - ShapedLine, StatefulInteractiveElement, Styled, TextRun, TextStyle, TextSystem, UnderlineStyle, - WeakView, WhiteSpace, WindowContext, + div, fill, point, px, relative, AnyElement, AsyncWindowContext, AvailableSpace, BorrowWindow, + Bounds, DispatchPhase, Element, ElementId, FocusHandle, Font, FontStyle, FontWeight, + HighlightStyle, Hsla, InteractiveBounds, InteractiveElement, InteractiveElementState, + Interactivity, IntoElement, LayoutId, Model, ModelContext, ModifiersChangedEvent, MouseButton, + MouseMoveEvent, Pixels, PlatformInputHandler, Point, ShapedLine, StatefulInteractiveElement, + Styled, TextRun, TextStyle, TextSystem, UnderlineStyle, WeakView, WhiteSpace, WindowContext, }; use itertools::Itertools; use language::CursorShape; @@ -29,7 +28,7 @@ use workspace::Workspace; use std::mem; use std::{fmt::Debug, ops::RangeInclusive}; -///The information generated during layout that is necessary for painting +/// The information generated during layout that is necessary for painting. pub struct LayoutState { cells: Vec, rects: Vec, @@ -43,7 +42,7 @@ pub struct LayoutState { gutter: Pixels, } -///Helper struct for converting data between alacritty's cursor points, and displayed cursor points +/// Helper struct for converting data between Alacritty's cursor points, and displayed cursor points. struct DisplayCursor { line: i32, col: usize, @@ -139,8 +138,8 @@ impl LayoutRect { } } -///The GPUI element that paints the terminal. -///We need to keep a reference to the view for mouse events, do we need it for any other terminal stuff, or can we move that to connection? +/// The GPUI element that paints the terminal. +/// We need to keep a reference to the view for mouse events, do we need it for any other terminal stuff, or can we move that to connection? pub struct TerminalElement { terminal: Model, workspace: WeakView, @@ -278,8 +277,8 @@ impl TerminalElement { (cells, rects) } - // Compute the cursor position and expected block width, may return a zero width if x_for_index returns - // the same position for sequential indexes. Use em_width instead + /// Computes the cursor position and expected block width, may return a zero width if x_for_index returns + /// the same position for sequential indexes. Use em_width instead fn shape_cursor( cursor_point: DisplayCursor, size: TerminalSize, @@ -306,7 +305,7 @@ impl TerminalElement { } } - /// Convert the Alacritty cell styles to GPUI text styles and background color + /// Converts the Alacritty cell styles to GPUI text styles and background color. fn cell_style( indexed: &IndexedCell, fg: terminal::alacritty_terminal::ansi::Color, @@ -506,8 +505,8 @@ impl TerminalElement { cx, ); - //Layout cursor. Rectangle is used for IME, so we should lay it out even - //if we don't end up showing it. + // Layout cursor. Rectangle is used for IME, so we should lay it out even + // if we don't end up showing it. let cursor = if let AlacCursorShape::Hidden = cursor.shape { None } else { @@ -556,7 +555,6 @@ impl TerminalElement { ) }; - //Done! LayoutState { cells, cursor, @@ -991,11 +989,11 @@ fn to_highlighted_range_lines( Some((start_y, highlighted_range_lines)) } -///Converts a 2, 8, or 24 bit color ANSI color to the GPUI equivalent +/// Converts a 2, 8, or 24 bit color ANSI color to the GPUI equivalent. fn convert_color(fg: &terminal::alacritty_terminal::ansi::Color, theme: &Theme) -> Hsla { let colors = theme.colors(); match fg { - //Named and theme defined colors + // Named and theme defined colors terminal::alacritty_terminal::ansi::Color::Named(n) => match n { NamedColor::Black => colors.terminal_ansi_black, NamedColor::Red => colors.terminal_ansi_red, @@ -1016,24 +1014,22 @@ fn convert_color(fg: &terminal::alacritty_terminal::ansi::Color, theme: &Theme) NamedColor::Foreground => colors.text, NamedColor::Background => colors.background, NamedColor::Cursor => theme.players().local().cursor, - - // todo!(more colors) - NamedColor::DimBlack => red(), - NamedColor::DimRed => red(), - NamedColor::DimGreen => red(), - NamedColor::DimYellow => red(), - NamedColor::DimBlue => red(), - NamedColor::DimMagenta => red(), - NamedColor::DimCyan => red(), - NamedColor::DimWhite => red(), - NamedColor::BrightForeground => red(), - NamedColor::DimForeground => red(), + NamedColor::DimBlack => colors.terminal_ansi_dim_black, + NamedColor::DimRed => colors.terminal_ansi_dim_red, + NamedColor::DimGreen => colors.terminal_ansi_dim_green, + NamedColor::DimYellow => colors.terminal_ansi_dim_yellow, + NamedColor::DimBlue => colors.terminal_ansi_dim_blue, + NamedColor::DimMagenta => colors.terminal_ansi_dim_magenta, + NamedColor::DimCyan => colors.terminal_ansi_dim_cyan, + NamedColor::DimWhite => colors.terminal_ansi_dim_white, + NamedColor::BrightForeground => colors.terminal_bright_foreground, + NamedColor::DimForeground => colors.terminal_dim_foreground, }, - //'True' colors + // 'True' colors terminal::alacritty_terminal::ansi::Color::Spec(rgb) => { terminal::rgba_color(rgb.r, rgb.g, rgb.b) } - //8 bit, indexed colors + // 8 bit, indexed colors terminal::alacritty_terminal::ansi::Color::Indexed(i) => { terminal::get_color_at_index(*i as usize, theme) } diff --git a/crates/theme/src/default_colors.rs b/crates/theme/src/default_colors.rs index fb88afb7dacf79d947a170e26136b293d093542b..755ece62f98a28238b4d1da97d755e5effa716f2 100644 --- a/crates/theme/src/default_colors.rs +++ b/crates/theme/src/default_colors.rs @@ -77,6 +77,9 @@ impl ThemeColors { editor_document_highlight_read_background: neutral().light_alpha().step_3(), editor_document_highlight_write_background: neutral().light_alpha().step_4(), terminal_background: neutral().light().step_1(), + terminal_foreground: black().light().step_12(), + terminal_bright_foreground: black().light().step_11(), + terminal_dim_foreground: black().light().step_10(), terminal_ansi_bright_black: black().light().step_11(), terminal_ansi_bright_red: red().light().step_10(), terminal_ansi_bright_green: green().light().step_10(), @@ -93,6 +96,14 @@ impl ThemeColors { terminal_ansi_magenta: violet().light().step_11(), terminal_ansi_cyan: cyan().light().step_11(), terminal_ansi_white: neutral().light().step_12(), + terminal_ansi_dim_black: black().light().step_11(), + terminal_ansi_dim_red: red().light().step_10(), + terminal_ansi_dim_green: green().light().step_10(), + terminal_ansi_dim_yellow: yellow().light().step_10(), + terminal_ansi_dim_blue: blue().light().step_10(), + terminal_ansi_dim_magenta: violet().light().step_10(), + terminal_ansi_dim_cyan: cyan().light().step_10(), + terminal_ansi_dim_white: neutral().light().step_11(), link_text_hover: orange().light().step_10(), } } @@ -160,22 +171,33 @@ impl ThemeColors { editor_document_highlight_read_background: neutral().dark_alpha().step_4(), editor_document_highlight_write_background: neutral().dark_alpha().step_4(), terminal_background: neutral().dark().step_1(), - terminal_ansi_bright_black: black().dark().step_11(), - terminal_ansi_bright_red: red().dark().step_10(), - terminal_ansi_bright_green: green().dark().step_10(), - terminal_ansi_bright_yellow: yellow().dark().step_10(), - terminal_ansi_bright_blue: blue().dark().step_10(), - terminal_ansi_bright_magenta: violet().dark().step_10(), - terminal_ansi_bright_cyan: cyan().dark().step_10(), - terminal_ansi_bright_white: neutral().dark().step_11(), + terminal_foreground: white().dark().step_12(), + terminal_bright_foreground: white().dark().step_11(), + terminal_dim_foreground: white().dark().step_10(), terminal_ansi_black: black().dark().step_12(), + terminal_ansi_bright_black: black().dark().step_11(), + terminal_ansi_dim_black: black().dark().step_10(), terminal_ansi_red: red().dark().step_11(), + terminal_ansi_bright_red: red().dark().step_10(), + terminal_ansi_dim_red: red().dark().step_9(), terminal_ansi_green: green().dark().step_11(), + terminal_ansi_bright_green: green().dark().step_10(), + terminal_ansi_dim_green: green().dark().step_9(), terminal_ansi_yellow: yellow().dark().step_11(), + terminal_ansi_bright_yellow: yellow().dark().step_10(), + terminal_ansi_dim_yellow: yellow().dark().step_9(), terminal_ansi_blue: blue().dark().step_11(), + terminal_ansi_bright_blue: blue().dark().step_10(), + terminal_ansi_dim_blue: blue().dark().step_9(), terminal_ansi_magenta: violet().dark().step_11(), + terminal_ansi_bright_magenta: violet().dark().step_10(), + terminal_ansi_dim_magenta: violet().dark().step_9(), terminal_ansi_cyan: cyan().dark().step_11(), + terminal_ansi_bright_cyan: cyan().dark().step_10(), + terminal_ansi_dim_cyan: cyan().dark().step_9(), terminal_ansi_white: neutral().dark().step_12(), + terminal_ansi_bright_white: neutral().dark().step_11(), + terminal_ansi_dim_white: neutral().dark().step_10(), link_text_hover: orange().dark().step_10(), } } diff --git a/crates/theme/src/one_themes.rs b/crates/theme/src/one_themes.rs index fab3631d13ca890ca3ccb9fa2e06605534602abd..c461779bd1b7fd332537590f7dc0acde8e03338f 100644 --- a/crates/theme/src/one_themes.rs +++ b/crates/theme/src/one_themes.rs @@ -101,6 +101,9 @@ pub(crate) fn one_dark() -> Theme { terminal_background: bg, // todo!("Use one colors for terminal") + terminal_foreground: crate::white().dark().step_12(), + terminal_bright_foreground: crate::white().dark().step_11(), + terminal_dim_foreground: crate::white().dark().step_10(), terminal_ansi_black: crate::black().dark().step_12(), terminal_ansi_red: crate::red().dark().step_11(), terminal_ansi_green: crate::green().dark().step_11(), @@ -117,6 +120,14 @@ pub(crate) fn one_dark() -> Theme { terminal_ansi_bright_magenta: crate::violet().dark().step_10(), terminal_ansi_bright_cyan: crate::cyan().dark().step_10(), terminal_ansi_bright_white: crate::neutral().dark().step_11(), + terminal_ansi_dim_black: crate::black().dark().step_10(), + terminal_ansi_dim_red: crate::red().dark().step_9(), + terminal_ansi_dim_green: crate::green().dark().step_9(), + terminal_ansi_dim_yellow: crate::yellow().dark().step_9(), + terminal_ansi_dim_blue: crate::blue().dark().step_9(), + terminal_ansi_dim_magenta: crate::violet().dark().step_9(), + terminal_ansi_dim_cyan: crate::cyan().dark().step_9(), + terminal_ansi_dim_white: crate::neutral().dark().step_10(), panel_background: bg, panel_focused_border: blue, pane_focused_border: blue, diff --git a/crates/theme/src/styles/colors.rs b/crates/theme/src/styles/colors.rs index 51f3949897c2195ac5620886cf6b58dedebea9f2..a01e73f5ef3e47820c2aa58ae07db842584e3767 100644 --- a/crates/theme/src/styles/colors.rs +++ b/crates/theme/src/styles/colors.rs @@ -169,40 +169,63 @@ pub struct ThemeColors { // === // Terminal // === - /// Terminal Background Color + /// Terminal background color. pub terminal_background: Hsla, - /// Bright Black Color for ANSI Terminal - pub terminal_ansi_bright_black: Hsla, - /// Bright Red Color for ANSI Terminal - pub terminal_ansi_bright_red: Hsla, - /// Bright Green Color for ANSI Terminal - pub terminal_ansi_bright_green: Hsla, - /// Bright Yellow Color for ANSI Terminal - pub terminal_ansi_bright_yellow: Hsla, - /// Bright Blue Color for ANSI Terminal - pub terminal_ansi_bright_blue: Hsla, - /// Bright Magenta Color for ANSI Terminal - pub terminal_ansi_bright_magenta: Hsla, - /// Bright Cyan Color for ANSI Terminal - pub terminal_ansi_bright_cyan: Hsla, - /// Bright White Color for ANSI Terminal - pub terminal_ansi_bright_white: Hsla, - /// Black Color for ANSI Terminal + /// Terminal foreground color. + pub terminal_foreground: Hsla, + /// Bright terminal foreground color. + pub terminal_bright_foreground: Hsla, + /// Dim terminal foreground color. + pub terminal_dim_foreground: Hsla, + + /// Black ANSI terminal color. pub terminal_ansi_black: Hsla, - /// Red Color for ANSI Terminal + /// Bright black ANSI terminal color. + pub terminal_ansi_bright_black: Hsla, + /// Dim black ANSI terminal color. + pub terminal_ansi_dim_black: Hsla, + /// Red ANSI terminal color. pub terminal_ansi_red: Hsla, - /// Green Color for ANSI Terminal + /// Bright red ANSI terminal color. + pub terminal_ansi_bright_red: Hsla, + /// Dim red ANSI terminal color. + pub terminal_ansi_dim_red: Hsla, + /// Green ANSI terminal color. pub terminal_ansi_green: Hsla, - /// Yellow Color for ANSI Terminal + /// Bright green ANSI terminal color. + pub terminal_ansi_bright_green: Hsla, + /// Dim green ANSI terminal color. + pub terminal_ansi_dim_green: Hsla, + /// Yellow ANSI terminal color. pub terminal_ansi_yellow: Hsla, - /// Blue Color for ANSI Terminal + /// Bright yellow ANSI terminal color. + pub terminal_ansi_bright_yellow: Hsla, + /// Dim yellow ANSI terminal color. + pub terminal_ansi_dim_yellow: Hsla, + /// Blue ANSI terminal color. pub terminal_ansi_blue: Hsla, - /// Magenta Color for ANSI Terminal + /// Bright blue ANSI terminal color. + pub terminal_ansi_bright_blue: Hsla, + /// Dim blue ANSI terminal color. + pub terminal_ansi_dim_blue: Hsla, + /// Magenta ANSI terminal color. pub terminal_ansi_magenta: Hsla, - /// Cyan Color for ANSI Terminal + /// Bright magenta ANSI terminal color. + pub terminal_ansi_bright_magenta: Hsla, + /// Dim magenta ANSI terminal color. + pub terminal_ansi_dim_magenta: Hsla, + /// Cyan ANSI terminal color. pub terminal_ansi_cyan: Hsla, - /// White Color for ANSI Terminal + /// Bright cyan ANSI terminal color. + pub terminal_ansi_bright_cyan: Hsla, + /// Dim cyan ANSI terminal color. + pub terminal_ansi_dim_cyan: Hsla, + /// White ANSI terminal color. pub terminal_ansi_white: Hsla, + /// Bright white ANSI terminal color. + pub terminal_ansi_bright_white: Hsla, + /// Dim white ANSI terminal color. + pub terminal_ansi_dim_white: Hsla, // === // UI/Rich Text diff --git a/crates/theme/src/themes/andromeda.rs b/crates/theme/src/themes/andromeda.rs index 45dc66094518c5ab25fe2ad12e616213e4520994..184e27833d58fc5e203afb79fbb6a359a30b9c76 100644 --- a/crates/theme/src/themes/andromeda.rs +++ b/crates/theme/src/themes/andromeda.rs @@ -75,22 +75,33 @@ pub fn andromeda() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x11a7931a).into()), editor_document_highlight_write_background: Some(rgba(0x64646d66).into()), terminal_background: Some(rgba(0x1e2025ff).into()), - terminal_ansi_bright_black: Some(rgba(0x40434cff).into()), - terminal_ansi_bright_red: Some(rgba(0x8e103aff).into()), - terminal_ansi_bright_green: Some(rgba(0x457c38ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x958435ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x1b5148ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x682781ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x018169ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf7f7f8ff).into()), + terminal_foreground: Some(rgba(0xf7f7f8ff).into()), + terminal_bright_foreground: Some(rgba(0xf7f7f8ff).into()), + terminal_dim_foreground: Some(rgba(0x1e2025ff).into()), terminal_ansi_black: Some(rgba(0x1e2025ff).into()), + terminal_ansi_bright_black: Some(rgba(0x40434cff).into()), + terminal_ansi_dim_black: Some(rgba(0xf7f7f8ff).into()), terminal_ansi_red: Some(rgba(0xf82872ff).into()), + terminal_ansi_bright_red: Some(rgba(0x8e103aff).into()), + terminal_ansi_dim_red: Some(rgba(0xffa3b6ff).into()), terminal_ansi_green: Some(rgba(0x96df72ff).into()), + terminal_ansi_bright_green: Some(rgba(0x457c38ff).into()), + terminal_ansi_dim_green: Some(rgba(0xcef0b9ff).into()), terminal_ansi_yellow: Some(rgba(0xfee56dff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x958435ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xfff2b8ff).into()), terminal_ansi_blue: Some(rgba(0x11a793ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x1b5148ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x9cd4c8ff).into()), terminal_ansi_magenta: Some(rgba(0xc74decff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x682781ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe8abf7ff).into()), terminal_ansi_cyan: Some(rgba(0x09e7c6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x018169ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xaaf5e2ff).into()), terminal_ansi_white: Some(rgba(0xf7f7f8ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf7f7f8ff).into()), + terminal_ansi_dim_white: Some(rgba(0x88868dff).into()), link_text_hover: Some(rgba(0x11a793ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/atelier.rs b/crates/theme/src/themes/atelier.rs index e0682b217e0442a53d7c25e6ac8e1339fc55524b..300c16f94c84bdbb49bae0549b74574d98dd1d7d 100644 --- a/crates/theme/src/themes/atelier.rs +++ b/crates/theme/src/themes/atelier.rs @@ -76,22 +76,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x576dda1a).into()), editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), terminal_background: Some(rgba(0x19171cff).into()), - terminal_ansi_bright_black: Some(rgba(0x635d6bff).into()), - terminal_ansi_bright_red: Some(rgba(0x5c283cff).into()), - terminal_ansi_bright_green: Some(rgba(0x1f4747ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x2d376fff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x60255bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x26445eff).into()), - terminal_ansi_bright_white: Some(rgba(0xefecf4ff).into()), + terminal_foreground: Some(rgba(0xefecf4ff).into()), + terminal_bright_foreground: Some(rgba(0xefecf4ff).into()), + terminal_dim_foreground: Some(rgba(0x19171cff).into()), terminal_ansi_black: Some(rgba(0x19171cff).into()), + terminal_ansi_bright_black: Some(rgba(0x635d6bff).into()), + terminal_ansi_dim_black: Some(rgba(0xefecf4ff).into()), terminal_ansi_red: Some(rgba(0xbe4678ff).into()), + terminal_ansi_bright_red: Some(rgba(0x5c283cff).into()), + terminal_ansi_dim_red: Some(rgba(0xe3a4b9ff).into()), terminal_ansi_green: Some(rgba(0x2c9292ff).into()), + terminal_ansi_bright_green: Some(rgba(0x1f4747ff).into()), + terminal_ansi_dim_green: Some(rgba(0x9dc8c8ff).into()), terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd4b499ff).into()), terminal_ansi_blue: Some(rgba(0x576ddaff).into()), + terminal_ansi_bright_blue: Some(rgba(0x2d376fff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb3b3eeff).into()), terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x60255bff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe3a4dfff).into()), terminal_ansi_cyan: Some(rgba(0x3a8bc6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x26445eff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xa6c4e3ff).into()), terminal_ansi_white: Some(rgba(0xefecf4ff).into()), + terminal_ansi_bright_white: Some(rgba(0xefecf4ff).into()), + terminal_ansi_dim_white: Some(rgba(0x807b89ff).into()), link_text_hover: Some(rgba(0x576ddaff).into()), ..Default::default() }, @@ -541,22 +552,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x586dda1a).into()), editor_document_highlight_write_background: Some(rgba(0x726c7a66).into()), terminal_background: Some(rgba(0xefecf4ff).into()), - terminal_ansi_bright_black: Some(rgba(0x807b89ff).into()), - terminal_ansi_bright_red: Some(rgba(0xe3a4b9ff).into()), - terminal_ansi_bright_green: Some(rgba(0x9dc8c8ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb3b3eeff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe3a4dfff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa6c4e3ff).into()), - terminal_ansi_bright_white: Some(rgba(0x19171cff).into()), + terminal_foreground: Some(rgba(0x19171cff).into()), + terminal_bright_foreground: Some(rgba(0x19171cff).into()), + terminal_dim_foreground: Some(rgba(0xefecf4ff).into()), terminal_ansi_black: Some(rgba(0xefecf4ff).into()), + terminal_ansi_bright_black: Some(rgba(0x807b89ff).into()), + terminal_ansi_dim_black: Some(rgba(0x19171cff).into()), terminal_ansi_red: Some(rgba(0xbe4778ff).into()), + terminal_ansi_bright_red: Some(rgba(0xe3a4b9ff).into()), + terminal_ansi_dim_red: Some(rgba(0x5c283cff).into()), terminal_ansi_green: Some(rgba(0x2c9292ff).into()), + terminal_ansi_bright_green: Some(rgba(0x9dc8c8ff).into()), + terminal_ansi_dim_green: Some(rgba(0x1f4747ff).into()), terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x4e3821ff).into()), terminal_ansi_blue: Some(rgba(0x586ddaff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb3b3eeff).into()), + terminal_ansi_dim_blue: Some(rgba(0x2d376fff).into()), terminal_ansi_magenta: Some(rgba(0xbf41bfff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe3a4dfff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x60255bff).into()), terminal_ansi_cyan: Some(rgba(0x3b8bc6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa6c4e3ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x26445eff).into()), terminal_ansi_white: Some(rgba(0x19171cff).into()), + terminal_ansi_bright_white: Some(rgba(0x19171cff).into()), + terminal_ansi_dim_white: Some(rgba(0x635d6bff).into()), link_text_hover: Some(rgba(0x586ddaff).into()), ..Default::default() }, @@ -1006,22 +1028,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x6684e01a).into()), editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), terminal_background: Some(rgba(0x20201dff).into()), - terminal_ansi_bright_black: Some(rgba(0x7a7766ff).into()), - terminal_ansi_bright_red: Some(rgba(0x781c1fff).into()), - terminal_ansi_bright_green: Some(rgba(0x335322ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x574815ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x334173ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x721d2bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1e5341ff).into()), - terminal_ansi_bright_white: Some(rgba(0xfefbecff).into()), + terminal_foreground: Some(rgba(0xfefbecff).into()), + terminal_bright_foreground: Some(rgba(0xfefbecff).into()), + terminal_dim_foreground: Some(rgba(0x20201dff).into()), terminal_ansi_black: Some(rgba(0x20201dff).into()), + terminal_ansi_bright_black: Some(rgba(0x7a7766ff).into()), + terminal_ansi_dim_black: Some(rgba(0xfefbecff).into()), terminal_ansi_red: Some(rgba(0xd73837ff).into()), + terminal_ansi_bright_red: Some(rgba(0x781c1fff).into()), + terminal_ansi_dim_red: Some(rgba(0xf7a195ff).into()), terminal_ansi_green: Some(rgba(0x60ac3aff).into()), + terminal_ansi_bright_green: Some(rgba(0x335322ff).into()), + terminal_ansi_dim_green: Some(rgba(0xb3d69cff).into()), terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x574815ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xdcc98eff).into()), terminal_ansi_blue: Some(rgba(0x6684e0ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x334173ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb8c0f1ff).into()), terminal_ansi_magenta: Some(rgba(0xd43652ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x721d2bff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xf3a0a4ff).into()), terminal_ansi_cyan: Some(rgba(0x21ad83ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1e5341ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9ed7c0ff).into()), terminal_ansi_white: Some(rgba(0xfefbecff).into()), + terminal_ansi_bright_white: Some(rgba(0xfefbecff).into()), + terminal_ansi_dim_white: Some(rgba(0x9b9782ff).into()), link_text_hover: Some(rgba(0x6684e0ff).into()), ..Default::default() }, @@ -1471,22 +1504,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x6784e01a).into()), editor_document_highlight_write_background: Some(rgba(0x8b887466).into()), terminal_background: Some(rgba(0xfefbecff).into()), - terminal_ansi_bright_black: Some(rgba(0x9b9782ff).into()), - terminal_ansi_bright_red: Some(rgba(0xf7a195ff).into()), - terminal_ansi_bright_green: Some(rgba(0xb3d69cff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xdcc98eff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb8c0f1ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf3a0a4ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9ed7c0ff).into()), - terminal_ansi_bright_white: Some(rgba(0x20201dff).into()), + terminal_foreground: Some(rgba(0x20201dff).into()), + terminal_bright_foreground: Some(rgba(0x20201dff).into()), + terminal_dim_foreground: Some(rgba(0xfefbecff).into()), terminal_ansi_black: Some(rgba(0xfefbecff).into()), + terminal_ansi_bright_black: Some(rgba(0x9b9782ff).into()), + terminal_ansi_dim_black: Some(rgba(0x20201dff).into()), terminal_ansi_red: Some(rgba(0xd73838ff).into()), + terminal_ansi_bright_red: Some(rgba(0xf7a195ff).into()), + terminal_ansi_dim_red: Some(rgba(0x781c1fff).into()), terminal_ansi_green: Some(rgba(0x61ac3aff).into()), + terminal_ansi_bright_green: Some(rgba(0xb3d69cff).into()), + terminal_ansi_dim_green: Some(rgba(0x335322ff).into()), terminal_ansi_yellow: Some(rgba(0xae9515ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xdcc98eff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x574815ff).into()), terminal_ansi_blue: Some(rgba(0x6784e0ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb8c0f1ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x334173ff).into()), terminal_ansi_magenta: Some(rgba(0xd43753ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf3a0a4ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x721d2bff).into()), terminal_ansi_cyan: Some(rgba(0x22ad83ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9ed7c0ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1e5341ff).into()), terminal_ansi_white: Some(rgba(0x20201dff).into()), + terminal_ansi_bright_white: Some(rgba(0x20201dff).into()), + terminal_ansi_dim_white: Some(rgba(0x7a7766ff).into()), link_text_hover: Some(rgba(0x6784e0ff).into()), ..Default::default() }, @@ -1936,22 +1980,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x37a1661a).into()), editor_document_highlight_write_background: Some(rgba(0x7a786766).into()), terminal_background: Some(rgba(0x22221bff).into()), - terminal_ansi_bright_black: Some(rgba(0x6a6958ff).into()), - terminal_ansi_bright_red: Some(rgba(0x5c331fff).into()), - terminal_ansi_bright_green: Some(rgba(0x3f491aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x514a14ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x234e34ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x4c373eff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x314c27ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf4f3ecff).into()), + terminal_foreground: Some(rgba(0xf4f3ecff).into()), + terminal_bright_foreground: Some(rgba(0xf4f3ecff).into()), + terminal_dim_foreground: Some(rgba(0x22221bff).into()), terminal_ansi_black: Some(rgba(0x22221bff).into()), + terminal_ansi_bright_black: Some(rgba(0x6a6958ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf4f3ecff).into()), terminal_ansi_red: Some(rgba(0xba6237ff).into()), + terminal_ansi_bright_red: Some(rgba(0x5c331fff).into()), + terminal_ansi_dim_red: Some(rgba(0xe4af96ff).into()), terminal_ansi_green: Some(rgba(0x7d9727ff).into()), + terminal_ansi_bright_green: Some(rgba(0x3f491aff).into()), + terminal_ansi_dim_green: Some(rgba(0xc0ca93ff).into()), terminal_ansi_yellow: Some(rgba(0xa59810ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x514a14ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd7ca8dff).into()), terminal_ansi_blue: Some(rgba(0x37a166ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x234e34ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xa0d1b0ff).into()), terminal_ansi_magenta: Some(rgba(0x9d6c7cff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x4c373eff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xcfb4bcff).into()), terminal_ansi_cyan: Some(rgba(0x5b9d48ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x314c27ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xaecea1ff).into()), terminal_ansi_white: Some(rgba(0xf4f3ecff).into()), + terminal_ansi_bright_white: Some(rgba(0xf4f3ecff).into()), + terminal_ansi_dim_white: Some(rgba(0x898775ff).into()), link_text_hover: Some(rgba(0x37a166ff).into()), ..Default::default() }, @@ -2401,22 +2456,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x38a1661a).into()), editor_document_highlight_write_background: Some(rgba(0x7a786766).into()), terminal_background: Some(rgba(0xf4f3ecff).into()), - terminal_ansi_bright_black: Some(rgba(0x898775ff).into()), - terminal_ansi_bright_red: Some(rgba(0xe4af96ff).into()), - terminal_ansi_bright_green: Some(rgba(0xc0ca93ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd7ca8dff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa0d1b0ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcfb4bcff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xaecea1ff).into()), - terminal_ansi_bright_white: Some(rgba(0x22221bff).into()), + terminal_foreground: Some(rgba(0x22221bff).into()), + terminal_bright_foreground: Some(rgba(0x22221bff).into()), + terminal_dim_foreground: Some(rgba(0xf4f3ecff).into()), terminal_ansi_black: Some(rgba(0xf4f3ecff).into()), + terminal_ansi_bright_black: Some(rgba(0x898775ff).into()), + terminal_ansi_dim_black: Some(rgba(0x22221bff).into()), terminal_ansi_red: Some(rgba(0xba6337ff).into()), + terminal_ansi_bright_red: Some(rgba(0xe4af96ff).into()), + terminal_ansi_dim_red: Some(rgba(0x5c331fff).into()), terminal_ansi_green: Some(rgba(0x7d9728ff).into()), + terminal_ansi_bright_green: Some(rgba(0xc0ca93ff).into()), + terminal_ansi_dim_green: Some(rgba(0x3f491aff).into()), terminal_ansi_yellow: Some(rgba(0xa59810ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd7ca8dff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x514a14ff).into()), terminal_ansi_blue: Some(rgba(0x38a166ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa0d1b0ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x234e34ff).into()), terminal_ansi_magenta: Some(rgba(0x9d6c7cff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcfb4bcff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x4c373eff).into()), terminal_ansi_cyan: Some(rgba(0x5c9d49ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xaecea1ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x314c27ff).into()), terminal_ansi_white: Some(rgba(0x22221bff).into()), + terminal_ansi_bright_white: Some(rgba(0x22221bff).into()), + terminal_ansi_dim_white: Some(rgba(0x6a6958ff).into()), link_text_hover: Some(rgba(0x38a166ff).into()), ..Default::default() }, @@ -2866,22 +2932,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), terminal_background: Some(rgba(0x1b1918ff).into()), - terminal_ansi_bright_black: Some(rgba(0x746c69ff).into()), - terminal_ansi_bright_red: Some(rgba(0x8c1223ff).into()), - terminal_ansi_bright_green: Some(rgba(0x3e491aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x674115ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x213f78ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x662186ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x264958ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf1efeeff).into()), + terminal_foreground: Some(rgba(0xf1efeeff).into()), + terminal_bright_foreground: Some(rgba(0xf1efeeff).into()), + terminal_dim_foreground: Some(rgba(0x1b1918ff).into()), terminal_ansi_black: Some(rgba(0x1b1918ff).into()), + terminal_ansi_bright_black: Some(rgba(0x746c69ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf1efeeff).into()), terminal_ansi_red: Some(rgba(0xf22d40ff).into()), + terminal_ansi_bright_red: Some(rgba(0x8c1223ff).into()), + terminal_ansi_dim_red: Some(rgba(0xffa29aff).into()), terminal_ansi_green: Some(rgba(0x7b9727ff).into()), + terminal_ansi_bright_green: Some(rgba(0x3e491aff).into()), + terminal_ansi_dim_green: Some(rgba(0xbfca93ff).into()), terminal_ansi_yellow: Some(rgba(0xc38419ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x674115ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xe9c08eff).into()), terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x213f78ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xaebcf4ff).into()), terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x662186ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe7a6fbff).into()), terminal_ansi_cyan: Some(rgba(0x3e97b8ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x264958ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xa6cadbff).into()), terminal_ansi_white: Some(rgba(0xf1efeeff).into()), + terminal_ansi_bright_white: Some(rgba(0xf1efeeff).into()), + terminal_ansi_dim_white: Some(rgba(0x9e9693ff).into()), link_text_hover: Some(rgba(0x417ee6ff).into()), ..Default::default() }, @@ -3331,22 +3408,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x417ee61a).into()), editor_document_highlight_write_background: Some(rgba(0x89817e66).into()), terminal_background: Some(rgba(0xf1efeeff).into()), - terminal_ansi_bright_black: Some(rgba(0x9e9693ff).into()), - terminal_ansi_bright_red: Some(rgba(0xffa29aff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfca93ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe9c08eff).into()), - terminal_ansi_bright_blue: Some(rgba(0xaebcf4ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe7a6fbff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa6cadbff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b1918ff).into()), + terminal_foreground: Some(rgba(0x1b1918ff).into()), + terminal_bright_foreground: Some(rgba(0x1b1918ff).into()), + terminal_dim_foreground: Some(rgba(0xf1efeeff).into()), terminal_ansi_black: Some(rgba(0xf1efeeff).into()), + terminal_ansi_bright_black: Some(rgba(0x9e9693ff).into()), + terminal_ansi_dim_black: Some(rgba(0x1b1918ff).into()), terminal_ansi_red: Some(rgba(0xf22e41ff).into()), + terminal_ansi_bright_red: Some(rgba(0xffa29aff).into()), + terminal_ansi_dim_red: Some(rgba(0x8c1223ff).into()), terminal_ansi_green: Some(rgba(0x7b9728ff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfca93ff).into()), + terminal_ansi_dim_green: Some(rgba(0x3e491aff).into()), terminal_ansi_yellow: Some(rgba(0xc3841aff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe9c08eff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x674115ff).into()), terminal_ansi_blue: Some(rgba(0x417ee6ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xaebcf4ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x213f78ff).into()), terminal_ansi_magenta: Some(rgba(0xc340f2ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe7a6fbff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x662186ff).into()), terminal_ansi_cyan: Some(rgba(0x3f97b8ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa6cadbff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x264958ff).into()), terminal_ansi_white: Some(rgba(0x1b1918ff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b1918ff).into()), + terminal_ansi_dim_white: Some(rgba(0x746c69ff).into()), link_text_hover: Some(rgba(0x417ee6ff).into()), ..Default::default() }, @@ -3796,22 +3884,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), terminal_background: Some(rgba(0x1b181bff).into()), - terminal_ansi_bright_black: Some(rgba(0x756775ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6d221aff).into()), - terminal_ansi_bright_green: Some(rgba(0x474422ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x5e441fff).into()), - terminal_ansi_bright_blue: Some(rgba(0x26367eff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x6c1e67ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1a4848ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf7f3f7ff).into()), + terminal_foreground: Some(rgba(0xf7f3f7ff).into()), + terminal_bright_foreground: Some(rgba(0xf7f3f7ff).into()), + terminal_dim_foreground: Some(rgba(0x1b181bff).into()), terminal_ansi_black: Some(rgba(0x1b181bff).into()), + terminal_ansi_bright_black: Some(rgba(0x756775ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf7f3f7ff).into()), terminal_ansi_red: Some(rgba(0xca402cff).into()), + terminal_ansi_bright_red: Some(rgba(0x6d221aff).into()), + terminal_ansi_dim_red: Some(rgba(0xf0a28fff).into()), terminal_ansi_green: Some(rgba(0x918b3bff).into()), + terminal_ansi_bright_green: Some(rgba(0x474422ff).into()), + terminal_ansi_dim_green: Some(rgba(0xcac49aff).into()), terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x5e441fff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xe2c398ff).into()), terminal_ansi_blue: Some(rgba(0x526aebff).into()), + terminal_ansi_bright_blue: Some(rgba(0x26367eff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb4b2f7ff).into()), terminal_ansi_magenta: Some(rgba(0xcc34ccff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x6c1e67ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xeba2e6ff).into()), terminal_ansi_cyan: Some(rgba(0x189393ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1a4848ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9ac9c8ff).into()), terminal_ansi_white: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_dim_white: Some(rgba(0xa091a0ff).into()), link_text_hover: Some(rgba(0x526aebff).into()), ..Default::default() }, @@ -4261,22 +4360,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x526aeb1a).into()), editor_document_highlight_write_background: Some(rgba(0x8b7c8b66).into()), terminal_background: Some(rgba(0xf7f3f7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xa091a0ff).into()), - terminal_ansi_bright_red: Some(rgba(0xf0a28fff).into()), - terminal_ansi_bright_green: Some(rgba(0xcac49aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2c398ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb4b2f7ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xeba2e6ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9ac9c8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b181bff).into()), + terminal_foreground: Some(rgba(0x1b181bff).into()), + terminal_bright_foreground: Some(rgba(0x1b181bff).into()), + terminal_dim_foreground: Some(rgba(0xf7f3f7ff).into()), terminal_ansi_black: Some(rgba(0xf7f3f7ff).into()), + terminal_ansi_bright_black: Some(rgba(0xa091a0ff).into()), + terminal_ansi_dim_black: Some(rgba(0x1b181bff).into()), terminal_ansi_red: Some(rgba(0xca412cff).into()), + terminal_ansi_bright_red: Some(rgba(0xf0a28fff).into()), + terminal_ansi_dim_red: Some(rgba(0x6d221aff).into()), terminal_ansi_green: Some(rgba(0x918b3cff).into()), + terminal_ansi_bright_green: Some(rgba(0xcac49aff).into()), + terminal_ansi_dim_green: Some(rgba(0x474422ff).into()), terminal_ansi_yellow: Some(rgba(0xbb8a36ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2c398ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x5e441fff).into()), terminal_ansi_blue: Some(rgba(0x526aebff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb4b2f7ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x26367eff).into()), terminal_ansi_magenta: Some(rgba(0xcc35ccff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xeba2e6ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x6c1e67ff).into()), terminal_ansi_cyan: Some(rgba(0x199393ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9ac9c8ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1a4848ff).into()), terminal_ansi_white: Some(rgba(0x1b181bff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b181bff).into()), + terminal_ansi_dim_white: Some(rgba(0x756775ff).into()), link_text_hover: Some(rgba(0x526aebff).into()), ..Default::default() }, @@ -4726,22 +4836,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), terminal_background: Some(rgba(0x161b1dff).into()), - terminal_ansi_bright_black: Some(rgba(0x587989ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6f1c3aff).into()), - terminal_ansi_bright_green: Some(rgba(0x2e4522ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x454413ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x1e3f53ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5c1e6bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1f4638ff).into()), - terminal_ansi_bright_white: Some(rgba(0xebf8ffff).into()), + terminal_foreground: Some(rgba(0xebf8ffff).into()), + terminal_bright_foreground: Some(rgba(0xebf8ffff).into()), + terminal_dim_foreground: Some(rgba(0x161b1dff).into()), terminal_ansi_black: Some(rgba(0x161b1dff).into()), + terminal_ansi_bright_black: Some(rgba(0x587989ff).into()), + terminal_ansi_dim_black: Some(rgba(0xebf8ffff).into()), terminal_ansi_red: Some(rgba(0xd22e72ff).into()), + terminal_ansi_bright_red: Some(rgba(0x6f1c3aff).into()), + terminal_ansi_dim_red: Some(rgba(0xf09fb6ff).into()), terminal_ansi_green: Some(rgba(0x568c3bff).into()), + terminal_ansi_bright_green: Some(rgba(0x2e4522ff).into()), + terminal_ansi_dim_green: Some(rgba(0xabc59aff).into()), terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x454413ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xc8c38bff).into()), terminal_ansi_blue: Some(rgba(0x277fadff).into()), + terminal_ansi_bright_blue: Some(rgba(0x1e3f53ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x9ebdd6ff).into()), terminal_ansi_magenta: Some(rgba(0xb72ed2ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5c1e6bff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe09fe9ff).into()), terminal_ansi_cyan: Some(rgba(0x2e8f6fff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1f4638ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9bc7b5ff).into()), terminal_ansi_white: Some(rgba(0xebf8ffff).into()), + terminal_ansi_bright_white: Some(rgba(0xebf8ffff).into()), + terminal_ansi_dim_white: Some(rgba(0x7397aaff).into()), link_text_hover: Some(rgba(0x277fadff).into()), ..Default::default() }, @@ -5191,22 +5312,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x277fad1a).into()), editor_document_highlight_write_background: Some(rgba(0x66889a66).into()), terminal_background: Some(rgba(0xebf8ffff).into()), - terminal_ansi_bright_black: Some(rgba(0x7397aaff).into()), - terminal_ansi_bright_red: Some(rgba(0xf09fb6ff).into()), - terminal_ansi_bright_green: Some(rgba(0xabc59aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xc8c38bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x9ebdd6ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe09fe9ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9bc7b5ff).into()), - terminal_ansi_bright_white: Some(rgba(0x161b1dff).into()), + terminal_foreground: Some(rgba(0x161b1dff).into()), + terminal_bright_foreground: Some(rgba(0x161b1dff).into()), + terminal_dim_foreground: Some(rgba(0xebf8ffff).into()), terminal_ansi_black: Some(rgba(0xebf8ffff).into()), + terminal_ansi_bright_black: Some(rgba(0x7397aaff).into()), + terminal_ansi_dim_black: Some(rgba(0x161b1dff).into()), terminal_ansi_red: Some(rgba(0xd22f72ff).into()), + terminal_ansi_bright_red: Some(rgba(0xf09fb6ff).into()), + terminal_ansi_dim_red: Some(rgba(0x6f1c3aff).into()), terminal_ansi_green: Some(rgba(0x578c3cff).into()), + terminal_ansi_bright_green: Some(rgba(0xabc59aff).into()), + terminal_ansi_dim_green: Some(rgba(0x2e4522ff).into()), terminal_ansi_yellow: Some(rgba(0x8a8a11ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xc8c38bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x454413ff).into()), terminal_ansi_blue: Some(rgba(0x277fadff).into()), + terminal_ansi_bright_blue: Some(rgba(0x9ebdd6ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x1e3f53ff).into()), terminal_ansi_magenta: Some(rgba(0xb72fd2ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe09fe9ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x5c1e6bff).into()), terminal_ansi_cyan: Some(rgba(0x2f8f6fff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9bc7b5ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1f4638ff).into()), terminal_ansi_white: Some(rgba(0x161b1dff).into()), + terminal_ansi_bright_white: Some(rgba(0x161b1dff).into()), + terminal_ansi_dim_white: Some(rgba(0x587989ff).into()), link_text_hover: Some(rgba(0x277fadff).into()), ..Default::default() }, @@ -5656,22 +5788,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x7272ca1a).into()), editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), terminal_background: Some(rgba(0x1b1818ff).into()), - terminal_ansi_bright_black: Some(rgba(0x635b5bff).into()), - terminal_ansi_bright_red: Some(rgba(0x692727ff).into()), - terminal_ansi_bright_green: Some(rgba(0x2a4444ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x3b3960ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5b2c42ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x2e4257ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf4ececff).into()), + terminal_foreground: Some(rgba(0xf4ececff).into()), + terminal_bright_foreground: Some(rgba(0xf4ececff).into()), + terminal_dim_foreground: Some(rgba(0x1b1818ff).into()), terminal_ansi_black: Some(rgba(0x1b1818ff).into()), + terminal_ansi_bright_black: Some(rgba(0x635b5bff).into()), + terminal_ansi_dim_black: Some(rgba(0xf4ececff).into()), terminal_ansi_red: Some(rgba(0xca4949ff).into()), + terminal_ansi_bright_red: Some(rgba(0x692727ff).into()), + terminal_ansi_dim_red: Some(rgba(0xeda69fff).into()), terminal_ansi_green: Some(rgba(0x4b8b8bff).into()), + terminal_ansi_bright_green: Some(rgba(0x2a4444ff).into()), + terminal_ansi_dim_green: Some(rgba(0xa6c4c4ff).into()), terminal_ansi_yellow: Some(rgba(0xa06e3bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3821ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd4b499ff).into()), terminal_ansi_blue: Some(rgba(0x7272caff).into()), + terminal_ansi_bright_blue: Some(rgba(0x3b3960ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xbbb6e5ff).into()), terminal_ansi_magenta: Some(rgba(0xbd5187ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5b2c42ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe2a9c2ff).into()), terminal_ansi_cyan: Some(rgba(0x5485b6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x2e4257ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xacc0daff).into()), terminal_ansi_white: Some(rgba(0xf4ececff).into()), + terminal_ansi_bright_white: Some(rgba(0xf4ececff).into()), + terminal_ansi_dim_white: Some(rgba(0x807979ff).into()), link_text_hover: Some(rgba(0x7272caff).into()), ..Default::default() }, @@ -6121,22 +6264,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x7372ca1a).into()), editor_document_highlight_write_background: Some(rgba(0x726a6a66).into()), terminal_background: Some(rgba(0xf4ececff).into()), - terminal_ansi_bright_black: Some(rgba(0x807979ff).into()), - terminal_ansi_bright_red: Some(rgba(0xeda69fff).into()), - terminal_ansi_bright_green: Some(rgba(0xa6c4c4ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xbbb6e5ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xe2a9c2ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xacc0daff).into()), - terminal_ansi_bright_white: Some(rgba(0x1b1818ff).into()), + terminal_foreground: Some(rgba(0x1b1818ff).into()), + terminal_bright_foreground: Some(rgba(0x1b1818ff).into()), + terminal_dim_foreground: Some(rgba(0xf4ececff).into()), terminal_ansi_black: Some(rgba(0xf4ececff).into()), + terminal_ansi_bright_black: Some(rgba(0x807979ff).into()), + terminal_ansi_dim_black: Some(rgba(0x1b1818ff).into()), terminal_ansi_red: Some(rgba(0xca4a4aff).into()), + terminal_ansi_bright_red: Some(rgba(0xeda69fff).into()), + terminal_ansi_dim_red: Some(rgba(0x692727ff).into()), terminal_ansi_green: Some(rgba(0x4c8b8bff).into()), + terminal_ansi_bright_green: Some(rgba(0xa6c4c4ff).into()), + terminal_ansi_dim_green: Some(rgba(0x2a4444ff).into()), terminal_ansi_yellow: Some(rgba(0xa06e3cff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd4b499ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x4e3821ff).into()), terminal_ansi_blue: Some(rgba(0x7372caff).into()), + terminal_ansi_bright_blue: Some(rgba(0xbbb6e5ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x3b3960ff).into()), terminal_ansi_magenta: Some(rgba(0xbd5287ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xe2a9c2ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x5b2c42ff).into()), terminal_ansi_cyan: Some(rgba(0x5585b6ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xacc0daff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x2e4257ff).into()), terminal_ansi_white: Some(rgba(0x1b1818ff).into()), + terminal_ansi_bright_white: Some(rgba(0x1b1818ff).into()), + terminal_ansi_dim_white: Some(rgba(0x635b5bff).into()), link_text_hover: Some(rgba(0x7372caff).into()), ..Default::default() }, @@ -6586,22 +6740,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x478c901a).into()), editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), terminal_background: Some(rgba(0x171c19ff).into()), - terminal_ansi_bright_black: Some(rgba(0x5d6b62ff).into()), - terminal_ansi_bright_red: Some(rgba(0x563220ff).into()), - terminal_ansi_bright_green: Some(rgba(0x294a33ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x284546ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x423a36ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1d4b4dff).into()), - terminal_ansi_bright_white: Some(rgba(0xecf4eeff).into()), + terminal_foreground: Some(rgba(0xecf4eeff).into()), + terminal_bright_foreground: Some(rgba(0xecf4eeff).into()), + terminal_dim_foreground: Some(rgba(0x171c19ff).into()), terminal_ansi_black: Some(rgba(0x171c19ff).into()), + terminal_ansi_bright_black: Some(rgba(0x5d6b62ff).into()), + terminal_ansi_dim_black: Some(rgba(0xecf4eeff).into()), terminal_ansi_red: Some(rgba(0xb16139ff).into()), + terminal_ansi_bright_red: Some(rgba(0x563220ff).into()), + terminal_ansi_dim_red: Some(rgba(0xdeae97ff).into()), terminal_ansi_green: Some(rgba(0x489963ff).into()), + terminal_ansi_bright_green: Some(rgba(0x294a33ff).into()), + terminal_ansi_dim_green: Some(rgba(0xa5ccafff).into()), terminal_ansi_yellow: Some(rgba(0xa07e3bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd3bd9aff).into()), terminal_ansi_blue: Some(rgba(0x478c90ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x284546ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xa5c5c6ff).into()), terminal_ansi_magenta: Some(rgba(0x867469ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x423a36ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xc2b7b1ff).into()), terminal_ansi_cyan: Some(rgba(0x1e9aa0ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1d4b4dff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9dcdcfff).into()), terminal_ansi_white: Some(rgba(0xecf4eeff).into()), + terminal_ansi_bright_white: Some(rgba(0xecf4eeff).into()), + terminal_ansi_dim_white: Some(rgba(0x7b897fff).into()), link_text_hover: Some(rgba(0x478c90ff).into()), ..Default::default() }, @@ -7051,22 +7216,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x488c901a).into()), editor_document_highlight_write_background: Some(rgba(0x6c7a7166).into()), terminal_background: Some(rgba(0xecf4eeff).into()), - terminal_ansi_bright_black: Some(rgba(0x7b897fff).into()), - terminal_ansi_bright_red: Some(rgba(0xdeae97ff).into()), - terminal_ansi_bright_green: Some(rgba(0xa5ccafff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd3bd9aff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa5c5c6ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xc2b7b1ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9dcdcfff).into()), - terminal_ansi_bright_white: Some(rgba(0x171c19ff).into()), + terminal_foreground: Some(rgba(0x171c19ff).into()), + terminal_bright_foreground: Some(rgba(0x171c19ff).into()), + terminal_dim_foreground: Some(rgba(0xecf4eeff).into()), terminal_ansi_black: Some(rgba(0xecf4eeff).into()), + terminal_ansi_bright_black: Some(rgba(0x7b897fff).into()), + terminal_ansi_dim_black: Some(rgba(0x171c19ff).into()), terminal_ansi_red: Some(rgba(0xb1623aff).into()), + terminal_ansi_bright_red: Some(rgba(0xdeae97ff).into()), + terminal_ansi_dim_red: Some(rgba(0x563220ff).into()), terminal_ansi_green: Some(rgba(0x499963ff).into()), + terminal_ansi_bright_green: Some(rgba(0xa5ccafff).into()), + terminal_ansi_dim_green: Some(rgba(0x294a33ff).into()), terminal_ansi_yellow: Some(rgba(0xa07e3cff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd3bd9aff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x4e3f22ff).into()), terminal_ansi_blue: Some(rgba(0x488c90ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa5c5c6ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x284546ff).into()), terminal_ansi_magenta: Some(rgba(0x867469ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xc2b7b1ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x423a36ff).into()), terminal_ansi_cyan: Some(rgba(0x1f9aa0ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9dcdcfff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1d4b4dff).into()), terminal_ansi_white: Some(rgba(0x171c19ff).into()), + terminal_ansi_bright_white: Some(rgba(0x171c19ff).into()), + terminal_ansi_dim_white: Some(rgba(0x5d6b62ff).into()), link_text_hover: Some(rgba(0x488c90ff).into()), ..Default::default() }, @@ -7516,22 +7692,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x3e62f41a).into()), editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), terminal_background: Some(rgba(0x131513ff).into()), - terminal_ansi_bright_black: Some(rgba(0x667a66ff).into()), - terminal_ansi_bright_red: Some(rgba(0x840b21ff).into()), - terminal_ansi_bright_green: Some(rgba(0x204f1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4b4a17ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x193385ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x810e60ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x1d4a56ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf4fbf4ff).into()), + terminal_foreground: Some(rgba(0xf4fbf4ff).into()), + terminal_bright_foreground: Some(rgba(0xf4fbf4ff).into()), + terminal_dim_foreground: Some(rgba(0x131513ff).into()), terminal_ansi_black: Some(rgba(0x131513ff).into()), + terminal_ansi_bright_black: Some(rgba(0x667a66ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf4fbf4ff).into()), terminal_ansi_red: Some(rgba(0xe61c3cff).into()), + terminal_ansi_bright_red: Some(rgba(0x840b21ff).into()), + terminal_ansi_dim_red: Some(rgba(0xff9d98ff).into()), terminal_ansi_green: Some(rgba(0x2ba32aff).into()), + terminal_ansi_bright_green: Some(rgba(0x204f1bff).into()), + terminal_ansi_dim_green: Some(rgba(0xa0d294ff).into()), terminal_ansi_yellow: Some(rgba(0x98981cff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4b4a17ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd0ca90ff).into()), terminal_ansi_blue: Some(rgba(0x3e62f4ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x193385ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb1adfcff).into()), terminal_ansi_magenta: Some(rgba(0xe61cc3ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x810e60ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xf9a1e1ff).into()), terminal_ansi_cyan: Some(rgba(0x1c99b3ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x1d4a56ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9fccd9ff).into()), terminal_ansi_white: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_bright_white: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_dim_white: Some(rgba(0x829b82ff).into()), link_text_hover: Some(rgba(0x3e62f4ff).into()), ..Default::default() }, @@ -7981,22 +8168,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x3f62f41a).into()), editor_document_highlight_write_background: Some(rgba(0x748b7466).into()), terminal_background: Some(rgba(0xf4fbf4ff).into()), - terminal_ansi_bright_black: Some(rgba(0x829b82ff).into()), - terminal_ansi_bright_red: Some(rgba(0xff9d98ff).into()), - terminal_ansi_bright_green: Some(rgba(0xa0d294ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xd0ca90ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb1adfcff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf9a1e1ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fccd9ff).into()), - terminal_ansi_bright_white: Some(rgba(0x131513ff).into()), + terminal_foreground: Some(rgba(0x131513ff).into()), + terminal_bright_foreground: Some(rgba(0x131513ff).into()), + terminal_dim_foreground: Some(rgba(0xf4fbf4ff).into()), terminal_ansi_black: Some(rgba(0xf4fbf4ff).into()), + terminal_ansi_bright_black: Some(rgba(0x829b82ff).into()), + terminal_ansi_dim_black: Some(rgba(0x131513ff).into()), terminal_ansi_red: Some(rgba(0xe61c3dff).into()), + terminal_ansi_bright_red: Some(rgba(0xff9d98ff).into()), + terminal_ansi_dim_red: Some(rgba(0x840b21ff).into()), terminal_ansi_green: Some(rgba(0x2ba32bff).into()), + terminal_ansi_bright_green: Some(rgba(0xa0d294ff).into()), + terminal_ansi_dim_green: Some(rgba(0x204f1bff).into()), terminal_ansi_yellow: Some(rgba(0x98981dff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xd0ca90ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x4b4a17ff).into()), terminal_ansi_blue: Some(rgba(0x3f62f4ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb1adfcff).into()), + terminal_ansi_dim_blue: Some(rgba(0x193385ff).into()), terminal_ansi_magenta: Some(rgba(0xe61dc3ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf9a1e1ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x810e60ff).into()), terminal_ansi_cyan: Some(rgba(0x1d99b3ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fccd9ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1d4a56ff).into()), terminal_ansi_white: Some(rgba(0x131513ff).into()), + terminal_ansi_bright_white: Some(rgba(0x131513ff).into()), + terminal_ansi_dim_white: Some(rgba(0x667a66ff).into()), link_text_hover: Some(rgba(0x3f62f4ff).into()), ..Default::default() }, @@ -8446,22 +8644,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x3e8fd01a).into()), editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), terminal_background: Some(rgba(0x202746ff).into()), - terminal_ansi_bright_black: Some(rgba(0x697192ff).into()), - terminal_ansi_bright_red: Some(rgba(0x6d2616ff).into()), - terminal_ansi_bright_green: Some(rgba(0x534921ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x63441eff).into()), - terminal_ansi_bright_blue: Some(rgba(0x274664ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x4c333dff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x214e5fff).into()), - terminal_ansi_bright_white: Some(rgba(0xf5f7ffff).into()), + terminal_foreground: Some(rgba(0xf5f7ffff).into()), + terminal_bright_foreground: Some(rgba(0xf5f7ffff).into()), + terminal_dim_foreground: Some(rgba(0x202746ff).into()), terminal_ansi_black: Some(rgba(0x202746ff).into()), + terminal_ansi_bright_black: Some(rgba(0x697192ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf5f7ffff).into()), terminal_ansi_red: Some(rgba(0xc94923ff).into()), + terminal_ansi_bright_red: Some(rgba(0x6d2616ff).into()), + terminal_ansi_dim_red: Some(rgba(0xefa58cff).into()), terminal_ansi_green: Some(rgba(0xac973aff).into()), + terminal_ansi_bright_green: Some(rgba(0x534921ff).into()), + terminal_ansi_dim_green: Some(rgba(0xd9ca9bff).into()), terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x63441eff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xe5c497ff).into()), terminal_ansi_blue: Some(rgba(0x3e8fd0ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x274664ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xa9c6e8ff).into()), terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x4c333dff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xcfafbbff).into()), terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x214e5fff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xa4d0e4ff).into()), terminal_ansi_white: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_bright_white: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_dim_white: Some(rgba(0x8b91a7ff).into()), link_text_hover: Some(rgba(0x3e8fd0ff).into()), ..Default::default() }, @@ -8911,22 +9120,33 @@ pub fn atelier() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x3f8fd01a).into()), editor_document_highlight_write_background: Some(rgba(0x7a819c66).into()), terminal_background: Some(rgba(0xf5f7ffff).into()), - terminal_ansi_bright_black: Some(rgba(0x8b91a7ff).into()), - terminal_ansi_bright_red: Some(rgba(0xefa58cff).into()), - terminal_ansi_bright_green: Some(rgba(0xd9ca9bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe5c497ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa9c6e8ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcfafbbff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa4d0e4ff).into()), - terminal_ansi_bright_white: Some(rgba(0x202746ff).into()), + terminal_foreground: Some(rgba(0x202746ff).into()), + terminal_bright_foreground: Some(rgba(0x202746ff).into()), + terminal_dim_foreground: Some(rgba(0xf5f7ffff).into()), terminal_ansi_black: Some(rgba(0xf5f7ffff).into()), + terminal_ansi_bright_black: Some(rgba(0x8b91a7ff).into()), + terminal_ansi_dim_black: Some(rgba(0x202746ff).into()), terminal_ansi_red: Some(rgba(0xc94a23ff).into()), + terminal_ansi_bright_red: Some(rgba(0xefa58cff).into()), + terminal_ansi_dim_red: Some(rgba(0x6d2616ff).into()), terminal_ansi_green: Some(rgba(0xac973aff).into()), + terminal_ansi_bright_green: Some(rgba(0xd9ca9bff).into()), + terminal_ansi_dim_green: Some(rgba(0x534921ff).into()), terminal_ansi_yellow: Some(rgba(0xc08b31ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe5c497ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x63441eff).into()), terminal_ansi_blue: Some(rgba(0x3f8fd0ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa9c6e8ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x274664ff).into()), terminal_ansi_magenta: Some(rgba(0x9c637aff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcfafbbff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x4c333dff).into()), terminal_ansi_cyan: Some(rgba(0x25a2c9ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa4d0e4ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x214e5fff).into()), terminal_ansi_white: Some(rgba(0x202746ff).into()), + terminal_ansi_bright_white: Some(rgba(0x202746ff).into()), + terminal_ansi_dim_white: Some(rgba(0x697192ff).into()), link_text_hover: Some(rgba(0x3f8fd0ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/ayu.rs b/crates/theme/src/themes/ayu.rs index 9c9030b2f27928c5e9fb16a6e536de84036c4f8e..6bde2410ae94f90fc9709c2027db3330c3e186af 100644 --- a/crates/theme/src/themes/ayu.rs +++ b/crates/theme/src/themes/ayu.rs @@ -76,22 +76,33 @@ pub fn ayu() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x5ac2fe1a).into()), editor_document_highlight_write_background: Some(rgba(0x66676766).into()), terminal_background: Some(rgba(0x0d1017ff).into()), - terminal_ansi_bright_black: Some(rgba(0x545557ff).into()), - terminal_ansi_bright_red: Some(rgba(0x83363cff).into()), - terminal_ansi_bright_green: Some(rgba(0x567627ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x92592cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x28628cff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x205b78ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x4c806fff).into()), - terminal_ansi_bright_white: Some(rgba(0xbfbdb6ff).into()), + terminal_foreground: Some(rgba(0xbfbdb6ff).into()), + terminal_bright_foreground: Some(rgba(0xbfbdb6ff).into()), + terminal_dim_foreground: Some(rgba(0x0d1017ff).into()), terminal_ansi_black: Some(rgba(0x0d1017ff).into()), + terminal_ansi_bright_black: Some(rgba(0x545557ff).into()), + terminal_ansi_dim_black: Some(rgba(0xbfbdb6ff).into()), terminal_ansi_red: Some(rgba(0xef7178ff).into()), + terminal_ansi_bright_red: Some(rgba(0x83363cff).into()), + terminal_ansi_dim_red: Some(rgba(0xfebab9ff).into()), terminal_ansi_green: Some(rgba(0xaad84cff).into()), + terminal_ansi_bright_green: Some(rgba(0x567627ff).into()), + terminal_ansi_dim_green: Some(rgba(0xd8eca8ff).into()), terminal_ansi_yellow: Some(rgba(0xfeb454ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x92592cff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffd9aaff).into()), terminal_ansi_blue: Some(rgba(0x5ac2feff).into()), + terminal_ansi_bright_blue: Some(rgba(0x28628cff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb8e0ffff).into()), terminal_ansi_magenta: Some(rgba(0x3abae5ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x205b78ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xaddcf3ff).into()), terminal_ansi_cyan: Some(rgba(0x95e5cbff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x4c806fff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xccf3e5ff).into()), terminal_ansi_white: Some(rgba(0xbfbdb6ff).into()), + terminal_ansi_bright_white: Some(rgba(0xbfbdb6ff).into()), + terminal_ansi_dim_white: Some(rgba(0x787876ff).into()), link_text_hover: Some(rgba(0x5ac2feff).into()), ..Default::default() }, @@ -520,22 +531,33 @@ pub fn ayu() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x3b9ee51a).into()), editor_document_highlight_write_background: Some(rgba(0xacafb166).into()), terminal_background: Some(rgba(0xfcfcfcff).into()), - terminal_ansi_bright_black: Some(rgba(0xbcbec0ff).into()), - terminal_ansi_bright_red: Some(rgba(0xfebab6ff).into()), - terminal_ansi_bright_green: Some(rgba(0xc7d98fff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xffd6a4ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xaccef3ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xb2d9e9ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xace0cbff).into()), - terminal_ansi_bright_white: Some(rgba(0x5c6166ff).into()), + terminal_foreground: Some(rgba(0x5c6166ff).into()), + terminal_bright_foreground: Some(rgba(0x5c6166ff).into()), + terminal_dim_foreground: Some(rgba(0xfcfcfcff).into()), terminal_ansi_black: Some(rgba(0xfcfcfcff).into()), + terminal_ansi_bright_black: Some(rgba(0xbcbec0ff).into()), + terminal_ansi_dim_black: Some(rgba(0x5c6166ff).into()), terminal_ansi_red: Some(rgba(0xef7271ff).into()), + terminal_ansi_bright_red: Some(rgba(0xfebab6ff).into()), + terminal_ansi_dim_red: Some(rgba(0x833639ff).into()), terminal_ansi_green: Some(rgba(0x86b305ff).into()), + terminal_ansi_bright_green: Some(rgba(0xc7d98fff).into()), + terminal_ansi_dim_green: Some(rgba(0x445614ff).into()), terminal_ansi_yellow: Some(rgba(0xf1ae4aff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xffd6a4ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x8a5328ff).into()), terminal_ansi_blue: Some(rgba(0x3b9ee5ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xaccef3ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x214d76ff).into()), terminal_ansi_magenta: Some(rgba(0x56b4d3ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xb2d9e9ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x2f5669ff).into()), terminal_ansi_cyan: Some(rgba(0x4dbf99ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xace0cbff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x2a5f4aff).into()), terminal_ansi_white: Some(rgba(0x5c6166ff).into()), + terminal_ansi_bright_white: Some(rgba(0x5c6166ff).into()), + terminal_ansi_dim_white: Some(rgba(0x9c9fa2ff).into()), link_text_hover: Some(rgba(0x3b9ee5ff).into()), ..Default::default() }, @@ -964,22 +986,33 @@ pub fn ayu() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x73cffe1a).into()), editor_document_highlight_write_background: Some(rgba(0x787a7c66).into()), terminal_background: Some(rgba(0x242936ff).into()), - terminal_ansi_bright_black: Some(rgba(0x67696eff).into()), - terminal_ansi_bright_red: Some(rgba(0x83403dff).into()), - terminal_ansi_bright_green: Some(rgba(0x76993dff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x937238ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x346e8dff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x2b6c7bff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x4c806fff).into()), - terminal_ansi_bright_white: Some(rgba(0xcccac2ff).into()), + terminal_foreground: Some(rgba(0xcccac2ff).into()), + terminal_bright_foreground: Some(rgba(0xcccac2ff).into()), + terminal_dim_foreground: Some(rgba(0x242936ff).into()), terminal_ansi_black: Some(rgba(0x242936ff).into()), + terminal_ansi_bright_black: Some(rgba(0x67696eff).into()), + terminal_ansi_dim_black: Some(rgba(0xcccac2ff).into()), terminal_ansi_red: Some(rgba(0xf18779ff).into()), + terminal_ansi_bright_red: Some(rgba(0x83403dff).into()), + terminal_ansi_dim_red: Some(rgba(0xfec4baff).into()), terminal_ansi_green: Some(rgba(0xd5fe80ff).into()), + terminal_ansi_bright_green: Some(rgba(0x76993dff).into()), + terminal_ansi_dim_green: Some(rgba(0xecffc1ff).into()), terminal_ansi_yellow: Some(rgba(0xfed073ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x937238ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffe7b9ff).into()), terminal_ansi_blue: Some(rgba(0x73cffeff).into()), + terminal_ansi_bright_blue: Some(rgba(0x346e8dff).into()), + terminal_ansi_dim_blue: Some(rgba(0xc1e7ffff).into()), terminal_ansi_magenta: Some(rgba(0x5ccee5ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x2b6c7bff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xb7e7f2ff).into()), terminal_ansi_cyan: Some(rgba(0x95e5cbff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x4c806fff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xccf3e5ff).into()), terminal_ansi_white: Some(rgba(0xcccac2ff).into()), + terminal_ansi_bright_white: Some(rgba(0xcccac2ff).into()), + terminal_ansi_dim_white: Some(rgba(0x898a8aff).into()), link_text_hover: Some(rgba(0x73cffeff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/gruvbox.rs b/crates/theme/src/themes/gruvbox.rs index 34ccefee1172cb9aee9d85496f2fdce40ab4abd2..83cab3a89dafbce187daa5325cef09319310cde3 100644 --- a/crates/theme/src/themes/gruvbox.rs +++ b/crates/theme/src/themes/gruvbox.rs @@ -76,22 +76,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0x282828ff).into()), - terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), - terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), - terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), - terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_bright_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_dim_foreground: Some(rgba(0x282828ff).into()), terminal_ansi_black: Some(rgba(0x282828ff).into()), + terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), + terminal_ansi_dim_black: Some(rgba(0xfbf1c7ff).into()), terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), + terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), + terminal_ansi_dim_red: Some(rgba(0xffaa95ff).into()), terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), + terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), + terminal_ansi_dim_green: Some(rgba(0xe0dc98ff).into()), terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffdd9cff).into()), terminal_ansi_blue: Some(rgba(0x83a598ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), + terminal_ansi_dim_blue: Some(rgba(0xc0d2cbff).into()), terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xd3cbc0ff).into()), terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xc7dfbdff).into()), terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_dim_white: Some(rgba(0xb1a28aff).into()), link_text_hover: Some(rgba(0x83a598ff).into()), ..Default::default() }, @@ -527,22 +538,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0x1d2021ff).into()), - terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), - terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), - terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), - terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_bright_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_dim_foreground: Some(rgba(0x1d2021ff).into()), terminal_ansi_black: Some(rgba(0x1d2021ff).into()), + terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), + terminal_ansi_dim_black: Some(rgba(0xfbf1c7ff).into()), terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), + terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), + terminal_ansi_dim_red: Some(rgba(0xffaa95ff).into()), terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), + terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), + terminal_ansi_dim_green: Some(rgba(0xe0dc98ff).into()), terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffdd9cff).into()), terminal_ansi_blue: Some(rgba(0x83a598ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), + terminal_ansi_dim_blue: Some(rgba(0xc0d2cbff).into()), terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xd3cbc0ff).into()), terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xc7dfbdff).into()), terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_dim_white: Some(rgba(0xb1a28aff).into()), link_text_hover: Some(rgba(0x83a598ff).into()), ..Default::default() }, @@ -978,22 +1000,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x83a5981a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0x32302fff).into()), - terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), - terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), - terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), - terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), - terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_bright_foreground: Some(rgba(0xfbf1c7ff).into()), + terminal_dim_foreground: Some(rgba(0x32302fff).into()), terminal_ansi_black: Some(rgba(0x32302fff).into()), + terminal_ansi_bright_black: Some(rgba(0x73675eff).into()), + terminal_ansi_dim_black: Some(rgba(0xfbf1c7ff).into()), terminal_ansi_red: Some(rgba(0xfb4a35ff).into()), + terminal_ansi_bright_red: Some(rgba(0x93211eff).into()), + terminal_ansi_dim_red: Some(rgba(0xffaa95ff).into()), terminal_ansi_green: Some(rgba(0xb8bb27ff).into()), + terminal_ansi_bright_green: Some(rgba(0x615d1bff).into()), + terminal_ansi_dim_green: Some(rgba(0xe0dc98ff).into()), terminal_ansi_yellow: Some(rgba(0xf9bd30ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x91611cff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffdd9cff).into()), terminal_ansi_blue: Some(rgba(0x83a598ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x414f4aff).into()), + terminal_ansi_dim_blue: Some(rgba(0xc0d2cbff).into()), terminal_ansi_magenta: Some(rgba(0xa89984ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x514a41ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xd3cbc0ff).into()), terminal_ansi_cyan: Some(rgba(0x8ec07cff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x45603eff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xc7dfbdff).into()), terminal_ansi_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_dim_white: Some(rgba(0xb1a28aff).into()), link_text_hover: Some(rgba(0x83a598ff).into()), ..Default::default() }, @@ -1429,22 +1462,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0xfbf1c7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), - terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_foreground: Some(rgba(0x282828ff).into()), + terminal_bright_foreground: Some(rgba(0x282828ff).into()), + terminal_dim_foreground: Some(rgba(0xfbf1c7ff).into()), terminal_ansi_black: Some(rgba(0xfbf1c7ff).into()), + terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), + terminal_ansi_dim_black: Some(rgba(0x282828ff).into()), terminal_ansi_red: Some(rgba(0x9d0408ff).into()), + terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), + terminal_ansi_dim_red: Some(rgba(0x4f1207ff).into()), terminal_ansi_green: Some(rgba(0x797410ff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), + terminal_ansi_dim_green: Some(rgba(0x3e3a11ff).into()), terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x5c3b13ff).into()), terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), + terminal_ansi_dim_blue: Some(rgba(0x14343cff).into()), terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x3e3833ff).into()), terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x253e2eff).into()), terminal_ansi_white: Some(rgba(0x282828ff).into()), + terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_ansi_dim_white: Some(rgba(0x73675eff).into()), link_text_hover: Some(rgba(0x0b6678ff).into()), ..Default::default() }, @@ -1880,22 +1924,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0xf9f5d7ff).into()), - terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), - terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_foreground: Some(rgba(0x282828ff).into()), + terminal_bright_foreground: Some(rgba(0x282828ff).into()), + terminal_dim_foreground: Some(rgba(0xf9f5d7ff).into()), terminal_ansi_black: Some(rgba(0xf9f5d7ff).into()), + terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), + terminal_ansi_dim_black: Some(rgba(0x282828ff).into()), terminal_ansi_red: Some(rgba(0x9d0408ff).into()), + terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), + terminal_ansi_dim_red: Some(rgba(0x4f1207ff).into()), terminal_ansi_green: Some(rgba(0x797410ff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), + terminal_ansi_dim_green: Some(rgba(0x3e3a11ff).into()), terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x5c3b13ff).into()), terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), + terminal_ansi_dim_blue: Some(rgba(0x14343cff).into()), terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x3e3833ff).into()), terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x253e2eff).into()), terminal_ansi_white: Some(rgba(0x282828ff).into()), + terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_ansi_dim_white: Some(rgba(0x73675eff).into()), link_text_hover: Some(rgba(0x0b6678ff).into()), ..Default::default() }, @@ -2331,22 +2386,33 @@ pub fn gruvbox() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x0b66781a).into()), editor_document_highlight_write_background: Some(rgba(0x92847466).into()), terminal_background: Some(rgba(0xf2e5bcff).into()), - terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), - terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), - terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), - terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_foreground: Some(rgba(0x282828ff).into()), + terminal_bright_foreground: Some(rgba(0x282828ff).into()), + terminal_dim_foreground: Some(rgba(0xf2e5bcff).into()), terminal_ansi_black: Some(rgba(0xf2e5bcff).into()), + terminal_ansi_bright_black: Some(rgba(0xb1a28aff).into()), + terminal_ansi_dim_black: Some(rgba(0x282828ff).into()), terminal_ansi_red: Some(rgba(0x9d0408ff).into()), + terminal_ansi_bright_red: Some(rgba(0xdc8c7bff).into()), + terminal_ansi_dim_red: Some(rgba(0x4f1207ff).into()), terminal_ansi_green: Some(rgba(0x797410ff).into()), + terminal_ansi_bright_green: Some(rgba(0xbfb787ff).into()), + terminal_ansi_dim_green: Some(rgba(0x3e3a11ff).into()), terminal_ansi_yellow: Some(rgba(0xb57616ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe2b88bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x5c3b13ff).into()), terminal_ansi_blue: Some(rgba(0x0b6678ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x8fb0baff).into()), + terminal_ansi_dim_blue: Some(rgba(0x14343cff).into()), terminal_ansi_magenta: Some(rgba(0x7c6f64ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb5afff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x3e3833ff).into()), terminal_ansi_cyan: Some(rgba(0x437b59ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fbca8ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x253e2eff).into()), terminal_ansi_white: Some(rgba(0x282828ff).into()), + terminal_ansi_bright_white: Some(rgba(0x282828ff).into()), + terminal_ansi_dim_white: Some(rgba(0x73675eff).into()), link_text_hover: Some(rgba(0x0b6678ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/one.rs b/crates/theme/src/themes/one.rs index 5928939f7a5a51607f20cb7779ce35ad93a1278c..b2227b18a3729cd9ede63df8cc5e81c835bf2ce0 100644 --- a/crates/theme/src/themes/one.rs +++ b/crates/theme/src/themes/one.rs @@ -76,22 +76,33 @@ pub fn one() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x74ade81a).into()), editor_document_highlight_write_background: Some(rgba(0x555a6366).into()), terminal_background: Some(rgba(0x282c34ff).into()), - terminal_ansi_bright_black: Some(rgba(0x525661ff).into()), - terminal_ansi_bright_red: Some(rgba(0x673a3cff).into()), - terminal_ansi_bright_green: Some(rgba(0x4d6140ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x786441ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x385378ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x5e2b26ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x3a565bff).into()), - terminal_ansi_bright_white: Some(rgba(0xc8ccd4ff).into()), + terminal_foreground: Some(rgba(0xc8ccd4ff).into()), + terminal_bright_foreground: Some(rgba(0xc8ccd4ff).into()), + terminal_dim_foreground: Some(rgba(0x282c34ff).into()), terminal_ansi_black: Some(rgba(0x282c34ff).into()), + terminal_ansi_bright_black: Some(rgba(0x525661ff).into()), + terminal_ansi_dim_black: Some(rgba(0xc8ccd4ff).into()), terminal_ansi_red: Some(rgba(0xd07277ff).into()), + terminal_ansi_bright_red: Some(rgba(0x673a3cff).into()), + terminal_ansi_dim_red: Some(rgba(0xebb8b9ff).into()), terminal_ansi_green: Some(rgba(0xa1c181ff).into()), + terminal_ansi_bright_green: Some(rgba(0x4d6140ff).into()), + terminal_ansi_dim_green: Some(rgba(0xd1e0bfff).into()), terminal_ansi_yellow: Some(rgba(0xdec184ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x786441ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xf1dfc1ff).into()), terminal_ansi_blue: Some(rgba(0x74ade8ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x385378ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xbed5f4ff).into()), terminal_ansi_magenta: Some(rgba(0xbe5046ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x5e2b26ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xe6a79eff).into()), terminal_ansi_cyan: Some(rgba(0x6fb4c0ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x3a565bff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xb9d9dfff).into()), terminal_ansi_white: Some(rgba(0xc8ccd4ff).into()), + terminal_ansi_bright_white: Some(rgba(0xc8ccd4ff).into()), + terminal_ansi_dim_white: Some(rgba(0x575d65ff).into()), link_text_hover: Some(rgba(0x74ade8ff).into()), ..Default::default() }, @@ -527,22 +538,33 @@ pub fn one() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x5c79e21a).into()), editor_document_highlight_write_background: Some(rgba(0xa3a3a466).into()), terminal_background: Some(rgba(0xfafafaff).into()), - terminal_ansi_bright_black: Some(rgba(0xaaaaaaff).into()), - terminal_ansi_bright_red: Some(rgba(0xf0b0a4ff).into()), - terminal_ansi_bright_green: Some(rgba(0xb2cfa9ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xf1dfc1ff).into()), - terminal_ansi_bright_blue: Some(rgba(0xb5baf2ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xcea6d3ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0xa4bfdbff).into()), - terminal_ansi_bright_white: Some(rgba(0x383a41ff).into()), + terminal_foreground: Some(rgba(0x383a41ff).into()), + terminal_bright_foreground: Some(rgba(0x383a41ff).into()), + terminal_dim_foreground: Some(rgba(0xfafafaff).into()), terminal_ansi_black: Some(rgba(0xfafafaff).into()), + terminal_ansi_bright_black: Some(rgba(0xaaaaaaff).into()), + terminal_ansi_dim_black: Some(rgba(0x383a41ff).into()), terminal_ansi_red: Some(rgba(0xd36151ff).into()), + terminal_ansi_bright_red: Some(rgba(0xf0b0a4ff).into()), + terminal_ansi_dim_red: Some(rgba(0x6f312aff).into()), terminal_ansi_green: Some(rgba(0x669f59ff).into()), + terminal_ansi_bright_green: Some(rgba(0xb2cfa9ff).into()), + terminal_ansi_dim_green: Some(rgba(0x354d2eff).into()), terminal_ansi_yellow: Some(rgba(0xdec184ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xf1dfc1ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x786441ff).into()), terminal_ansi_blue: Some(rgba(0x5c79e2ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xb5baf2ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x2d3d75ff).into()), terminal_ansi_magenta: Some(rgba(0x994fa6ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xcea6d3ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x4b2a50ff).into()), terminal_ansi_cyan: Some(rgba(0x3b82b7ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0xa4bfdbff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x254058ff).into()), terminal_ansi_white: Some(rgba(0x383a41ff).into()), + terminal_ansi_bright_white: Some(rgba(0x383a41ff).into()), + terminal_ansi_dim_white: Some(rgba(0x98989bff).into()), link_text_hover: Some(rgba(0x5c79e2ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/rose_pine.rs b/crates/theme/src/themes/rose_pine.rs index f654e4d9953cb5418eb3838b3ce27b8691a92913..4f68d606478afc9c6c3be7333780183ff4c1946b 100644 --- a/crates/theme/src/themes/rose_pine.rs +++ b/crates/theme/src/themes/rose_pine.rs @@ -76,22 +76,33 @@ pub fn rose_pine() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x9cced71a).into()), editor_document_highlight_write_background: Some(rgba(0x28253c66).into()), terminal_background: Some(rgba(0x191724ff).into()), - terminal_ansi_bright_black: Some(rgba(0x403d55ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), - terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x4c3b47ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x203a46ff).into()), - terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), + terminal_foreground: Some(rgba(0xe0def4ff).into()), + terminal_bright_foreground: Some(rgba(0xe0def4ff).into()), + terminal_dim_foreground: Some(rgba(0x191724ff).into()), terminal_ansi_black: Some(rgba(0x191724ff).into()), + terminal_ansi_bright_black: Some(rgba(0x403d55ff).into()), + terminal_ansi_dim_black: Some(rgba(0xe0def4ff).into()), terminal_ansi_red: Some(rgba(0xea6f92ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), + terminal_ansi_dim_red: Some(rgba(0xfab9c7ff).into()), terminal_ansi_green: Some(rgba(0x5dc2a3ff).into()), + terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), + terminal_ansi_dim_green: Some(rgba(0xb3e1d1ff).into()), terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xfedfbbff).into()), terminal_ansi_blue: Some(rgba(0x9cced7ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xcfe7ebff).into()), terminal_ansi_magenta: Some(rgba(0x9d7691ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x4c3b47ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xceb9c7ff).into()), terminal_ansi_cyan: Some(rgba(0x32748fff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x203a46ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9cb7c6ff).into()), terminal_ansi_white: Some(rgba(0xe0def4ff).into()), + terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), + terminal_ansi_dim_white: Some(rgba(0x514e68ff).into()), link_text_hover: Some(rgba(0x9cced7ff).into()), ..Default::default() }, @@ -534,22 +545,33 @@ pub fn rose_pine() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x57949f1a).into()), editor_document_highlight_write_background: Some(rgba(0x9691a466).into()), terminal_background: Some(rgba(0xfaf4edff).into()), - terminal_ansi_bright_black: Some(rgba(0xb8b2baff).into()), - terminal_ansi_bright_red: Some(rgba(0xdcb0bbff).into()), - terminal_ansi_bright_green: Some(rgba(0xa5d5c5ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xfccd9bff).into()), - terminal_ansi_bright_blue: Some(rgba(0xacc9ceff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xbcb1bdff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x97b1c0ff).into()), - terminal_ansi_bright_white: Some(rgba(0x575279ff).into()), + terminal_foreground: Some(rgba(0x575279ff).into()), + terminal_bright_foreground: Some(rgba(0x575279ff).into()), + terminal_dim_foreground: Some(rgba(0xfaf4edff).into()), terminal_ansi_black: Some(rgba(0xfaf4edff).into()), + terminal_ansi_bright_black: Some(rgba(0xb8b2baff).into()), + terminal_ansi_dim_black: Some(rgba(0x575279ff).into()), terminal_ansi_red: Some(rgba(0xb4647aff).into()), + terminal_ansi_bright_red: Some(rgba(0xdcb0bbff).into()), + terminal_ansi_dim_red: Some(rgba(0x57333dff).into()), terminal_ansi_green: Some(rgba(0x3eaa8eff).into()), + terminal_ansi_bright_green: Some(rgba(0xa5d5c5ff).into()), + terminal_ansi_dim_green: Some(rgba(0x265245ff).into()), terminal_ansi_yellow: Some(rgba(0xe99d35ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xfccd9bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x854a1fff).into()), terminal_ansi_blue: Some(rgba(0x57949fff).into()), + terminal_ansi_bright_blue: Some(rgba(0xacc9ceff).into()), + terminal_ansi_dim_blue: Some(rgba(0x2f484dff).into()), terminal_ansi_magenta: Some(rgba(0x7c697fff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xbcb1bdff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x3e353fff).into()), terminal_ansi_cyan: Some(rgba(0x2a6983ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x97b1c0ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x1c3641ff).into()), terminal_ansi_white: Some(rgba(0x575279ff).into()), + terminal_ansi_bright_white: Some(rgba(0x575279ff).into()), + terminal_ansi_dim_white: Some(rgba(0x827e98ff).into()), link_text_hover: Some(rgba(0x57949fff).into()), ..Default::default() }, @@ -992,22 +1014,33 @@ pub fn rose_pine() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x9cced71a).into()), editor_document_highlight_write_background: Some(rgba(0x59557166).into()), terminal_background: Some(rgba(0x232136ff).into()), - terminal_ansi_bright_black: Some(rgba(0x3f3b58ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), - terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), - terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x51414eff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x264654ff).into()), - terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), + terminal_foreground: Some(rgba(0xe0def4ff).into()), + terminal_bright_foreground: Some(rgba(0xe0def4ff).into()), + terminal_dim_foreground: Some(rgba(0x232136ff).into()), terminal_ansi_black: Some(rgba(0x232136ff).into()), + terminal_ansi_bright_black: Some(rgba(0x3f3b58ff).into()), + terminal_ansi_dim_black: Some(rgba(0xe0def4ff).into()), terminal_ansi_red: Some(rgba(0xea6f92ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7e3647ff).into()), + terminal_ansi_dim_red: Some(rgba(0xfab9c7ff).into()), terminal_ansi_green: Some(rgba(0x5dc2a3ff).into()), + terminal_ansi_bright_green: Some(rgba(0x31614fff).into()), + terminal_ansi_dim_green: Some(rgba(0xb3e1d1ff).into()), terminal_ansi_yellow: Some(rgba(0xf5c177ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x8a653bff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xfedfbbff).into()), terminal_ansi_blue: Some(rgba(0x9cced7ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x566c70ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xcfe7ebff).into()), terminal_ansi_magenta: Some(rgba(0xa784a1ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x51414eff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xd3c0cfff).into()), terminal_ansi_cyan: Some(rgba(0x3f8fb0ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x264654ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xa5c6d7ff).into()), terminal_ansi_white: Some(rgba(0xe0def4ff).into()), + terminal_ansi_bright_white: Some(rgba(0xe0def4ff).into()), + terminal_ansi_dim_white: Some(rgba(0x75718eff).into()), link_text_hover: Some(rgba(0x9cced7ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/sandcastle.rs b/crates/theme/src/themes/sandcastle.rs index ccf49061014ccf4dbfe4c71393aa9d433e1f63f3..a672f702e13f4f1316c29d1dae32ee4c3f5c6edf 100644 --- a/crates/theme/src/themes/sandcastle.rs +++ b/crates/theme/src/themes/sandcastle.rs @@ -75,22 +75,33 @@ pub fn sandcastle() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x528b8b1a).into()), editor_document_highlight_write_background: Some(rgba(0x7c6f6466).into()), terminal_background: Some(rgba(0x282c34ff).into()), - terminal_ansi_bright_black: Some(rgba(0x5e5753ff).into()), - terminal_ansi_bright_red: Some(rgba(0x57333dff).into()), - terminal_ansi_bright_green: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x2c4444ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x523a18ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x414f4aff).into()), - terminal_ansi_bright_white: Some(rgba(0xfdf4c1ff).into()), + terminal_foreground: Some(rgba(0xfdf4c1ff).into()), + terminal_bright_foreground: Some(rgba(0xfdf4c1ff).into()), + terminal_dim_foreground: Some(rgba(0x282c34ff).into()), terminal_ansi_black: Some(rgba(0x282c34ff).into()), + terminal_ansi_bright_black: Some(rgba(0x5e5753ff).into()), + terminal_ansi_dim_black: Some(rgba(0xfdf4c1ff).into()), terminal_ansi_red: Some(rgba(0xb4637aff).into()), + terminal_ansi_bright_red: Some(rgba(0x57333dff).into()), + terminal_ansi_dim_red: Some(rgba(0xdcb0bbff).into()), terminal_ansi_green: Some(rgba(0x83a598ff).into()), + terminal_ansi_bright_green: Some(rgba(0x414f4aff).into()), + terminal_ansi_dim_green: Some(rgba(0xc0d2cbff).into()), terminal_ansi_yellow: Some(rgba(0xa07e3bff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x4e3f22ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xd3bd9aff).into()), terminal_ansi_blue: Some(rgba(0x528b8bff).into()), + terminal_ansi_bright_blue: Some(rgba(0x2c4444ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xa8c4c4ff).into()), terminal_ansi_magenta: Some(rgba(0xa87323ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x523a18ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xdab78eff).into()), terminal_ansi_cyan: Some(rgba(0x83a598ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x414f4aff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xc0d2cbff).into()), terminal_ansi_white: Some(rgba(0xfdf4c1ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfdf4c1ff).into()), + terminal_ansi_dim_white: Some(rgba(0x968777ff).into()), link_text_hover: Some(rgba(0x528b8bff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/solarized.rs b/crates/theme/src/themes/solarized.rs index b903d645396e78c9a2a3a1ebfe0c0f714b59e7d5..ddf6ae8e081faae5d43a2b6750cda2e7198f9293 100644 --- a/crates/theme/src/themes/solarized.rs +++ b/crates/theme/src/themes/solarized.rs @@ -76,22 +76,33 @@ pub fn solarized() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x288bd11a).into()), editor_document_highlight_write_background: Some(rgba(0x6d828866).into()), terminal_background: Some(rgba(0x002b36ff).into()), - terminal_ansi_bright_black: Some(rgba(0x5c7279ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7d181cff).into()), - terminal_ansi_bright_green: Some(rgba(0x434a11ff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x5d4310ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x214465ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x6f1f40ff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x204e4aff).into()), - terminal_ansi_bright_white: Some(rgba(0xfdf6e3ff).into()), + terminal_foreground: Some(rgba(0xfdf6e3ff).into()), + terminal_bright_foreground: Some(rgba(0xfdf6e3ff).into()), + terminal_dim_foreground: Some(rgba(0x002b36ff).into()), terminal_ansi_black: Some(rgba(0x002b36ff).into()), + terminal_ansi_bright_black: Some(rgba(0x5c7279ff).into()), + terminal_ansi_dim_black: Some(rgba(0xfdf6e3ff).into()), terminal_ansi_red: Some(rgba(0xdc3330ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7d181cff).into()), + terminal_ansi_dim_red: Some(rgba(0xfaa091ff).into()), terminal_ansi_green: Some(rgba(0x859904ff).into()), + terminal_ansi_bright_green: Some(rgba(0x434a11ff).into()), + terminal_ansi_dim_green: Some(rgba(0xc6cb8bff).into()), terminal_ansi_yellow: Some(rgba(0xb58903ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x5d4310ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xe1c28aff).into()), terminal_ansi_blue: Some(rgba(0x288bd1ff).into()), + terminal_ansi_bright_blue: Some(rgba(0x214465ff).into()), + terminal_ansi_dim_blue: Some(rgba(0xa5c3e9ff).into()), terminal_ansi_magenta: Some(rgba(0xd33782ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x6f1f40ff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xf0a2bfff).into()), terminal_ansi_cyan: Some(rgba(0x2ca198ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x204e4aff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x9fd0cbff).into()), terminal_ansi_white: Some(rgba(0xfdf6e3ff).into()), + terminal_ansi_bright_white: Some(rgba(0xfdf6e3ff).into()), + terminal_ansi_dim_white: Some(rgba(0x7b8e91ff).into()), link_text_hover: Some(rgba(0x288bd1ff).into()), ..Default::default() }, @@ -520,22 +531,33 @@ pub fn solarized() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x298bd11a).into()), editor_document_highlight_write_background: Some(rgba(0x6d828866).into()), terminal_background: Some(rgba(0xfdf6e3ff).into()), - terminal_ansi_bright_black: Some(rgba(0x7b8e91ff).into()), - terminal_ansi_bright_red: Some(rgba(0xfaa091ff).into()), - terminal_ansi_bright_green: Some(rgba(0xc6cb8bff).into()), - terminal_ansi_bright_yellow: Some(rgba(0xe1c28aff).into()), - terminal_ansi_bright_blue: Some(rgba(0xa5c3e9ff).into()), - terminal_ansi_bright_magenta: Some(rgba(0xf0a2bfff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x9fd0cbff).into()), - terminal_ansi_bright_white: Some(rgba(0x002b36ff).into()), + terminal_foreground: Some(rgba(0x002b36ff).into()), + terminal_bright_foreground: Some(rgba(0x002b36ff).into()), + terminal_dim_foreground: Some(rgba(0xfdf6e3ff).into()), terminal_ansi_black: Some(rgba(0xfdf6e3ff).into()), + terminal_ansi_bright_black: Some(rgba(0x7b8e91ff).into()), + terminal_ansi_dim_black: Some(rgba(0x002b36ff).into()), terminal_ansi_red: Some(rgba(0xdc3330ff).into()), + terminal_ansi_bright_red: Some(rgba(0xfaa091ff).into()), + terminal_ansi_dim_red: Some(rgba(0x7d181cff).into()), terminal_ansi_green: Some(rgba(0x859904ff).into()), + terminal_ansi_bright_green: Some(rgba(0xc6cb8bff).into()), + terminal_ansi_dim_green: Some(rgba(0x434a11ff).into()), terminal_ansi_yellow: Some(rgba(0xb58904ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0xe1c28aff).into()), + terminal_ansi_dim_yellow: Some(rgba(0x5d4310ff).into()), terminal_ansi_blue: Some(rgba(0x298bd1ff).into()), + terminal_ansi_bright_blue: Some(rgba(0xa5c3e9ff).into()), + terminal_ansi_dim_blue: Some(rgba(0x214465ff).into()), terminal_ansi_magenta: Some(rgba(0xd33882ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0xf0a2bfff).into()), + terminal_ansi_dim_magenta: Some(rgba(0x6f1f40ff).into()), terminal_ansi_cyan: Some(rgba(0x2ca198ff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x9fd0cbff).into()), + terminal_ansi_dim_cyan: Some(rgba(0x204e4aff).into()), terminal_ansi_white: Some(rgba(0x002b36ff).into()), + terminal_ansi_bright_white: Some(rgba(0x002b36ff).into()), + terminal_ansi_dim_white: Some(rgba(0x5c7279ff).into()), link_text_hover: Some(rgba(0x298bd1ff).into()), ..Default::default() }, diff --git a/crates/theme/src/themes/summercamp.rs b/crates/theme/src/themes/summercamp.rs index 0a580e6893578d846b475493897e294aafaf74eb..5f5a922b0b2cf47ed10570a5748c765c79a2631a 100644 --- a/crates/theme/src/themes/summercamp.rs +++ b/crates/theme/src/themes/summercamp.rs @@ -75,22 +75,33 @@ pub fn summercamp() -> UserThemeFamily { editor_document_highlight_read_background: Some(rgba(0x499bef1a).into()), editor_document_highlight_write_background: Some(rgba(0x49443366).into()), terminal_background: Some(rgba(0x1c1810ff).into()), - terminal_ansi_bright_black: Some(rgba(0x3b3627ff).into()), - terminal_ansi_bright_red: Some(rgba(0x7f2724ff).into()), - terminal_ansi_bright_green: Some(rgba(0x28842cff).into()), - terminal_ansi_bright_yellow: Some(rgba(0x8c9a10ff).into()), - terminal_ansi_bright_blue: Some(rgba(0x234b7fff).into()), - terminal_ansi_bright_magenta: Some(rgba(0x88487eff).into()), - terminal_ansi_bright_cyan: Some(rgba(0x298462ff).into()), - terminal_ansi_bright_white: Some(rgba(0xf8f5deff).into()), + terminal_foreground: Some(rgba(0xf8f5deff).into()), + terminal_bright_foreground: Some(rgba(0xf8f5deff).into()), + terminal_dim_foreground: Some(rgba(0x1c1810ff).into()), terminal_ansi_black: Some(rgba(0x1c1810ff).into()), + terminal_ansi_bright_black: Some(rgba(0x3b3627ff).into()), + terminal_ansi_dim_black: Some(rgba(0xf8f5deff).into()), terminal_ansi_red: Some(rgba(0xe35142ff).into()), + terminal_ansi_bright_red: Some(rgba(0x7f2724ff).into()), + terminal_ansi_dim_red: Some(rgba(0xfbab9cff).into()), terminal_ansi_green: Some(rgba(0x5dea5aff).into()), + terminal_ansi_bright_green: Some(rgba(0x28842cff).into()), + terminal_ansi_dim_green: Some(rgba(0xb9f7aeff).into()), terminal_ansi_yellow: Some(rgba(0xf1fe29ff).into()), + terminal_ansi_bright_yellow: Some(rgba(0x8c9a10ff).into()), + terminal_ansi_dim_yellow: Some(rgba(0xffffa2ff).into()), terminal_ansi_blue: Some(rgba(0x499befff).into()), + terminal_ansi_bright_blue: Some(rgba(0x234b7fff).into()), + terminal_ansi_dim_blue: Some(rgba(0xb1ccf8ff).into()), terminal_ansi_magenta: Some(rgba(0xf59be6ff).into()), + terminal_ansi_bright_magenta: Some(rgba(0x88487eff).into()), + terminal_ansi_dim_magenta: Some(rgba(0xfccef3ff).into()), terminal_ansi_cyan: Some(rgba(0x5beabcff).into()), + terminal_ansi_bright_cyan: Some(rgba(0x298462ff).into()), + terminal_ansi_dim_cyan: Some(rgba(0xb7f6ddff).into()), terminal_ansi_white: Some(rgba(0xf8f5deff).into()), + terminal_ansi_bright_white: Some(rgba(0xf8f5deff).into()), + terminal_ansi_dim_white: Some(rgba(0x57533fff).into()), link_text_hover: Some(rgba(0x499befff).into()), ..Default::default() }, diff --git a/crates/theme_importer/src/theme_printer.rs b/crates/theme_importer/src/theme_printer.rs index f708e4305edf71eb914bf445370758bf0d624e42..88a860034d6cd6c6bf3f124f7788cade0ed78953 100644 --- a/crates/theme_importer/src/theme_printer.rs +++ b/crates/theme_importer/src/theme_printer.rs @@ -244,43 +244,60 @@ impl<'a> Debug for ThemeColorsRefinementPrinter<'a> { self.0.editor_document_highlight_write_background, ), ("terminal_background", self.0.terminal_background), + ("terminal_foreground", self.0.terminal_foreground), + ( + "terminal_bright_foreground", + self.0.terminal_bright_foreground, + ), + ("terminal_dim_foreground", self.0.terminal_dim_foreground), + ("terminal_ansi_black", self.0.terminal_ansi_black), ( "terminal_ansi_bright_black", self.0.terminal_ansi_bright_black, ), + ("terminal_ansi_dim_black", self.0.terminal_ansi_dim_black), + ("terminal_ansi_red", self.0.terminal_ansi_red), ("terminal_ansi_bright_red", self.0.terminal_ansi_bright_red), + ("terminal_ansi_dim_red", self.0.terminal_ansi_dim_red), + ("terminal_ansi_green", self.0.terminal_ansi_green), ( "terminal_ansi_bright_green", self.0.terminal_ansi_bright_green, ), + ("terminal_ansi_dim_green", self.0.terminal_ansi_dim_green), + ("terminal_ansi_yellow", self.0.terminal_ansi_yellow), ( "terminal_ansi_bright_yellow", self.0.terminal_ansi_bright_yellow, ), + ("terminal_ansi_dim_yellow", self.0.terminal_ansi_dim_yellow), + ("terminal_ansi_blue", self.0.terminal_ansi_blue), ( "terminal_ansi_bright_blue", self.0.terminal_ansi_bright_blue, ), + ("terminal_ansi_dim_blue", self.0.terminal_ansi_dim_blue), + ("terminal_ansi_magenta", self.0.terminal_ansi_magenta), ( "terminal_ansi_bright_magenta", self.0.terminal_ansi_bright_magenta, ), + ( + "terminal_ansi_dim_magenta", + self.0.terminal_ansi_dim_magenta, + ), + ("terminal_ansi_cyan", self.0.terminal_ansi_cyan), ( "terminal_ansi_bright_cyan", self.0.terminal_ansi_bright_cyan, ), + ("terminal_ansi_dim_cyan", self.0.terminal_ansi_dim_cyan), + ("terminal_ansi_white", self.0.terminal_ansi_white), ( "terminal_ansi_bright_white", self.0.terminal_ansi_bright_white, ), - ("terminal_ansi_black", self.0.terminal_ansi_black), - ("terminal_ansi_red", self.0.terminal_ansi_red), - ("terminal_ansi_green", self.0.terminal_ansi_green), - ("terminal_ansi_yellow", self.0.terminal_ansi_yellow), - ("terminal_ansi_blue", self.0.terminal_ansi_blue), - ("terminal_ansi_magenta", self.0.terminal_ansi_magenta), - ("terminal_ansi_cyan", self.0.terminal_ansi_cyan), - ("terminal_ansi_white", self.0.terminal_ansi_white), + ("terminal_ansi_dim_white", self.0.terminal_ansi_dim_white), ("link_text_hover", self.0.link_text_hover), ]; diff --git a/crates/theme_importer/src/zed1/converter.rs b/crates/theme_importer/src/zed1/converter.rs index 2f640c799f99ddf21989890c2e7a37a2a332b791..3c5f2498404242505ea10a2da505e23ac06cb82a 100644 --- a/crates/theme_importer/src/zed1/converter.rs +++ b/crates/theme_importer/src/zed1/converter.rs @@ -250,22 +250,33 @@ impl Zed1ThemeConverter { editor.document_highlight_write_background, ), terminal_background: convert(terminal.background), - terminal_ansi_bright_black: convert(terminal.bright_black), - terminal_ansi_bright_red: convert(terminal.bright_red), - terminal_ansi_bright_green: convert(terminal.bright_green), - terminal_ansi_bright_yellow: convert(terminal.bright_yellow), - terminal_ansi_bright_blue: convert(terminal.bright_blue), - terminal_ansi_bright_magenta: convert(terminal.bright_magenta), - terminal_ansi_bright_cyan: convert(terminal.bright_cyan), - terminal_ansi_bright_white: convert(terminal.bright_white), + terminal_foreground: convert(terminal.foreground), + terminal_bright_foreground: convert(terminal.bright_foreground), + terminal_dim_foreground: convert(terminal.dim_foreground), terminal_ansi_black: convert(terminal.black), + terminal_ansi_bright_black: convert(terminal.bright_black), + terminal_ansi_dim_black: convert(terminal.dim_black), terminal_ansi_red: convert(terminal.red), + terminal_ansi_bright_red: convert(terminal.bright_red), + terminal_ansi_dim_red: convert(terminal.dim_red), terminal_ansi_green: convert(terminal.green), + terminal_ansi_bright_green: convert(terminal.bright_green), + terminal_ansi_dim_green: convert(terminal.dim_green), terminal_ansi_yellow: convert(terminal.yellow), + terminal_ansi_bright_yellow: convert(terminal.bright_yellow), + terminal_ansi_dim_yellow: convert(terminal.dim_yellow), terminal_ansi_blue: convert(terminal.blue), + terminal_ansi_bright_blue: convert(terminal.bright_blue), + terminal_ansi_dim_blue: convert(terminal.dim_blue), terminal_ansi_magenta: convert(terminal.magenta), + terminal_ansi_bright_magenta: convert(terminal.bright_magenta), + terminal_ansi_dim_magenta: convert(terminal.dim_magenta), terminal_ansi_cyan: convert(terminal.cyan), + terminal_ansi_bright_cyan: convert(terminal.bright_cyan), + terminal_ansi_dim_cyan: convert(terminal.dim_cyan), terminal_ansi_white: convert(terminal.white), + terminal_ansi_bright_white: convert(terminal.bright_white), + terminal_ansi_dim_white: convert(terminal.dim_white), link_text_hover: convert(highest.accent.default.foreground), }) }