Detailed changes
@@ -688,7 +688,9 @@
// "TOML": ["Embargo.lock"]
// }
//
- "file_types": {},
+ "file_types": {
+ "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json"]
+ },
// The extensions that Zed should automatically install on startup.
//
// If you don't want any of these extensions, add this field to your settings
@@ -511,7 +511,7 @@ impl LanguageRegistry {
) -> impl Future<Output = Result<Arc<Language>>> {
let filename = path.file_name().and_then(|name| name.to_str());
let extension = path.extension_or_hidden_file_name();
- let path_suffixes = [extension, filename];
+ let path_suffixes = [extension, filename, path.to_str()];
let empty = GlobSet::empty();
let rx = self.get_or_load_language(move |language_name, config| {
@@ -662,6 +662,17 @@ impl settings::Settings for AllLanguageSettings {
.ok_or_else(Self::missing_default)?;
let mut file_types: HashMap<Arc<str>, GlobSet> = HashMap::default();
+
+ for (language, suffixes) in &default_value.file_types {
+ let mut builder = GlobSetBuilder::new();
+
+ for suffix in suffixes {
+ builder.add(Glob::new(suffix)?);
+ }
+
+ file_types.insert(language.clone(), builder.build()?);
+ }
+
for user_settings in sources.customizations() {
if let Some(copilot) = user_settings.features.as_ref().and_then(|f| f.copilot) {
copilot_enabled = Some(copilot);
@@ -701,6 +712,15 @@ impl settings::Settings for AllLanguageSettings {
for (language, suffixes) in &user_settings.file_types {
let mut builder = GlobSetBuilder::new();
+ let default_value = default_value.file_types.get(&language.clone());
+
+ // Merge the default value with the user's value.
+ if let Some(suffixes) = default_value {
+ for suffix in suffixes {
+ builder.add(Glob::new(suffix)?);
+ }
+ }
+
for suffix in suffixes {
builder.add(Glob::new(suffix)?);
}
@@ -213,7 +213,12 @@ impl LspAdapter for JsonLspAdapter {
}
fn language_ids(&self) -> HashMap<String, String> {
- [("JSON".into(), "jsonc".into())].into_iter().collect()
+ [
+ ("JSON".into(), "json".into()),
+ ("JSONC".into(), "jsonc".into()),
+ ]
+ .into_iter()
+ .collect()
}
}
@@ -0,0 +1,3 @@
+("[" @open "]" @close)
+("{" @open "}" @close)
+("\"" @open "\"" @close)
@@ -0,0 +1,12 @@
+name = "JSONC"
+grammar = "jsonc"
+path_suffixes = ["jsonc"]
+line_comments = ["// "]
+autoclose_before = ",]}"
+brackets = [
+ { start = "{", end = "}", close = true, newline = true },
+ { start = "[", end = "]", close = true, newline = true },
+ { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] },
+]
+tab_size = 2
+prettier_parser_name = "jsonc"
@@ -0,0 +1,14 @@
+; Only produce one embedding for the entire file.
+(document) @item
+
+; Collapse arrays, except for the first object.
+(array
+ "[" @keep
+ .
+ (object)? @keep
+ "]" @keep) @collapse
+
+; Collapse string values (but not keys).
+(pair value: (string
+ "\"" @keep
+ "\"" @keep) @collapse)
@@ -0,0 +1,21 @@
+(comment) @comment
+
+(string) @string
+
+(pair
+ key: (string) @property.json_key)
+
+(number) @number
+
+[
+ (true)
+ (false)
+ (null)
+] @constant
+
+[
+ "{"
+ "}"
+ "["
+ "]"
+] @punctuation.bracket
@@ -0,0 +1,2 @@
+(array "]" @end) @indent
+(object "}" @end) @indent
@@ -0,0 +1,2 @@
+(pair
+ key: (string (string_content) @name)) @item
@@ -0,0 +1 @@
+(string) @string
@@ -0,0 +1,4 @@
+(pair value: (number) @redact)
+(pair value: (string) @redact)
+(array (number) @redact)
+(array (string) @redact)
@@ -45,6 +45,7 @@ pub fn init(
("gowork", tree_sitter_gowork::language()),
("jsdoc", tree_sitter_jsdoc::language()),
("json", tree_sitter_json::language()),
+ ("jsonc", tree_sitter_json::language()),
("markdown", tree_sitter_markdown::language()),
("proto", tree_sitter_proto::language()),
("python", tree_sitter_python::language()),
@@ -126,6 +127,14 @@ pub fn init(
],
json_task_context()
);
+ language!(
+ "jsonc",
+ vec![Arc::new(json::JsonLspAdapter::new(
+ node_runtime.clone(),
+ languages.clone(),
+ ))],
+ json_task_context()
+ );
language!("markdown");
language!(
"python",