feat(add): always produce multiline config file (#23077)

This commit changes `deno add` to always produce a multiline config
file.

In v1.41.3:
```
$ mkdir foo
$ cd foo
$ deno add @std/assert
Created deno.json configuration file.
Add @std/assert - jsr:@std/assert@^0.220.0

$ cat deno.json
{ "imports": { "@std/assert": "jsr:@std/assert@^0.220.0" } }
```

Now:
```
$ mkdir foo
$ cd foo
$ deno add @std/assert
Created deno.json configuration file.
Add @std/assert - jsr:@std/assert@^0.220.0

$ cat deno.json
{ 
  "imports": {
    "@std/assert": "jsr:@std/assert@^0.220.0"
  }
}
```
This commit is contained in:
Bartek Iwańczuk 2024-03-26 21:40:24 +00:00 committed by GitHub
parent 9841d3fdf1
commit 6b95c53e48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 6 deletions

View File

@ -268,7 +268,15 @@ fn update_config_file_content(
let insert_position = obj.range.end - 1;
text_changes.push(TextChange {
range: insert_position..insert_position,
new_text: format!("\"imports\": {{ {} }}", generated_imports),
// NOTE(bartlomieju): adding `\n` here to force the formatter to always
// produce a config file that is multline, like so:
// ```
// {
// "imports": {
// "<package_name>": "<registry>:<package_name>@<semver>"
// }
// }
new_text: format!("\"imports\": {{\n {} }}", generated_imports),
})
}
// we verified the shape of `imports` above

View File

@ -39,11 +39,14 @@ fn add_basic_no_deno_json() {
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
temp_dir.join("deno.json").assert_matches_json(json!({
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0"
}
}));
// Don't use `assert_matches_json` to ensure the file is properly formatted.
let expected = r#"{
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0"
}
}
"#;
temp_dir.join("deno.json").assert_matches_text(expected);
}
#[test]