Merge branch 'main' into command_palette2
This commit is contained in:
commit
a73265ace4
63 changed files with 9172 additions and 2344 deletions
|
@ -2,7 +2,7 @@ use schemars::JsonSchema;
|
|||
use serde::{Deserialize, Serialize};
|
||||
use settings::Setting;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[derive(Clone, Deserialize)]
|
||||
pub struct EditorSettings {
|
||||
pub cursor_blink: bool,
|
||||
pub hover_popover_enabled: bool,
|
||||
|
@ -11,6 +11,15 @@ pub struct EditorSettings {
|
|||
pub use_on_type_format: bool,
|
||||
pub scrollbar: Scrollbar,
|
||||
pub relative_line_numbers: bool,
|
||||
pub seed_search_query_from_cursor: SeedQuerySetting,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum SeedQuerySetting {
|
||||
Always,
|
||||
Selection,
|
||||
Never,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
||||
|
@ -38,6 +47,7 @@ pub struct EditorSettingsContent {
|
|||
pub use_on_type_format: Option<bool>,
|
||||
pub scrollbar: Option<ScrollbarContent>,
|
||||
pub relative_line_numbers: Option<bool>,
|
||||
pub seed_search_query_from_cursor: Option<SeedQuerySetting>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use crate::{
|
||||
display_map::ToDisplayPoint, link_go_to_definition::hide_link_definition,
|
||||
movement::surrounding_word, persistence::DB, scroll::ScrollAnchor, Anchor, Autoscroll, Editor,
|
||||
Event, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, NavigationData, ToPoint as _,
|
||||
editor_settings::SeedQuerySetting, link_go_to_definition::hide_link_definition,
|
||||
persistence::DB, scroll::ScrollAnchor, Anchor, Autoscroll, Editor, EditorSettings, Event,
|
||||
ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, NavigationData, ToPoint as _,
|
||||
};
|
||||
use anyhow::{Context, Result};
|
||||
use collections::HashSet;
|
||||
|
@ -13,8 +13,8 @@ use gpui::{
|
|||
ViewHandle, WeakViewHandle,
|
||||
};
|
||||
use language::{
|
||||
proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, OffsetRangeExt, Point,
|
||||
SelectionGoal,
|
||||
proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, CharKind, OffsetRangeExt,
|
||||
Point, SelectionGoal,
|
||||
};
|
||||
use project::{search::SearchQuery, FormatTrigger, Item as _, Project, ProjectPath};
|
||||
use rpc::proto::{self, update_view, PeerId};
|
||||
|
@ -937,24 +937,28 @@ impl SearchableItem for Editor {
|
|||
}
|
||||
|
||||
fn query_suggestion(&mut self, cx: &mut ViewContext<Self>) -> String {
|
||||
let display_map = self.snapshot(cx).display_snapshot;
|
||||
let setting = settings::get::<EditorSettings>(cx).seed_search_query_from_cursor;
|
||||
let snapshot = &self.snapshot(cx).buffer_snapshot;
|
||||
let selection = self.selections.newest::<usize>(cx);
|
||||
if selection.start == selection.end {
|
||||
let point = selection.start.to_display_point(&display_map);
|
||||
let range = surrounding_word(&display_map, point);
|
||||
let range = range.start.to_offset(&display_map, Bias::Left)
|
||||
..range.end.to_offset(&display_map, Bias::Right);
|
||||
let text: String = display_map.buffer_snapshot.text_for_range(range).collect();
|
||||
if text.trim().is_empty() {
|
||||
String::new()
|
||||
} else {
|
||||
text
|
||||
|
||||
match setting {
|
||||
SeedQuerySetting::Never => String::new(),
|
||||
SeedQuerySetting::Selection | SeedQuerySetting::Always if !selection.is_empty() => {
|
||||
snapshot
|
||||
.text_for_range(selection.start..selection.end)
|
||||
.collect()
|
||||
}
|
||||
SeedQuerySetting::Selection => String::new(),
|
||||
SeedQuerySetting::Always => {
|
||||
let (range, kind) = snapshot.surrounding_word(selection.start);
|
||||
if kind == Some(CharKind::Word) {
|
||||
let text: String = snapshot.text_for_range(range).collect();
|
||||
if !text.trim().is_empty() {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
String::new()
|
||||
}
|
||||
} else {
|
||||
display_map
|
||||
.buffer_snapshot
|
||||
.text_for_range(selection.start..selection.end)
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,15 @@ pub struct EditorSettings {
|
|||
pub use_on_type_format: bool,
|
||||
pub scrollbar: Scrollbar,
|
||||
pub relative_line_numbers: bool,
|
||||
pub seed_search_query_from_cursor: SeedQuerySetting,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum SeedQuerySetting {
|
||||
Always,
|
||||
Selection,
|
||||
Never,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
||||
|
@ -38,6 +47,7 @@ pub struct EditorSettingsContent {
|
|||
pub use_on_type_format: Option<bool>,
|
||||
pub scrollbar: Option<ScrollbarContent>,
|
||||
pub relative_line_numbers: Option<bool>,
|
||||
pub seed_search_query_from_cursor: Option<SeedQuerySetting>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use crate::{
|
||||
display_map::ToDisplayPoint, link_go_to_definition::hide_link_definition,
|
||||
editor_settings::SeedQuerySetting, link_go_to_definition::hide_link_definition,
|
||||
movement::surrounding_word, persistence::DB, scroll::ScrollAnchor, Anchor, Autoscroll, Editor,
|
||||
Event, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot, NavigationData, ToPoint as _,
|
||||
EditorSettings, Event, ExcerptId, ExcerptRange, MultiBuffer, MultiBufferSnapshot,
|
||||
NavigationData, ToPoint as _,
|
||||
};
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use collections::HashSet;
|
||||
|
@ -12,11 +13,12 @@ use gpui::{
|
|||
ViewContext, VisualContext, WeakView,
|
||||
};
|
||||
use language::{
|
||||
proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, OffsetRangeExt, Point,
|
||||
SelectionGoal,
|
||||
proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, CharKind, OffsetRangeExt,
|
||||
Point, SelectionGoal,
|
||||
};
|
||||
use project::{search::SearchQuery, FormatTrigger, Item as _, Project, ProjectPath};
|
||||
use rpc::proto::{self, update_view, PeerId};
|
||||
use settings::Settings;
|
||||
use smallvec::SmallVec;
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
|
@ -918,24 +920,28 @@ impl SearchableItem for Editor {
|
|||
}
|
||||
|
||||
fn query_suggestion(&mut self, cx: &mut ViewContext<Self>) -> String {
|
||||
let display_map = self.snapshot(cx).display_snapshot;
|
||||
let setting = EditorSettings::get_global(cx).seed_search_query_from_cursor;
|
||||
let snapshot = &self.snapshot(cx).buffer_snapshot;
|
||||
let selection = self.selections.newest::<usize>(cx);
|
||||
if selection.start == selection.end {
|
||||
let point = selection.start.to_display_point(&display_map);
|
||||
let range = surrounding_word(&display_map, point);
|
||||
let range = range.start.to_offset(&display_map, Bias::Left)
|
||||
..range.end.to_offset(&display_map, Bias::Right);
|
||||
let text: String = display_map.buffer_snapshot.text_for_range(range).collect();
|
||||
if text.trim().is_empty() {
|
||||
String::new()
|
||||
} else {
|
||||
text
|
||||
|
||||
match setting {
|
||||
SeedQuerySetting::Never => String::new(),
|
||||
SeedQuerySetting::Selection | SeedQuerySetting::Always if !selection.is_empty() => {
|
||||
snapshot
|
||||
.text_for_range(selection.start..selection.end)
|
||||
.collect()
|
||||
}
|
||||
SeedQuerySetting::Selection => String::new(),
|
||||
SeedQuerySetting::Always => {
|
||||
let (range, kind) = snapshot.surrounding_word(selection.start);
|
||||
if kind == Some(CharKind::Word) {
|
||||
let text: String = snapshot.text_for_range(range).collect();
|
||||
if !text.trim().is_empty() {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
String::new()
|
||||
}
|
||||
} else {
|
||||
display_map
|
||||
.buffer_snapshot
|
||||
.text_for_range(selection.start..selection.end)
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,12 +39,6 @@ pub struct GoToLine {
|
|||
_subscriptions: Vec<Subscription>,
|
||||
}
|
||||
|
||||
pub enum Event {
|
||||
Dismissed,
|
||||
}
|
||||
|
||||
impl EventEmitter<Event> for GoToLine {}
|
||||
|
||||
impl EventEmitter<ModalEvent> for GoToLine {}
|
||||
impl Modal for GoToLine {
|
||||
fn focus(&self, cx: &mut WindowContext) {
|
||||
|
@ -81,7 +75,6 @@ impl GoToLine {
|
|||
fn release(&mut self, cx: &mut WindowContext) {
|
||||
let scroll_position = self.prev_scroll_position.take();
|
||||
self.active_editor.update(cx, |editor, cx| {
|
||||
editor.focus(cx);
|
||||
editor.highlight_rows(None);
|
||||
if let Some(scroll_position) = scroll_position {
|
||||
editor.set_scroll_position(scroll_position, cx);
|
||||
|
@ -98,7 +91,7 @@ impl GoToLine {
|
|||
) {
|
||||
match event {
|
||||
// todo!() this isn't working...
|
||||
editor::Event::Blurred => cx.emit(Event::Dismissed),
|
||||
editor::Event::Blurred => cx.emit(ModalEvent::Dismissed),
|
||||
editor::Event::BufferEdited { .. } => self.highlight_current_line(cx),
|
||||
_ => {}
|
||||
}
|
||||
|
@ -133,22 +126,28 @@ impl GoToLine {
|
|||
}
|
||||
|
||||
fn cancel(&mut self, _: &menu::Cancel, cx: &mut ViewContext<Self>) {
|
||||
cx.emit(Event::Dismissed);
|
||||
self.active_editor.update(cx, |editor, cx| {
|
||||
editor.focus(cx);
|
||||
cx.notify();
|
||||
});
|
||||
cx.emit(ModalEvent::Dismissed);
|
||||
}
|
||||
|
||||
fn confirm(&mut self, _: &menu::Confirm, cx: &mut ViewContext<Self>) {
|
||||
if let Some(point) = self.point_from_query(cx) {
|
||||
self.active_editor.update(cx, |active_editor, cx| {
|
||||
let snapshot = active_editor.snapshot(cx).display_snapshot;
|
||||
self.active_editor.update(cx, |editor, cx| {
|
||||
let snapshot = editor.snapshot(cx).display_snapshot;
|
||||
let point = snapshot.buffer_snapshot.clip_point(point, Bias::Left);
|
||||
active_editor.change_selections(Some(Autoscroll::center()), cx, |s| {
|
||||
editor.change_selections(Some(Autoscroll::center()), cx, |s| {
|
||||
s.select_ranges([point..point])
|
||||
});
|
||||
editor.focus(cx);
|
||||
cx.notify();
|
||||
});
|
||||
self.prev_scroll_position.take();
|
||||
}
|
||||
|
||||
cx.emit(Event::Dismissed);
|
||||
cx.emit(ModalEvent::Dismissed);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ impl ToJson for RectF {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct Point<T: Clone + Default + Debug> {
|
||||
pub x: T,
|
||||
pub y: T,
|
||||
|
@ -161,7 +161,7 @@ impl<T: Clone + Default + Debug> Into<taffy::geometry::Point<T>> for Point<T> {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct Size<T: Clone + Default + Debug> {
|
||||
pub width: T,
|
||||
pub height: T,
|
||||
|
@ -227,7 +227,7 @@ impl Size<Length> {
|
|||
}
|
||||
|
||||
#[derive(Clone, Default, Refineable, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct Edges<T: Clone + Default + Debug> {
|
||||
pub top: T,
|
||||
pub right: T,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#![allow(dead_code)]
|
||||
|
||||
use anyhow::bail;
|
||||
use serde::de::{self, Deserialize, Deserializer, Visitor};
|
||||
use std::fmt;
|
||||
use std::num::ParseIntError;
|
||||
|
||||
pub fn rgb<C: From<Rgba>>(hex: u32) -> C {
|
||||
let r = ((hex >> 16) & 0xFF) as f32 / 255.0;
|
||||
|
@ -19,7 +19,7 @@ pub fn rgba(hex: u32) -> Rgba {
|
|||
Rgba { r, g, b, a }
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Default)]
|
||||
#[derive(PartialEq, Clone, Copy, Default)]
|
||||
pub struct Rgba {
|
||||
pub r: f32,
|
||||
pub g: f32,
|
||||
|
@ -70,21 +70,7 @@ impl<'de> Visitor<'de> for RgbaVisitor {
|
|||
}
|
||||
|
||||
fn visit_str<E: de::Error>(self, value: &str) -> Result<Rgba, E> {
|
||||
if value.len() == 7 || value.len() == 9 {
|
||||
let r = u8::from_str_radix(&value[1..3], 16).unwrap() as f32 / 255.0;
|
||||
let g = u8::from_str_radix(&value[3..5], 16).unwrap() as f32 / 255.0;
|
||||
let b = u8::from_str_radix(&value[5..7], 16).unwrap() as f32 / 255.0;
|
||||
let a = if value.len() == 9 {
|
||||
u8::from_str_radix(&value[7..9], 16).unwrap() as f32 / 255.0
|
||||
} else {
|
||||
1.0
|
||||
};
|
||||
Ok(Rgba { r, g, b, a })
|
||||
} else {
|
||||
Err(E::custom(
|
||||
"Bad format for RGBA. Expected #rrggbb or #rrggbbaa.",
|
||||
))
|
||||
}
|
||||
Rgba::try_from(value).map_err(E::custom)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,19 +111,59 @@ impl From<Hsla> for Rgba {
|
|||
}
|
||||
|
||||
impl TryFrom<&'_ str> for Rgba {
|
||||
type Error = ParseIntError;
|
||||
type Error = anyhow::Error;
|
||||
|
||||
fn try_from(value: &'_ str) -> Result<Self, Self::Error> {
|
||||
let r = u8::from_str_radix(&value[1..3], 16)? as f32 / 255.0;
|
||||
let g = u8::from_str_radix(&value[3..5], 16)? as f32 / 255.0;
|
||||
let b = u8::from_str_radix(&value[5..7], 16)? as f32 / 255.0;
|
||||
let a = if value.len() > 7 {
|
||||
u8::from_str_radix(&value[7..9], 16)? as f32 / 255.0
|
||||
} else {
|
||||
1.0
|
||||
const RGB: usize = "rgb".len();
|
||||
const RGBA: usize = "rgba".len();
|
||||
const RRGGBB: usize = "rrggbb".len();
|
||||
const RRGGBBAA: usize = "rrggbbaa".len();
|
||||
|
||||
const EXPECTED_FORMATS: &'static str = "Expected #rgb, #rgba, #rrggbb, or #rrggbbaa";
|
||||
|
||||
let Some(("", hex)) = value.trim().split_once('#') else {
|
||||
bail!("invalid RGBA hex color: '{value}'. {EXPECTED_FORMATS}");
|
||||
};
|
||||
|
||||
Ok(Rgba { r, g, b, a })
|
||||
let (r, g, b, a) = match hex.len() {
|
||||
RGB | RGBA => {
|
||||
let r = u8::from_str_radix(&hex[0..1], 16)?;
|
||||
let g = u8::from_str_radix(&hex[1..2], 16)?;
|
||||
let b = u8::from_str_radix(&hex[2..3], 16)?;
|
||||
let a = if hex.len() == RGBA {
|
||||
u8::from_str_radix(&hex[3..4], 16)?
|
||||
} else {
|
||||
0xf
|
||||
};
|
||||
|
||||
/// Duplicates a given hex digit.
|
||||
/// E.g., `0xf` -> `0xff`.
|
||||
const fn duplicate(value: u8) -> u8 {
|
||||
value << 4 | value
|
||||
}
|
||||
|
||||
(duplicate(r), duplicate(g), duplicate(b), duplicate(a))
|
||||
}
|
||||
RRGGBB | RRGGBBAA => {
|
||||
let r = u8::from_str_radix(&hex[0..2], 16)?;
|
||||
let g = u8::from_str_radix(&hex[2..4], 16)?;
|
||||
let b = u8::from_str_radix(&hex[4..6], 16)?;
|
||||
let a = if hex.len() == RRGGBBAA {
|
||||
u8::from_str_radix(&hex[6..8], 16)?
|
||||
} else {
|
||||
0xff
|
||||
};
|
||||
(r, g, b, a)
|
||||
}
|
||||
_ => bail!("invalid RGBA hex color: '{value}'. {EXPECTED_FORMATS}"),
|
||||
};
|
||||
|
||||
Ok(Rgba {
|
||||
r: r as f32 / 255.,
|
||||
g: g as f32 / 255.,
|
||||
b: b as f32 / 255.,
|
||||
a: a as f32 / 255.,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -311,3 +337,52 @@ impl<'de> Deserialize<'de> for Hsla {
|
|||
Ok(Hsla::from(rgba))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use serde_json::json;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_three_value_hex_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!("#f09")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xff0099ff))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_four_value_hex_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!("#f09f")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xff0099ff))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_six_value_hex_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!("#ff0099")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xff0099ff))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_eight_value_hex_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!("#ff0099ff")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xff0099ff))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_eight_value_hex_with_padding_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!(" #f5f5f5ff ")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xf5f5f5ff))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_deserialize_eight_value_hex_with_mixed_case_to_rgba() {
|
||||
let actual: Rgba = serde_json::from_value(json!("#DeAdbEeF")).unwrap();
|
||||
|
||||
assert_eq!(actual, rgba(0xdeadbeef))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ use std::{
|
|||
};
|
||||
|
||||
#[derive(Refineable, Default, Add, AddAssign, Sub, SubAssign, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Point<T: Default + Clone + Debug> {
|
||||
pub x: T,
|
||||
|
@ -140,7 +140,7 @@ impl<T: Clone + Default + Debug> Clone for Point<T> {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Default, Clone, Copy, PartialEq, Div, Hash, Serialize, Deserialize)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Size<T: Clone + Default + Debug> {
|
||||
pub width: T,
|
||||
|
@ -313,7 +313,7 @@ impl Size<Length> {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Default, Debug, Eq, PartialEq)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Bounds<T: Clone + Default + Debug> {
|
||||
pub origin: Point<T>,
|
||||
|
@ -477,7 +477,7 @@ impl Bounds<Pixels> {
|
|||
impl<T: Clone + Debug + Copy + Default> Copy for Bounds<T> {}
|
||||
|
||||
#[derive(Refineable, Clone, Default, Debug, Eq, PartialEq)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Edges<T: Clone + Default + Debug> {
|
||||
pub top: T,
|
||||
|
@ -619,7 +619,7 @@ impl Edges<Pixels> {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Default, Debug, Eq, PartialEq)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Corners<T: Clone + Default + Debug> {
|
||||
pub top_left: T,
|
||||
|
|
|
@ -14,7 +14,7 @@ pub use taffy::style::{
|
|||
pub type StyleCascade = Cascade<Style>;
|
||||
|
||||
#[derive(Clone, Refineable, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct Style {
|
||||
/// What layout strategy should be used?
|
||||
pub display: Display,
|
||||
|
@ -129,7 +129,7 @@ pub struct BoxShadow {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct TextStyle {
|
||||
pub color: Hsla,
|
||||
pub font_family: SharedString,
|
||||
|
@ -353,7 +353,7 @@ impl Default for Style {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Copy, Clone, Default, Debug, PartialEq, Eq)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug)]
|
||||
pub struct UnderlineStyle {
|
||||
pub thickness: Pixels,
|
||||
pub color: Option<Hsla>,
|
||||
|
|
|
@ -1692,14 +1692,25 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
r#"
|
||||
(jsx_element) @element
|
||||
(string) @string
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_expression)
|
||||
] @default
|
||||
"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let text = r#"a["b"] = <C d="e"></C>;"#;
|
||||
let text = r#"
|
||||
a["b"] = <C d="e">
|
||||
<F></F>
|
||||
{ g() }
|
||||
</C>;
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer =
|
||||
Buffer::new(0, cx.model_id() as u64, text).with_language(Arc::new(language), cx);
|
||||
Buffer::new(0, cx.model_id() as u64, &text).with_language(Arc::new(language), cx);
|
||||
let snapshot = buffer.snapshot();
|
||||
|
||||
let config = snapshot.language_scope_at(0).unwrap();
|
||||
|
@ -1710,7 +1721,9 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
&[true, true]
|
||||
);
|
||||
|
||||
let string_config = snapshot.language_scope_at(3).unwrap();
|
||||
let string_config = snapshot
|
||||
.language_scope_at(text.find("b\"").unwrap())
|
||||
.unwrap();
|
||||
assert_eq!(string_config.line_comment_prefix().unwrap().as_ref(), "// ");
|
||||
// Second bracket pair is disabled
|
||||
assert_eq!(
|
||||
|
@ -1718,18 +1731,49 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
&[true, false]
|
||||
);
|
||||
|
||||
let element_config = snapshot.language_scope_at(10).unwrap();
|
||||
// In between JSX tags: use the `element` override.
|
||||
let element_config = snapshot
|
||||
.language_scope_at(text.find("<F>").unwrap())
|
||||
.unwrap();
|
||||
assert_eq!(element_config.line_comment_prefix(), None);
|
||||
assert_eq!(
|
||||
element_config.block_comment_delimiters(),
|
||||
Some((&"{/*".into(), &"*/}".into()))
|
||||
);
|
||||
// Both bracket pairs are enabled
|
||||
assert_eq!(
|
||||
element_config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
// Within a JSX tag: use the default config.
|
||||
let tag_config = snapshot
|
||||
.language_scope_at(text.find(" d=").unwrap() + 1)
|
||||
.unwrap();
|
||||
assert_eq!(tag_config.line_comment_prefix().unwrap().as_ref(), "// ");
|
||||
assert_eq!(
|
||||
tag_config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
// In a JSX expression: use the default config.
|
||||
let expression_in_element_config = snapshot
|
||||
.language_scope_at(text.find("{").unwrap() + 1)
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
expression_in_element_config
|
||||
.line_comment_prefix()
|
||||
.unwrap()
|
||||
.as_ref(),
|
||||
"// "
|
||||
);
|
||||
assert_eq!(
|
||||
expression_in_element_config
|
||||
.brackets()
|
||||
.map(|e| e.1)
|
||||
.collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
buffer
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1696,14 +1696,25 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
r#"
|
||||
(jsx_element) @element
|
||||
(string) @string
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_expression)
|
||||
] @default
|
||||
"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let text = r#"a["b"] = <C d="e"></C>;"#;
|
||||
let text = r#"
|
||||
a["b"] = <C d="e">
|
||||
<F></F>
|
||||
{ g() }
|
||||
</C>;
|
||||
"#
|
||||
.unindent();
|
||||
|
||||
let buffer =
|
||||
Buffer::new(0, cx.entity_id().as_u64(), text).with_language(Arc::new(language), cx);
|
||||
Buffer::new(0, cx.entity_id().as_u64(), &text).with_language(Arc::new(language), cx);
|
||||
let snapshot = buffer.snapshot();
|
||||
|
||||
let config = snapshot.language_scope_at(0).unwrap();
|
||||
|
@ -1714,7 +1725,9 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
&[true, true]
|
||||
);
|
||||
|
||||
let string_config = snapshot.language_scope_at(3).unwrap();
|
||||
let string_config = snapshot
|
||||
.language_scope_at(text.find("b\"").unwrap())
|
||||
.unwrap();
|
||||
assert_eq!(string_config.line_comment_prefix().unwrap().as_ref(), "// ");
|
||||
// Second bracket pair is disabled
|
||||
assert_eq!(
|
||||
|
@ -1722,18 +1735,49 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
&[true, false]
|
||||
);
|
||||
|
||||
let element_config = snapshot.language_scope_at(10).unwrap();
|
||||
// In between JSX tags: use the `element` override.
|
||||
let element_config = snapshot
|
||||
.language_scope_at(text.find("<F>").unwrap())
|
||||
.unwrap();
|
||||
assert_eq!(element_config.line_comment_prefix(), None);
|
||||
assert_eq!(
|
||||
element_config.block_comment_delimiters(),
|
||||
Some((&"{/*".into(), &"*/}".into()))
|
||||
);
|
||||
// Both bracket pairs are enabled
|
||||
assert_eq!(
|
||||
element_config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
// Within a JSX tag: use the default config.
|
||||
let tag_config = snapshot
|
||||
.language_scope_at(text.find(" d=").unwrap() + 1)
|
||||
.unwrap();
|
||||
assert_eq!(tag_config.line_comment_prefix().unwrap().as_ref(), "// ");
|
||||
assert_eq!(
|
||||
tag_config.brackets().map(|e| e.1).collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
// In a JSX expression: use the default config.
|
||||
let expression_in_element_config = snapshot
|
||||
.language_scope_at(text.find("{").unwrap() + 1)
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
expression_in_element_config
|
||||
.line_comment_prefix()
|
||||
.unwrap()
|
||||
.as_ref(),
|
||||
"// "
|
||||
);
|
||||
assert_eq!(
|
||||
expression_in_element_config
|
||||
.brackets()
|
||||
.map(|e| e.1)
|
||||
.collect::<Vec<_>>(),
|
||||
&[true, true]
|
||||
);
|
||||
|
||||
buffer
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use std::ops::ControlFlow;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Arc;
|
||||
|
||||
|
@ -58,11 +59,17 @@ impl Prettier {
|
|||
fs: &dyn Fs,
|
||||
installed_prettiers: &HashSet<PathBuf>,
|
||||
locate_from: &Path,
|
||||
) -> anyhow::Result<Option<PathBuf>> {
|
||||
) -> anyhow::Result<ControlFlow<(), Option<PathBuf>>> {
|
||||
let mut path_to_check = locate_from
|
||||
.components()
|
||||
.take_while(|component| component.as_os_str().to_string_lossy() != "node_modules")
|
||||
.collect::<PathBuf>();
|
||||
if path_to_check != locate_from {
|
||||
log::debug!(
|
||||
"Skipping prettier location for path {path_to_check:?} that is inside node_modules"
|
||||
);
|
||||
return Ok(ControlFlow::Break(()));
|
||||
}
|
||||
let path_to_check_metadata = fs
|
||||
.metadata(&path_to_check)
|
||||
.await
|
||||
|
@ -76,14 +83,14 @@ impl Prettier {
|
|||
loop {
|
||||
if installed_prettiers.contains(&path_to_check) {
|
||||
log::debug!("Found prettier path {path_to_check:?} in installed prettiers");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else if let Some(package_json_contents) =
|
||||
read_package_json(fs, &path_to_check).await?
|
||||
{
|
||||
if has_prettier_in_package_json(&package_json_contents) {
|
||||
if has_prettier_in_node_modules(fs, &path_to_check).await? {
|
||||
log::debug!("Found prettier path {path_to_check:?} in both package.json and node_modules");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else if project_path_with_prettier_dependency.is_none() {
|
||||
project_path_with_prettier_dependency = Some(path_to_check.clone());
|
||||
}
|
||||
|
@ -109,7 +116,7 @@ impl Prettier {
|
|||
}) {
|
||||
anyhow::ensure!(has_prettier_in_node_modules(fs, &path_to_check).await?, "Found prettier path {path_to_check:?} in the workspace root for project in {project_path_with_prettier_dependency:?}, but it's not installed into workspace root's node_modules");
|
||||
log::info!("Found prettier path {path_to_check:?} in the workspace root for project in {project_path_with_prettier_dependency:?}");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else {
|
||||
log::warn!("Skipping path {path_to_check:?} that has prettier in its 'node_modules' subdirectory, but is not included in its package.json workspaces {workspaces:?}");
|
||||
}
|
||||
|
@ -132,7 +139,7 @@ impl Prettier {
|
|||
}
|
||||
None => {
|
||||
log::debug!("Found no prettier in ancestors of {locate_from:?}");
|
||||
return Ok(None);
|
||||
return Ok(ControlFlow::Continue(None));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -497,37 +504,40 @@ mod tests {
|
|||
.await;
|
||||
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/.config/zed/settings.json"),
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/.config/zed/settings.json"),
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Continue(None))
|
||||
),
|
||||
"Should successfully find no prettier for path hierarchy without it"
|
||||
);
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/src/index.js")
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/src/index.js")
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Continue(None))
|
||||
),
|
||||
"Should successfully find no prettier for path hierarchy that has node_modules with prettier, but no package.json mentions of it"
|
||||
);
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
"Even though it has package.json with prettier in it and no prettier on node_modules along the path, nothing should fail since declared inside node_modules"
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Break(()))
|
||||
),
|
||||
"Should not format files inside node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -580,7 +590,7 @@ mod tests {
|
|||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/web_blog")),
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/web_blog"))),
|
||||
"Should find a preinstalled prettier in the project root"
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -591,8 +601,8 @@ mod tests {
|
|||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/web_blog")),
|
||||
"Should find a preinstalled prettier in the project root even for node_modules files"
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting node_modules/ contents"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -604,6 +614,18 @@ mod tests {
|
|||
json!({
|
||||
"work": {
|
||||
"web_blog": {
|
||||
"node_modules": {
|
||||
"expect": {
|
||||
"build": {
|
||||
"print.js": "// print.js file contents",
|
||||
},
|
||||
"package.json": r#"{
|
||||
"devDependencies": {
|
||||
"prettier": "2.5.1"
|
||||
}
|
||||
}"#,
|
||||
},
|
||||
},
|
||||
"pages": {
|
||||
"[slug].tsx": "// [slug].tsx file contents",
|
||||
},
|
||||
|
@ -624,33 +646,55 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let path = "/root/work/web_blog/node_modules/pages/[slug].tsx";
|
||||
match Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new(path)
|
||||
Path::new("/root/work/web_blog/pages/[slug].tsx")
|
||||
)
|
||||
.await {
|
||||
Ok(path) => panic!("Expected to fail for prettier in package.json but not in node_modules found, but got path {path:?}"),
|
||||
Err(e) => {
|
||||
let message = e.to_string();
|
||||
assert!(message.contains(path), "Error message should mention which start file was used for location");
|
||||
assert!(message.contains("/root/work/web_blog"), "Error message should mention potential candidates without prettier node_modules contents");
|
||||
assert!(message.contains("/root/work/web_blog"), "Error message should mention which project had prettier defined");
|
||||
},
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::from_iter(
|
||||
[PathBuf::from("/root"), PathBuf::from("/root/work")].into_iter()
|
||||
),
|
||||
Path::new("/root/work/web_blog/node_modules/pages/[slug].tsx")
|
||||
Path::new("/root/work/web_blog/pages/[slug].tsx")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/work")),
|
||||
"Should return first cached value found without path checks"
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/work"))),
|
||||
"Should return closest cached value found without path checks"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/web_blog/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside node_modules/"
|
||||
);
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::from_iter(
|
||||
[PathBuf::from("/root"), PathBuf::from("/root/work")].into_iter()
|
||||
),
|
||||
Path::new("/root/work/web_blog/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should ignore cache lookup for files inside node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -674,7 +718,9 @@ mod tests {
|
|||
},
|
||||
},
|
||||
},
|
||||
"node_modules": {},
|
||||
"node_modules": {
|
||||
"test.js": "// test.js contents",
|
||||
},
|
||||
"package.json": r#"{
|
||||
"devDependencies": {
|
||||
"prettier": "^3.0.3"
|
||||
|
@ -703,9 +749,32 @@ mod tests {
|
|||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/exercises/03.loading/01.problem.loader/app/routes/users+/$username_+/notes.tsx"),
|
||||
).await.unwrap(),
|
||||
Some(PathBuf::from("/root/work/full-stack-foundations")),
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/work/full-stack-foundations"))),
|
||||
"Should ascend to the multi-workspace root and find the prettier there",
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/node_modules/prettier/index.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside root node_modules/"
|
||||
);
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/exercises/03.loading/01.problem.loader/node_modules/test.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside submodule's node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
|
|
|
@ -7,6 +7,7 @@ use lsp::{LanguageServer, LanguageServerId};
|
|||
use node_runtime::NodeRuntime;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{
|
||||
ops::ControlFlow,
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
};
|
||||
|
@ -58,11 +59,17 @@ impl Prettier {
|
|||
fs: &dyn Fs,
|
||||
installed_prettiers: &HashSet<PathBuf>,
|
||||
locate_from: &Path,
|
||||
) -> anyhow::Result<Option<PathBuf>> {
|
||||
) -> anyhow::Result<ControlFlow<(), Option<PathBuf>>> {
|
||||
let mut path_to_check = locate_from
|
||||
.components()
|
||||
.take_while(|component| component.as_os_str().to_string_lossy() != "node_modules")
|
||||
.collect::<PathBuf>();
|
||||
if path_to_check != locate_from {
|
||||
log::debug!(
|
||||
"Skipping prettier location for path {path_to_check:?} that is inside node_modules"
|
||||
);
|
||||
return Ok(ControlFlow::Break(()));
|
||||
}
|
||||
let path_to_check_metadata = fs
|
||||
.metadata(&path_to_check)
|
||||
.await
|
||||
|
@ -76,14 +83,14 @@ impl Prettier {
|
|||
loop {
|
||||
if installed_prettiers.contains(&path_to_check) {
|
||||
log::debug!("Found prettier path {path_to_check:?} in installed prettiers");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else if let Some(package_json_contents) =
|
||||
read_package_json(fs, &path_to_check).await?
|
||||
{
|
||||
if has_prettier_in_package_json(&package_json_contents) {
|
||||
if has_prettier_in_node_modules(fs, &path_to_check).await? {
|
||||
log::debug!("Found prettier path {path_to_check:?} in both package.json and node_modules");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else if project_path_with_prettier_dependency.is_none() {
|
||||
project_path_with_prettier_dependency = Some(path_to_check.clone());
|
||||
}
|
||||
|
@ -109,7 +116,7 @@ impl Prettier {
|
|||
}) {
|
||||
anyhow::ensure!(has_prettier_in_node_modules(fs, &path_to_check).await?, "Found prettier path {path_to_check:?} in the workspace root for project in {project_path_with_prettier_dependency:?}, but it's not installed into workspace root's node_modules");
|
||||
log::info!("Found prettier path {path_to_check:?} in the workspace root for project in {project_path_with_prettier_dependency:?}");
|
||||
return Ok(Some(path_to_check));
|
||||
return Ok(ControlFlow::Continue(Some(path_to_check)));
|
||||
} else {
|
||||
log::warn!("Skipping path {path_to_check:?} that has prettier in its 'node_modules' subdirectory, but is not included in its package.json workspaces {workspaces:?}");
|
||||
}
|
||||
|
@ -132,7 +139,7 @@ impl Prettier {
|
|||
}
|
||||
None => {
|
||||
log::debug!("Found no prettier in ancestors of {locate_from:?}");
|
||||
return Ok(None);
|
||||
return Ok(ControlFlow::Continue(None));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -527,37 +534,40 @@ mod tests {
|
|||
.await;
|
||||
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/.config/zed/settings.json"),
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/.config/zed/settings.json"),
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Continue(None))
|
||||
),
|
||||
"Should successfully find no prettier for path hierarchy without it"
|
||||
);
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/src/index.js")
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/src/index.js")
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Continue(None))
|
||||
),
|
||||
"Should successfully find no prettier for path hierarchy that has node_modules with prettier, but no package.json mentions of it"
|
||||
);
|
||||
assert!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none(),
|
||||
"Even though it has package.json with prettier in it and no prettier on node_modules along the path, nothing should fail since declared inside node_modules"
|
||||
matches!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/project/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await,
|
||||
Ok(ControlFlow::Break(()))
|
||||
),
|
||||
"Should not format files inside node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -610,7 +620,7 @@ mod tests {
|
|||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/web_blog")),
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/web_blog"))),
|
||||
"Should find a preinstalled prettier in the project root"
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -621,8 +631,8 @@ mod tests {
|
|||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/web_blog")),
|
||||
"Should find a preinstalled prettier in the project root even for node_modules files"
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting node_modules/ contents"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -634,6 +644,18 @@ mod tests {
|
|||
json!({
|
||||
"work": {
|
||||
"web_blog": {
|
||||
"node_modules": {
|
||||
"expect": {
|
||||
"build": {
|
||||
"print.js": "// print.js file contents",
|
||||
},
|
||||
"package.json": r#"{
|
||||
"devDependencies": {
|
||||
"prettier": "2.5.1"
|
||||
}
|
||||
}"#,
|
||||
},
|
||||
},
|
||||
"pages": {
|
||||
"[slug].tsx": "// [slug].tsx file contents",
|
||||
},
|
||||
|
@ -654,18 +676,16 @@ mod tests {
|
|||
)
|
||||
.await;
|
||||
|
||||
let path = "/root/work/web_blog/node_modules/pages/[slug].tsx";
|
||||
match Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new(path)
|
||||
Path::new("/root/work/web_blog/pages/[slug].tsx")
|
||||
)
|
||||
.await {
|
||||
Ok(path) => panic!("Expected to fail for prettier in package.json but not in node_modules found, but got path {path:?}"),
|
||||
Err(e) => {
|
||||
let message = e.to_string();
|
||||
assert!(message.contains(path), "Error message should mention which start file was used for location");
|
||||
assert!(message.contains("/root/work/web_blog"), "Error message should mention potential candidates without prettier node_modules contents");
|
||||
assert!(message.contains("/root/work/web_blog"), "Error message should mention which project had prettier defined");
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -675,12 +695,37 @@ mod tests {
|
|||
&HashSet::from_iter(
|
||||
[PathBuf::from("/root"), PathBuf::from("/root/work")].into_iter()
|
||||
),
|
||||
Path::new("/root/work/web_blog/node_modules/pages/[slug].tsx")
|
||||
Path::new("/root/work/web_blog/pages/[slug].tsx")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(PathBuf::from("/root/work")),
|
||||
"Should return first cached value found without path checks"
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/work"))),
|
||||
"Should return closest cached value found without path checks"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/web_blog/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside node_modules/"
|
||||
);
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::from_iter(
|
||||
[PathBuf::from("/root"), PathBuf::from("/root/work")].into_iter()
|
||||
),
|
||||
Path::new("/root/work/web_blog/node_modules/expect/build/print.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should ignore cache lookup for files inside node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -704,7 +749,9 @@ mod tests {
|
|||
},
|
||||
},
|
||||
},
|
||||
"node_modules": {},
|
||||
"node_modules": {
|
||||
"test.js": "// test.js contents",
|
||||
},
|
||||
"package.json": r#"{
|
||||
"devDependencies": {
|
||||
"prettier": "^3.0.3"
|
||||
|
@ -733,9 +780,32 @@ mod tests {
|
|||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/exercises/03.loading/01.problem.loader/app/routes/users+/$username_+/notes.tsx"),
|
||||
).await.unwrap(),
|
||||
Some(PathBuf::from("/root/work/full-stack-foundations")),
|
||||
ControlFlow::Continue(Some(PathBuf::from("/root/work/full-stack-foundations"))),
|
||||
"Should ascend to the multi-workspace root and find the prettier there",
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/node_modules/prettier/index.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside root node_modules/"
|
||||
);
|
||||
assert_eq!(
|
||||
Prettier::locate_prettier_installation(
|
||||
fs.as_ref(),
|
||||
&HashSet::default(),
|
||||
Path::new("/root/work/full-stack-foundations/exercises/03.loading/01.problem.loader/node_modules/test.js")
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
ControlFlow::Break(()),
|
||||
"Should not allow formatting files inside submodule's node_modules/"
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
|
|
|
@ -69,7 +69,7 @@ use std::{
|
|||
hash::Hash,
|
||||
mem,
|
||||
num::NonZeroU32,
|
||||
ops::Range,
|
||||
ops::{ControlFlow, Range},
|
||||
path::{self, Component, Path, PathBuf},
|
||||
process::Stdio,
|
||||
str,
|
||||
|
@ -8442,7 +8442,10 @@ impl Project {
|
|||
})
|
||||
.await
|
||||
{
|
||||
Ok(None) => {
|
||||
Ok(ControlFlow::Break(())) => {
|
||||
return None;
|
||||
}
|
||||
Ok(ControlFlow::Continue(None)) => {
|
||||
let started_default_prettier =
|
||||
project.update(&mut cx, |project, _| {
|
||||
project
|
||||
|
@ -8466,7 +8469,7 @@ impl Project {
|
|||
}
|
||||
}
|
||||
}
|
||||
Ok(Some(prettier_dir)) => {
|
||||
Ok(ControlFlow::Continue(Some(prettier_dir))) => {
|
||||
project.update(&mut cx, |project, _| {
|
||||
project
|
||||
.prettiers_per_worktree
|
||||
|
@ -8593,7 +8596,7 @@ impl Project {
|
|||
.await
|
||||
})
|
||||
}
|
||||
None => Task::ready(Ok(None)),
|
||||
None => Task::ready(Ok(ControlFlow::Break(()))),
|
||||
};
|
||||
let mut plugins_to_install = prettier_plugins;
|
||||
let previous_installation_process =
|
||||
|
@ -8622,8 +8625,9 @@ impl Project {
|
|||
.context("locate prettier installation")
|
||||
.map_err(Arc::new)?
|
||||
{
|
||||
Some(_non_default_prettier) => return Ok(()),
|
||||
None => {
|
||||
ControlFlow::Break(()) => return Ok(()),
|
||||
ControlFlow::Continue(Some(_non_default_prettier)) => return Ok(()),
|
||||
ControlFlow::Continue(None) => {
|
||||
let mut needs_install = match previous_installation_process {
|
||||
Some(previous_installation_process) => {
|
||||
previous_installation_process.await.is_err()
|
||||
|
|
|
@ -69,7 +69,7 @@ use std::{
|
|||
hash::Hash,
|
||||
mem,
|
||||
num::NonZeroU32,
|
||||
ops::Range,
|
||||
ops::{ControlFlow, Range},
|
||||
path::{self, Component, Path, PathBuf},
|
||||
process::Stdio,
|
||||
str,
|
||||
|
@ -8488,7 +8488,10 @@ impl Project {
|
|||
})
|
||||
.await
|
||||
{
|
||||
Ok(None) => {
|
||||
Ok(ControlFlow::Break(())) => {
|
||||
return None;
|
||||
}
|
||||
Ok(ControlFlow::Continue(None)) => {
|
||||
match project.update(&mut cx, |project, _| {
|
||||
project
|
||||
.prettiers_per_worktree
|
||||
|
@ -8520,7 +8523,7 @@ impl Project {
|
|||
.shared())),
|
||||
}
|
||||
}
|
||||
Ok(Some(prettier_dir)) => {
|
||||
Ok(ControlFlow::Continue(Some(prettier_dir))) => {
|
||||
match project.update(&mut cx, |project, _| {
|
||||
project
|
||||
.prettiers_per_worktree
|
||||
|
@ -8662,7 +8665,7 @@ impl Project {
|
|||
.await
|
||||
})
|
||||
}
|
||||
None => Task::ready(Ok(None)),
|
||||
None => Task::ready(Ok(ControlFlow::Break(()))),
|
||||
};
|
||||
let mut plugins_to_install = prettier_plugins;
|
||||
let previous_installation_process =
|
||||
|
@ -8692,8 +8695,9 @@ impl Project {
|
|||
.context("locate prettier installation")
|
||||
.map_err(Arc::new)?
|
||||
{
|
||||
Some(_non_default_prettier) => return Ok(()),
|
||||
None => {
|
||||
ControlFlow::Break(()) => return Ok(()),
|
||||
ControlFlow::Continue(Some(_non_default_prettier)) => return Ok(()),
|
||||
ControlFlow::Continue(None) => {
|
||||
let mut needs_install = match previous_installation_process {
|
||||
Some(previous_installation_process) => {
|
||||
previous_installation_process.await.is_err()
|
||||
|
|
|
@ -19,8 +19,7 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
|
|||
let refineable_attr = attrs.iter().find(|attr| attr.path.is_ident("refineable"));
|
||||
|
||||
let mut impl_debug_on_refinement = false;
|
||||
let mut derive_serialize_on_refinement = false;
|
||||
let mut derive_deserialize_on_refinement = false;
|
||||
let mut refinement_traits_to_derive = vec![];
|
||||
|
||||
if let Some(refineable_attr) = refineable_attr {
|
||||
if let Ok(syn::Meta::List(meta_list)) = refineable_attr.parse_meta() {
|
||||
|
@ -29,16 +28,10 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
|
|||
continue;
|
||||
};
|
||||
|
||||
if path.is_ident("debug") {
|
||||
if path.is_ident("Debug") {
|
||||
impl_debug_on_refinement = true;
|
||||
}
|
||||
|
||||
if path.is_ident("serialize") {
|
||||
derive_serialize_on_refinement = true;
|
||||
}
|
||||
|
||||
if path.is_ident("deserialize") {
|
||||
derive_deserialize_on_refinement = true;
|
||||
} else {
|
||||
refinement_traits_to_derive.push(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -259,22 +252,14 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
|
|||
quote! {}
|
||||
};
|
||||
|
||||
let derive_serialize = if derive_serialize_on_refinement {
|
||||
quote! { #[derive(serde::Serialize)]}
|
||||
} else {
|
||||
quote! {}
|
||||
};
|
||||
|
||||
let derive_deserialize = if derive_deserialize_on_refinement {
|
||||
quote! { #[derive(serde::Deserialize)]}
|
||||
} else {
|
||||
quote! {}
|
||||
};
|
||||
let mut derive_stream = quote! {};
|
||||
for trait_to_derive in refinement_traits_to_derive {
|
||||
derive_stream.extend(quote! { #[derive(#trait_to_derive)] })
|
||||
}
|
||||
|
||||
let gen = quote! {
|
||||
#[derive(Clone)]
|
||||
#derive_serialize
|
||||
#derive_deserialize
|
||||
#derive_stream
|
||||
pub struct #refinement_ident #impl_generics {
|
||||
#( #field_visibilities #field_names: #wrapped_types ),*
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ publish = false
|
|||
|
||||
[features]
|
||||
default = ["stories"]
|
||||
importing-themes = []
|
||||
stories = ["dep:itertools"]
|
||||
test-support = [
|
||||
"gpui/test-support",
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use crate::{PlayerColors, SyntaxTheme};
|
||||
use gpui::Hsla;
|
||||
use refineable::Refineable;
|
||||
|
||||
use crate::{PlayerColors, SyntaxTheme};
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct SystemColors {
|
||||
|
@ -14,7 +12,7 @@ pub struct SystemColors {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Debug)]
|
||||
#[refineable(debug)]
|
||||
#[refineable(Debug, serde::Deserialize)]
|
||||
pub struct StatusColors {
|
||||
pub conflict: Hsla,
|
||||
pub created: Hsla,
|
||||
|
@ -30,7 +28,7 @@ pub struct StatusColors {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone, Debug)]
|
||||
#[refineable(debug, deserialize)]
|
||||
#[refineable(Debug, serde::Deserialize)]
|
||||
pub struct ThemeColors {
|
||||
pub border: Hsla,
|
||||
/// Border color. Used for deemphasized borders, like a visual divider between two sections
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
use std::num::ParseIntError;
|
||||
|
||||
use gpui::{hsla, Hsla, Rgba};
|
||||
|
||||
use crate::colors::{StatusColors, SystemColors, ThemeColors};
|
||||
|
@ -142,24 +140,24 @@ impl SyntaxTheme {
|
|||
("boolean".into(), tomato().light().step_11().into()),
|
||||
("comment".into(), neutral().light().step_11().into()),
|
||||
("comment.doc".into(), iris().light().step_12().into()),
|
||||
("constant".into(), red().light().step_7().into()),
|
||||
("constructor".into(), red().light().step_7().into()),
|
||||
("embedded".into(), red().light().step_7().into()),
|
||||
("emphasis".into(), red().light().step_7().into()),
|
||||
("emphasis.strong".into(), red().light().step_7().into()),
|
||||
("enum".into(), red().light().step_7().into()),
|
||||
("function".into(), red().light().step_7().into()),
|
||||
("hint".into(), red().light().step_7().into()),
|
||||
("constant".into(), red().light().step_9().into()),
|
||||
("constructor".into(), red().light().step_9().into()),
|
||||
("embedded".into(), red().light().step_9().into()),
|
||||
("emphasis".into(), red().light().step_9().into()),
|
||||
("emphasis.strong".into(), red().light().step_9().into()),
|
||||
("enum".into(), red().light().step_9().into()),
|
||||
("function".into(), red().light().step_9().into()),
|
||||
("hint".into(), red().light().step_9().into()),
|
||||
("keyword".into(), orange().light().step_11().into()),
|
||||
("label".into(), red().light().step_7().into()),
|
||||
("link_text".into(), red().light().step_7().into()),
|
||||
("link_uri".into(), red().light().step_7().into()),
|
||||
("number".into(), red().light().step_7().into()),
|
||||
("operator".into(), red().light().step_7().into()),
|
||||
("predictive".into(), red().light().step_7().into()),
|
||||
("preproc".into(), red().light().step_7().into()),
|
||||
("primary".into(), red().light().step_7().into()),
|
||||
("property".into(), red().light().step_7().into()),
|
||||
("label".into(), red().light().step_9().into()),
|
||||
("link_text".into(), red().light().step_9().into()),
|
||||
("link_uri".into(), red().light().step_9().into()),
|
||||
("number".into(), red().light().step_9().into()),
|
||||
("operator".into(), red().light().step_9().into()),
|
||||
("predictive".into(), red().light().step_9().into()),
|
||||
("preproc".into(), red().light().step_9().into()),
|
||||
("primary".into(), red().light().step_9().into()),
|
||||
("property".into(), red().light().step_9().into()),
|
||||
("punctuation".into(), neutral().light().step_11().into()),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
|
@ -173,22 +171,22 @@ impl SyntaxTheme {
|
|||
"punctuation.list_marker".into(),
|
||||
blue().light().step_11().into(),
|
||||
),
|
||||
("punctuation.special".into(), red().light().step_7().into()),
|
||||
("punctuation.special".into(), red().light().step_9().into()),
|
||||
("string".into(), jade().light().step_11().into()),
|
||||
("string.escape".into(), red().light().step_7().into()),
|
||||
("string.escape".into(), red().light().step_9().into()),
|
||||
("string.regex".into(), tomato().light().step_11().into()),
|
||||
("string.special".into(), red().light().step_7().into()),
|
||||
("string.special".into(), red().light().step_9().into()),
|
||||
(
|
||||
"string.special.symbol".into(),
|
||||
red().light().step_7().into(),
|
||||
red().light().step_9().into(),
|
||||
),
|
||||
("tag".into(), red().light().step_7().into()),
|
||||
("text.literal".into(), red().light().step_7().into()),
|
||||
("title".into(), red().light().step_7().into()),
|
||||
("type".into(), red().light().step_7().into()),
|
||||
("variable".into(), red().light().step_7().into()),
|
||||
("variable.special".into(), red().light().step_7().into()),
|
||||
("variant".into(), red().light().step_7().into()),
|
||||
("tag".into(), red().light().step_9().into()),
|
||||
("text.literal".into(), red().light().step_9().into()),
|
||||
("title".into(), red().light().step_9().into()),
|
||||
("type".into(), red().light().step_9().into()),
|
||||
("variable".into(), red().light().step_9().into()),
|
||||
("variable.special".into(), red().light().step_9().into()),
|
||||
("variant".into(), red().light().step_9().into()),
|
||||
],
|
||||
inlay_style: tomato().light().step_1().into(), // todo!("nate: use a proper style")
|
||||
suggestion_style: orange().light().step_1().into(), // todo!("nate: use proper style")
|
||||
|
@ -198,28 +196,28 @@ impl SyntaxTheme {
|
|||
pub fn default_dark() -> Self {
|
||||
Self {
|
||||
highlights: vec![
|
||||
("attribute".into(), cyan().dark().step_11().into()),
|
||||
("attribute".into(), tomato().dark().step_11().into()),
|
||||
("boolean".into(), tomato().dark().step_11().into()),
|
||||
("comment".into(), neutral().dark().step_11().into()),
|
||||
("comment.doc".into(), iris().dark().step_12().into()),
|
||||
("constant".into(), red().dark().step_7().into()),
|
||||
("constructor".into(), red().dark().step_7().into()),
|
||||
("embedded".into(), red().dark().step_7().into()),
|
||||
("emphasis".into(), red().dark().step_7().into()),
|
||||
("emphasis.strong".into(), red().dark().step_7().into()),
|
||||
("enum".into(), red().dark().step_7().into()),
|
||||
("function".into(), red().dark().step_7().into()),
|
||||
("hint".into(), red().dark().step_7().into()),
|
||||
("keyword".into(), orange().dark().step_11().into()),
|
||||
("label".into(), red().dark().step_7().into()),
|
||||
("link_text".into(), red().dark().step_7().into()),
|
||||
("link_uri".into(), red().dark().step_7().into()),
|
||||
("number".into(), red().dark().step_7().into()),
|
||||
("operator".into(), red().dark().step_7().into()),
|
||||
("predictive".into(), red().dark().step_7().into()),
|
||||
("preproc".into(), red().dark().step_7().into()),
|
||||
("primary".into(), red().dark().step_7().into()),
|
||||
("property".into(), red().dark().step_7().into()),
|
||||
("constant".into(), orange().dark().step_11().into()),
|
||||
("constructor".into(), gold().dark().step_11().into()),
|
||||
("embedded".into(), red().dark().step_11().into()),
|
||||
("emphasis".into(), red().dark().step_11().into()),
|
||||
("emphasis.strong".into(), red().dark().step_11().into()),
|
||||
("enum".into(), yellow().dark().step_11().into()),
|
||||
("function".into(), blue().dark().step_11().into()),
|
||||
("hint".into(), indigo().dark().step_11().into()),
|
||||
("keyword".into(), plum().dark().step_11().into()),
|
||||
("label".into(), red().dark().step_11().into()),
|
||||
("link_text".into(), red().dark().step_11().into()),
|
||||
("link_uri".into(), red().dark().step_11().into()),
|
||||
("number".into(), red().dark().step_11().into()),
|
||||
("operator".into(), red().dark().step_11().into()),
|
||||
("predictive".into(), red().dark().step_11().into()),
|
||||
("preproc".into(), red().dark().step_11().into()),
|
||||
("primary".into(), red().dark().step_11().into()),
|
||||
("property".into(), red().dark().step_11().into()),
|
||||
("punctuation".into(), neutral().dark().step_11().into()),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
|
@ -233,22 +231,25 @@ impl SyntaxTheme {
|
|||
"punctuation.list_marker".into(),
|
||||
blue().dark().step_11().into(),
|
||||
),
|
||||
("punctuation.special".into(), red().dark().step_7().into()),
|
||||
("string".into(), jade().dark().step_11().into()),
|
||||
("string.escape".into(), red().dark().step_7().into()),
|
||||
("punctuation.special".into(), red().dark().step_11().into()),
|
||||
("string".into(), lime().dark().step_11().into()),
|
||||
("string.escape".into(), orange().dark().step_11().into()),
|
||||
("string.regex".into(), tomato().dark().step_11().into()),
|
||||
("string.special".into(), red().dark().step_7().into()),
|
||||
("string.special.symbol".into(), red().dark().step_7().into()),
|
||||
("tag".into(), red().dark().step_7().into()),
|
||||
("text.literal".into(), red().dark().step_7().into()),
|
||||
("title".into(), red().dark().step_7().into()),
|
||||
("type".into(), red().dark().step_7().into()),
|
||||
("variable".into(), red().dark().step_7().into()),
|
||||
("variable.special".into(), red().dark().step_7().into()),
|
||||
("variant".into(), red().dark().step_7().into()),
|
||||
("string.special".into(), red().dark().step_11().into()),
|
||||
(
|
||||
"string.special.symbol".into(),
|
||||
red().dark().step_11().into(),
|
||||
),
|
||||
("tag".into(), red().dark().step_11().into()),
|
||||
("text.literal".into(), purple().dark().step_11().into()),
|
||||
("title".into(), sky().dark().step_11().into()),
|
||||
("type".into(), mint().dark().step_11().into()),
|
||||
("variable".into(), red().dark().step_11().into()),
|
||||
("variable.special".into(), red().dark().step_11().into()),
|
||||
("variant".into(), red().dark().step_11().into()),
|
||||
],
|
||||
inlay_style: tomato().dark().step_1().into(), // todo!("nate: use a proper style")
|
||||
suggestion_style: orange().dark().step_1().into(), // todo!("nate: use a proper style")
|
||||
inlay_style: neutral().dark().step_11().into(), // todo!("nate: use a proper style")
|
||||
suggestion_style: orange().dark().step_11().into(), // todo!("nate: use a proper style")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +279,7 @@ impl ThemeColors {
|
|||
ghost_element_active: neutral().light().step_5(),
|
||||
ghost_element_selected: neutral().light().step_5(),
|
||||
ghost_element_disabled: neutral().light_alpha().step_3(),
|
||||
text: neutral().light().step_12(),
|
||||
text: yellow().light().step_9(),
|
||||
text_muted: neutral().light().step_11(),
|
||||
text_placeholder: neutral().light().step_10(),
|
||||
text_disabled: neutral().light().step_9(),
|
||||
|
@ -367,11 +368,11 @@ impl ThemeColors {
|
|||
tab_active_background: neutral().dark().step_1(),
|
||||
tab_inactive_background: neutral().dark().step_2(),
|
||||
editor_background: neutral().dark().step_1(),
|
||||
editor_gutter_background: neutral().dark().step_1(), // todo!("pick the right colors")
|
||||
editor_subheader_background: neutral().dark().step_2(),
|
||||
editor_gutter_background: neutral().dark().step_1(),
|
||||
editor_subheader_background: neutral().dark().step_3(),
|
||||
editor_active_line_background: neutral().dark_alpha().step_3(),
|
||||
editor_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
|
||||
editor_active_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
|
||||
editor_line_number: neutral().dark_alpha().step_10(),
|
||||
editor_active_line_number: neutral().dark_alpha().step_12(),
|
||||
editor_highlighted_line_background: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
|
||||
editor_invisible: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
|
||||
editor_wrap_guide: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
|
||||
|
@ -410,10 +411,10 @@ struct StaticColorScaleSet {
|
|||
}
|
||||
|
||||
impl TryFrom<StaticColorScaleSet> for ColorScaleSet {
|
||||
type Error = ParseIntError;
|
||||
type Error = anyhow::Error;
|
||||
|
||||
fn try_from(value: StaticColorScaleSet) -> Result<Self, Self::Error> {
|
||||
fn to_color_scale(scale: StaticColorScale) -> Result<ColorScale, ParseIntError> {
|
||||
fn to_color_scale(scale: StaticColorScale) -> Result<ColorScale, anyhow::Error> {
|
||||
scale
|
||||
.into_iter()
|
||||
.map(|color| Rgba::try_from(color).map(Hsla::from))
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::collections::HashMap;
|
|||
use std::sync::Arc;
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
use gpui::SharedString;
|
||||
use gpui::{HighlightStyle, SharedString};
|
||||
use refineable::Refineable;
|
||||
|
||||
use crate::{
|
||||
|
@ -27,21 +27,47 @@ impl ThemeRegistry {
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
fn insert_user_theme_familes(&mut self, families: impl IntoIterator<Item = UserThemeFamily>) {
|
||||
for family in families.into_iter() {
|
||||
self.insert_user_themes(family.themes);
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
fn insert_user_themes(&mut self, themes: impl IntoIterator<Item = UserTheme>) {
|
||||
self.insert_themes(themes.into_iter().map(|user_theme| {
|
||||
let mut theme_colors = match user_theme.appearance {
|
||||
Appearance::Light => ThemeColors::default_light(),
|
||||
Appearance::Dark => ThemeColors::default_dark(),
|
||||
};
|
||||
|
||||
theme_colors.refine(&user_theme.styles.colors);
|
||||
|
||||
let mut status_colors = StatusColors::default();
|
||||
status_colors.refine(&user_theme.styles.status);
|
||||
|
||||
let mut syntax_colors = match user_theme.appearance {
|
||||
Appearance::Light => SyntaxTheme::default_light(),
|
||||
Appearance::Dark => SyntaxTheme::default_dark(),
|
||||
};
|
||||
if let Some(user_syntax) = user_theme.styles.syntax {
|
||||
syntax_colors.highlights = user_syntax
|
||||
.highlights
|
||||
.iter()
|
||||
.map(|(syntax_token, highlight)| {
|
||||
(
|
||||
syntax_token.clone(),
|
||||
HighlightStyle {
|
||||
color: highlight.color,
|
||||
font_style: highlight.font_style.map(Into::into),
|
||||
font_weight: highlight.font_weight.map(Into::into),
|
||||
..Default::default()
|
||||
},
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
}
|
||||
|
||||
Theme {
|
||||
id: uuid::Uuid::new_v4().to_string(),
|
||||
name: user_theme.name.into(),
|
||||
|
@ -49,12 +75,9 @@ impl ThemeRegistry {
|
|||
styles: ThemeStyles {
|
||||
system: SystemColors::default(),
|
||||
colors: theme_colors,
|
||||
status: StatusColors::default(),
|
||||
status: status_colors,
|
||||
player: PlayerColors::default(),
|
||||
syntax: match user_theme.appearance {
|
||||
Appearance::Light => Arc::new(SyntaxTheme::default_light()),
|
||||
Appearance::Dark => Arc::new(SyntaxTheme::default_dark()),
|
||||
},
|
||||
syntax: Arc::new(syntax_colors),
|
||||
},
|
||||
}
|
||||
}));
|
||||
|
@ -83,6 +106,8 @@ impl Default for ThemeRegistry {
|
|||
};
|
||||
|
||||
this.insert_theme_families([zed_pro_family()]);
|
||||
|
||||
#[cfg(not(feature = "importing-themes"))]
|
||||
this.insert_user_theme_familes(crate::all_user_themes());
|
||||
|
||||
this
|
||||
|
|
|
@ -128,6 +128,8 @@ impl ColorScale {
|
|||
}
|
||||
|
||||
/// `Step 10` - Used for hovered or active solid backgrounds, particularly when `Step 9` is their normal state.
|
||||
///
|
||||
/// May also be used for extremely low contrast text. This should be used sparingly, as it may be difficult to read.
|
||||
#[inline]
|
||||
pub fn step_10(&self) -> Hsla {
|
||||
self.step(ColorScaleStep::TEN)
|
||||
|
|
|
@ -6,6 +6,7 @@ mod registry;
|
|||
mod scale;
|
||||
mod settings;
|
||||
mod syntax;
|
||||
#[cfg(not(feature = "importing-themes"))]
|
||||
mod themes;
|
||||
mod user_theme;
|
||||
|
||||
|
@ -20,6 +21,7 @@ pub use registry::*;
|
|||
pub use scale::*;
|
||||
pub use settings::*;
|
||||
pub use syntax::*;
|
||||
#[cfg(not(feature = "importing-themes"))]
|
||||
pub use themes::*;
|
||||
pub use user_theme::*;
|
||||
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn andromeda() -> UserThemeFamily {
|
||||
|
@ -19,7 +21,7 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x1b1d23ff).into()),
|
||||
border_variant: Some(rgba(0x1b1d23ff).into()),
|
||||
border_focused: Some(rgba(0x1b1d23ff).into()),
|
||||
border_focused: Some(rgba(0x746f77ff).into()),
|
||||
border_selected: Some(rgba(0x1b1d23ff).into()),
|
||||
border_transparent: Some(rgba(0x1b1d23ff).into()),
|
||||
border_disabled: Some(rgba(0x1b1d23ff).into()),
|
||||
|
@ -27,9 +29,17 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x23262eff).into()),
|
||||
background: Some(rgba(0x23262eff).into()),
|
||||
element_background: Some(rgba(0x00e8c5cc).into()),
|
||||
element_hover: Some(rgba(0x23262eff).into()),
|
||||
element_selected: Some(rgba(0x23262eff).into()),
|
||||
drop_target_background: Some(rgba(0x3a404eff).into()),
|
||||
ghost_element_hover: Some(rgba(0x23262eff).into()),
|
||||
text: Some(rgba(0xd4cdd8ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x23262eff).into()),
|
||||
tab_active_background: Some(rgba(0x23262eff).into()),
|
||||
editor_background: Some(rgba(0x23262eff).into()),
|
||||
editor_gutter_background: Some(rgba(0x23262eff).into()),
|
||||
editor_line_number: Some(rgba(0x746f77ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xd4cdd8ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xee5d42ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x95e072ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xffe66dff).into()),
|
||||
|
@ -44,6 +54,107 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xfc634cff).into()),
|
||||
error: Some(rgba(0xfc634cff).into()),
|
||||
hidden: Some(rgba(0x746f77ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9fa0a6cc).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc64dedff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffe66dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc64dedff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xee5d42ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e072ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf92571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e072ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffe66dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x00e8c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -53,7 +164,7 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x1b1d23ff).into()),
|
||||
border_variant: Some(rgba(0x1b1d23ff).into()),
|
||||
border_focused: Some(rgba(0x1b1d23ff).into()),
|
||||
border_focused: Some(rgba(0x746f77ff).into()),
|
||||
border_selected: Some(rgba(0x1b1d23ff).into()),
|
||||
border_transparent: Some(rgba(0x1b1d23ff).into()),
|
||||
border_disabled: Some(rgba(0x1b1d23ff).into()),
|
||||
|
@ -61,9 +172,17 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x23262eff).into()),
|
||||
background: Some(rgba(0x262933ff).into()),
|
||||
element_background: Some(rgba(0x00e8c5cc).into()),
|
||||
element_hover: Some(rgba(0x23262eff).into()),
|
||||
element_selected: Some(rgba(0x23262eff).into()),
|
||||
drop_target_background: Some(rgba(0x3a404eff).into()),
|
||||
ghost_element_hover: Some(rgba(0x23262eff).into()),
|
||||
text: Some(rgba(0xd4cdd8ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x23262eff).into()),
|
||||
tab_active_background: Some(rgba(0x262933ff).into()),
|
||||
editor_background: Some(rgba(0x262933ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x262933ff).into()),
|
||||
editor_line_number: Some(rgba(0x746f77ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xd4cdd8ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xee5d42ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x95e072ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xffe66dff).into()),
|
||||
|
@ -78,6 +197,107 @@ pub fn andromeda() -> UserThemeFamily {
|
|||
terminal_ansi_cyan: Some(rgba(0x00e8c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xfc634cff).into()),
|
||||
error: Some(rgba(0xfc634cff).into()),
|
||||
hidden: Some(rgba(0x746f77ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9fa0a6cc).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc64dedff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffe66dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc64dedff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf39c11ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xee5d42ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e072ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf92571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e072ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffe66dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x00e8c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn ayu() -> UserThemeFamily {
|
||||
|
@ -19,7 +21,7 @@ pub fn ayu() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x6b7d8f1f).into()),
|
||||
border_variant: Some(rgba(0x6b7d8f1f).into()),
|
||||
border_focused: Some(rgba(0x6b7d8f1f).into()),
|
||||
border_focused: Some(rgba(0xffaa32b3).into()),
|
||||
border_selected: Some(rgba(0x6b7d8f1f).into()),
|
||||
border_transparent: Some(rgba(0x6b7d8f1f).into()),
|
||||
border_disabled: Some(rgba(0x6b7d8f1f).into()),
|
||||
|
@ -27,9 +29,16 @@ pub fn ayu() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0xf8f9faff).into()),
|
||||
background: Some(rgba(0xf8f9faff).into()),
|
||||
element_background: Some(rgba(0xffaa32ff).into()),
|
||||
element_hover: Some(rgba(0x55728f1f).into()),
|
||||
element_selected: Some(rgba(0x55728f1f).into()),
|
||||
ghost_element_hover: Some(rgba(0x55728f1f).into()),
|
||||
text: Some(rgba(0x8a9199ff).into()),
|
||||
tab_inactive_background: Some(rgba(0xf8f9faff).into()),
|
||||
tab_active_background: Some(rgba(0xf8f9faff).into()),
|
||||
editor_background: Some(rgba(0xf8f9faff).into()),
|
||||
editor_gutter_background: Some(rgba(0xf8f9faff).into()),
|
||||
editor_line_number: Some(rgba(0x8a919966).into()),
|
||||
editor_active_line_number: Some(rgba(0x5c6166ff).into()),
|
||||
terminal_background: Some(rgba(0xf8f9faff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xef7070ff).into()),
|
||||
|
@ -49,6 +58,222 @@ pub fn ayu() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xe65050ff).into()),
|
||||
error: Some(rgba(0xe65050ff).into()),
|
||||
hidden: Some(rgba(0x8a9199ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf2ad48ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa37accff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x787b8099).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4bbf98ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"embedded".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5c6166ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7070ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7070ff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf2ad48ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfa8d3eff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x86b300ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55b4d3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55b4d3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa37accff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xed9365ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7070ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5c6166b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55b4d380).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.delimiter".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5c6166b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.list_marker".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf2ad48ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x86b300ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4bbf98ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x86b300ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special.symbol".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x86b300ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55b4d3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x86b300ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x389ee6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55b4d3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5c6166ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7070ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -58,7 +283,7 @@ pub fn ayu() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x171a24ff).into()),
|
||||
border_variant: Some(rgba(0x171a24ff).into()),
|
||||
border_focused: Some(rgba(0x171a24ff).into()),
|
||||
border_focused: Some(rgba(0xffcb65b3).into()),
|
||||
border_selected: Some(rgba(0x171a24ff).into()),
|
||||
border_transparent: Some(rgba(0x171a24ff).into()),
|
||||
border_disabled: Some(rgba(0x171a24ff).into()),
|
||||
|
@ -66,9 +291,16 @@ pub fn ayu() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x1f2430ff).into()),
|
||||
background: Some(rgba(0x1f2430ff).into()),
|
||||
element_background: Some(rgba(0xffcb65ff).into()),
|
||||
element_hover: Some(rgba(0x63759926).into()),
|
||||
element_selected: Some(rgba(0x63759926).into()),
|
||||
ghost_element_hover: Some(rgba(0x63759926).into()),
|
||||
text: Some(rgba(0x707a8cff).into()),
|
||||
tab_inactive_background: Some(rgba(0x1f2430ff).into()),
|
||||
tab_active_background: Some(rgba(0x1f2430ff).into()),
|
||||
editor_background: Some(rgba(0x1f2430ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x1f2430ff).into()),
|
||||
editor_line_number: Some(rgba(0x8a919966).into()),
|
||||
editor_active_line_number: Some(rgba(0xcccac2ff).into()),
|
||||
terminal_background: Some(rgba(0x1f2430ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xf18678ff).into()),
|
||||
|
@ -88,6 +320,222 @@ pub fn ayu() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xff6565ff).into()),
|
||||
error: Some(rgba(0xff6565ff).into()),
|
||||
hidden: Some(rgba(0x707a8cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffd173ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xdfbfffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xb8cfe680).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e6cbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"embedded".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcccac2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf18678ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf18678ff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffd173ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffad65ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd4fe7fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5ccfe6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5ccfe6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xdfbfffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf29e74ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf18678ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcccac2b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5ccfe680).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.delimiter".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcccac2b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.list_marker".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffd173ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd4fe7fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e6cbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd4fe7fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special.symbol".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd4fe7fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5ccfe6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd4fe7fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x73cfffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x5ccfe6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcccac2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf18678ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -97,7 +545,7 @@ pub fn ayu() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x1e232bff).into()),
|
||||
border_variant: Some(rgba(0x1e232bff).into()),
|
||||
border_focused: Some(rgba(0x1e232bff).into()),
|
||||
border_focused: Some(rgba(0xe6b450b3).into()),
|
||||
border_selected: Some(rgba(0x1e232bff).into()),
|
||||
border_transparent: Some(rgba(0x1e232bff).into()),
|
||||
border_disabled: Some(rgba(0x1e232bff).into()),
|
||||
|
@ -105,9 +553,16 @@ pub fn ayu() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x0b0e14ff).into()),
|
||||
background: Some(rgba(0x0b0e14ff).into()),
|
||||
element_background: Some(rgba(0xe6b450ff).into()),
|
||||
element_hover: Some(rgba(0x47526640).into()),
|
||||
element_selected: Some(rgba(0x47526640).into()),
|
||||
ghost_element_hover: Some(rgba(0x47526640).into()),
|
||||
text: Some(rgba(0x565b66ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x0b0e14ff).into()),
|
||||
tab_active_background: Some(rgba(0x0b0e14ff).into()),
|
||||
editor_background: Some(rgba(0x0b0e14ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x0b0e14ff).into()),
|
||||
editor_line_number: Some(rgba(0x6c738099).into()),
|
||||
editor_active_line_number: Some(rgba(0xbfbdb6ff).into()),
|
||||
terminal_background: Some(rgba(0x0b0e14ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x686868ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xef7077ff).into()),
|
||||
|
@ -127,6 +582,222 @@ pub fn ayu() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xd95757ff).into()),
|
||||
error: Some(rgba(0xd95757ff).into()),
|
||||
hidden: Some(rgba(0x565b66ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffb353ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd2a6ffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xabb5be8c).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e6cbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"embedded".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbfbdb6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7077ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7077ff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffb353ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff8f3fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa9d94bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x38b9e6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x38b9e6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd2a6ffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf29668ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7077ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbfbdb6b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x38b9e680).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.delimiter".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbfbdb6b3).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.list_marker".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffb353ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa9d94bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x95e6cbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa9d94bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.special.symbol".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa9d94bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x38b9e6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa9d94bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x59c2ffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x38b9e6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbfbdb6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xef7077ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn dracula() -> UserThemeFamily {
|
||||
|
@ -18,7 +20,7 @@ pub fn dracula() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0xbd93f9ff).into()),
|
||||
border_variant: Some(rgba(0xbd93f9ff).into()),
|
||||
border_focused: Some(rgba(0xbd93f9ff).into()),
|
||||
border_focused: Some(rgba(0x6272a4ff).into()),
|
||||
border_selected: Some(rgba(0xbd93f9ff).into()),
|
||||
border_transparent: Some(rgba(0xbd93f9ff).into()),
|
||||
border_disabled: Some(rgba(0xbd93f9ff).into()),
|
||||
|
@ -26,9 +28,17 @@ pub fn dracula() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x282a35ff).into()),
|
||||
background: Some(rgba(0x282a35ff).into()),
|
||||
element_background: Some(rgba(0x44475aff).into()),
|
||||
element_hover: Some(rgba(0x44475a75).into()),
|
||||
element_selected: Some(rgba(0x44475aff).into()),
|
||||
drop_target_background: Some(rgba(0x44475aff).into()),
|
||||
ghost_element_hover: Some(rgba(0x44475a75).into()),
|
||||
text: Some(rgba(0xf8f8f2ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x21222cff).into()),
|
||||
tab_active_background: Some(rgba(0x282a35ff).into()),
|
||||
editor_background: Some(rgba(0x282a35ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x282a35ff).into()),
|
||||
editor_line_number: Some(rgba(0x6272a4ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xf8f8f2ff).into()),
|
||||
terminal_background: Some(rgba(0x282a35ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x6272a4ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff6d6dff).into()),
|
||||
|
@ -48,6 +58,121 @@ pub fn dracula() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xf8f8f2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xff5555ff).into()),
|
||||
error: Some(rgba(0xff5555ff).into()),
|
||||
hidden: Some(rgba(0x6272a4ff).into()),
|
||||
warning: Some(rgba(0xffb76bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x50fa7bff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x6272a4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf1fa8cff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffb76bff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x50fa7bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff79c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x8be9fdff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x8be9fdff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf1fa8cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff79c6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf1fa8cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x8be9fdff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbd93f9ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xbd93f9ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
}],
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -6,8 +6,8 @@ mod ayu;
|
|||
mod dracula;
|
||||
mod gruvbox;
|
||||
mod night_owl;
|
||||
mod noctis;
|
||||
mod nord;
|
||||
mod notctis;
|
||||
mod palenight;
|
||||
mod rose_pine;
|
||||
mod solarized;
|
||||
|
@ -18,8 +18,8 @@ pub use ayu::*;
|
|||
pub use dracula::*;
|
||||
pub use gruvbox::*;
|
||||
pub use night_owl::*;
|
||||
pub use noctis::*;
|
||||
pub use nord::*;
|
||||
pub use notctis::*;
|
||||
pub use palenight::*;
|
||||
pub use rose_pine::*;
|
||||
pub use solarized::*;
|
||||
|
@ -37,7 +37,7 @@ pub(crate) fn all_user_themes() -> Vec<UserThemeFamily> {
|
|||
dracula(),
|
||||
solarized(),
|
||||
nord(),
|
||||
notctis(),
|
||||
noctis(),
|
||||
ayu(),
|
||||
gruvbox(),
|
||||
]
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn night_owl() -> UserThemeFamily {
|
||||
|
@ -19,7 +21,7 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x5f7e97ff).into()),
|
||||
border_variant: Some(rgba(0x5f7e97ff).into()),
|
||||
border_focused: Some(rgba(0x5f7e97ff).into()),
|
||||
border_focused: Some(rgba(0x122d42ff).into()),
|
||||
border_selected: Some(rgba(0x5f7e97ff).into()),
|
||||
border_transparent: Some(rgba(0x5f7e97ff).into()),
|
||||
border_disabled: Some(rgba(0x5f7e97ff).into()),
|
||||
|
@ -27,9 +29,17 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x011526ff).into()),
|
||||
background: Some(rgba(0x011526ff).into()),
|
||||
element_background: Some(rgba(0x7d56c1cc).into()),
|
||||
element_hover: Some(rgba(0x011526ff).into()),
|
||||
element_selected: Some(rgba(0x234c708c).into()),
|
||||
drop_target_background: Some(rgba(0x011526ff).into()),
|
||||
ghost_element_hover: Some(rgba(0x011526ff).into()),
|
||||
text: Some(rgba(0xd6deebff).into()),
|
||||
tab_inactive_background: Some(rgba(0x01101cff).into()),
|
||||
tab_active_background: Some(rgba(0x0a2842ff).into()),
|
||||
editor_background: Some(rgba(0x011526ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x011526ff).into()),
|
||||
editor_line_number: Some(rgba(0x4b6479ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xd6deebff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x575656ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xef524fff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x21da6eff).into()),
|
||||
|
@ -48,6 +58,140 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xffffffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xef524fff).into()),
|
||||
error: Some(rgba(0xef524fff).into()),
|
||||
hidden: Some(rgba(0x5f7e97ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc5e478ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x637777ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf78b6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fdbcaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fcac3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xecc48dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcaece6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xecc48dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc5e478ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc5e478ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fdbcaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -57,7 +201,7 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0xd9d9d9ff).into()),
|
||||
border_variant: Some(rgba(0xd9d9d9ff).into()),
|
||||
border_focused: Some(rgba(0xd9d9d9ff).into()),
|
||||
border_focused: Some(rgba(0x93a1a1ff).into()),
|
||||
border_selected: Some(rgba(0xd9d9d9ff).into()),
|
||||
border_transparent: Some(rgba(0xd9d9d9ff).into()),
|
||||
border_disabled: Some(rgba(0xd9d9d9ff).into()),
|
||||
|
@ -65,9 +209,16 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0xf0f0f0ff).into()),
|
||||
background: Some(rgba(0xfbfbfbff).into()),
|
||||
element_background: Some(rgba(0x29a298ff).into()),
|
||||
element_hover: Some(rgba(0xd3e7f8ff).into()),
|
||||
element_selected: Some(rgba(0xd3e7f8ff).into()),
|
||||
ghost_element_hover: Some(rgba(0xd3e7f8ff).into()),
|
||||
text: Some(rgba(0x403f53ff).into()),
|
||||
tab_inactive_background: Some(rgba(0xf0f0f0ff).into()),
|
||||
tab_active_background: Some(rgba(0xf6f6f6ff).into()),
|
||||
editor_background: Some(rgba(0xfbfbfbff).into()),
|
||||
editor_gutter_background: Some(rgba(0xfbfbfbff).into()),
|
||||
editor_line_number: Some(rgba(0x90a7b2ff).into()),
|
||||
editor_active_line_number: Some(rgba(0x403f53ff).into()),
|
||||
terminal_background: Some(rgba(0xf6f6f6ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x403f53ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xde3c3aff).into()),
|
||||
|
@ -87,6 +238,141 @@ pub fn night_owl() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xf0f0f0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0x403f53ff).into()),
|
||||
error: Some(rgba(0x403f53ff).into()),
|
||||
hidden: Some(rgba(0x403f53ff).into()),
|
||||
warning: Some(rgba(0xdaa900ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x989fb1ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x994bc3ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x994bc3ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xaa0881ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x0b969bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x0b969bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x994bc3ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x994bc3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x4876d6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x0b969bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
2428
crates/theme2/src/themes/noctis.rs
Normal file
2428
crates/theme2/src/themes/noctis.rs
Normal file
File diff suppressed because it is too large
Load diff
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn nord() -> UserThemeFamily {
|
||||
|
@ -26,9 +28,17 @@ pub fn nord() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x2e3440ff).into()),
|
||||
background: Some(rgba(0x2e3440ff).into()),
|
||||
element_background: Some(rgba(0x88bfd0ee).into()),
|
||||
element_hover: Some(rgba(0x3b4252ff).into()),
|
||||
element_selected: Some(rgba(0x88bfd0ff).into()),
|
||||
drop_target_background: Some(rgba(0x88bfd099).into()),
|
||||
ghost_element_hover: Some(rgba(0x3b4252ff).into()),
|
||||
text: Some(rgba(0xd8dee9ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x2e3440ff).into()),
|
||||
tab_active_background: Some(rgba(0x3b4252ff).into()),
|
||||
editor_background: Some(rgba(0x2e3440ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x2e3440ff).into()),
|
||||
editor_line_number: Some(rgba(0x4c566aff).into()),
|
||||
editor_active_line_number: Some(rgba(0xd8dee9ff).into()),
|
||||
terminal_background: Some(rgba(0x2e3440ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x4c566aff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xbf616aff).into()),
|
||||
|
@ -48,6 +58,143 @@ pub fn nord() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xe5e9f0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xbf616aff).into()),
|
||||
error: Some(rgba(0xbf616aff).into()),
|
||||
hidden: Some(rgba(0xd8dee966).into()),
|
||||
warning: Some(rgba(0xebcb8bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x8fbcbbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x606e87ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebcb8bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x88bfd0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xb48eacff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xeceff4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.delimiter".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa3be8cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebcb8bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xa3be8cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x8fbcbbff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x81a1c1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
}],
|
||||
}
|
||||
|
|
|
@ -1,446 +0,0 @@
|
|||
// This file was generated by the `theme_importer`.
|
||||
// Be careful when modifying it by hand.
|
||||
|
||||
use gpui::rgba;
|
||||
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn notctis() -> UserThemeFamily {
|
||||
UserThemeFamily {
|
||||
name: "Notctis".into(),
|
||||
author: "Liviu Schera (liviuschera)".into(),
|
||||
themes: vec![
|
||||
UserTheme {
|
||||
name: "Noctis Azureus".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x1579b6ff).into()),
|
||||
border_variant: Some(rgba(0x1579b6ff).into()),
|
||||
border_focused: Some(rgba(0x1579b6ff).into()),
|
||||
border_selected: Some(rgba(0x1579b6ff).into()),
|
||||
border_transparent: Some(rgba(0x1579b6ff).into()),
|
||||
border_disabled: Some(rgba(0x1579b6ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x051b28ff).into()),
|
||||
surface_background: Some(rgba(0x051b28ff).into()),
|
||||
background: Some(rgba(0x07263aff).into()),
|
||||
element_background: Some(rgba(0x007e99ff).into()),
|
||||
text: Some(rgba(0xbecfdaff).into()),
|
||||
tab_inactive_background: Some(rgba(0x08324eff).into()),
|
||||
tab_active_background: Some(rgba(0x07263aff).into()),
|
||||
terminal_background: Some(rgba(0x051b28ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x475e6cff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xbecfdaff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x28343dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xaec3d0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Bordo".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x997582ff).into()),
|
||||
border_variant: Some(rgba(0x997582ff).into()),
|
||||
border_focused: Some(rgba(0x997582ff).into()),
|
||||
border_selected: Some(rgba(0x997582ff).into()),
|
||||
border_transparent: Some(rgba(0x997582ff).into()),
|
||||
border_disabled: Some(rgba(0x997582ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x272022ff).into()),
|
||||
surface_background: Some(rgba(0x272022ff).into()),
|
||||
background: Some(rgba(0x322a2dff).into()),
|
||||
element_background: Some(rgba(0x007e99ff).into()),
|
||||
text: Some(rgba(0xcbbec2ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x413036ff).into()),
|
||||
tab_active_background: Some(rgba(0x322a2dff).into()),
|
||||
terminal_background: Some(rgba(0x272022ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x69545bff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xcbbec2ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x47393eff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xb9acb0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctus Hibernus".into(),
|
||||
appearance: Appearance::Light,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x00c6e0ff).into()),
|
||||
border_variant: Some(rgba(0x00c6e0ff).into()),
|
||||
border_focused: Some(rgba(0x00c6e0ff).into()),
|
||||
border_selected: Some(rgba(0x00c6e0ff).into()),
|
||||
border_transparent: Some(rgba(0x00c6e0ff).into()),
|
||||
border_disabled: Some(rgba(0x00c6e0ff).into()),
|
||||
elevated_surface_background: Some(rgba(0xe1eeefff).into()),
|
||||
surface_background: Some(rgba(0xe1eeefff).into()),
|
||||
background: Some(rgba(0xf4f6f6ff).into()),
|
||||
element_background: Some(rgba(0x089099ff).into()),
|
||||
text: Some(rgba(0x005661ff).into()),
|
||||
tab_inactive_background: Some(rgba(0xcaedf2ff).into()),
|
||||
tab_active_background: Some(rgba(0xf4f6f6ff).into()),
|
||||
terminal_background: Some(rgba(0xe1eeefff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x003b41ff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x00b368ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Lilac".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0xaea4f4ff).into()),
|
||||
border_variant: Some(rgba(0xaea4f4ff).into()),
|
||||
border_focused: Some(rgba(0xaea4f4ff).into()),
|
||||
border_selected: Some(rgba(0xaea4f4ff).into()),
|
||||
border_transparent: Some(rgba(0xaea4f4ff).into()),
|
||||
border_disabled: Some(rgba(0xaea4f4ff).into()),
|
||||
elevated_surface_background: Some(rgba(0xe9e7f3ff).into()),
|
||||
surface_background: Some(rgba(0xe9e7f3ff).into()),
|
||||
background: Some(rgba(0xf2f1f8ff).into()),
|
||||
element_background: Some(rgba(0x8d7ffeff).into()),
|
||||
text: Some(rgba(0x0c006bff).into()),
|
||||
tab_inactive_background: Some(rgba(0xe2dff6ff).into()),
|
||||
tab_active_background: Some(rgba(0xf2f1f8ff).into()),
|
||||
terminal_background: Some(rgba(0xe9e7f3ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x0f0080ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x0c006bff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x00b368ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Lux".into(),
|
||||
appearance: Appearance::Light,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x00c6e0ff).into()),
|
||||
border_variant: Some(rgba(0x00c6e0ff).into()),
|
||||
border_focused: Some(rgba(0x00c6e0ff).into()),
|
||||
border_selected: Some(rgba(0x00c6e0ff).into()),
|
||||
border_transparent: Some(rgba(0x00c6e0ff).into()),
|
||||
border_disabled: Some(rgba(0x00c6e0ff).into()),
|
||||
elevated_surface_background: Some(rgba(0xf6eddaff).into()),
|
||||
surface_background: Some(rgba(0xf6eddaff).into()),
|
||||
background: Some(rgba(0xfef8ecff).into()),
|
||||
element_background: Some(rgba(0x089099ff).into()),
|
||||
text: Some(rgba(0x005661ff).into()),
|
||||
tab_inactive_background: Some(rgba(0xf0e9d6ff).into()),
|
||||
tab_active_background: Some(rgba(0xfef8ecff).into()),
|
||||
terminal_background: Some(rgba(0xf6eddaff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x004d57ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff3f00ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x00d17aff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xff8c00ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x0ea3ffff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xff6b9eff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x00cae6ff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xbbc3c4ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x003b41ff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe34d1bff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x00b368ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xf49724ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x0094f0ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Minimus".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x496c83ff).into()),
|
||||
border_variant: Some(rgba(0x496c83ff).into()),
|
||||
border_focused: Some(rgba(0x496c83ff).into()),
|
||||
border_selected: Some(rgba(0x496c83ff).into()),
|
||||
border_transparent: Some(rgba(0x496c83ff).into()),
|
||||
border_disabled: Some(rgba(0x496c83ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x0e1920ff).into()),
|
||||
surface_background: Some(rgba(0x0e1920ff).into()),
|
||||
background: Some(rgba(0x1b2932ff).into()),
|
||||
element_background: Some(rgba(0x2e616bff).into()),
|
||||
text: Some(rgba(0xc5cdd3ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x202d37ff).into()),
|
||||
tab_active_background: Some(rgba(0x1b2932ff).into()),
|
||||
terminal_background: Some(rgba(0x0e1920ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x425866ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xca8468ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x84c8abff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xd1aa7bff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x68a4caff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xc88da2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x84bfc8ff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xc5d1d3ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x182935ff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xc08872ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x72c09fff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xc8a984ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x6095b7ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xc28097ff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x72b7c0ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xc5cdd3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x0d6571ff).into()),
|
||||
border_variant: Some(rgba(0x0d6571ff).into()),
|
||||
border_focused: Some(rgba(0x0d6571ff).into()),
|
||||
border_selected: Some(rgba(0x0d6571ff).into()),
|
||||
border_transparent: Some(rgba(0x0d6571ff).into()),
|
||||
border_disabled: Some(rgba(0x0d6571ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x03181aff).into()),
|
||||
surface_background: Some(rgba(0x03181aff).into()),
|
||||
background: Some(rgba(0x052428ff).into()),
|
||||
element_background: Some(rgba(0x089099ff).into()),
|
||||
text: Some(rgba(0xb1c9ccff).into()),
|
||||
tab_inactive_background: Some(rgba(0x052e32ff).into()),
|
||||
tab_active_background: Some(rgba(0x052428ff).into()),
|
||||
terminal_background: Some(rgba(0x03181aff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x324a4dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Obscuro".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x0d6571ff).into()),
|
||||
border_variant: Some(rgba(0x0d6571ff).into()),
|
||||
border_focused: Some(rgba(0x0d6571ff).into()),
|
||||
border_selected: Some(rgba(0x0d6571ff).into()),
|
||||
border_transparent: Some(rgba(0x0d6571ff).into()),
|
||||
border_disabled: Some(rgba(0x0d6571ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x020c0eff).into()),
|
||||
surface_background: Some(rgba(0x020c0eff).into()),
|
||||
background: Some(rgba(0x031316ff).into()),
|
||||
element_background: Some(rgba(0x089099ff).into()),
|
||||
text: Some(rgba(0xb1c9ccff).into()),
|
||||
tab_inactive_background: Some(rgba(0x052e32ff).into()),
|
||||
tab_active_background: Some(rgba(0x031316ff).into()),
|
||||
terminal_background: Some(rgba(0x020c0eff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x324a4dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Sereno".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x0d6571ff).into()),
|
||||
border_variant: Some(rgba(0x0d6571ff).into()),
|
||||
border_focused: Some(rgba(0x0d6571ff).into()),
|
||||
border_selected: Some(rgba(0x0d6571ff).into()),
|
||||
border_transparent: Some(rgba(0x0d6571ff).into()),
|
||||
border_disabled: Some(rgba(0x0d6571ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x020c0eff).into()),
|
||||
surface_background: Some(rgba(0x020c0eff).into()),
|
||||
background: Some(rgba(0x031316ff).into()),
|
||||
element_background: Some(rgba(0x089099ff).into()),
|
||||
text: Some(rgba(0xb1c9ccff).into()),
|
||||
tab_inactive_background: Some(rgba(0x052e32ff).into()),
|
||||
tab_active_background: Some(rgba(0x031316ff).into()),
|
||||
terminal_background: Some(rgba(0x020c0eff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x47686cff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xc1d4d7ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x324a4dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xb1c9ccff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Uva".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x6d66a7ff).into()),
|
||||
border_variant: Some(rgba(0x6d66a7ff).into()),
|
||||
border_focused: Some(rgba(0x6d66a7ff).into()),
|
||||
border_selected: Some(rgba(0x6d66a7ff).into()),
|
||||
border_transparent: Some(rgba(0x6d66a7ff).into()),
|
||||
border_disabled: Some(rgba(0x6d66a7ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x1f1d30ff).into()),
|
||||
surface_background: Some(rgba(0x1f1d30ff).into()),
|
||||
background: Some(rgba(0x292640ff).into()),
|
||||
element_background: Some(rgba(0x007e99ff).into()),
|
||||
text: Some(rgba(0xc5c2d6ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x2f2c49ff).into()),
|
||||
tab_active_background: Some(rgba(0x292640ff).into()),
|
||||
terminal_background: Some(rgba(0x1f1d30ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x504e65ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xc5c2d6ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x302f3dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xb6b3ccff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Noctis Viola".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x8666a7ff).into()),
|
||||
border_variant: Some(rgba(0x8666a7ff).into()),
|
||||
border_focused: Some(rgba(0x8666a7ff).into()),
|
||||
border_selected: Some(rgba(0x8666a7ff).into()),
|
||||
border_transparent: Some(rgba(0x8666a7ff).into()),
|
||||
border_disabled: Some(rgba(0x8666a7ff).into()),
|
||||
elevated_surface_background: Some(rgba(0x291d35ff).into()),
|
||||
surface_background: Some(rgba(0x291d35ff).into()),
|
||||
background: Some(rgba(0x30243dff).into()),
|
||||
element_background: Some(rgba(0x007e99ff).into()),
|
||||
text: Some(rgba(0xccbfd9ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x3d2e4dff).into()),
|
||||
tab_active_background: Some(rgba(0x30243dff).into()),
|
||||
terminal_background: Some(rgba(0x291d35ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x594e65ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xe97749ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x5febb1ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xe69532ff).into()),
|
||||
terminal_ansi_bright_blue: Some(rgba(0x5fb5ebff).into()),
|
||||
terminal_ansi_bright_magenta: Some(rgba(0xe697b2ff).into()),
|
||||
terminal_ansi_bright_cyan: Some(rgba(0x5fdaebff).into()),
|
||||
terminal_ansi_bright_white: Some(rgba(0xccbfd9ff).into()),
|
||||
terminal_ansi_black: Some(rgba(0x362f3dff).into()),
|
||||
terminal_ansi_red: Some(rgba(0xe66432ff).into()),
|
||||
terminal_ansi_green: Some(rgba(0x49e9a6ff).into()),
|
||||
terminal_ansi_yellow: Some(rgba(0xe4b781ff).into()),
|
||||
terminal_ansi_blue: Some(rgba(0x49ace9ff).into()),
|
||||
terminal_ansi_magenta: Some(rgba(0xdf759aff).into()),
|
||||
terminal_ansi_cyan: Some(rgba(0x49d5e9ff).into()),
|
||||
terminal_ansi_white: Some(rgba(0xbfafcfff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn palenight() -> UserThemeFamily {
|
||||
|
@ -27,9 +29,17 @@ pub fn palenight() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x292c3eff).into()),
|
||||
background: Some(rgba(0x292c3eff).into()),
|
||||
element_background: Some(rgba(0x7d56c1cc).into()),
|
||||
element_hover: Some(rgba(0x0000001a).into()),
|
||||
element_selected: Some(rgba(0x7d56c1ff).into()),
|
||||
drop_target_background: Some(rgba(0x2e3245ff).into()),
|
||||
ghost_element_hover: Some(rgba(0x0000001a).into()),
|
||||
text: Some(rgba(0xffffffff).into()),
|
||||
tab_inactive_background: Some(rgba(0x31364aff).into()),
|
||||
tab_active_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_gutter_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_line_number: Some(rgba(0x4c5374ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
|
||||
|
@ -48,6 +58,166 @@ pub fn palenight() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xffffffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xef524fff).into()),
|
||||
error: Some(rgba(0xef524fff).into()),
|
||||
hidden: Some(rgba(0x9199c8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x687097ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf78b6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x89ddffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fcac3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -65,9 +235,17 @@ pub fn palenight() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x292c3eff).into()),
|
||||
background: Some(rgba(0x292c3eff).into()),
|
||||
element_background: Some(rgba(0x7d56c1cc).into()),
|
||||
element_hover: Some(rgba(0x0000001a).into()),
|
||||
element_selected: Some(rgba(0x7d56c1ff).into()),
|
||||
drop_target_background: Some(rgba(0x2e3245ff).into()),
|
||||
ghost_element_hover: Some(rgba(0x0000001a).into()),
|
||||
text: Some(rgba(0xffffffff).into()),
|
||||
tab_inactive_background: Some(rgba(0x31364aff).into()),
|
||||
tab_active_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_gutter_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_line_number: Some(rgba(0x4c5374ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
|
||||
|
@ -86,6 +264,166 @@ pub fn palenight() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xffffffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xef524fff).into()),
|
||||
error: Some(rgba(0xef524fff).into()),
|
||||
hidden: Some(rgba(0x9199c8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x687097ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf78b6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x89ddffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fcac3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -103,9 +441,17 @@ pub fn palenight() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x25283aff).into()),
|
||||
background: Some(rgba(0x292c3eff).into()),
|
||||
element_background: Some(rgba(0x7d56c1cc).into()),
|
||||
element_hover: Some(rgba(0x0000001a).into()),
|
||||
element_selected: Some(rgba(0x7d56c1ff).into()),
|
||||
drop_target_background: Some(rgba(0x2e3245ff).into()),
|
||||
ghost_element_hover: Some(rgba(0x0000001a).into()),
|
||||
text: Some(rgba(0xffffffff).into()),
|
||||
tab_inactive_background: Some(rgba(0x31364aff).into()),
|
||||
tab_active_background: Some(rgba(0x25283aff).into()),
|
||||
editor_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_gutter_background: Some(rgba(0x292c3eff).into()),
|
||||
editor_line_number: Some(rgba(0x4c5374ff).into()),
|
||||
editor_active_line_number: Some(rgba(0xbfc7d5ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x676e95ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xff5571ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0xc3e88dff).into()),
|
||||
|
@ -124,6 +470,166 @@ pub fn palenight() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xffffffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xef524fff).into()),
|
||||
error: Some(rgba(0xef524fff).into()),
|
||||
hidden: Some(rgba(0x9199c8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x687097ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff869aff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf78b6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x89ddffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x7fcac3ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc792eaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x82aaffff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc3e88dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xffcb6bff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff5571ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn rose_pine() -> UserThemeFamily {
|
||||
|
@ -19,7 +21,7 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x000000ff).into()),
|
||||
border_variant: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x6e6a8633).into()),
|
||||
border_selected: Some(rgba(0x000000ff).into()),
|
||||
border_transparent: Some(rgba(0x000000ff).into()),
|
||||
border_disabled: Some(rgba(0x000000ff).into()),
|
||||
|
@ -27,9 +29,17 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x1f1d2eff).into()),
|
||||
background: Some(rgba(0x191724ff).into()),
|
||||
element_background: Some(rgba(0xebbcbaff).into()),
|
||||
element_hover: Some(rgba(0x6e6a861a).into()),
|
||||
element_selected: Some(rgba(0x6e6a8633).into()),
|
||||
drop_target_background: Some(rgba(0x1f1d2eff).into()),
|
||||
ghost_element_hover: Some(rgba(0x6e6a861a).into()),
|
||||
text: Some(rgba(0xe0def4ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x000000ff).into()),
|
||||
tab_active_background: Some(rgba(0x6e6a861a).into()),
|
||||
editor_background: Some(rgba(0x191724ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x191724ff).into()),
|
||||
editor_line_number: Some(rgba(0x908caaff).into()),
|
||||
editor_active_line_number: Some(rgba(0xe0def4ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x908caaff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xeb6f92ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x30738fff).into()),
|
||||
|
@ -48,16 +58,136 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xeb6f92ff).into()),
|
||||
error: Some(rgba(0xeb6f92ff).into()),
|
||||
hidden: Some(rgba(0x908caaff).into()),
|
||||
warning: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc4a7e7ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebbcbaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x6e6a86ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xeb6f92ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x30738fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebbcbaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebbcbaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x908caaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9ccfd8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebbcbaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9ccfd8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xebbcbaff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xe0def4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
name: "Rose Moon".into(),
|
||||
name: "Rose Pine Moon".into(),
|
||||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x000000ff).into()),
|
||||
border_variant: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x817c9c26).into()),
|
||||
border_selected: Some(rgba(0x000000ff).into()),
|
||||
border_transparent: Some(rgba(0x000000ff).into()),
|
||||
border_disabled: Some(rgba(0x000000ff).into()),
|
||||
|
@ -65,9 +195,17 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0x2a273eff).into()),
|
||||
background: Some(rgba(0x232136ff).into()),
|
||||
element_background: Some(rgba(0xea9a97ff).into()),
|
||||
element_hover: Some(rgba(0x817c9c14).into()),
|
||||
element_selected: Some(rgba(0x817c9c26).into()),
|
||||
drop_target_background: Some(rgba(0x2a273eff).into()),
|
||||
ghost_element_hover: Some(rgba(0x817c9c14).into()),
|
||||
text: Some(rgba(0xe0def4ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x000000ff).into()),
|
||||
tab_active_background: Some(rgba(0x817c9c14).into()),
|
||||
editor_background: Some(rgba(0x232136ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x232136ff).into()),
|
||||
editor_line_number: Some(rgba(0x908caaff).into()),
|
||||
editor_active_line_number: Some(rgba(0xe0def4ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x908caaff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xeb6f92ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x3d8fb0ff).into()),
|
||||
|
@ -86,6 +224,126 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xeb6f92ff).into()),
|
||||
error: Some(rgba(0xeb6f92ff).into()),
|
||||
hidden: Some(rgba(0x908caaff).into()),
|
||||
warning: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xc4a7e7ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9a97ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x6e6a86ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xeb6f92ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x3d8fb0ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9a97ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9a97ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x908caaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9ccfd8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf5c177ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9a97ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9ccfd8ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9a97ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xe0def4ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -95,7 +353,7 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x000000ff).into()),
|
||||
border_variant: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x000000ff).into()),
|
||||
border_focused: Some(rgba(0x6e6a8614).into()),
|
||||
border_selected: Some(rgba(0x000000ff).into()),
|
||||
border_transparent: Some(rgba(0x000000ff).into()),
|
||||
border_disabled: Some(rgba(0x000000ff).into()),
|
||||
|
@ -103,9 +361,17 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
surface_background: Some(rgba(0xfffaf3ff).into()),
|
||||
background: Some(rgba(0xfaf4edff).into()),
|
||||
element_background: Some(rgba(0xd7827dff).into()),
|
||||
element_hover: Some(rgba(0x6e6a860d).into()),
|
||||
element_selected: Some(rgba(0x6e6a8614).into()),
|
||||
drop_target_background: Some(rgba(0xfffaf3ff).into()),
|
||||
ghost_element_hover: Some(rgba(0x6e6a860d).into()),
|
||||
text: Some(rgba(0x575279ff).into()),
|
||||
tab_inactive_background: Some(rgba(0x000000ff).into()),
|
||||
tab_active_background: Some(rgba(0x6e6a860d).into()),
|
||||
editor_background: Some(rgba(0xfaf4edff).into()),
|
||||
editor_gutter_background: Some(rgba(0xfaf4edff).into()),
|
||||
editor_line_number: Some(rgba(0x797593ff).into()),
|
||||
editor_active_line_number: Some(rgba(0x575279ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x797593ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xb3627aff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x276983ff).into()),
|
||||
|
@ -124,6 +390,126 @@ pub fn rose_pine() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0x575279ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xb3627aff).into()),
|
||||
error: Some(rgba(0xb3627aff).into()),
|
||||
hidden: Some(rgba(0x797593ff).into()),
|
||||
warning: Some(rgba(0xea9d34ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9079a9ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd7827dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x9893a5ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xb3627aff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x276983ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd7827dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd7827dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x797593ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9d34ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55949fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xea9d34ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd7827dff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x55949fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd7827dff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x575279ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn solarized() -> UserThemeFamily {
|
||||
|
@ -19,14 +21,22 @@ pub fn solarized() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0x003847ff).into()),
|
||||
border_variant: Some(rgba(0x003847ff).into()),
|
||||
border_focused: Some(rgba(0x003847ff).into()),
|
||||
border_focused: Some(rgba(0x29a19899).into()),
|
||||
border_selected: Some(rgba(0x003847ff).into()),
|
||||
border_transparent: Some(rgba(0x003847ff).into()),
|
||||
border_disabled: Some(rgba(0x003847ff).into()),
|
||||
background: Some(rgba(0x002a35ff).into()),
|
||||
element_background: Some(rgba(0x29a19899).into()),
|
||||
element_hover: Some(rgba(0x004353aa).into()),
|
||||
element_selected: Some(rgba(0x005a6fff).into()),
|
||||
drop_target_background: Some(rgba(0x00435388).into()),
|
||||
ghost_element_hover: Some(rgba(0x004353aa).into()),
|
||||
text: Some(rgba(0xbbbbbbff).into()),
|
||||
tab_inactive_background: Some(rgba(0x003f51ff).into()),
|
||||
tab_active_background: Some(rgba(0x002a36ff).into()),
|
||||
editor_background: Some(rgba(0x002a35ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x002a35ff).into()),
|
||||
editor_line_number: Some(rgba(0x566c74ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x586e75ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xcb4b15ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x859900ff).into()),
|
||||
|
@ -45,6 +55,150 @@ pub fn solarized() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0x839496ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xffeaeaff).into()),
|
||||
error: Some(rgba(0xffeaeaff).into()),
|
||||
hidden: Some(rgba(0x93a1a1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x93a1a1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xb58800ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x657b83ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcb4b15ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"embedded".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x93a1a1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x859900ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x839496ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x657b83ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x29a198ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcb4b15ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x29a198ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcb4b15ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
UserTheme {
|
||||
|
@ -54,14 +208,21 @@ pub fn solarized() -> UserThemeFamily {
|
|||
colors: ThemeColorsRefinement {
|
||||
border: Some(rgba(0xddd6c1ff).into()),
|
||||
border_variant: Some(rgba(0xddd6c1ff).into()),
|
||||
border_focused: Some(rgba(0xddd6c1ff).into()),
|
||||
border_focused: Some(rgba(0xd3af86ff).into()),
|
||||
border_selected: Some(rgba(0xddd6c1ff).into()),
|
||||
border_transparent: Some(rgba(0xddd6c1ff).into()),
|
||||
border_disabled: Some(rgba(0xddd6c1ff).into()),
|
||||
background: Some(rgba(0xfdf6e3ff).into()),
|
||||
element_background: Some(rgba(0xab9d56ff).into()),
|
||||
element_hover: Some(rgba(0xdec98744).into()),
|
||||
element_selected: Some(rgba(0xdec987ff).into()),
|
||||
ghost_element_hover: Some(rgba(0xdec98744).into()),
|
||||
text: Some(rgba(0x333333ff).into()),
|
||||
tab_inactive_background: Some(rgba(0xd3cbb7ff).into()),
|
||||
tab_active_background: Some(rgba(0xfdf6e3ff).into()),
|
||||
editor_background: Some(rgba(0xfdf6e3ff).into()),
|
||||
editor_gutter_background: Some(rgba(0xfdf6e3ff).into()),
|
||||
editor_line_number: Some(rgba(0x9ca8a6ff).into()),
|
||||
terminal_ansi_bright_black: Some(rgba(0x657b83ff).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xcb4b15ff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x859900ff).into()),
|
||||
|
@ -80,6 +241,141 @@ pub fn solarized() -> UserThemeFamily {
|
|||
terminal_ansi_white: Some(rgba(0xeee8d5ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
hidden: Some(rgba(0x586e75ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x93a1a1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xb58800ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x93a1a1ff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"constant".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcb4b15ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"embedded".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x657b83ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"emphasis.strong".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x859900ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xd33582ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation.bracket".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x93a1a1ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x29a198ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"string.escape".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xcb4b15ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"text.literal".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x29a198ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x258ad2ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
pub fn synthwave_84() -> UserThemeFamily {
|
||||
|
@ -16,10 +18,18 @@ pub fn synthwave_84() -> UserThemeFamily {
|
|||
appearance: Appearance::Dark,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: ThemeColorsRefinement {
|
||||
border_focused: Some(rgba(0x1f212bff).into()),
|
||||
background: Some(rgba(0x252334ff).into()),
|
||||
element_background: Some(rgba(0x614d85ff).into()),
|
||||
element_hover: Some(rgba(0x37294d99).into()),
|
||||
element_selected: Some(rgba(0xffffff20).into()),
|
||||
drop_target_background: Some(rgba(0x34294f66).into()),
|
||||
ghost_element_hover: Some(rgba(0x37294d99).into()),
|
||||
text: Some(rgba(0xffffffff).into()),
|
||||
tab_inactive_background: Some(rgba(0x252334ff).into()),
|
||||
editor_background: Some(rgba(0x252334ff).into()),
|
||||
editor_gutter_background: Some(rgba(0x252334ff).into()),
|
||||
editor_line_number: Some(rgba(0xffffff73).into()),
|
||||
terminal_ansi_bright_red: Some(rgba(0xfe444fff).into()),
|
||||
terminal_ansi_bright_green: Some(rgba(0x71f1b7ff).into()),
|
||||
terminal_ansi_bright_yellow: Some(rgba(0xfede5cff).into()),
|
||||
|
@ -34,6 +44,137 @@ pub fn synthwave_84() -> UserThemeFamily {
|
|||
terminal_ansi_cyan: Some(rgba(0x02edf9ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
status: StatusColorsRefinement {
|
||||
deleted: Some(rgba(0xfe444fff).into()),
|
||||
error: Some(rgba(0xfe444fff).into()),
|
||||
warning: Some(rgba(0x71f1b7bb).into()),
|
||||
..Default::default()
|
||||
},
|
||||
syntax: Some(UserSyntaxTheme {
|
||||
highlights: vec![
|
||||
(
|
||||
"attribute".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfede5cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"boolean".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf97d71ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"comment".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x848bbdff).into()),
|
||||
font_style: Some(UserFontStyle::Italic),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"function".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x35f9f5ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"keyword".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfede5cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"label".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfe444fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_text".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xdd5500ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"link_uri".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xdd5500ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"number".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xf97d71ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"operator".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfede5cff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"property".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff7ddaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"punctuation".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x35f9f5ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"tag".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0x71f1b7ff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"title".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfe444fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"type".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfe444fff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xff7ddaff).into()),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
(
|
||||
"variable.special".into(),
|
||||
UserHighlightStyle {
|
||||
color: Some(rgba(0xfe444fff).into()),
|
||||
font_weight: Some(UserFontWeight(700.0)),
|
||||
..Default::default()
|
||||
},
|
||||
),
|
||||
],
|
||||
}),
|
||||
},
|
||||
}],
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use crate::{Appearance, StatusColors, StatusColorsRefinement, ThemeColors, ThemeColorsRefinement};
|
||||
use gpui::{FontStyle, FontWeight, Hsla};
|
||||
use refineable::Refineable;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::{Appearance, ThemeColors, ThemeColorsRefinement};
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct UserThemeFamily {
|
||||
pub name: String,
|
||||
|
@ -18,8 +18,76 @@ pub struct UserTheme {
|
|||
}
|
||||
|
||||
#[derive(Refineable, Clone)]
|
||||
#[refineable(deserialize)]
|
||||
#[refineable(Deserialize)]
|
||||
pub struct UserThemeStyles {
|
||||
#[refineable]
|
||||
pub colors: ThemeColors,
|
||||
#[refineable]
|
||||
pub status: StatusColors,
|
||||
pub syntax: UserSyntaxTheme,
|
||||
}
|
||||
|
||||
#[derive(Clone, Default, Deserialize)]
|
||||
pub struct UserSyntaxTheme {
|
||||
pub highlights: Vec<(String, UserHighlightStyle)>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Default, Deserialize)]
|
||||
pub struct UserHighlightStyle {
|
||||
pub color: Option<Hsla>,
|
||||
pub font_style: Option<UserFontStyle>,
|
||||
pub font_weight: Option<UserFontWeight>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Default, Deserialize)]
|
||||
pub struct UserFontWeight(pub f32);
|
||||
|
||||
impl UserFontWeight {
|
||||
/// Thin weight (100), the thinnest value.
|
||||
pub const THIN: Self = Self(FontWeight::THIN.0);
|
||||
/// Extra light weight (200).
|
||||
pub const EXTRA_LIGHT: Self = Self(FontWeight::EXTRA_LIGHT.0);
|
||||
/// Light weight (300).
|
||||
pub const LIGHT: Self = Self(FontWeight::LIGHT.0);
|
||||
/// Normal (400).
|
||||
pub const NORMAL: Self = Self(FontWeight::NORMAL.0);
|
||||
/// Medium weight (500, higher than normal).
|
||||
pub const MEDIUM: Self = Self(FontWeight::MEDIUM.0);
|
||||
/// Semibold weight (600).
|
||||
pub const SEMIBOLD: Self = Self(FontWeight::SEMIBOLD.0);
|
||||
/// Bold weight (700).
|
||||
pub const BOLD: Self = Self(FontWeight::BOLD.0);
|
||||
/// Extra-bold weight (800).
|
||||
pub const EXTRA_BOLD: Self = Self(FontWeight::EXTRA_BOLD.0);
|
||||
/// Black weight (900), the thickest value.
|
||||
pub const BLACK: Self = Self(FontWeight::BLACK.0);
|
||||
}
|
||||
|
||||
impl From<UserFontWeight> for FontWeight {
|
||||
fn from(value: UserFontWeight) -> Self {
|
||||
Self(value.0)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Deserialize)]
|
||||
pub enum UserFontStyle {
|
||||
Normal,
|
||||
Italic,
|
||||
Oblique,
|
||||
}
|
||||
|
||||
impl From<UserFontStyle> for FontStyle {
|
||||
fn from(value: UserFontStyle) -> Self {
|
||||
match value {
|
||||
UserFontStyle::Normal => FontStyle::Normal,
|
||||
UserFontStyle::Italic => FontStyle::Italic,
|
||||
UserFontStyle::Oblique => FontStyle::Oblique,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl UserHighlightStyle {
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.color.is_none() && self.font_style.is_none() && self.font_weight.is_none()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,9 +10,12 @@ publish = false
|
|||
anyhow.workspace = true
|
||||
convert_case = "0.6.0"
|
||||
gpui = { package = "gpui2", path = "../gpui2" }
|
||||
indexmap = "1.6.2"
|
||||
json_comments = "0.2.2"
|
||||
log.workspace = true
|
||||
rust-embed.workspace = true
|
||||
serde.workspace = true
|
||||
simplelog = "0.9"
|
||||
theme = { package = "theme2", path = "../theme2" }
|
||||
strum = { version = "0.25.0", features = ["derive"] }
|
||||
theme = { package = "theme2", path = "../theme2", features = ["importing-themes"] }
|
||||
uuid.workspace = true
|
||||
|
|
|
@ -11,14 +11,15 @@ use std::str::FromStr;
|
|||
use anyhow::{anyhow, Context, Result};
|
||||
use convert_case::{Case, Casing};
|
||||
use gpui::serde_json;
|
||||
use json_comments::StripComments;
|
||||
use log::LevelFilter;
|
||||
use serde::Deserialize;
|
||||
use simplelog::SimpleLogger;
|
||||
use theme::{Appearance, UserThemeFamily};
|
||||
use vscode::VsCodeThemeConverter;
|
||||
|
||||
use crate::theme_printer::UserThemeFamilyPrinter;
|
||||
use crate::vscode::VsCodeTheme;
|
||||
use crate::vscode::VsCodeThemeConverter;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct FamilyMetadata {
|
||||
|
@ -27,7 +28,7 @@ struct FamilyMetadata {
|
|||
pub themes: Vec<ThemeMetadata>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[derive(Debug, Clone, Copy, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum ThemeAppearanceJson {
|
||||
Light,
|
||||
|
@ -111,7 +112,8 @@ fn main() -> Result<()> {
|
|||
}
|
||||
};
|
||||
|
||||
let vscode_theme: VsCodeTheme = serde_json::from_reader(theme_file)
|
||||
let theme_without_comments = StripComments::new(theme_file);
|
||||
let vscode_theme: VsCodeTheme = serde_json::from_reader(theme_without_comments)
|
||||
.context(format!("failed to parse theme {theme_file_path:?}"))?;
|
||||
|
||||
let converter = VsCodeThemeConverter::new(vscode_theme, theme_metadata);
|
||||
|
@ -158,8 +160,10 @@ fn main() -> Result<()> {
|
|||
|
||||
use gpui::rgba;
|
||||
|
||||
#[allow(unused)]
|
||||
use crate::{{
|
||||
Appearance, ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, StatusColorsRefinement, ThemeColorsRefinement, UserHighlightStyle, UserSyntaxTheme,
|
||||
UserTheme, UserThemeFamily, UserThemeStylesRefinement, UserFontWeight, UserFontStyle
|
||||
}};
|
||||
|
||||
pub fn {theme_family_slug}() -> UserThemeFamily {{
|
||||
|
|
|
@ -2,8 +2,9 @@ use std::fmt::{self, Debug};
|
|||
|
||||
use gpui::{Hsla, Rgba};
|
||||
use theme::{
|
||||
Appearance, PlayerColor, PlayerColors, StatusColors, SyntaxTheme, SystemColors,
|
||||
ThemeColorsRefinement, UserTheme, UserThemeFamily, UserThemeStylesRefinement,
|
||||
Appearance, PlayerColor, PlayerColors, StatusColorsRefinement, SystemColors,
|
||||
ThemeColorsRefinement, UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeFamily,
|
||||
UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
struct RawSyntaxPrinter<'a>(&'a str);
|
||||
|
@ -30,6 +31,17 @@ impl<'a, D: Debug> Debug for IntoPrinter<'a, D> {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct OptionPrinter<'a, T>(&'a Option<T>);
|
||||
|
||||
impl<'a, T: Debug> Debug for OptionPrinter<'a, T> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self.0 {
|
||||
Some(value) => write!(f, "Some({:?})", value),
|
||||
None => write!(f, "None"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct VecPrinter<'a, T>(&'a Vec<T>);
|
||||
|
||||
impl<'a, T: Debug> Debug for VecPrinter<'a, T> {
|
||||
|
@ -92,6 +104,17 @@ impl<'a> Debug for UserThemeStylesRefinementPrinter<'a> {
|
|||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("UserThemeStylesRefinement")
|
||||
.field("colors", &ThemeColorsRefinementPrinter(&self.0.colors))
|
||||
.field("status", &StatusColorsRefinementPrinter(&self.0.status))
|
||||
.field(
|
||||
"syntax",
|
||||
&OptionPrinter(
|
||||
&self
|
||||
.0
|
||||
.syntax
|
||||
.as_ref()
|
||||
.map(|syntax| UserSyntaxThemePrinter(syntax)),
|
||||
),
|
||||
)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
@ -250,23 +273,39 @@ impl<'a> Debug for ThemeColorsRefinementPrinter<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct StatusColorsPrinter<'a>(&'a StatusColors);
|
||||
pub struct StatusColorsRefinementPrinter<'a>(&'a StatusColorsRefinement);
|
||||
|
||||
impl<'a> Debug for StatusColorsPrinter<'a> {
|
||||
impl<'a> Debug for StatusColorsRefinementPrinter<'a> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("StatusColors")
|
||||
.field("conflict", &HslaPrinter(self.0.conflict))
|
||||
.field("created", &HslaPrinter(self.0.created))
|
||||
.field("deleted", &HslaPrinter(self.0.deleted))
|
||||
.field("error", &HslaPrinter(self.0.error))
|
||||
.field("hidden", &HslaPrinter(self.0.hidden))
|
||||
.field("ignored", &HslaPrinter(self.0.ignored))
|
||||
.field("info", &HslaPrinter(self.0.info))
|
||||
.field("modified", &HslaPrinter(self.0.modified))
|
||||
.field("renamed", &HslaPrinter(self.0.renamed))
|
||||
.field("success", &HslaPrinter(self.0.success))
|
||||
.field("warning", &HslaPrinter(self.0.warning))
|
||||
.finish()
|
||||
let status_colors = vec![
|
||||
("conflict", self.0.conflict),
|
||||
("created", self.0.created),
|
||||
("deleted", self.0.deleted),
|
||||
("error", self.0.error),
|
||||
("hidden", self.0.hidden),
|
||||
("ignored", self.0.ignored),
|
||||
("info", self.0.info),
|
||||
("modified", self.0.modified),
|
||||
("renamed", self.0.renamed),
|
||||
("success", self.0.success),
|
||||
("warning", self.0.warning),
|
||||
];
|
||||
|
||||
f.write_str("StatusColorsRefinement {")?;
|
||||
|
||||
for (color_name, color) in status_colors {
|
||||
if let Some(color) = color {
|
||||
f.write_str(color_name)?;
|
||||
f.write_str(": ")?;
|
||||
f.write_str("Some(")?;
|
||||
HslaPrinter(color).fmt(f)?;
|
||||
f.write_str(")")?;
|
||||
f.write_str(",")?;
|
||||
}
|
||||
}
|
||||
|
||||
f.write_str("..Default::default()")?;
|
||||
f.write_str("}")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -299,11 +338,11 @@ impl<'a> Debug for PlayerColorPrinter<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct SyntaxThemePrinter<'a>(&'a SyntaxTheme);
|
||||
pub struct UserSyntaxThemePrinter<'a>(&'a UserSyntaxTheme);
|
||||
|
||||
impl<'a> Debug for SyntaxThemePrinter<'a> {
|
||||
impl<'a> Debug for UserSyntaxThemePrinter<'a> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("SyntaxTheme")
|
||||
f.debug_struct("UserSyntaxTheme")
|
||||
.field(
|
||||
"highlights",
|
||||
&VecPrinter(
|
||||
|
@ -312,7 +351,7 @@ impl<'a> Debug for SyntaxThemePrinter<'a> {
|
|||
.highlights
|
||||
.iter()
|
||||
.map(|(token, highlight)| {
|
||||
(IntoPrinter(token), HslaPrinter(highlight.color.unwrap()))
|
||||
(IntoPrinter(token), UserHighlightStylePrinter(&highlight))
|
||||
})
|
||||
.collect(),
|
||||
),
|
||||
|
@ -320,3 +359,41 @@ impl<'a> Debug for SyntaxThemePrinter<'a> {
|
|||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct UserHighlightStylePrinter<'a>(&'a UserHighlightStyle);
|
||||
|
||||
impl<'a> Debug for UserHighlightStylePrinter<'a> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.write_str("UserHighlightStyle {")?;
|
||||
|
||||
if let Some(color) = self.0.color {
|
||||
f.write_str("color")?;
|
||||
f.write_str(": ")?;
|
||||
f.write_str("Some(")?;
|
||||
HslaPrinter(color).fmt(f)?;
|
||||
f.write_str(")")?;
|
||||
f.write_str(",")?;
|
||||
}
|
||||
|
||||
if let Some(font_style) = self.0.font_style {
|
||||
f.write_str("font_style")?;
|
||||
f.write_str(": ")?;
|
||||
f.write_str("Some(")?;
|
||||
write!(f, "UserFontStyle::{:?}", font_style)?;
|
||||
f.write_str(")")?;
|
||||
f.write_str(",")?;
|
||||
}
|
||||
|
||||
if let Some(font_weight) = self.0.font_weight.as_ref() {
|
||||
f.write_str("font_weight")?;
|
||||
f.write_str(": ")?;
|
||||
f.write_str("Some(")?;
|
||||
write!(f, "UserFontWeight({:?})", font_weight.0)?;
|
||||
f.write_str(")")?;
|
||||
f.write_str(",")?;
|
||||
}
|
||||
|
||||
f.write_str("..Default::default()")?;
|
||||
f.write_str("}")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,570 +1,7 @@
|
|||
use anyhow::Result;
|
||||
use gpui::{Hsla, Rgba};
|
||||
use serde::Deserialize;
|
||||
use theme::{ThemeColorsRefinement, UserTheme, UserThemeStylesRefinement};
|
||||
mod converter;
|
||||
mod syntax;
|
||||
mod theme;
|
||||
|
||||
use crate::util::Traverse;
|
||||
use crate::ThemeMetadata;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct VsCodeTheme {
|
||||
#[serde(rename = "$schema")]
|
||||
pub schema: Option<String>,
|
||||
pub name: Option<String>,
|
||||
pub author: Option<String>,
|
||||
pub maintainers: Option<Vec<String>>,
|
||||
#[serde(rename = "semanticClass")]
|
||||
pub semantic_class: Option<String>,
|
||||
#[serde(rename = "semanticHighlighting")]
|
||||
pub semantic_highlighting: Option<bool>,
|
||||
pub colors: VsCodeColors,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct VsCodeColors {
|
||||
#[serde(rename = "terminal.background")]
|
||||
pub terminal_background: Option<String>,
|
||||
#[serde(rename = "terminal.foreground")]
|
||||
pub terminal_foreground: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightBlack")]
|
||||
pub terminal_ansi_bright_black: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightRed")]
|
||||
pub terminal_ansi_bright_red: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightGreen")]
|
||||
pub terminal_ansi_bright_green: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightYellow")]
|
||||
pub terminal_ansi_bright_yellow: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightBlue")]
|
||||
pub terminal_ansi_bright_blue: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightMagenta")]
|
||||
pub terminal_ansi_bright_magenta: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightCyan")]
|
||||
pub terminal_ansi_bright_cyan: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightWhite")]
|
||||
pub terminal_ansi_bright_white: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBlack")]
|
||||
pub terminal_ansi_black: Option<String>,
|
||||
#[serde(rename = "terminal.ansiRed")]
|
||||
pub terminal_ansi_red: Option<String>,
|
||||
#[serde(rename = "terminal.ansiGreen")]
|
||||
pub terminal_ansi_green: Option<String>,
|
||||
#[serde(rename = "terminal.ansiYellow")]
|
||||
pub terminal_ansi_yellow: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBlue")]
|
||||
pub terminal_ansi_blue: Option<String>,
|
||||
#[serde(rename = "terminal.ansiMagenta")]
|
||||
pub terminal_ansi_magenta: Option<String>,
|
||||
#[serde(rename = "terminal.ansiCyan")]
|
||||
pub terminal_ansi_cyan: Option<String>,
|
||||
#[serde(rename = "terminal.ansiWhite")]
|
||||
pub terminal_ansi_white: Option<String>,
|
||||
#[serde(rename = "focusBorder")]
|
||||
pub focus_border: Option<String>,
|
||||
pub foreground: Option<String>,
|
||||
#[serde(rename = "selection.background")]
|
||||
pub selection_background: Option<String>,
|
||||
#[serde(rename = "errorForeground")]
|
||||
pub error_foreground: Option<String>,
|
||||
#[serde(rename = "button.background")]
|
||||
pub button_background: Option<String>,
|
||||
#[serde(rename = "button.foreground")]
|
||||
pub button_foreground: Option<String>,
|
||||
#[serde(rename = "button.secondaryBackground")]
|
||||
pub button_secondary_background: Option<String>,
|
||||
#[serde(rename = "button.secondaryForeground")]
|
||||
pub button_secondary_foreground: Option<String>,
|
||||
#[serde(rename = "button.secondaryHoverBackground")]
|
||||
pub button_secondary_hover_background: Option<String>,
|
||||
#[serde(rename = "dropdown.background")]
|
||||
pub dropdown_background: Option<String>,
|
||||
#[serde(rename = "dropdown.border")]
|
||||
pub dropdown_border: Option<String>,
|
||||
#[serde(rename = "dropdown.foreground")]
|
||||
pub dropdown_foreground: Option<String>,
|
||||
#[serde(rename = "input.background")]
|
||||
pub input_background: Option<String>,
|
||||
#[serde(rename = "input.foreground")]
|
||||
pub input_foreground: Option<String>,
|
||||
#[serde(rename = "input.border")]
|
||||
pub input_border: Option<String>,
|
||||
#[serde(rename = "input.placeholderForeground")]
|
||||
pub input_placeholder_foreground: Option<String>,
|
||||
#[serde(rename = "inputOption.activeBorder")]
|
||||
pub input_option_active_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.infoBorder")]
|
||||
pub input_validation_info_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.warningBorder")]
|
||||
pub input_validation_warning_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.errorBorder")]
|
||||
pub input_validation_error_border: Option<String>,
|
||||
#[serde(rename = "badge.foreground")]
|
||||
pub badge_foreground: Option<String>,
|
||||
#[serde(rename = "badge.background")]
|
||||
pub badge_background: Option<String>,
|
||||
#[serde(rename = "progressBar.background")]
|
||||
pub progress_bar_background: Option<String>,
|
||||
#[serde(rename = "list.activeSelectionBackground")]
|
||||
pub list_active_selection_background: Option<String>,
|
||||
#[serde(rename = "list.activeSelectionForeground")]
|
||||
pub list_active_selection_foreground: Option<String>,
|
||||
#[serde(rename = "list.dropBackground")]
|
||||
pub list_drop_background: Option<String>,
|
||||
#[serde(rename = "list.focusBackground")]
|
||||
pub list_focus_background: Option<String>,
|
||||
#[serde(rename = "list.highlightForeground")]
|
||||
pub list_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "list.hoverBackground")]
|
||||
pub list_hover_background: Option<String>,
|
||||
#[serde(rename = "list.inactiveSelectionBackground")]
|
||||
pub list_inactive_selection_background: Option<String>,
|
||||
#[serde(rename = "list.warningForeground")]
|
||||
pub list_warning_foreground: Option<String>,
|
||||
#[serde(rename = "list.errorForeground")]
|
||||
pub list_error_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.background")]
|
||||
pub activity_bar_background: Option<String>,
|
||||
#[serde(rename = "activityBar.inactiveForeground")]
|
||||
pub activity_bar_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.foreground")]
|
||||
pub activity_bar_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.activeBorder")]
|
||||
pub activity_bar_active_border: Option<String>,
|
||||
#[serde(rename = "activityBar.activeBackground")]
|
||||
pub activity_bar_active_background: Option<String>,
|
||||
#[serde(rename = "activityBarBadge.background")]
|
||||
pub activity_bar_badge_background: Option<String>,
|
||||
#[serde(rename = "activityBarBadge.foreground")]
|
||||
pub activity_bar_badge_foreground: Option<String>,
|
||||
#[serde(rename = "sideBar.background")]
|
||||
pub side_bar_background: Option<String>,
|
||||
#[serde(rename = "sideBarTitle.foreground")]
|
||||
pub side_bar_title_foreground: Option<String>,
|
||||
#[serde(rename = "sideBarSectionHeader.background")]
|
||||
pub side_bar_section_header_background: Option<String>,
|
||||
#[serde(rename = "sideBarSectionHeader.border")]
|
||||
pub side_bar_section_header_border: Option<String>,
|
||||
#[serde(rename = "editorGroup.border")]
|
||||
pub editor_group_border: Option<String>,
|
||||
#[serde(rename = "editorGroup.dropBackground")]
|
||||
pub editor_group_drop_background: Option<String>,
|
||||
#[serde(rename = "editorGroupHeader.tabsBackground")]
|
||||
pub editor_group_header_tabs_background: Option<String>,
|
||||
#[serde(rename = "tab.activeBackground")]
|
||||
pub tab_active_background: Option<String>,
|
||||
#[serde(rename = "tab.activeForeground")]
|
||||
pub tab_active_foreground: Option<String>,
|
||||
#[serde(rename = "tab.border")]
|
||||
pub tab_border: Option<String>,
|
||||
#[serde(rename = "tab.activeBorderTop")]
|
||||
pub tab_active_border_top: Option<String>,
|
||||
#[serde(rename = "tab.inactiveBackground")]
|
||||
pub tab_inactive_background: Option<String>,
|
||||
#[serde(rename = "tab.inactiveForeground")]
|
||||
pub tab_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "editor.foreground")]
|
||||
pub editor_foreground: Option<String>,
|
||||
#[serde(rename = "editor.background")]
|
||||
pub editor_background: Option<String>,
|
||||
#[serde(rename = "editorLineNumber.foreground")]
|
||||
pub editor_line_number_foreground: Option<String>,
|
||||
#[serde(rename = "editor.selectionBackground")]
|
||||
pub editor_selection_background: Option<String>,
|
||||
#[serde(rename = "editor.selectionHighlightBackground")]
|
||||
pub editor_selection_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.foldBackground")]
|
||||
pub editor_fold_background: Option<String>,
|
||||
#[serde(rename = "editor.wordHighlightBackground")]
|
||||
pub editor_word_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.wordHighlightStrongBackground")]
|
||||
pub editor_word_highlight_strong_background: Option<String>,
|
||||
#[serde(rename = "editor.findMatchBackground")]
|
||||
pub editor_find_match_background: Option<String>,
|
||||
#[serde(rename = "editor.findMatchHighlightBackground")]
|
||||
pub editor_find_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.findRangeHighlightBackground")]
|
||||
pub editor_find_range_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.hoverHighlightBackground")]
|
||||
pub editor_hover_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.lineHighlightBorder")]
|
||||
pub editor_line_highlight_border: Option<String>,
|
||||
#[serde(rename = "editorLink.activeForeground")]
|
||||
pub editor_link_active_foreground: Option<String>,
|
||||
#[serde(rename = "editor.rangeHighlightBackground")]
|
||||
pub editor_range_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetTabstopHighlightBackground")]
|
||||
pub editor_snippet_tabstop_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetTabstopHighlightBorder")]
|
||||
pub editor_snippet_tabstop_highlight_border: Option<String>,
|
||||
#[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
|
||||
pub editor_snippet_final_tabstop_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
|
||||
pub editor_snippet_final_tabstop_highlight_border: Option<String>,
|
||||
#[serde(rename = "editorWhitespace.foreground")]
|
||||
pub editor_whitespace_foreground: Option<String>,
|
||||
#[serde(rename = "editorIndentGuide.background")]
|
||||
pub editor_indent_guide_background: Option<String>,
|
||||
#[serde(rename = "editorIndentGuide.activeBackground")]
|
||||
pub editor_indent_guide_active_background: Option<String>,
|
||||
#[serde(rename = "editorRuler.foreground")]
|
||||
pub editor_ruler_foreground: Option<String>,
|
||||
#[serde(rename = "editorCodeLens.foreground")]
|
||||
pub editor_code_lens_foreground: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground1")]
|
||||
pub editor_bracket_highlight_foreground1: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground2")]
|
||||
pub editor_bracket_highlight_foreground2: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground3")]
|
||||
pub editor_bracket_highlight_foreground3: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground4")]
|
||||
pub editor_bracket_highlight_foreground4: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground5")]
|
||||
pub editor_bracket_highlight_foreground5: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground6")]
|
||||
pub editor_bracket_highlight_foreground6: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
|
||||
pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.border")]
|
||||
pub editor_overview_ruler_border: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
|
||||
pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
|
||||
pub editor_overview_ruler_word_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
|
||||
pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.modifiedForeground")]
|
||||
pub editor_overview_ruler_modified_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.addedForeground")]
|
||||
pub editor_overview_ruler_added_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.deletedForeground")]
|
||||
pub editor_overview_ruler_deleted_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.errorForeground")]
|
||||
pub editor_overview_ruler_error_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.warningForeground")]
|
||||
pub editor_overview_ruler_warning_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.infoForeground")]
|
||||
pub editor_overview_ruler_info_foreground: Option<String>,
|
||||
#[serde(rename = "editorError.foreground")]
|
||||
pub editor_error_foreground: Option<String>,
|
||||
#[serde(rename = "editorWarning.foreground")]
|
||||
pub editor_warning_foreground: Option<String>,
|
||||
#[serde(rename = "editorGutter.modifiedBackground")]
|
||||
pub editor_gutter_modified_background: Option<String>,
|
||||
#[serde(rename = "editorGutter.addedBackground")]
|
||||
pub editor_gutter_added_background: Option<String>,
|
||||
#[serde(rename = "editorGutter.deletedBackground")]
|
||||
pub editor_gutter_deleted_background: Option<String>,
|
||||
#[serde(rename = "gitDecoration.modifiedResourceForeground")]
|
||||
pub git_decoration_modified_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.deletedResourceForeground")]
|
||||
pub git_decoration_deleted_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.untrackedResourceForeground")]
|
||||
pub git_decoration_untracked_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.ignoredResourceForeground")]
|
||||
pub git_decoration_ignored_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.conflictingResourceForeground")]
|
||||
pub git_decoration_conflicting_resource_foreground: Option<String>,
|
||||
#[serde(rename = "diffEditor.insertedTextBackground")]
|
||||
pub diff_editor_inserted_text_background: Option<String>,
|
||||
#[serde(rename = "diffEditor.removedTextBackground")]
|
||||
pub diff_editor_removed_text_background: Option<String>,
|
||||
#[serde(rename = "inlineChat.regionHighlight")]
|
||||
pub inline_chat_region_highlight: Option<String>,
|
||||
#[serde(rename = "editorWidget.background")]
|
||||
pub editor_widget_background: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.background")]
|
||||
pub editor_suggest_widget_background: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.foreground")]
|
||||
pub editor_suggest_widget_foreground: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.selectedBackground")]
|
||||
pub editor_suggest_widget_selected_background: Option<String>,
|
||||
#[serde(rename = "editorHoverWidget.background")]
|
||||
pub editor_hover_widget_background: Option<String>,
|
||||
#[serde(rename = "editorHoverWidget.border")]
|
||||
pub editor_hover_widget_border: Option<String>,
|
||||
#[serde(rename = "editorMarkerNavigation.background")]
|
||||
pub editor_marker_navigation_background: Option<String>,
|
||||
#[serde(rename = "peekView.border")]
|
||||
pub peek_view_border: Option<String>,
|
||||
#[serde(rename = "peekViewEditor.background")]
|
||||
pub peek_view_editor_background: Option<String>,
|
||||
#[serde(rename = "peekViewEditor.matchHighlightBackground")]
|
||||
pub peek_view_editor_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.background")]
|
||||
pub peek_view_result_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.fileForeground")]
|
||||
pub peek_view_result_file_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewResult.lineForeground")]
|
||||
pub peek_view_result_line_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewResult.matchHighlightBackground")]
|
||||
pub peek_view_result_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.selectionBackground")]
|
||||
pub peek_view_result_selection_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.selectionForeground")]
|
||||
pub peek_view_result_selection_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewTitle.background")]
|
||||
pub peek_view_title_background: Option<String>,
|
||||
#[serde(rename = "peekViewTitleDescription.foreground")]
|
||||
pub peek_view_title_description_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewTitleLabel.foreground")]
|
||||
pub peek_view_title_label_foreground: Option<String>,
|
||||
#[serde(rename = "merge.currentHeaderBackground")]
|
||||
pub merge_current_header_background: Option<String>,
|
||||
#[serde(rename = "merge.incomingHeaderBackground")]
|
||||
pub merge_incoming_header_background: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.currentContentForeground")]
|
||||
pub editor_overview_ruler_current_content_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.incomingContentForeground")]
|
||||
pub editor_overview_ruler_incoming_content_foreground: Option<String>,
|
||||
#[serde(rename = "panel.background")]
|
||||
pub panel_background: Option<String>,
|
||||
#[serde(rename = "panel.border")]
|
||||
pub panel_border: Option<String>,
|
||||
#[serde(rename = "panelTitle.activeBorder")]
|
||||
pub panel_title_active_border: Option<String>,
|
||||
#[serde(rename = "panelTitle.activeForeground")]
|
||||
pub panel_title_active_foreground: Option<String>,
|
||||
#[serde(rename = "panelTitle.inactiveForeground")]
|
||||
pub panel_title_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.background")]
|
||||
pub status_bar_background: Option<String>,
|
||||
#[serde(rename = "statusBar.foreground")]
|
||||
pub status_bar_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.debuggingBackground")]
|
||||
pub status_bar_debugging_background: Option<String>,
|
||||
#[serde(rename = "statusBar.debuggingForeground")]
|
||||
pub status_bar_debugging_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.noFolderBackground")]
|
||||
pub status_bar_no_folder_background: Option<String>,
|
||||
#[serde(rename = "statusBar.noFolderForeground")]
|
||||
pub status_bar_no_folder_foreground: Option<String>,
|
||||
#[serde(rename = "statusBarItem.prominentBackground")]
|
||||
pub status_bar_item_prominent_background: Option<String>,
|
||||
#[serde(rename = "statusBarItem.prominentHoverBackground")]
|
||||
pub status_bar_item_prominent_hover_background: Option<String>,
|
||||
#[serde(rename = "statusBarItem.remoteForeground")]
|
||||
pub status_bar_item_remote_foreground: Option<String>,
|
||||
#[serde(rename = "statusBarItem.remoteBackground")]
|
||||
pub status_bar_item_remote_background: Option<String>,
|
||||
#[serde(rename = "titleBar.activeBackground")]
|
||||
pub title_bar_active_background: Option<String>,
|
||||
#[serde(rename = "titleBar.activeForeground")]
|
||||
pub title_bar_active_foreground: Option<String>,
|
||||
#[serde(rename = "titleBar.inactiveBackground")]
|
||||
pub title_bar_inactive_background: Option<String>,
|
||||
#[serde(rename = "titleBar.inactiveForeground")]
|
||||
pub title_bar_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentForeground")]
|
||||
pub extension_button_prominent_foreground: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentBackground")]
|
||||
pub extension_button_prominent_background: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentHoverBackground")]
|
||||
pub extension_button_prominent_hover_background: Option<String>,
|
||||
#[serde(rename = "pickerGroup.border")]
|
||||
pub picker_group_border: Option<String>,
|
||||
#[serde(rename = "pickerGroup.foreground")]
|
||||
pub picker_group_foreground: Option<String>,
|
||||
#[serde(rename = "debugToolBar.background")]
|
||||
pub debug_tool_bar_background: Option<String>,
|
||||
#[serde(rename = "walkThrough.embeddedEditorBackground")]
|
||||
pub walk_through_embedded_editor_background: Option<String>,
|
||||
#[serde(rename = "settings.headerForeground")]
|
||||
pub settings_header_foreground: Option<String>,
|
||||
#[serde(rename = "settings.modifiedItemIndicator")]
|
||||
pub settings_modified_item_indicator: Option<String>,
|
||||
#[serde(rename = "settings.dropdownBackground")]
|
||||
pub settings_dropdown_background: Option<String>,
|
||||
#[serde(rename = "settings.dropdownForeground")]
|
||||
pub settings_dropdown_foreground: Option<String>,
|
||||
#[serde(rename = "settings.dropdownBorder")]
|
||||
pub settings_dropdown_border: Option<String>,
|
||||
#[serde(rename = "settings.checkboxBackground")]
|
||||
pub settings_checkbox_background: Option<String>,
|
||||
#[serde(rename = "settings.checkboxForeground")]
|
||||
pub settings_checkbox_foreground: Option<String>,
|
||||
#[serde(rename = "settings.checkboxBorder")]
|
||||
pub settings_checkbox_border: Option<String>,
|
||||
#[serde(rename = "settings.textInputBackground")]
|
||||
pub settings_text_input_background: Option<String>,
|
||||
#[serde(rename = "settings.textInputForeground")]
|
||||
pub settings_text_input_foreground: Option<String>,
|
||||
#[serde(rename = "settings.textInputBorder")]
|
||||
pub settings_text_input_border: Option<String>,
|
||||
#[serde(rename = "settings.numberInputBackground")]
|
||||
pub settings_number_input_background: Option<String>,
|
||||
#[serde(rename = "settings.numberInputForeground")]
|
||||
pub settings_number_input_foreground: Option<String>,
|
||||
#[serde(rename = "settings.numberInputBorder")]
|
||||
pub settings_number_input_border: Option<String>,
|
||||
#[serde(rename = "breadcrumb.foreground")]
|
||||
pub breadcrumb_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumb.background")]
|
||||
pub breadcrumb_background: Option<String>,
|
||||
#[serde(rename = "breadcrumb.focusForeground")]
|
||||
pub breadcrumb_focus_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumb.activeSelectionForeground")]
|
||||
pub breadcrumb_active_selection_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumbPicker.background")]
|
||||
pub breadcrumb_picker_background: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.background")]
|
||||
pub list_filter_widget_background: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.outline")]
|
||||
pub list_filter_widget_outline: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.noMatchesOutline")]
|
||||
pub list_filter_widget_no_matches_outline: Option<String>,
|
||||
}
|
||||
|
||||
fn try_parse_color(color: &str) -> Result<Hsla> {
|
||||
Ok(Rgba::try_from(color)?.into())
|
||||
}
|
||||
|
||||
pub struct VsCodeThemeConverter {
|
||||
theme: VsCodeTheme,
|
||||
theme_metadata: ThemeMetadata,
|
||||
}
|
||||
|
||||
impl VsCodeThemeConverter {
|
||||
pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
|
||||
Self {
|
||||
theme,
|
||||
theme_metadata,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn convert(self) -> Result<UserTheme> {
|
||||
let appearance = self.theme_metadata.appearance.into();
|
||||
|
||||
let vscode_colors = &self.theme.colors;
|
||||
|
||||
let theme_colors_refinements = ThemeColorsRefinement {
|
||||
border: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_variant: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_focused: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_disabled: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_selected: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_transparent: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
elevated_surface_background: vscode_colors
|
||||
.panel_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
surface_background: vscode_colors
|
||||
.panel_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
background: vscode_colors
|
||||
.editor_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
element_background: vscode_colors
|
||||
.button_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
text: vscode_colors
|
||||
.foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
tab_active_background: vscode_colors
|
||||
.tab_active_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
tab_inactive_background: vscode_colors
|
||||
.tab_inactive_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_background: vscode_colors
|
||||
.terminal_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_black: vscode_colors
|
||||
.terminal_ansi_bright_black
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_red: vscode_colors
|
||||
.terminal_ansi_bright_red
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_green: vscode_colors
|
||||
.terminal_ansi_bright_green
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_yellow: vscode_colors
|
||||
.terminal_ansi_bright_yellow
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_blue: vscode_colors
|
||||
.terminal_ansi_bright_blue
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_magenta: vscode_colors
|
||||
.terminal_ansi_bright_magenta
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_cyan: vscode_colors
|
||||
.terminal_ansi_bright_cyan
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_white: vscode_colors
|
||||
.terminal_ansi_bright_white
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_black: vscode_colors
|
||||
.terminal_ansi_black
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_red: vscode_colors
|
||||
.terminal_ansi_red
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_green: vscode_colors
|
||||
.terminal_ansi_green
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_yellow: vscode_colors
|
||||
.terminal_ansi_yellow
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_blue: vscode_colors
|
||||
.terminal_ansi_blue
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_magenta: vscode_colors
|
||||
.terminal_ansi_magenta
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_cyan: vscode_colors
|
||||
.terminal_ansi_cyan
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_white: vscode_colors
|
||||
.terminal_ansi_white
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
Ok(UserTheme {
|
||||
name: self.theme_metadata.name.into(),
|
||||
appearance,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: theme_colors_refinements,
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
pub use converter::*;
|
||||
pub use syntax::*;
|
||||
pub use theme::*;
|
||||
|
|
372
crates/theme_importer/src/vscode/converter.rs
Normal file
372
crates/theme_importer/src/vscode/converter.rs
Normal file
|
@ -0,0 +1,372 @@
|
|||
use anyhow::Result;
|
||||
use gpui::{Hsla, Rgba};
|
||||
use indexmap::IndexMap;
|
||||
use strum::IntoEnumIterator;
|
||||
use theme::{
|
||||
StatusColorsRefinement, ThemeColorsRefinement, UserFontStyle, UserFontWeight,
|
||||
UserHighlightStyle, UserSyntaxTheme, UserTheme, UserThemeStylesRefinement,
|
||||
};
|
||||
|
||||
use crate::util::Traverse;
|
||||
use crate::vscode::VsCodeTheme;
|
||||
use crate::ThemeMetadata;
|
||||
|
||||
use super::ZedSyntaxToken;
|
||||
|
||||
pub(crate) fn try_parse_color(color: &str) -> Result<Hsla> {
|
||||
Ok(Rgba::try_from(color)?.into())
|
||||
}
|
||||
|
||||
pub(crate) fn try_parse_font_weight(font_style: &str) -> Option<UserFontWeight> {
|
||||
match font_style {
|
||||
style if style.contains("bold") => Some(UserFontWeight::BOLD),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn try_parse_font_style(font_style: &str) -> Option<UserFontStyle> {
|
||||
match font_style {
|
||||
style if style.contains("italic") => Some(UserFontStyle::Italic),
|
||||
style if style.contains("oblique") => Some(UserFontStyle::Oblique),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub struct VsCodeThemeConverter {
|
||||
theme: VsCodeTheme,
|
||||
theme_metadata: ThemeMetadata,
|
||||
}
|
||||
|
||||
impl VsCodeThemeConverter {
|
||||
pub fn new(theme: VsCodeTheme, theme_metadata: ThemeMetadata) -> Self {
|
||||
Self {
|
||||
theme,
|
||||
theme_metadata,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn convert(self) -> Result<UserTheme> {
|
||||
let appearance = self.theme_metadata.appearance.into();
|
||||
|
||||
let status_color_refinements = self.convert_status_colors()?;
|
||||
let theme_colors_refinements = self.convert_theme_colors()?;
|
||||
let syntax_theme = self.convert_syntax_theme()?;
|
||||
|
||||
Ok(UserTheme {
|
||||
name: self.theme_metadata.name.into(),
|
||||
appearance,
|
||||
styles: UserThemeStylesRefinement {
|
||||
colors: theme_colors_refinements,
|
||||
status: status_color_refinements,
|
||||
syntax: Some(syntax_theme),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
fn convert_status_colors(&self) -> Result<StatusColorsRefinement> {
|
||||
let vscode_colors = &self.theme.colors;
|
||||
|
||||
Ok(StatusColorsRefinement {
|
||||
// conflict: None,
|
||||
// created: None,
|
||||
deleted: vscode_colors
|
||||
.error_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
error: vscode_colors
|
||||
.error_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
hidden: vscode_colors
|
||||
.tab_inactive_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
// ignored: None,
|
||||
// info: None,
|
||||
// modified: None,
|
||||
// renamed: None,
|
||||
// success: None,
|
||||
warning: vscode_colors
|
||||
.list_warning_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
|
||||
fn convert_theme_colors(&self) -> Result<ThemeColorsRefinement> {
|
||||
let vscode_colors = &self.theme.colors;
|
||||
|
||||
Ok(ThemeColorsRefinement {
|
||||
border: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_variant: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_focused: vscode_colors
|
||||
.focus_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_disabled: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_selected: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
border_transparent: vscode_colors
|
||||
.panel_border
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
elevated_surface_background: vscode_colors
|
||||
.panel_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
surface_background: vscode_colors
|
||||
.panel_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
background: vscode_colors
|
||||
.editor_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
element_background: vscode_colors
|
||||
.button_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
element_hover: vscode_colors
|
||||
.list_hover_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
element_selected: vscode_colors
|
||||
.list_active_selection_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
ghost_element_hover: vscode_colors
|
||||
.list_hover_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
drop_target_background: vscode_colors
|
||||
.list_drop_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
text: vscode_colors
|
||||
.foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?
|
||||
.or_else(|| {
|
||||
self.theme
|
||||
.token_colors
|
||||
.iter()
|
||||
.find(|token_color| token_color.scope.is_none())
|
||||
.and_then(|token_color| token_color.settings.foreground.as_ref())
|
||||
.traverse(|color| try_parse_color(&color))
|
||||
.ok()
|
||||
.flatten()
|
||||
}),
|
||||
tab_active_background: vscode_colors
|
||||
.tab_active_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
tab_inactive_background: vscode_colors
|
||||
.tab_inactive_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
editor_background: vscode_colors
|
||||
.editor_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
editor_gutter_background: vscode_colors
|
||||
.editor_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
editor_line_number: vscode_colors
|
||||
.editor_line_number_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
editor_active_line_number: vscode_colors
|
||||
.editor_foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_background: vscode_colors
|
||||
.terminal_background
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_black: vscode_colors
|
||||
.terminal_ansi_bright_black
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_red: vscode_colors
|
||||
.terminal_ansi_bright_red
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_green: vscode_colors
|
||||
.terminal_ansi_bright_green
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_yellow: vscode_colors
|
||||
.terminal_ansi_bright_yellow
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_blue: vscode_colors
|
||||
.terminal_ansi_bright_blue
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_magenta: vscode_colors
|
||||
.terminal_ansi_bright_magenta
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_cyan: vscode_colors
|
||||
.terminal_ansi_bright_cyan
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_bright_white: vscode_colors
|
||||
.terminal_ansi_bright_white
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_black: vscode_colors
|
||||
.terminal_ansi_black
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_red: vscode_colors
|
||||
.terminal_ansi_red
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_green: vscode_colors
|
||||
.terminal_ansi_green
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_yellow: vscode_colors
|
||||
.terminal_ansi_yellow
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_blue: vscode_colors
|
||||
.terminal_ansi_blue
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_magenta: vscode_colors
|
||||
.terminal_ansi_magenta
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_cyan: vscode_colors
|
||||
.terminal_ansi_cyan
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
terminal_ansi_white: vscode_colors
|
||||
.terminal_ansi_white
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
|
||||
fn convert_syntax_theme(&self) -> Result<UserSyntaxTheme> {
|
||||
let mut highlight_styles = IndexMap::new();
|
||||
|
||||
for syntax_token in ZedSyntaxToken::iter() {
|
||||
let multimatch_scopes = syntax_token.to_vscode();
|
||||
|
||||
let token_color = self.theme.token_colors.iter().find(|token_color| {
|
||||
token_color
|
||||
.scope
|
||||
.as_ref()
|
||||
.map(|scope| scope.multimatch(&multimatch_scopes))
|
||||
.unwrap_or(false)
|
||||
});
|
||||
|
||||
let Some(token_color) = token_color else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let highlight_style = UserHighlightStyle {
|
||||
color: token_color
|
||||
.settings
|
||||
.foreground
|
||||
.as_ref()
|
||||
.traverse(|color| try_parse_color(&color))?,
|
||||
font_style: token_color
|
||||
.settings
|
||||
.font_style
|
||||
.as_ref()
|
||||
.and_then(|style| try_parse_font_style(&style)),
|
||||
font_weight: token_color
|
||||
.settings
|
||||
.font_style
|
||||
.as_ref()
|
||||
.and_then(|style| try_parse_font_weight(&style)),
|
||||
};
|
||||
|
||||
if highlight_style.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
highlight_styles.insert(syntax_token.to_string(), highlight_style);
|
||||
}
|
||||
|
||||
Ok(UserSyntaxTheme {
|
||||
highlights: highlight_styles.into_iter().collect(),
|
||||
})
|
||||
|
||||
// let mut highlight_styles = IndexMap::new();
|
||||
|
||||
// for token_color in self.theme.token_colors {
|
||||
// highlight_styles.extend(token_color.highlight_styles()?);
|
||||
// }
|
||||
|
||||
// let syntax_theme = UserSyntaxTheme {
|
||||
// highlights: highlight_styles.into_iter().collect(),
|
||||
// };
|
||||
|
||||
// pub fn highlight_styles(&self) -> Result<IndexMap<String, UserHighlightStyle>> {
|
||||
// let mut highlight_styles = IndexMap::new();
|
||||
|
||||
// for syntax_token in ZedSyntaxToken::iter() {
|
||||
// let scope = syntax_token.to_scope();
|
||||
|
||||
// // let token_color =
|
||||
// }
|
||||
|
||||
// let scope = match self.scope {
|
||||
// Some(VsCodeTokenScope::One(ref scope)) => vec![scope.clone()],
|
||||
// Some(VsCodeTokenScope::Many(ref scopes)) => scopes.clone(),
|
||||
// None => return Ok(IndexMap::new()),
|
||||
// };
|
||||
|
||||
// for scope in &scope {
|
||||
// let Some(syntax_token) = Self::to_zed_token(&scope) else {
|
||||
// continue;
|
||||
// };
|
||||
|
||||
// let highlight_style = UserHighlightStyle {
|
||||
// color: self
|
||||
// .settings
|
||||
// .foreground
|
||||
// .as_ref()
|
||||
// .traverse(|color| try_parse_color(&color))?,
|
||||
// font_style: self
|
||||
// .settings
|
||||
// .font_style
|
||||
// .as_ref()
|
||||
// .and_then(|style| try_parse_font_style(&style)),
|
||||
// font_weight: self
|
||||
// .settings
|
||||
// .font_style
|
||||
// .as_ref()
|
||||
// .and_then(|style| try_parse_font_weight(&style)),
|
||||
// };
|
||||
|
||||
// if highlight_style.is_empty() {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// highlight_styles.insert(syntax_token, highlight_style);
|
||||
// }
|
||||
|
||||
// Ok(highlight_styles)
|
||||
// }
|
||||
}
|
||||
}
|
218
crates/theme_importer/src/vscode/syntax.rs
Normal file
218
crates/theme_importer/src/vscode/syntax.rs
Normal file
|
@ -0,0 +1,218 @@
|
|||
use serde::Deserialize;
|
||||
use strum::EnumIter;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum VsCodeTokenScope {
|
||||
One(String),
|
||||
Many(Vec<String>),
|
||||
}
|
||||
|
||||
impl VsCodeTokenScope {
|
||||
pub fn multimatch(&self, matches: &[&'static str]) -> bool {
|
||||
match self {
|
||||
VsCodeTokenScope::One(scope) => matches.iter().any(|&s| s == scope),
|
||||
VsCodeTokenScope::Many(scopes) => {
|
||||
matches.iter().any(|s| scopes.contains(&s.to_string()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct VsCodeTokenColor {
|
||||
pub scope: Option<VsCodeTokenScope>,
|
||||
pub settings: VsCodeTokenColorSettings,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct VsCodeTokenColorSettings {
|
||||
pub foreground: Option<String>,
|
||||
pub background: Option<String>,
|
||||
#[serde(rename = "fontStyle")]
|
||||
pub font_style: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Copy, Clone, EnumIter)]
|
||||
pub enum ZedSyntaxToken {
|
||||
SyntaxAttribute,
|
||||
SyntaxBoolean,
|
||||
SyntaxComment,
|
||||
SyntaxCommentDoc,
|
||||
SyntaxConstant,
|
||||
SyntaxConstructor,
|
||||
SyntaxEmbedded,
|
||||
SyntaxEmphasis,
|
||||
SyntaxEmphasisStrong,
|
||||
SyntaxEnum,
|
||||
SyntaxFunction,
|
||||
SyntaxHint,
|
||||
SyntaxKeyword,
|
||||
SyntaxLabel,
|
||||
SyntaxLinkText,
|
||||
SyntaxLinkUri,
|
||||
SyntaxNumber,
|
||||
SyntaxOperator,
|
||||
SyntaxPredictive,
|
||||
SyntaxPreproc,
|
||||
SyntaxPrimary,
|
||||
SyntaxProperty,
|
||||
SyntaxPunctuation,
|
||||
SyntaxPunctuationBracket,
|
||||
SyntaxPunctuationDelimiter,
|
||||
SyntaxPunctuationListMarker,
|
||||
SyntaxPunctuationSpecial,
|
||||
SyntaxString,
|
||||
SyntaxStringEscape,
|
||||
SyntaxStringRegex,
|
||||
SyntaxStringSpecial,
|
||||
SyntaxStringSpecialSymbol,
|
||||
SyntaxTag,
|
||||
SyntaxTextLiteral,
|
||||
SyntaxTitle,
|
||||
SyntaxType,
|
||||
SyntaxVariable,
|
||||
SyntaxVariableSpecial,
|
||||
SyntaxVariant,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for ZedSyntaxToken {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
use ZedSyntaxToken::*;
|
||||
|
||||
write!(
|
||||
f,
|
||||
"{}",
|
||||
match self {
|
||||
SyntaxAttribute => "attribute",
|
||||
SyntaxBoolean => "boolean",
|
||||
SyntaxComment => "comment",
|
||||
SyntaxCommentDoc => "comment.doc",
|
||||
SyntaxConstant => "constant",
|
||||
SyntaxConstructor => "constructor",
|
||||
SyntaxEmbedded => "embedded",
|
||||
SyntaxEmphasis => "emphasis",
|
||||
SyntaxEmphasisStrong => "emphasis.strong",
|
||||
SyntaxEnum => "enum",
|
||||
SyntaxFunction => "function",
|
||||
SyntaxHint => "hint",
|
||||
SyntaxKeyword => "keyword",
|
||||
SyntaxLabel => "label",
|
||||
SyntaxLinkText => "link_text",
|
||||
SyntaxLinkUri => "link_uri",
|
||||
SyntaxNumber => "number",
|
||||
SyntaxOperator => "operator",
|
||||
SyntaxPredictive => "predictive",
|
||||
SyntaxPreproc => "preproc",
|
||||
SyntaxPrimary => "primary",
|
||||
SyntaxProperty => "property",
|
||||
SyntaxPunctuation => "punctuation",
|
||||
SyntaxPunctuationBracket => "punctuation.bracket",
|
||||
SyntaxPunctuationDelimiter => "punctuation.delimiter",
|
||||
SyntaxPunctuationListMarker => "punctuation.list_marker",
|
||||
SyntaxPunctuationSpecial => "punctuation.special",
|
||||
SyntaxString => "string",
|
||||
SyntaxStringEscape => "string.escape",
|
||||
SyntaxStringRegex => "string.regex",
|
||||
SyntaxStringSpecial => "string.special",
|
||||
SyntaxStringSpecialSymbol => "string.special.symbol",
|
||||
SyntaxTag => "tag",
|
||||
SyntaxTextLiteral => "text.literal",
|
||||
SyntaxTitle => "title",
|
||||
SyntaxType => "type",
|
||||
SyntaxVariable => "variable",
|
||||
SyntaxVariableSpecial => "variable.special",
|
||||
SyntaxVariant => "variant",
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl ZedSyntaxToken {
|
||||
pub fn to_vscode(&self) -> Vec<&'static str> {
|
||||
use ZedSyntaxToken::*;
|
||||
|
||||
match self {
|
||||
SyntaxAttribute => vec!["entity.other.attribute-name"],
|
||||
SyntaxBoolean => vec!["constant.language"],
|
||||
SyntaxComment => vec!["comment"],
|
||||
SyntaxCommentDoc => vec!["comment.block.documentation"],
|
||||
SyntaxConstant => vec!["constant.character"],
|
||||
SyntaxConstructor => vec!["entity.name.function.definition.special.constructor"],
|
||||
SyntaxEmbedded => vec!["meta.embedded"],
|
||||
SyntaxEmphasis => vec!["markup.italic"],
|
||||
SyntaxEmphasisStrong => vec![
|
||||
"markup.bold",
|
||||
"markup.italic markup.bold",
|
||||
"markup.bold markup.italic",
|
||||
],
|
||||
SyntaxEnum => vec!["support.type.enum"],
|
||||
SyntaxFunction => vec![
|
||||
"entity.name.function",
|
||||
"variable.function",
|
||||
"support.function",
|
||||
],
|
||||
SyntaxKeyword => vec!["keyword"],
|
||||
SyntaxLabel => vec![
|
||||
"label",
|
||||
"entity.name",
|
||||
"entity.name.import",
|
||||
"entity.name.package",
|
||||
],
|
||||
SyntaxLinkText => vec!["markup.underline.link", "string.other.link"],
|
||||
SyntaxLinkUri => vec!["markup.underline.link", "string.other.link"],
|
||||
SyntaxNumber => vec!["constant.numeric", "number"],
|
||||
SyntaxOperator => vec!["operator", "keyword.operator"],
|
||||
SyntaxPreproc => vec!["preproc"],
|
||||
SyntaxProperty => vec![
|
||||
"variable.member",
|
||||
"support.type.property-name",
|
||||
"variable.object.property",
|
||||
"variable.other.field",
|
||||
],
|
||||
SyntaxPunctuation => vec![
|
||||
"punctuation",
|
||||
"punctuation.section",
|
||||
"punctuation.accessor",
|
||||
"punctuation.separator",
|
||||
"punctuation.terminator",
|
||||
"punctuation.definition.tag",
|
||||
],
|
||||
SyntaxPunctuationBracket => vec![
|
||||
"punctuation.bracket",
|
||||
"punctuation.definition.tag.begin",
|
||||
"punctuation.definition.tag.end",
|
||||
],
|
||||
SyntaxPunctuationDelimiter => vec![
|
||||
"punctuation.delimiter",
|
||||
"punctuation.separator",
|
||||
"punctuation.terminator",
|
||||
],
|
||||
SyntaxPunctuationListMarker => vec!["markup.list punctuation.definition.list.begin"],
|
||||
SyntaxPunctuationSpecial => vec!["punctuation.special"],
|
||||
SyntaxString => vec!["string"],
|
||||
SyntaxStringEscape => vec!["string.escape", "constant.character", "constant.other"],
|
||||
SyntaxStringRegex => vec!["string.regex"],
|
||||
SyntaxStringSpecial => vec!["string.special", "constant.other.symbol"],
|
||||
SyntaxStringSpecialSymbol => vec!["string.special.symbol", "constant.other.symbol"],
|
||||
SyntaxTag => vec!["tag", "entity.name.tag", "meta.tag.sgml"],
|
||||
SyntaxTextLiteral => vec!["text.literal", "string"],
|
||||
SyntaxTitle => vec!["title", "entity.name"],
|
||||
SyntaxType => vec!["entity.name.type", "support.type", "support.class"],
|
||||
SyntaxVariable => vec![
|
||||
"variable",
|
||||
"variable.language",
|
||||
"variable.member",
|
||||
"variable.parameter.function-call",
|
||||
],
|
||||
SyntaxVariableSpecial => vec![
|
||||
"variable.special",
|
||||
"variable.member",
|
||||
"variable.annotation",
|
||||
"variable.language",
|
||||
],
|
||||
SyntaxVariant => vec!["variant"],
|
||||
_ => vec![],
|
||||
}
|
||||
}
|
||||
}
|
412
crates/theme_importer/src/vscode/theme.rs
Normal file
412
crates/theme_importer/src/vscode/theme.rs
Normal file
|
@ -0,0 +1,412 @@
|
|||
use serde::Deserialize;
|
||||
|
||||
use crate::vscode::VsCodeTokenColor;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct VsCodeTheme {
|
||||
#[serde(rename = "$schema")]
|
||||
pub schema: Option<String>,
|
||||
pub name: Option<String>,
|
||||
pub author: Option<String>,
|
||||
pub maintainers: Option<Vec<String>>,
|
||||
#[serde(rename = "semanticClass")]
|
||||
pub semantic_class: Option<String>,
|
||||
#[serde(rename = "semanticHighlighting")]
|
||||
pub semantic_highlighting: Option<bool>,
|
||||
pub colors: VsCodeColors,
|
||||
#[serde(rename = "tokenColors")]
|
||||
pub token_colors: Vec<VsCodeTokenColor>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct VsCodeColors {
|
||||
#[serde(rename = "terminal.background")]
|
||||
pub terminal_background: Option<String>,
|
||||
#[serde(rename = "terminal.foreground")]
|
||||
pub terminal_foreground: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightBlack")]
|
||||
pub terminal_ansi_bright_black: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightRed")]
|
||||
pub terminal_ansi_bright_red: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightGreen")]
|
||||
pub terminal_ansi_bright_green: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightYellow")]
|
||||
pub terminal_ansi_bright_yellow: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightBlue")]
|
||||
pub terminal_ansi_bright_blue: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightMagenta")]
|
||||
pub terminal_ansi_bright_magenta: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightCyan")]
|
||||
pub terminal_ansi_bright_cyan: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBrightWhite")]
|
||||
pub terminal_ansi_bright_white: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBlack")]
|
||||
pub terminal_ansi_black: Option<String>,
|
||||
#[serde(rename = "terminal.ansiRed")]
|
||||
pub terminal_ansi_red: Option<String>,
|
||||
#[serde(rename = "terminal.ansiGreen")]
|
||||
pub terminal_ansi_green: Option<String>,
|
||||
#[serde(rename = "terminal.ansiYellow")]
|
||||
pub terminal_ansi_yellow: Option<String>,
|
||||
#[serde(rename = "terminal.ansiBlue")]
|
||||
pub terminal_ansi_blue: Option<String>,
|
||||
#[serde(rename = "terminal.ansiMagenta")]
|
||||
pub terminal_ansi_magenta: Option<String>,
|
||||
#[serde(rename = "terminal.ansiCyan")]
|
||||
pub terminal_ansi_cyan: Option<String>,
|
||||
#[serde(rename = "terminal.ansiWhite")]
|
||||
pub terminal_ansi_white: Option<String>,
|
||||
#[serde(rename = "focusBorder")]
|
||||
pub focus_border: Option<String>,
|
||||
pub foreground: Option<String>,
|
||||
#[serde(rename = "selection.background")]
|
||||
pub selection_background: Option<String>,
|
||||
#[serde(rename = "errorForeground")]
|
||||
pub error_foreground: Option<String>,
|
||||
#[serde(rename = "button.background")]
|
||||
pub button_background: Option<String>,
|
||||
#[serde(rename = "button.foreground")]
|
||||
pub button_foreground: Option<String>,
|
||||
#[serde(rename = "button.secondaryBackground")]
|
||||
pub button_secondary_background: Option<String>,
|
||||
#[serde(rename = "button.secondaryForeground")]
|
||||
pub button_secondary_foreground: Option<String>,
|
||||
#[serde(rename = "button.secondaryHoverBackground")]
|
||||
pub button_secondary_hover_background: Option<String>,
|
||||
#[serde(rename = "dropdown.background")]
|
||||
pub dropdown_background: Option<String>,
|
||||
#[serde(rename = "dropdown.border")]
|
||||
pub dropdown_border: Option<String>,
|
||||
#[serde(rename = "dropdown.foreground")]
|
||||
pub dropdown_foreground: Option<String>,
|
||||
#[serde(rename = "input.background")]
|
||||
pub input_background: Option<String>,
|
||||
#[serde(rename = "input.foreground")]
|
||||
pub input_foreground: Option<String>,
|
||||
#[serde(rename = "input.border")]
|
||||
pub input_border: Option<String>,
|
||||
#[serde(rename = "input.placeholderForeground")]
|
||||
pub input_placeholder_foreground: Option<String>,
|
||||
#[serde(rename = "inputOption.activeBorder")]
|
||||
pub input_option_active_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.infoBorder")]
|
||||
pub input_validation_info_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.warningBorder")]
|
||||
pub input_validation_warning_border: Option<String>,
|
||||
#[serde(rename = "inputValidation.errorBorder")]
|
||||
pub input_validation_error_border: Option<String>,
|
||||
#[serde(rename = "badge.foreground")]
|
||||
pub badge_foreground: Option<String>,
|
||||
#[serde(rename = "badge.background")]
|
||||
pub badge_background: Option<String>,
|
||||
#[serde(rename = "progressBar.background")]
|
||||
pub progress_bar_background: Option<String>,
|
||||
#[serde(rename = "list.activeSelectionBackground")]
|
||||
pub list_active_selection_background: Option<String>,
|
||||
#[serde(rename = "list.activeSelectionForeground")]
|
||||
pub list_active_selection_foreground: Option<String>,
|
||||
#[serde(rename = "list.dropBackground")]
|
||||
pub list_drop_background: Option<String>,
|
||||
#[serde(rename = "list.focusBackground")]
|
||||
pub list_focus_background: Option<String>,
|
||||
#[serde(rename = "list.highlightForeground")]
|
||||
pub list_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "list.hoverBackground")]
|
||||
pub list_hover_background: Option<String>,
|
||||
#[serde(rename = "list.inactiveSelectionBackground")]
|
||||
pub list_inactive_selection_background: Option<String>,
|
||||
#[serde(rename = "list.warningForeground")]
|
||||
pub list_warning_foreground: Option<String>,
|
||||
#[serde(rename = "list.errorForeground")]
|
||||
pub list_error_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.background")]
|
||||
pub activity_bar_background: Option<String>,
|
||||
#[serde(rename = "activityBar.inactiveForeground")]
|
||||
pub activity_bar_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.foreground")]
|
||||
pub activity_bar_foreground: Option<String>,
|
||||
#[serde(rename = "activityBar.activeBorder")]
|
||||
pub activity_bar_active_border: Option<String>,
|
||||
#[serde(rename = "activityBar.activeBackground")]
|
||||
pub activity_bar_active_background: Option<String>,
|
||||
#[serde(rename = "activityBarBadge.background")]
|
||||
pub activity_bar_badge_background: Option<String>,
|
||||
#[serde(rename = "activityBarBadge.foreground")]
|
||||
pub activity_bar_badge_foreground: Option<String>,
|
||||
#[serde(rename = "sideBar.background")]
|
||||
pub side_bar_background: Option<String>,
|
||||
#[serde(rename = "sideBarTitle.foreground")]
|
||||
pub side_bar_title_foreground: Option<String>,
|
||||
#[serde(rename = "sideBarSectionHeader.background")]
|
||||
pub side_bar_section_header_background: Option<String>,
|
||||
#[serde(rename = "sideBarSectionHeader.border")]
|
||||
pub side_bar_section_header_border: Option<String>,
|
||||
#[serde(rename = "editorGroup.border")]
|
||||
pub editor_group_border: Option<String>,
|
||||
#[serde(rename = "editorGroup.dropBackground")]
|
||||
pub editor_group_drop_background: Option<String>,
|
||||
#[serde(rename = "editorGroupHeader.tabsBackground")]
|
||||
pub editor_group_header_tabs_background: Option<String>,
|
||||
#[serde(rename = "tab.activeBackground")]
|
||||
pub tab_active_background: Option<String>,
|
||||
#[serde(rename = "tab.activeForeground")]
|
||||
pub tab_active_foreground: Option<String>,
|
||||
#[serde(rename = "tab.border")]
|
||||
pub tab_border: Option<String>,
|
||||
#[serde(rename = "tab.activeBorderTop")]
|
||||
pub tab_active_border_top: Option<String>,
|
||||
#[serde(rename = "tab.inactiveBackground")]
|
||||
pub tab_inactive_background: Option<String>,
|
||||
#[serde(rename = "tab.inactiveForeground")]
|
||||
pub tab_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "editor.foreground")]
|
||||
pub editor_foreground: Option<String>,
|
||||
#[serde(rename = "editor.background")]
|
||||
pub editor_background: Option<String>,
|
||||
#[serde(rename = "editorLineNumber.foreground")]
|
||||
pub editor_line_number_foreground: Option<String>,
|
||||
#[serde(rename = "editor.selectionBackground")]
|
||||
pub editor_selection_background: Option<String>,
|
||||
#[serde(rename = "editor.selectionHighlightBackground")]
|
||||
pub editor_selection_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.foldBackground")]
|
||||
pub editor_fold_background: Option<String>,
|
||||
#[serde(rename = "editor.wordHighlightBackground")]
|
||||
pub editor_word_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.wordHighlightStrongBackground")]
|
||||
pub editor_word_highlight_strong_background: Option<String>,
|
||||
#[serde(rename = "editor.findMatchBackground")]
|
||||
pub editor_find_match_background: Option<String>,
|
||||
#[serde(rename = "editor.findMatchHighlightBackground")]
|
||||
pub editor_find_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.findRangeHighlightBackground")]
|
||||
pub editor_find_range_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.hoverHighlightBackground")]
|
||||
pub editor_hover_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.lineHighlightBorder")]
|
||||
pub editor_line_highlight_border: Option<String>,
|
||||
#[serde(rename = "editorLink.activeForeground")]
|
||||
pub editor_link_active_foreground: Option<String>,
|
||||
#[serde(rename = "editor.rangeHighlightBackground")]
|
||||
pub editor_range_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetTabstopHighlightBackground")]
|
||||
pub editor_snippet_tabstop_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetTabstopHighlightBorder")]
|
||||
pub editor_snippet_tabstop_highlight_border: Option<String>,
|
||||
#[serde(rename = "editor.snippetFinalTabstopHighlightBackground")]
|
||||
pub editor_snippet_final_tabstop_highlight_background: Option<String>,
|
||||
#[serde(rename = "editor.snippetFinalTabstopHighlightBorder")]
|
||||
pub editor_snippet_final_tabstop_highlight_border: Option<String>,
|
||||
#[serde(rename = "editorWhitespace.foreground")]
|
||||
pub editor_whitespace_foreground: Option<String>,
|
||||
#[serde(rename = "editorIndentGuide.background")]
|
||||
pub editor_indent_guide_background: Option<String>,
|
||||
#[serde(rename = "editorIndentGuide.activeBackground")]
|
||||
pub editor_indent_guide_active_background: Option<String>,
|
||||
#[serde(rename = "editorRuler.foreground")]
|
||||
pub editor_ruler_foreground: Option<String>,
|
||||
#[serde(rename = "editorCodeLens.foreground")]
|
||||
pub editor_code_lens_foreground: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground1")]
|
||||
pub editor_bracket_highlight_foreground1: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground2")]
|
||||
pub editor_bracket_highlight_foreground2: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground3")]
|
||||
pub editor_bracket_highlight_foreground3: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground4")]
|
||||
pub editor_bracket_highlight_foreground4: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground5")]
|
||||
pub editor_bracket_highlight_foreground5: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.foreground6")]
|
||||
pub editor_bracket_highlight_foreground6: Option<String>,
|
||||
#[serde(rename = "editorBracketHighlight.unexpectedBracket.foreground")]
|
||||
pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.border")]
|
||||
pub editor_overview_ruler_border: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
|
||||
pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
|
||||
pub editor_overview_ruler_word_highlight_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
|
||||
pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.modifiedForeground")]
|
||||
pub editor_overview_ruler_modified_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.addedForeground")]
|
||||
pub editor_overview_ruler_added_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.deletedForeground")]
|
||||
pub editor_overview_ruler_deleted_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.errorForeground")]
|
||||
pub editor_overview_ruler_error_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.warningForeground")]
|
||||
pub editor_overview_ruler_warning_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.infoForeground")]
|
||||
pub editor_overview_ruler_info_foreground: Option<String>,
|
||||
#[serde(rename = "editorError.foreground")]
|
||||
pub editor_error_foreground: Option<String>,
|
||||
#[serde(rename = "editorWarning.foreground")]
|
||||
pub editor_warning_foreground: Option<String>,
|
||||
#[serde(rename = "editorGutter.modifiedBackground")]
|
||||
pub editor_gutter_modified_background: Option<String>,
|
||||
#[serde(rename = "editorGutter.addedBackground")]
|
||||
pub editor_gutter_added_background: Option<String>,
|
||||
#[serde(rename = "editorGutter.deletedBackground")]
|
||||
pub editor_gutter_deleted_background: Option<String>,
|
||||
#[serde(rename = "gitDecoration.modifiedResourceForeground")]
|
||||
pub git_decoration_modified_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.deletedResourceForeground")]
|
||||
pub git_decoration_deleted_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.untrackedResourceForeground")]
|
||||
pub git_decoration_untracked_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.ignoredResourceForeground")]
|
||||
pub git_decoration_ignored_resource_foreground: Option<String>,
|
||||
#[serde(rename = "gitDecoration.conflictingResourceForeground")]
|
||||
pub git_decoration_conflicting_resource_foreground: Option<String>,
|
||||
#[serde(rename = "diffEditor.insertedTextBackground")]
|
||||
pub diff_editor_inserted_text_background: Option<String>,
|
||||
#[serde(rename = "diffEditor.removedTextBackground")]
|
||||
pub diff_editor_removed_text_background: Option<String>,
|
||||
#[serde(rename = "inlineChat.regionHighlight")]
|
||||
pub inline_chat_region_highlight: Option<String>,
|
||||
#[serde(rename = "editorWidget.background")]
|
||||
pub editor_widget_background: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.background")]
|
||||
pub editor_suggest_widget_background: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.foreground")]
|
||||
pub editor_suggest_widget_foreground: Option<String>,
|
||||
#[serde(rename = "editorSuggestWidget.selectedBackground")]
|
||||
pub editor_suggest_widget_selected_background: Option<String>,
|
||||
#[serde(rename = "editorHoverWidget.background")]
|
||||
pub editor_hover_widget_background: Option<String>,
|
||||
#[serde(rename = "editorHoverWidget.border")]
|
||||
pub editor_hover_widget_border: Option<String>,
|
||||
#[serde(rename = "editorMarkerNavigation.background")]
|
||||
pub editor_marker_navigation_background: Option<String>,
|
||||
#[serde(rename = "peekView.border")]
|
||||
pub peek_view_border: Option<String>,
|
||||
#[serde(rename = "peekViewEditor.background")]
|
||||
pub peek_view_editor_background: Option<String>,
|
||||
#[serde(rename = "peekViewEditor.matchHighlightBackground")]
|
||||
pub peek_view_editor_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.background")]
|
||||
pub peek_view_result_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.fileForeground")]
|
||||
pub peek_view_result_file_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewResult.lineForeground")]
|
||||
pub peek_view_result_line_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewResult.matchHighlightBackground")]
|
||||
pub peek_view_result_match_highlight_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.selectionBackground")]
|
||||
pub peek_view_result_selection_background: Option<String>,
|
||||
#[serde(rename = "peekViewResult.selectionForeground")]
|
||||
pub peek_view_result_selection_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewTitle.background")]
|
||||
pub peek_view_title_background: Option<String>,
|
||||
#[serde(rename = "peekViewTitleDescription.foreground")]
|
||||
pub peek_view_title_description_foreground: Option<String>,
|
||||
#[serde(rename = "peekViewTitleLabel.foreground")]
|
||||
pub peek_view_title_label_foreground: Option<String>,
|
||||
#[serde(rename = "merge.currentHeaderBackground")]
|
||||
pub merge_current_header_background: Option<String>,
|
||||
#[serde(rename = "merge.incomingHeaderBackground")]
|
||||
pub merge_incoming_header_background: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.currentContentForeground")]
|
||||
pub editor_overview_ruler_current_content_foreground: Option<String>,
|
||||
#[serde(rename = "editorOverviewRuler.incomingContentForeground")]
|
||||
pub editor_overview_ruler_incoming_content_foreground: Option<String>,
|
||||
#[serde(rename = "panel.background")]
|
||||
pub panel_background: Option<String>,
|
||||
#[serde(rename = "panel.border")]
|
||||
pub panel_border: Option<String>,
|
||||
#[serde(rename = "panelTitle.activeBorder")]
|
||||
pub panel_title_active_border: Option<String>,
|
||||
#[serde(rename = "panelTitle.activeForeground")]
|
||||
pub panel_title_active_foreground: Option<String>,
|
||||
#[serde(rename = "panelTitle.inactiveForeground")]
|
||||
pub panel_title_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.background")]
|
||||
pub status_bar_background: Option<String>,
|
||||
#[serde(rename = "statusBar.foreground")]
|
||||
pub status_bar_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.debuggingBackground")]
|
||||
pub status_bar_debugging_background: Option<String>,
|
||||
#[serde(rename = "statusBar.debuggingForeground")]
|
||||
pub status_bar_debugging_foreground: Option<String>,
|
||||
#[serde(rename = "statusBar.noFolderBackground")]
|
||||
pub status_bar_no_folder_background: Option<String>,
|
||||
#[serde(rename = "statusBar.noFolderForeground")]
|
||||
pub status_bar_no_folder_foreground: Option<String>,
|
||||
#[serde(rename = "statusBarItem.prominentBackground")]
|
||||
pub status_bar_item_prominent_background: Option<String>,
|
||||
#[serde(rename = "statusBarItem.prominentHoverBackground")]
|
||||
pub status_bar_item_prominent_hover_background: Option<String>,
|
||||
#[serde(rename = "statusBarItem.remoteForeground")]
|
||||
pub status_bar_item_remote_foreground: Option<String>,
|
||||
#[serde(rename = "statusBarItem.remoteBackground")]
|
||||
pub status_bar_item_remote_background: Option<String>,
|
||||
#[serde(rename = "titleBar.activeBackground")]
|
||||
pub title_bar_active_background: Option<String>,
|
||||
#[serde(rename = "titleBar.activeForeground")]
|
||||
pub title_bar_active_foreground: Option<String>,
|
||||
#[serde(rename = "titleBar.inactiveBackground")]
|
||||
pub title_bar_inactive_background: Option<String>,
|
||||
#[serde(rename = "titleBar.inactiveForeground")]
|
||||
pub title_bar_inactive_foreground: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentForeground")]
|
||||
pub extension_button_prominent_foreground: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentBackground")]
|
||||
pub extension_button_prominent_background: Option<String>,
|
||||
#[serde(rename = "extensionButton.prominentHoverBackground")]
|
||||
pub extension_button_prominent_hover_background: Option<String>,
|
||||
#[serde(rename = "pickerGroup.border")]
|
||||
pub picker_group_border: Option<String>,
|
||||
#[serde(rename = "pickerGroup.foreground")]
|
||||
pub picker_group_foreground: Option<String>,
|
||||
#[serde(rename = "debugToolBar.background")]
|
||||
pub debug_tool_bar_background: Option<String>,
|
||||
#[serde(rename = "walkThrough.embeddedEditorBackground")]
|
||||
pub walk_through_embedded_editor_background: Option<String>,
|
||||
#[serde(rename = "settings.headerForeground")]
|
||||
pub settings_header_foreground: Option<String>,
|
||||
#[serde(rename = "settings.modifiedItemIndicator")]
|
||||
pub settings_modified_item_indicator: Option<String>,
|
||||
#[serde(rename = "settings.dropdownBackground")]
|
||||
pub settings_dropdown_background: Option<String>,
|
||||
#[serde(rename = "settings.dropdownForeground")]
|
||||
pub settings_dropdown_foreground: Option<String>,
|
||||
#[serde(rename = "settings.dropdownBorder")]
|
||||
pub settings_dropdown_border: Option<String>,
|
||||
#[serde(rename = "settings.checkboxBackground")]
|
||||
pub settings_checkbox_background: Option<String>,
|
||||
#[serde(rename = "settings.checkboxForeground")]
|
||||
pub settings_checkbox_foreground: Option<String>,
|
||||
#[serde(rename = "settings.checkboxBorder")]
|
||||
pub settings_checkbox_border: Option<String>,
|
||||
#[serde(rename = "settings.textInputBackground")]
|
||||
pub settings_text_input_background: Option<String>,
|
||||
#[serde(rename = "settings.textInputForeground")]
|
||||
pub settings_text_input_foreground: Option<String>,
|
||||
#[serde(rename = "settings.textInputBorder")]
|
||||
pub settings_text_input_border: Option<String>,
|
||||
#[serde(rename = "settings.numberInputBackground")]
|
||||
pub settings_number_input_background: Option<String>,
|
||||
#[serde(rename = "settings.numberInputForeground")]
|
||||
pub settings_number_input_foreground: Option<String>,
|
||||
#[serde(rename = "settings.numberInputBorder")]
|
||||
pub settings_number_input_border: Option<String>,
|
||||
#[serde(rename = "breadcrumb.foreground")]
|
||||
pub breadcrumb_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumb.background")]
|
||||
pub breadcrumb_background: Option<String>,
|
||||
#[serde(rename = "breadcrumb.focusForeground")]
|
||||
pub breadcrumb_focus_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumb.activeSelectionForeground")]
|
||||
pub breadcrumb_active_selection_foreground: Option<String>,
|
||||
#[serde(rename = "breadcrumbPicker.background")]
|
||||
pub breadcrumb_picker_background: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.background")]
|
||||
pub list_filter_widget_background: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.outline")]
|
||||
pub list_filter_widget_outline: Option<String>,
|
||||
#[serde(rename = "listFilterWidget.noMatchesOutline")]
|
||||
pub list_filter_widget_no_matches_outline: Option<String>,
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
use gpui::{div, px, Div, ParentElement, Render, SharedString, Styled, ViewContext};
|
||||
use gpui::{div, Div, ParentElement, Render, SharedString, Styled, ViewContext};
|
||||
use theme2::ActiveTheme;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
@ -19,7 +19,7 @@ impl Render for TextTooltip {
|
|||
let theme = cx.theme();
|
||||
div()
|
||||
.bg(theme.colors().background)
|
||||
.rounded(px(8.))
|
||||
.rounded_lg()
|
||||
.border()
|
||||
.font("Zed Sans")
|
||||
.border_color(theme.colors().border)
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
[
|
||||
(jsx_element)
|
||||
(jsx_fragment)
|
||||
] @element
|
||||
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_self_closing_element)
|
||||
(jsx_expression)
|
||||
] @element
|
||||
] @default
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
[
|
||||
(jsx_element)
|
||||
(jsx_fragment)
|
||||
] @element
|
||||
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_self_closing_element)
|
||||
(jsx_expression)
|
||||
] @element
|
||||
] @default
|
||||
|
|
|
@ -2,6 +2,7 @@ use anyhow::{anyhow, Result};
|
|||
use async_compression::futures::bufread::GzipDecoder;
|
||||
use async_tar::Archive;
|
||||
use async_trait::async_trait;
|
||||
use collections::HashMap;
|
||||
use futures::{future::BoxFuture, FutureExt};
|
||||
use gpui::AppContext;
|
||||
use language::{LanguageServerName, LspAdapter, LspAdapterDelegate};
|
||||
|
@ -20,12 +21,7 @@ use util::{fs::remove_matching, github::latest_github_release};
|
|||
use util::{github::GitHubLspBinaryVersion, ResultExt};
|
||||
|
||||
fn typescript_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
|
||||
vec![
|
||||
server_path.into(),
|
||||
"--stdio".into(),
|
||||
"--tsserver-path".into(),
|
||||
"node_modules/typescript/lib".into(),
|
||||
]
|
||||
vec![server_path.into(), "--stdio".into()]
|
||||
}
|
||||
|
||||
fn eslint_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
|
||||
|
@ -158,9 +154,20 @@ impl LspAdapter for TypeScriptLspAdapter {
|
|||
|
||||
async fn initialization_options(&self) -> Option<serde_json::Value> {
|
||||
Some(json!({
|
||||
"provideFormatter": true
|
||||
"provideFormatter": true,
|
||||
"tsserver": {
|
||||
"path": "node_modules/typescript/lib",
|
||||
},
|
||||
}))
|
||||
}
|
||||
|
||||
async fn language_ids(&self) -> HashMap<String, String> {
|
||||
HashMap::from_iter([
|
||||
("TypeScript".into(), "typescript".into()),
|
||||
("JavaScript".into(), "javascript".into()),
|
||||
("TSX".into(), "typescriptreact".into()),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
async fn get_cached_ts_server_binary(
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
[
|
||||
(jsx_element)
|
||||
(jsx_fragment)
|
||||
] @element
|
||||
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_self_closing_element)
|
||||
(jsx_expression)
|
||||
] @element
|
||||
] @default
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
[
|
||||
(jsx_element)
|
||||
(jsx_fragment)
|
||||
] @element
|
||||
|
||||
[
|
||||
(jsx_opening_element)
|
||||
(jsx_closing_element)
|
||||
(jsx_self_closing_element)
|
||||
(jsx_expression)
|
||||
] @element
|
||||
] @default
|
||||
|
|
|
@ -2,6 +2,7 @@ use anyhow::{anyhow, Result};
|
|||
use async_compression::futures::bufread::GzipDecoder;
|
||||
use async_tar::Archive;
|
||||
use async_trait::async_trait;
|
||||
use collections::HashMap;
|
||||
use futures::{future::BoxFuture, FutureExt};
|
||||
use gpui::AppContext;
|
||||
use language::{LanguageServerName, LspAdapter, LspAdapterDelegate};
|
||||
|
@ -20,12 +21,7 @@ use util::{fs::remove_matching, github::latest_github_release};
|
|||
use util::{github::GitHubLspBinaryVersion, ResultExt};
|
||||
|
||||
fn typescript_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
|
||||
vec![
|
||||
server_path.into(),
|
||||
"--stdio".into(),
|
||||
"--tsserver-path".into(),
|
||||
"node_modules/typescript/lib".into(),
|
||||
]
|
||||
vec![server_path.into(), "--stdio".into()]
|
||||
}
|
||||
|
||||
fn eslint_server_binary_arguments(server_path: &Path) -> Vec<OsString> {
|
||||
|
@ -158,9 +154,20 @@ impl LspAdapter for TypeScriptLspAdapter {
|
|||
|
||||
async fn initialization_options(&self) -> Option<serde_json::Value> {
|
||||
Some(json!({
|
||||
"provideFormatter": true
|
||||
"provideFormatter": true,
|
||||
"tsserver": {
|
||||
"path": "node_modules/typescript/lib",
|
||||
},
|
||||
}))
|
||||
}
|
||||
|
||||
async fn language_ids(&self) -> HashMap<String, String> {
|
||||
HashMap::from_iter([
|
||||
("TypeScript".into(), "typescript".into()),
|
||||
("JavaScript".into(), "javascript".into()),
|
||||
("TSX".into(), "typescriptreact".into()),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
async fn get_cached_ts_server_binary(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue