Style go-to-definition links (#3727)

Marshall Bowers created

This PR styles go-to-definition links using the link color from the
theme.

Release Notes:

- N/A

Change summary

crates/editor2/src/link_go_to_definition.rs   |  2 +-
crates/theme2/src/themes/ayu.rs               |  3 +++
crates/theme2/src/themes/gruvbox.rs           |  6 ++++++
crates/theme2/src/themes/noctis.rs            | 11 +++++++++++
crates/theme2/src/themes/nord.rs              |  1 +
crates/theme2/src/themes/rose_pine.rs         |  3 +++
crates/theme2/src/themes/synthwave_84.rs      |  1 +
crates/theme_importer/src/theme_printer.rs    | 10 ++++++++++
crates/theme_importer/src/vscode/converter.rs |  4 ++++
crates/theme_importer/src/vscode/theme.rs     |  7 +++++++
10 files changed, 47 insertions(+), 1 deletion(-)

Detailed changes

@@ -491,7 +491,7 @@ pub fn show_link_definition(
                                 thickness: px(1.),
                                 ..Default::default()
                             }),
-                            color: Some(gpui::red()),
+                            color: Some(cx.theme().colors().link_text_hover),
                             ..Default::default()
                         };
                         let highlight_range =

crates/theme2/src/themes/ayu.rs 🔗

@@ -70,6 +70,7 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0x9e75c7ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x46ba94ff).into()),
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        link_text_hover: Some(rgba(0xffaa33ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -379,6 +380,7 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdabafaff).into()),
                         terminal_ansi_cyan: Some(rgba(0x90e1c6ff).into()),
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        link_text_hover: Some(rgba(0xffcc66ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -688,6 +690,7 @@ pub fn ayu() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xcda1faff).into()),
                         terminal_ansi_cyan: Some(rgba(0x90e1c6ff).into()),
                         terminal_ansi_white: Some(rgba(0xc7c7c7ff).into()),
+                        link_text_hover: Some(rgba(0xe6b450ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {

crates/theme2/src/themes/gruvbox.rs 🔗

@@ -70,6 +70,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -365,6 +366,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -660,6 +662,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0xa89984ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -955,6 +958,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -1250,6 +1254,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -1545,6 +1550,7 @@ pub fn gruvbox() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xb16286ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x689d6aff).into()),
                         terminal_ansi_white: Some(rgba(0x7c6f64ff).into()),
+                        link_text_hover: Some(rgba(0x458588ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {

crates/theme2/src/themes/noctis.rs 🔗

@@ -71,6 +71,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xaec3d0ff).into()),
+                        link_text_hover: Some(rgba(0x49ace9ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -351,6 +352,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xb9acb0ff).into()),
+                        link_text_hover: Some(rgba(0xf18eb0ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -631,6 +633,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
                         terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        link_text_hover: Some(rgba(0x00c6e0ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -911,6 +914,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
                         terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        link_text_hover: Some(rgba(0x00c6e0ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -1191,6 +1195,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xff5792ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x00bdd6ff).into()),
                         terminal_ansi_white: Some(rgba(0x8ca6a6ff).into()),
+                        link_text_hover: Some(rgba(0x00c6e0ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -1471,6 +1476,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xc28097ff).into()),
                         terminal_ansi_cyan: Some(rgba(0x72b7c0ff).into()),
                         terminal_ansi_white: Some(rgba(0xc5cdd3ff).into()),
+                        link_text_hover: Some(rgba(0x5998c0ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -1751,6 +1757,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xb2cacdff).into()),
+                        link_text_hover: Some(rgba(0x40d4e7ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -2031,6 +2038,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xb2cacdff).into()),
+                        link_text_hover: Some(rgba(0x40d4e7ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -2311,6 +2319,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xb2cacdff).into()),
+                        link_text_hover: Some(rgba(0x40d4e7ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -2591,6 +2600,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xb6b3ccff).into()),
+                        link_text_hover: Some(rgba(0x998ef1ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -2871,6 +2881,7 @@ pub fn noctis() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xdf769bff).into()),
                         terminal_ansi_cyan: Some(rgba(0x49d6e9ff).into()),
                         terminal_ansi_white: Some(rgba(0xbfafcfff).into()),
+                        link_text_hover: Some(rgba(0xbf8ef1ff).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {

crates/theme2/src/themes/nord.rs 🔗

@@ -70,6 +70,7 @@ pub fn nord() -> UserThemeFamily {
                     terminal_ansi_magenta: Some(rgba(0xb48eadff).into()),
                     terminal_ansi_cyan: Some(rgba(0x88c0d0ff).into()),
                     terminal_ansi_white: Some(rgba(0xe5e9f0ff).into()),
+                    link_text_hover: Some(rgba(0x88c0d0ff).into()),
                     ..Default::default()
                 },
                 status: StatusColorsRefinement {

crates/theme2/src/themes/rose_pine.rs 🔗

@@ -70,6 +70,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xc4a7e7ff).into()),
                         terminal_ansi_cyan: Some(rgba(0xebbcbaff).into()),
                         terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
+                        link_text_hover: Some(rgba(0xc4a7e7e6).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -332,6 +333,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0xc4a7e7ff).into()),
                         terminal_ansi_cyan: Some(rgba(0xea9a97ff).into()),
                         terminal_ansi_white: Some(rgba(0xe0def4ff).into()),
+                        link_text_hover: Some(rgba(0xc4a7e7e6).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {
@@ -594,6 +596,7 @@ pub fn rose_pine() -> UserThemeFamily {
                         terminal_ansi_magenta: Some(rgba(0x907aa9ff).into()),
                         terminal_ansi_cyan: Some(rgba(0xd7827eff).into()),
                         terminal_ansi_white: Some(rgba(0x575279ff).into()),
+                        link_text_hover: Some(rgba(0x907aa9e6).into()),
                         ..Default::default()
                     },
                     status: StatusColorsRefinement {

crates/theme2/src/themes/synthwave_84.rs 🔗

@@ -54,6 +54,7 @@ pub fn synthwave_84() -> UserThemeFamily {
                     terminal_ansi_blue: Some(rgba(0x03edf9ff).into()),
                     terminal_ansi_magenta: Some(rgba(0xff7edbff).into()),
                     terminal_ansi_cyan: Some(rgba(0x03edf9ff).into()),
+                    link_text_hover: Some(rgba(0xff7edbff).into()),
                     ..Default::default()
                 },
                 status: StatusColorsRefinement {

crates/theme_importer/src/theme_printer.rs 🔗

@@ -270,6 +270,16 @@ impl<'a> Debug for ThemeColorsRefinementPrinter<'a> {
             ("terminal_ansi_magenta", self.0.terminal_ansi_magenta),
             ("terminal_ansi_cyan", self.0.terminal_ansi_cyan),
             ("terminal_ansi_white", self.0.terminal_ansi_white),
+            ("headline", self.0.headline),
+            ("paragraph", self.0.paragraph),
+            ("link_text", self.0.link_text),
+            ("link_text_hover", self.0.link_text_hover),
+            ("link_uri", self.0.link_uri),
+            ("inline_code_background", self.0.inline_code_background),
+            ("inline_code_border", self.0.inline_code_border),
+            ("code_block_background", self.0.code_block_background),
+            ("code_block_border", self.0.code_block_border),
+            ("emphasis", self.0.emphasis),
         ];
 
         f.write_str("ThemeColorsRefinement {")?;

crates/theme_importer/src/vscode/converter.rs 🔗

@@ -217,6 +217,10 @@ impl VsCodeThemeConverter {
                 .tab_inactive_foreground
                 .as_ref()
                 .traverse(|color| try_parse_color(&color))?,
+            link_text_hover: vscode_colors
+                .text_link_active_foreground
+                .as_ref()
+                .traverse(|color| try_parse_color(&color))?,
             tab_bar_background: vscode_colors
                 .editor_group_header_tabs_background
                 .as_ref()

crates/theme_importer/src/vscode/theme.rs 🔗

@@ -154,6 +154,13 @@ pub struct VsCodeColors {
     )]
     pub terminal_ansi_white: Option<String>,
 
+    #[serde(
+        default,
+        rename = "textLink.activeForeground",
+        deserialize_with = "empty_string_as_none"
+    )]
+    pub text_link_active_foreground: Option<String>,
+
     #[serde(
         default,
         rename = "focusBorder",