Added theme to language
This commit is contained in:
parent
6f99d59d38
commit
988f388165
6 changed files with 35 additions and 22 deletions
|
@ -959,10 +959,10 @@ pub mod tests {
|
||||||
}"#
|
}"#
|
||||||
.unindent();
|
.unindent();
|
||||||
|
|
||||||
let theme = SyntaxTheme::new(vec![
|
let theme = Arc::new(SyntaxTheme::new(vec![
|
||||||
("mod.body".to_string(), Color::red().into()),
|
("mod.body".to_string(), Color::red().into()),
|
||||||
("fn.name".to_string(), Color::blue().into()),
|
("fn.name".to_string(), Color::blue().into()),
|
||||||
]);
|
]));
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -980,7 +980,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.clone());
|
||||||
cx.update(|cx| {
|
cx.update(|cx| {
|
||||||
let mut settings = Settings::test(cx);
|
let mut settings = Settings::test(cx);
|
||||||
settings.language_settings.tab_size = Some(2.try_into().unwrap());
|
settings.language_settings.tab_size = Some(2.try_into().unwrap());
|
||||||
|
@ -1049,10 +1049,10 @@ pub mod tests {
|
||||||
}"#
|
}"#
|
||||||
.unindent();
|
.unindent();
|
||||||
|
|
||||||
let theme = SyntaxTheme::new(vec![
|
let theme = Arc::new(SyntaxTheme::new(vec![
|
||||||
("mod.body".to_string(), Color::red().into()),
|
("mod.body".to_string(), Color::red().into()),
|
||||||
("fn.name".to_string(), Color::blue().into()),
|
("fn.name".to_string(), Color::blue().into()),
|
||||||
]);
|
]));
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -1070,7 +1070,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.clone());
|
||||||
|
|
||||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||||
|
|
||||||
|
@ -1120,10 +1120,10 @@ pub mod tests {
|
||||||
cx.foreground().set_block_on_ticks(usize::MAX..=usize::MAX);
|
cx.foreground().set_block_on_ticks(usize::MAX..=usize::MAX);
|
||||||
|
|
||||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||||
let theme = SyntaxTheme::new(vec![
|
let theme = Arc::new(SyntaxTheme::new(vec![
|
||||||
("operator".to_string(), Color::red().into()),
|
("operator".to_string(), Color::red().into()),
|
||||||
("string".to_string(), Color::green().into()),
|
("string".to_string(), Color::green().into()),
|
||||||
]);
|
]));
|
||||||
let language = Arc::new(
|
let language = Arc::new(
|
||||||
Language::new(
|
Language::new(
|
||||||
LanguageConfig {
|
LanguageConfig {
|
||||||
|
@ -1141,7 +1141,7 @@ pub mod tests {
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.clone());
|
||||||
|
|
||||||
let (text, highlighted_ranges) = marked_text_ranges(r#"const[] [a]: B = "c [d]""#);
|
let (text, highlighted_ranges) = marked_text_ranges(r#"const[] [a]: B = "c [d]""#);
|
||||||
|
|
||||||
|
|
|
@ -279,6 +279,7 @@ pub struct Language {
|
||||||
pub(crate) config: LanguageConfig,
|
pub(crate) config: LanguageConfig,
|
||||||
pub(crate) grammar: Option<Arc<Grammar>>,
|
pub(crate) grammar: Option<Arc<Grammar>>,
|
||||||
pub(crate) adapter: Option<Arc<LspAdapter>>,
|
pub(crate) adapter: Option<Arc<LspAdapter>>,
|
||||||
|
pub(crate) theme: RwLock<Option<Arc<SyntaxTheme>>>,
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
fake_adapter: Option<(
|
fake_adapter: Option<(
|
||||||
|
@ -339,9 +340,8 @@ impl LanguageRegistry {
|
||||||
Self::new(Task::ready(()))
|
Self::new(Task::ready(()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add(&self, language: Arc<Language>, theme: &SyntaxTheme) {
|
pub fn add(&self, language: Arc<Language>) {
|
||||||
self.languages.write().push(language.clone());
|
self.languages.write().push(language.clone());
|
||||||
language.set_theme(theme);
|
|
||||||
*self.subscription.write().0.borrow_mut() = ();
|
*self.subscription.write().0.borrow_mut() = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,9 +349,9 @@ impl LanguageRegistry {
|
||||||
self.subscription.read().1.clone()
|
self.subscription.read().1.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_theme(&self, theme: &SyntaxTheme) {
|
pub fn set_theme(&self, theme: Arc<SyntaxTheme>) {
|
||||||
for language in self.languages.read().iter() {
|
for language in self.languages.read().iter() {
|
||||||
language.set_theme(theme);
|
language.set_theme(theme.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,6 +576,7 @@ impl Language {
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
adapter: None,
|
adapter: None,
|
||||||
|
theme: Default::default(),
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
fake_adapter: None,
|
fake_adapter: None,
|
||||||
|
@ -712,12 +713,21 @@ impl Language {
|
||||||
c.is_whitespace() || self.config.autoclose_before.contains(c)
|
c.is_whitespace() || self.config.autoclose_before.contains(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_theme(&self, theme: &SyntaxTheme) {
|
/// Sets the theme to the given theme, and then calls [`highlight`].
|
||||||
|
pub fn set_theme(&self, theme: Arc<SyntaxTheme>) {
|
||||||
|
*self.theme.write() = Some(theme.clone());
|
||||||
|
self.highlight()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Highlights the grammar according to the current theme,
|
||||||
|
/// if one has been set using [`set_theme`].
|
||||||
|
pub fn highlight(&self) {
|
||||||
if let Some(grammar) = self.grammar.as_ref() {
|
if let Some(grammar) = self.grammar.as_ref() {
|
||||||
if let Some(highlights_query) = &grammar.highlights_query {
|
if let Some(highlights_query) = &grammar.highlights_query {
|
||||||
*grammar.highlight_map.lock() =
|
if let Some(theme) = self.theme.read().as_ref() {
|
||||||
HighlightMap::new(highlights_query.capture_names(), theme);
|
*grammar.highlight_map.lock() =
|
||||||
dbg!("highlighting");
|
HighlightMap::new(highlights_query.capture_names(), &theme);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,7 @@ mod tests {
|
||||||
("number".into(), Color::yellow().into()),
|
("number".into(), Color::yellow().into()),
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.into());
|
||||||
|
|
||||||
let grammar = language.grammar().unwrap();
|
let grammar = language.grammar().unwrap();
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
|
|
|
@ -315,7 +315,7 @@ mod tests {
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.into());
|
||||||
|
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
||||||
|
@ -394,7 +394,7 @@ mod tests {
|
||||||
("property".into(), Color::white().into()),
|
("property".into(), Color::white().into()),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
language.set_theme(&theme);
|
language.set_theme(theme.into());
|
||||||
|
|
||||||
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
let highlight_function = grammar.highlight_id_for_name("function").unwrap();
|
||||||
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
let highlight_type = grammar.highlight_id_for_name("type").unwrap();
|
||||||
|
|
|
@ -217,7 +217,7 @@ fn main() {
|
||||||
cx.observe_global::<Settings, _>({
|
cx.observe_global::<Settings, _>({
|
||||||
let languages = languages.clone();
|
let languages = languages.clone();
|
||||||
move |cx| {
|
move |cx| {
|
||||||
languages.set_theme(&cx.global::<Settings>().theme.editor.syntax);
|
languages.set_theme(cx.global::<Settings>().theme.editor.syntax.clone());
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.detach();
|
.detach();
|
||||||
|
@ -227,7 +227,9 @@ fn main() {
|
||||||
|cx| async move {
|
|cx| async move {
|
||||||
init_languages.await;
|
init_languages.await;
|
||||||
dbg!("all languages initialized, starting setting highlighting");
|
dbg!("all languages initialized, starting setting highlighting");
|
||||||
cx.read(|cx| languages.set_theme(&cx.global::<Settings>().theme.editor.syntax));
|
cx.read(|cx| {
|
||||||
|
languages.set_theme(cx.global::<Settings>().theme.editor.syntax.clone())
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.detach();
|
.detach();
|
||||||
|
|
1
test.rs
Normal file
1
test.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
const A: usize = 32;
|
Loading…
Add table
Add a link
Reference in a new issue