Merge pull request #892 from zed-industries/syntax-theme-fixes

Syntax theme fixes
This commit is contained in:
Max Brunsfeld 2022-04-22 13:24:31 -07:00 committed by GitHub
commit f881c2aa92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 231 additions and 75 deletions

View File

@ -692,33 +692,88 @@
} }
}, },
"syntax": { "syntax": {
"keyword": "#4f8ff7", "primary": {
"function": "#f9da82", "color": "#d5d5d5",
"string": "#f99d5f", "weight": "normal"
"type": "#3eeeda", },
"number": "#aeef4b", "comment": {
"comment": "#aaaaaa", "color": "#aaaaaa",
"property": "#4f8ff7", "weight": "normal"
"variant": "#53c1f5", },
"constant": "#d5d5d5", "punctuation": {
"color": "#c6c6c6",
"weight": "normal"
},
"constant": {
"color": "#d5d5d5",
"weight": "normal"
},
"keyword": {
"color": "#4f8ff7",
"weight": "normal"
},
"function": {
"color": "#f9da82",
"weight": "normal"
},
"type": {
"color": "#3eeeda",
"weight": "normal"
},
"variant": {
"color": "#53c1f5",
"weight": "normal"
},
"property": {
"color": "#4f8ff7",
"weight": "normal"
},
"enum": {
"color": "#ee670a",
"weight": "normal"
},
"operator": {
"color": "#ee670a",
"weight": "normal"
},
"string": {
"color": "#f99d5f",
"weight": "normal"
},
"number": {
"color": "#aeef4b",
"weight": "normal"
},
"boolean": {
"color": "#aeef4b",
"weight": "normal"
},
"predictive": {
"color": "#808080",
"weight": "normal"
},
"title": { "title": {
"color": "#de900c", "color": "#de900c",
"weight": "bold" "weight": "bold"
}, },
"emphasis": "#4f8ff7", "emphasis": {
"emphasis_strong": { "color": "#4f8ff7",
"weight": "normal"
},
"emphasis.strong": {
"color": "#4f8ff7", "color": "#4f8ff7",
"weight": "bold" "weight": "bold"
}, },
"link_uri": { "link_uri": {
"color": "#79ba16", "color": "#79ba16",
"weight": "normal",
"underline": true "underline": true
}, },
"link_text": { "link_text": {
"color": "#ee670a", "color": "#ee670a",
"weight": "normal",
"italic": true "italic": true
}, }
"list_marker": "#c6c6c6"
} }
}, },
"project_diagnostics": { "project_diagnostics": {

View File

@ -692,33 +692,88 @@
} }
}, },
"syntax": { "syntax": {
"keyword": "#1819a1", "primary": {
"function": "#bb550e", "color": "#1c1c1c",
"string": "#eb2d2d", "weight": "normal"
"type": "#a8820e", },
"number": "#484bed", "comment": {
"comment": "#717171", "color": "#717171",
"property": "#106c4e", "weight": "normal"
"variant": "#97142a", },
"constant": "#1c1c1c", "punctuation": {
"color": "#555555",
"weight": "normal"
},
"constant": {
"color": "#1c1c1c",
"weight": "normal"
},
"keyword": {
"color": "#1819a1",
"weight": "normal"
},
"function": {
"color": "#bb550e",
"weight": "normal"
},
"type": {
"color": "#a8820e",
"weight": "normal"
},
"variant": {
"color": "#97142a",
"weight": "normal"
},
"property": {
"color": "#106c4e",
"weight": "normal"
},
"enum": {
"color": "#eb2d2d",
"weight": "normal"
},
"operator": {
"color": "#eb2d2d",
"weight": "normal"
},
"string": {
"color": "#eb2d2d",
"weight": "normal"
},
"number": {
"color": "#484bed",
"weight": "normal"
},
"boolean": {
"color": "#eb2d2d",
"weight": "normal"
},
"predictive": {
"color": "#808080",
"weight": "normal"
},
"title": { "title": {
"color": "#1096d3", "color": "#1096d3",
"weight": "bold" "weight": "bold"
}, },
"emphasis": "#484bed", "emphasis": {
"emphasis_strong": { "color": "#484bed",
"weight": "normal"
},
"emphasis.strong": {
"color": "#484bed", "color": "#484bed",
"weight": "bold" "weight": "bold"
}, },
"link_uri": { "link_uri": {
"color": "#79ba16", "color": "#79ba16",
"weight": "normal",
"underline": true "underline": true
}, },
"link_text": { "link_text": {
"color": "#eb2d2d", "color": "#eb2d2d",
"weight": "normal",
"italic": true "italic": true
}, }
"list_marker": "#555555"
} }
}, },
"project_diagnostics": { "project_diagnostics": {

View File

@ -51,6 +51,10 @@ impl HighlightMap {
} }
impl HighlightId { impl HighlightId {
pub fn is_default(&self) -> bool {
*self == DEFAULT_SYNTAX_HIGHLIGHT_ID
}
pub fn style(&self, theme: &SyntaxTheme) -> Option<HighlightStyle> { pub fn style(&self, theme: &SyntaxTheme) -> Option<HighlightStyle> {
theme theme
.highlights .highlights

View File

@ -546,7 +546,9 @@ impl Language {
{ {
let end_offset = offset + chunk.text.len(); let end_offset = offset + chunk.text.len();
if let Some(highlight_id) = chunk.syntax_highlight_id { if let Some(highlight_id) = chunk.syntax_highlight_id {
result.push((offset..end_offset, highlight_id)); if !highlight_id.is_default() {
result.push((offset..end_offset, highlight_id));
}
} }
offset = end_offset; offset = end_offset;
} }

View File

@ -56,7 +56,16 @@
[ [
"." "."
";" ";"
] @delimiter ] @punctuation.delimiter
[
"{"
"}"
"("
")"
"["
"]"
] @punctuation.bracket
[ [
(string_literal) (string_literal)

View File

@ -86,6 +86,7 @@
"?." "?."
"." "."
"," ","
":"
] @punctuation.delimiter ] @punctuation.delimiter
[ [

View File

@ -11,4 +11,11 @@
(true) (true)
(false) (false)
(null) (null)
] @constant ] @constant
[
"{"
"}"
"["
"]"
] @punctuation.bracket

View File

@ -12,7 +12,7 @@
(list_marker_star) (list_marker_star)
(list_marker_dot) (list_marker_dot)
(list_marker_parenthesis) (list_marker_parenthesis)
] @list_marker ] @punctuation.list_marker
[ [
(indented_code_block) (indented_code_block)

View File

@ -34,6 +34,20 @@
((identifier) @constant ((identifier) @constant
(#match? @constant "^[A-Z][A-Z\\d_]+$")) (#match? @constant "^[A-Z][A-Z\\d_]+$"))
[
"("
")"
"{"
"}"
"["
"]"
] @punctuation.bracket
(_
.
"<" @punctuation.bracket
">" @punctuation.bracket)
[ [
"as" "as"
"async" "async"

View File

@ -20,14 +20,18 @@
; Punctuation ; Punctuation
;------------ ;------------
"." @punctuation.delimiter [
"," @punctuation.delimiter "."
","
] @punctuation.delimiter
"=" @operator "=" @operator
"[" @punctuation.bracket [
"]" @punctuation.bracket "["
"[[" @punctuation.bracket "]"
"]]" @punctuation.bracket "[["
"{" @punctuation.bracket "]]"
"}" @punctuation.bracket "{"
"}"
] @punctuation.bracket

View File

@ -86,6 +86,7 @@
"?." "?."
"." "."
"," ","
":"
] @punctuation.delimiter ] @punctuation.delimiter
[ [

View File

@ -169,11 +169,19 @@ fn main() {
.detach(); .detach();
languages.set_language_server_download_dir(zed::ROOT_PATH.clone()); languages.set_language_server_download_dir(zed::ROOT_PATH.clone());
languages.set_theme(&settings.theme.editor.syntax); let languages = Arc::new(languages);
cx.observe_global::<Settings, _>({
let languages = languages.clone();
move |settings, _| {
languages.set_theme(&settings.theme.editor.syntax);
}
})
.detach();
cx.set_global(settings); cx.set_global(settings);
let app_state = Arc::new(AppState { let app_state = Arc::new(AppState {
languages: Arc::new(languages), languages,
themes, themes,
channel_list, channel_list,
client, client,

View File

@ -37,8 +37,18 @@ export default function editor(theme: Theme) {
}; };
} }
const syntax: any = {};
for (const syntaxKey in theme.syntax) {
const style = theme.syntax[syntaxKey];
syntax[syntaxKey] = {
color: style.color.value,
weight: style.weight.value,
underline: style.underline,
italic: style.italic,
};
}
return { return {
// textColor: theme.syntax.primary.color,
textColor: theme.syntax.primary.color.value, textColor: theme.syntax.primary.color.value,
background: backgroundColor(theme, 500), background: backgroundColor(theme, 500),
activeLineBackground: theme.editor.line.active.value, activeLineBackground: theme.editor.line.active.value,
@ -125,22 +135,6 @@ export default function editor(theme: Theme) {
invalidHintDiagnostic: diagnostic(theme, "muted"), invalidHintDiagnostic: diagnostic(theme, "muted"),
invalidInformationDiagnostic: diagnostic(theme, "muted"), invalidInformationDiagnostic: diagnostic(theme, "muted"),
invalidWarningDiagnostic: diagnostic(theme, "muted"), invalidWarningDiagnostic: diagnostic(theme, "muted"),
syntax: { syntax,
keyword: theme.syntax.keyword.color.value,
function: theme.syntax.function.color.value,
string: theme.syntax.string.color.value,
type: theme.syntax.type.color.value,
number: theme.syntax.number.color.value,
comment: theme.syntax.comment.color.value,
property: theme.syntax.property.color.value,
variant: theme.syntax.variant.color.value,
constant: theme.syntax.constant.color.value,
title: { color: theme.syntax.title.color.value, weight: "bold" },
emphasis: theme.textColor.feature.value,
"emphasis.strong": { color: theme.textColor.feature.value, weight: "bold" },
link_uri: { color: theme.syntax.linkUrl.color.value, underline: true },
link_text: { color: theme.syntax.linkText.color.value, italic: true },
list_marker: theme.syntax.punctuation.color.value,
},
}; };
} }

View File

@ -202,22 +202,22 @@ const syntax: Syntax = {
weight: fontWeights.bold, weight: fontWeights.bold,
}, },
emphasis: { emphasis: {
color: textColor.active, color: textColor.feature,
weight: fontWeights.normal, weight: fontWeights.normal,
}, },
emphasisStrong: { "emphasis.strong": {
color: textColor.active, color: textColor.feature,
weight: fontWeights.bold, weight: fontWeights.bold,
}, },
linkUrl: { linkUri: {
color: colors.lime[500], color: colors.lime[500],
weight: fontWeights.normal, weight: fontWeights.normal,
// TODO: add underline underline: true,
}, },
linkText: { linkText: {
color: colors.orange[500], color: colors.orange[500],
weight: fontWeights.normal, weight: fontWeights.normal,
// TODO: add italic italic: true,
}, },
}; };

View File

@ -200,22 +200,22 @@ const syntax: Syntax = {
weight: fontWeights.bold, weight: fontWeights.bold,
}, },
emphasis: { emphasis: {
color: textColor.active, color: textColor.feature,
weight: fontWeights.normal, weight: fontWeights.normal,
}, },
emphasisStrong: { "emphasis.strong": {
color: textColor.active, color: textColor.feature,
weight: fontWeights.bold, weight: fontWeights.bold,
}, },
linkUrl: { linkUri: {
color: colors.lime[500], color: colors.lime[500],
weight: fontWeights.normal, weight: fontWeights.normal,
// TODO: add underline underline: true
}, },
linkText: { linkText: {
color: colors.red[500], color: colors.red[500],
weight: fontWeights.normal, weight: fontWeights.normal,
// TODO: add italic italic: true
}, },
}; };

View File

@ -3,7 +3,9 @@ import { withOpacity } from "../utils/color";
export interface SyntaxHighlightStyle { export interface SyntaxHighlightStyle {
color: ColorToken; color: ColorToken;
weight: FontWeightToken; weight?: FontWeightToken;
underline?: boolean,
italic?: boolean,
} }
export interface Player { export interface Player {
@ -49,12 +51,12 @@ export interface Syntax {
number: SyntaxHighlightStyle; number: SyntaxHighlightStyle;
boolean: SyntaxHighlightStyle; boolean: SyntaxHighlightStyle;
predictive: SyntaxHighlightStyle; predictive: SyntaxHighlightStyle;
// TODO: Either move the following or rename
title: SyntaxHighlightStyle; title: SyntaxHighlightStyle;
emphasis: SyntaxHighlightStyle; emphasis: SyntaxHighlightStyle;
emphasisStrong: SyntaxHighlightStyle; linkUri: SyntaxHighlightStyle;
linkUrl: SyntaxHighlightStyle;
linkText: SyntaxHighlightStyle; linkText: SyntaxHighlightStyle;
[key: string]: SyntaxHighlightStyle;
}; };
export default interface Theme { export default interface Theme {

View File

@ -17,7 +17,7 @@ type SnakeCased<Type> = {
export default function snakeCaseTree<T>(object: T): SnakeCased<T> { export default function snakeCaseTree<T>(object: T): SnakeCased<T> {
const snakeObject: any = {}; const snakeObject: any = {};
for (const key in object) { for (const key in object) {
snakeObject[snakeCase(key)] = snakeCaseValue(object[key]); snakeObject[snakeCase(key, { keepSpecialCharacters: true })] = snakeCaseValue(object[key]);
} }
return snakeObject; return snakeObject;
} }