Skip to content

Commit f795ce9

Browse files
danilo-lealSomeoneToIgnoreosiewicz
authored
Add language icons to the language selector (#21298)
Closes #21290 This is a first attempt to show the language icons to the selector. Ideally, I wouldn't like to have yet another place mapping extensions to icons, as we already have the `file_types.json` file doing that, but I'm not so sure how to pull from it yet. Maybe in a future pass we'll improve this and make it more solid. <img width="700" alt="Screenshot 2024-11-28 at 16 10 27" src="https://github.com/user-attachments/assets/683c3bef-5389-470f-a41e-3d510b927b61"> Release Notes: - N/A --------- Co-authored-by: Kirill Bulatov <[email protected]> Co-authored-by: Piotr Osiewicz <[email protected]>
1 parent 995b40f commit f795ce9

File tree

16 files changed

+119
-18
lines changed

16 files changed

+119
-18
lines changed

Cargo.lock

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/icons/file_icons/diff.svg

Lines changed: 5 additions & 0 deletions
Loading

assets/icons/file_icons/file_types.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"dat": "storage",
3535
"db": "storage",
3636
"dbf": "storage",
37+
"diff": "diff",
3738
"dll": "storage",
3839
"doc": "document",
3940
"docx": "document",
@@ -112,6 +113,7 @@
112113
"mkv": "video",
113114
"ml": "ocaml",
114115
"mli": "ocaml",
116+
"mod": "go",
115117
"mov": "video",
116118
"mp3": "audio",
117119
"mp4": "video",
@@ -185,6 +187,7 @@
185187
"wmv": "video",
186188
"woff": "font",
187189
"woff2": "font",
190+
"work": "go",
188191
"wv": "audio",
189192
"xls": "document",
190193
"xlsx": "document",
@@ -239,6 +242,9 @@
239242
"default": {
240243
"icon": "icons/file_icons/file.svg"
241244
},
245+
"diff": {
246+
"icon": "icons/file_icons/diff.svg"
247+
},
242248
"docker": {
243249
"icon": "icons/file_icons/docker.svg"
244250
},

crates/extension/src/extension_host_proxy.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ pub trait ExtensionLanguageProxy: Send + Sync + 'static {
159159
language: LanguageName,
160160
grammar: Option<Arc<str>>,
161161
matcher: LanguageMatcher,
162+
hidden: bool,
162163
load: Arc<dyn Fn() -> Result<LoadedLanguage> + Send + Sync + 'static>,
163164
);
164165

@@ -175,13 +176,14 @@ impl ExtensionLanguageProxy for ExtensionHostProxy {
175176
language: LanguageName,
176177
grammar: Option<Arc<str>>,
177178
matcher: LanguageMatcher,
179+
hidden: bool,
178180
load: Arc<dyn Fn() -> Result<LoadedLanguage> + Send + Sync + 'static>,
179181
) {
180182
let Some(proxy) = self.language_proxy.read().clone() else {
181183
return;
182184
};
183185

184-
proxy.register_language(language, grammar, matcher, load)
186+
proxy.register_language(language, grammar, matcher, hidden, load)
185187
}
186188

187189
fn remove_languages(

crates/extension_host/src/extension_host.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ pub struct ExtensionIndexLanguageEntry {
162162
pub extension: Arc<str>,
163163
pub path: PathBuf,
164164
pub matcher: LanguageMatcher,
165+
pub hidden: bool,
165166
pub grammar: Option<Arc<str>>,
166167
}
167168

@@ -1097,6 +1098,7 @@ impl ExtensionStore {
10971098
language_name.clone(),
10981099
language.grammar.clone(),
10991100
language.matcher.clone(),
1101+
language.hidden,
11001102
Arc::new(move || {
11011103
let config = std::fs::read_to_string(language_path.join("config.toml"))?;
11021104
let config: LanguageConfig = ::toml::from_str(&config)?;
@@ -1324,6 +1326,7 @@ impl ExtensionStore {
13241326
extension: extension_id.clone(),
13251327
path: relative_path,
13261328
matcher: config.matcher,
1329+
hidden: config.hidden,
13271330
grammar: config.grammar,
13281331
},
13291332
);

crates/extension_host/src/extension_store_test.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ async fn test_extension_store(cx: &mut TestAppContext) {
203203
extension: "zed-ruby".into(),
204204
path: "languages/erb".into(),
205205
grammar: Some("embedded_template".into()),
206+
hidden: false,
206207
matcher: LanguageMatcher {
207208
path_suffixes: vec!["erb".into()],
208209
first_line_pattern: None,
@@ -215,6 +216,7 @@ async fn test_extension_store(cx: &mut TestAppContext) {
215216
extension: "zed-ruby".into(),
216217
path: "languages/ruby".into(),
217218
grammar: Some("ruby".into()),
219+
hidden: false,
218220
matcher: LanguageMatcher {
219221
path_suffixes: vec!["rb".into()],
220222
first_line_pattern: None,

crates/extension_host/src/headless_host.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ impl HeadlessExtensionStore {
156156
config.name.clone(),
157157
None,
158158
config.matcher.clone(),
159+
config.hidden,
159160
Arc::new(move || {
160161
Ok(LoadedLanguage {
161162
config: config.clone(),

crates/file_finder/src/file_finder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#[cfg(test)]
22
mod file_finder_tests;
33

4-
mod file_finder_settings;
4+
pub mod file_finder_settings;
55
mod new_path_prompt;
66
mod open_path_prompt;
77

crates/language/src/language.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ pub static PLAIN_TEXT: LazyLock<Arc<Language>> = LazyLock::new(|| {
129129
LanguageConfig {
130130
name: "Plain Text".into(),
131131
soft_wrap: Some(SoftWrap::EditorWidth),
132+
matcher: LanguageMatcher {
133+
path_suffixes: vec!["txt".to_owned()],
134+
first_line_pattern: None,
135+
},
132136
..Default::default()
133137
},
134138
None,
@@ -1418,6 +1422,10 @@ impl Language {
14181422
pub fn prettier_parser_name(&self) -> Option<&str> {
14191423
self.config.prettier_parser_name.as_deref()
14201424
}
1425+
1426+
pub fn config(&self) -> &LanguageConfig {
1427+
&self.config
1428+
}
14211429
}
14221430

14231431
impl LanguageScope {

crates/language/src/language_registry.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ pub struct AvailableLanguage {
130130
name: LanguageName,
131131
grammar: Option<Arc<str>>,
132132
matcher: LanguageMatcher,
133+
hidden: bool,
133134
load: Arc<dyn Fn() -> Result<LoadedLanguage> + 'static + Send + Sync>,
134135
loaded: bool,
135136
}
@@ -142,6 +143,9 @@ impl AvailableLanguage {
142143
pub fn matcher(&self) -> &LanguageMatcher {
143144
&self.matcher
144145
}
146+
pub fn hidden(&self) -> bool {
147+
self.hidden
148+
}
145149
}
146150

147151
enum AvailableGrammar {
@@ -288,6 +292,7 @@ impl LanguageRegistry {
288292
config.name.clone(),
289293
config.grammar.clone(),
290294
config.matcher.clone(),
295+
config.hidden,
291296
Arc::new(move || {
292297
Ok(LoadedLanguage {
293298
config: config.clone(),
@@ -436,6 +441,7 @@ impl LanguageRegistry {
436441
name: LanguageName,
437442
grammar_name: Option<Arc<str>>,
438443
matcher: LanguageMatcher,
444+
hidden: bool,
439445
load: Arc<dyn Fn() -> Result<LoadedLanguage> + 'static + Send + Sync>,
440446
) {
441447
let state = &mut *self.state.write();
@@ -455,6 +461,7 @@ impl LanguageRegistry {
455461
grammar: grammar_name,
456462
matcher,
457463
load,
464+
hidden,
458465
loaded: false,
459466
});
460467
state.version += 1;
@@ -522,6 +529,7 @@ impl LanguageRegistry {
522529
name: language.name(),
523530
grammar: language.config.grammar.clone(),
524531
matcher: language.config.matcher.clone(),
532+
hidden: language.config.hidden,
525533
load: Arc::new(|| Err(anyhow!("already loaded"))),
526534
loaded: true,
527535
});
@@ -590,15 +598,12 @@ impl LanguageRegistry {
590598
async move { rx.await? }
591599
}
592600

593-
pub fn available_language_for_name(
594-
self: &Arc<Self>,
595-
name: &LanguageName,
596-
) -> Option<AvailableLanguage> {
601+
pub fn available_language_for_name(self: &Arc<Self>, name: &str) -> Option<AvailableLanguage> {
597602
let state = self.state.read();
598603
state
599604
.available_languages
600605
.iter()
601-
.find(|l| &l.name == name)
606+
.find(|l| l.name.0.as_ref() == name)
602607
.cloned()
603608
}
604609

0 commit comments

Comments
 (0)