mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Merge #1299
1299: Use ThemeColor and add support for light themes r=matklad a=lnicola Part of #1294. - switch to `ThemeColor` - add light and high contrast theme definitions - highlight control flow keywords and `unsafe` Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
This commit is contained in:
commit
51e82fe6d2
3 changed files with 149 additions and 14 deletions
|
@ -1,6 +1,6 @@
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
|
|
||||||
use ra_syntax::{ast, AstNode, TextRange, Direction, SyntaxKind::*, SyntaxElement, T};
|
use ra_syntax::{ast, AstNode, TextRange, Direction, SyntaxKind, SyntaxKind::*, SyntaxElement, T};
|
||||||
use ra_db::SourceDatabase;
|
use ra_db::SourceDatabase;
|
||||||
|
|
||||||
use crate::{FileId, db::RootDatabase};
|
use crate::{FileId, db::RootDatabase};
|
||||||
|
@ -11,6 +11,21 @@ pub struct HighlightedRange {
|
||||||
pub tag: &'static str,
|
pub tag: &'static str,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_control_keyword(kind: SyntaxKind) -> bool {
|
||||||
|
match kind {
|
||||||
|
T![for]
|
||||||
|
| T![loop]
|
||||||
|
| T![while]
|
||||||
|
| T![continue]
|
||||||
|
| T![break]
|
||||||
|
| T![if]
|
||||||
|
| T![else]
|
||||||
|
| T![match]
|
||||||
|
| T![return] => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRange> {
|
pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRange> {
|
||||||
let source_file = db.parse(file_id);
|
let source_file = db.parse(file_id);
|
||||||
|
|
||||||
|
@ -29,6 +44,8 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa
|
||||||
NAME => "function",
|
NAME => "function",
|
||||||
INT_NUMBER | FLOAT_NUMBER | CHAR | BYTE => "literal",
|
INT_NUMBER | FLOAT_NUMBER | CHAR | BYTE => "literal",
|
||||||
LIFETIME => "parameter",
|
LIFETIME => "parameter",
|
||||||
|
T![unsafe] => "keyword.unsafe",
|
||||||
|
k if is_control_keyword(k) => "keyword.control",
|
||||||
k if k.is_keyword() => "keyword",
|
k if k.is_keyword() => "keyword",
|
||||||
_ => {
|
_ => {
|
||||||
if let Some(macro_call) = node.as_node().and_then(ast::MacroCall::cast) {
|
if let Some(macro_call) = node.as_node().and_then(ast::MacroCall::cast) {
|
||||||
|
|
|
@ -268,6 +268,116 @@
|
||||||
},
|
},
|
||||||
"pattern": "$rustc"
|
"pattern": "$rustc"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"colors": [
|
||||||
|
{
|
||||||
|
"id": "ralsp.comment",
|
||||||
|
"description": "Color for comments",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#6A9955",
|
||||||
|
"light": "#008000",
|
||||||
|
"highContrast": "#7CA668"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.string",
|
||||||
|
"description": "Color for strings",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#CE9178",
|
||||||
|
"light": "#A31515",
|
||||||
|
"highContrast": "#CE9178"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.keyword",
|
||||||
|
"description": "Color for keywords",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#569cd6",
|
||||||
|
"light": "#0000FF",
|
||||||
|
"highContrast": "#569CD6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.keyword.control",
|
||||||
|
"description": "Color for control keywords",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#C586C0",
|
||||||
|
"light": "#AF00DB",
|
||||||
|
"highContrast": "#C586C0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.keyword.unsafe",
|
||||||
|
"description": "Color for unsafe",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#FF3030",
|
||||||
|
"light": "#FF1010",
|
||||||
|
"highContrast": "#FF1010"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.function",
|
||||||
|
"description": "Color for functions",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#DCDCAA",
|
||||||
|
"light": "#795E26",
|
||||||
|
"highContrast": "#DCDCAA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.parameter",
|
||||||
|
"description": "Color for parameters",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#9CDCFE",
|
||||||
|
"light": "#001080",
|
||||||
|
"highContrast": "#9CDCFE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.builtin",
|
||||||
|
"description": "Color for builtins",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#DD6718",
|
||||||
|
"light": "#DD6718",
|
||||||
|
"highContrast": "#DD6718"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.text",
|
||||||
|
"description": "Color for text",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#D4D4D4",
|
||||||
|
"light": "#000000",
|
||||||
|
"highContrast": "#FFFFFF"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.attribute",
|
||||||
|
"description": "Color for attributes",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#9FE9BF",
|
||||||
|
"light": "#1F4B1F",
|
||||||
|
"highContrast": "#108010"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.literal",
|
||||||
|
"description": "Color for literals",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#BECEA8",
|
||||||
|
"light": "#09885A",
|
||||||
|
"highContrast": "#B5CEA8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ralsp.macro",
|
||||||
|
"description": "Color for DFAF8F",
|
||||||
|
"defaults": {
|
||||||
|
"dark": "#BFEBBF",
|
||||||
|
"light": "#DD6718",
|
||||||
|
"highContrast": "#ED7718"
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,23 +13,31 @@ export class Highlighter {
|
||||||
string,
|
string,
|
||||||
vscode.TextEditorDecorationType
|
vscode.TextEditorDecorationType
|
||||||
> {
|
> {
|
||||||
const decor = (color: string) =>
|
const colorContrib = (
|
||||||
vscode.window.createTextEditorDecorationType({ color });
|
tag: string
|
||||||
|
): [string, vscode.TextEditorDecorationType] => {
|
||||||
|
const color = new vscode.ThemeColor('ralsp.' + tag);
|
||||||
|
const decor = vscode.window.createTextEditorDecorationType({
|
||||||
|
color
|
||||||
|
});
|
||||||
|
return [tag, decor];
|
||||||
|
};
|
||||||
|
|
||||||
const decorations: Iterable<
|
const decorations: Iterable<
|
||||||
[string, vscode.TextEditorDecorationType]
|
[string, vscode.TextEditorDecorationType]
|
||||||
> = [
|
> = [
|
||||||
['background', decor('#3F3F3F')],
|
colorContrib('comment'),
|
||||||
['comment', decor('#7F9F7F')],
|
colorContrib('string'),
|
||||||
['string', decor('#CC9393')],
|
colorContrib('keyword'),
|
||||||
['keyword', decor('#F0DFAF')],
|
colorContrib('keyword.control'),
|
||||||
['function', decor('#93E0E3')],
|
colorContrib('keyword.unsafe'),
|
||||||
['parameter', decor('#94BFF3')],
|
colorContrib('function'),
|
||||||
['builtin', decor('#DD6718')],
|
colorContrib('parameter'),
|
||||||
['text', decor('#DCDCCC')],
|
colorContrib('builtin'),
|
||||||
['attribute', decor('#BFEBBF')],
|
colorContrib('text'),
|
||||||
['literal', decor('#DFAF8F')],
|
colorContrib('attribute'),
|
||||||
['macro', decor('#DFAF8F')]
|
colorContrib('literal'),
|
||||||
|
colorContrib('macro')
|
||||||
];
|
];
|
||||||
|
|
||||||
return new Map<string, vscode.TextEditorDecorationType>(decorations);
|
return new Map<string, vscode.TextEditorDecorationType>(decorations);
|
||||||
|
|
Loading…
Reference in a new issue