From 39ea4abff4bfa09c4e98e00ad0d4e0e7b78f1187 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 17 Jan 2022 20:10:17 -0500 Subject: feat: auto-discover config file (#13313) --- cli/tests/integration/fmt_tests.rs | 9 +- cli/tests/integration/lsp_tests.rs | 114 ++++++++++++++++--------- cli/tests/testdata/fmt/deno.jsonc | 15 ---- cli/tests/testdata/fmt/fmt_with_config/a.ts | 46 ---------- cli/tests/testdata/fmt/fmt_with_config/b.ts | 15 ---- cli/tests/testdata/fmt/fmt_with_config/c.md | 17 ---- cli/tests/testdata/fmt/with_config/deno.jsonc | 19 +++++ cli/tests/testdata/fmt/with_config/subdir/a.ts | 46 ++++++++++ cli/tests/testdata/fmt/with_config/subdir/b.ts | 15 ++++ cli/tests/testdata/fmt/with_config/subdir/c.md | 17 ++++ cli/tests/testdata/malformed_config/deno.json | 1 + 11 files changed, 181 insertions(+), 133 deletions(-) delete mode 100644 cli/tests/testdata/fmt/deno.jsonc delete mode 100644 cli/tests/testdata/fmt/fmt_with_config/a.ts delete mode 100644 cli/tests/testdata/fmt/fmt_with_config/b.ts delete mode 100644 cli/tests/testdata/fmt/fmt_with_config/c.md create mode 100644 cli/tests/testdata/fmt/with_config/deno.jsonc create mode 100644 cli/tests/testdata/fmt/with_config/subdir/a.ts create mode 100644 cli/tests/testdata/fmt/with_config/subdir/b.ts create mode 100644 cli/tests/testdata/fmt/with_config/subdir/c.md create mode 100644 cli/tests/testdata/malformed_config/deno.json (limited to 'cli/tests') diff --git a/cli/tests/integration/fmt_tests.rs b/cli/tests/integration/fmt_tests.rs index 18743fb00..bb4c8b451 100644 --- a/cli/tests/integration/fmt_tests.rs +++ b/cli/tests/integration/fmt_tests.rs @@ -177,13 +177,18 @@ itest!(fmt_stdin_check_not_formatted { }); itest!(fmt_with_config { - args: "fmt --config fmt/deno.jsonc fmt/fmt_with_config/", + args: "fmt --config fmt/with_config/deno.jsonc fmt/with_config/subdir", + output: "fmt/fmt_with_config.out", +}); + +itest!(fmt_with_config_default { + args: "fmt fmt/with_config/subdir", output: "fmt/fmt_with_config.out", }); // Check if CLI flags take precedence itest!(fmt_with_config_and_flags { - args: "fmt --config fmt/deno.jsonc --ignore=fmt/fmt_with_config/a.ts,fmt/fmt_with_config/b.ts", + args: "fmt --config fmt/with_config/deno.jsonc --ignore=fmt/with_config/subdir/a.ts,fmt/with_config/subdir/b.ts", output: "fmt/fmt_with_config_and_flags.out", }); diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs index 21894f7e8..c992ca4cb 100644 --- a/cli/tests/integration/lsp_tests.rs +++ b/cli/tests/integration/lsp_tests.rs @@ -55,12 +55,12 @@ where client .write_response( id, - json!({ + json!([{ "enable": true, "codeLens": { "test": true } - }), + }]), ) .unwrap(); @@ -564,7 +564,7 @@ fn lsp_hover_disabled() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": false })) + .write_response(id, json!([{ "enable": false }])) .unwrap(); let (maybe_res, maybe_err) = client @@ -814,7 +814,7 @@ fn lsp_hover_closed_document() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": true })) + .write_response(id, json!([{ "enable": true }])) .unwrap(); client @@ -833,7 +833,7 @@ fn lsp_hover_closed_document() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": true })) + .write_response(id, json!([{ "enable": true }])) .unwrap(); let (method, _) = client.read_notification::().unwrap(); @@ -1542,6 +1542,58 @@ fn lsp_format_exclude_with_config() { shutdown(&mut client); } +#[test] +fn lsp_format_exclude_default_config() { + let temp_dir = TempDir::new().unwrap(); + let workspace_root = temp_dir.path().canonicalize().unwrap(); + let mut params: lsp::InitializeParams = + serde_json::from_value(load_fixture("initialize_params.json")).unwrap(); + let deno_jsonc = + serde_json::to_vec_pretty(&load_fixture("deno.fmt.exclude.jsonc")).unwrap(); + fs::write(workspace_root.join("deno.jsonc"), deno_jsonc).unwrap(); + + params.root_uri = Some(Url::from_file_path(workspace_root.clone()).unwrap()); + + let deno_exe = deno_exe_path(); + let mut client = LspClient::new(&deno_exe).unwrap(); + client + .write_request::<_, _, Value>("initialize", params) + .unwrap(); + + let file_uri = + ModuleSpecifier::from_file_path(workspace_root.join("ignored.ts")) + .unwrap() + .to_string(); + did_open( + &mut client, + json!({ + "textDocument": { + "uri": file_uri, + "languageId": "typescript", + "version": 1, + "text": "function myFunc(){}" + } + }), + ); + let (maybe_res, maybe_err) = client + .write_request( + "textDocument/formatting", + json!({ + "textDocument": { + "uri": file_uri + }, + "options": { + "tabSize": 2, + "insertSpaces": true + } + }), + ) + .unwrap(); + assert!(maybe_err.is_none()); + assert_eq!(maybe_res, Some(json!(null))); + shutdown(&mut client); +} + #[test] fn lsp_large_doc_changes() { let mut client = init("initialize_params.json"); @@ -2085,12 +2137,12 @@ fn lsp_code_lens_test_disabled() { client .write_response( id, - json!({ + json!([{ "enable": true, "codeLens": { "test": false } - }), + }]), ) .unwrap(); @@ -2467,7 +2519,7 @@ fn lsp_code_actions_deno_cache() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": true })) + .write_response(id, json!([{ "enable": true }])) .unwrap(); let (method, _) = client.read_notification::().unwrap(); assert_eq!(method, "textDocument/publishDiagnostics"); @@ -2641,7 +2693,7 @@ fn lsp_code_actions_deadlock() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": true })) + .write_response(id, json!([{ "enable": true }])) .unwrap(); let (maybe_res, maybe_err) = client .write_request::<_, _, Value>( @@ -3301,7 +3353,7 @@ fn lsp_diagnostics_deno_types() { let (id, method, _) = client.read_request::().unwrap(); assert_eq!(method, "workspace/configuration"); client - .write_response(id, json!({ "enable": true })) + .write_response(id, json!([{ "enable": true }])) .unwrap(); let (maybe_res, maybe_err) = client .write_request::<_, _, Value>( @@ -3354,34 +3406,20 @@ fn lsp_diagnostics_refresh_dependents() { }, }), ); - client - .write_notification( - "textDocument/didOpen", - json!({ - "textDocument": { - "uri": "file:///a/file_02.ts", - "languageId": "typescript", - "version": 1, - "text": "import { a, b } from \"./file_01.ts\";\n\nconsole.log(a, b);\n" - } - }), - ) - .unwrap(); - - let (id, method, _) = client.read_request::().unwrap(); - assert_eq!(method, "workspace/configuration"); - client - .write_response(id, json!({ "enable": false })) - .unwrap(); - let (method, _) = client.read_notification::().unwrap(); - assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _) = client.read_notification::().unwrap(); - assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, maybe_params) = client.read_notification::().unwrap(); - assert_eq!(method, "textDocument/publishDiagnostics"); + let diagnostics = did_open( + &mut client, + json!({ + "textDocument": { + "uri": "file:///a/file_02.ts", + "languageId": "typescript", + "version": 1, + "text": "import { a, b } from \"./file_01.ts\";\n\nconsole.log(a, b);\n" + } + }), + ); assert_eq!( - maybe_params, - Some(json!({ + json!(diagnostics[2]), + json!({ "uri": "file:///a/file_02.ts", "diagnostics": [ { @@ -3402,7 +3440,7 @@ fn lsp_diagnostics_refresh_dependents() { } ], "version": 1 - })) + }) ); client .write_notification( diff --git a/cli/tests/testdata/fmt/deno.jsonc b/cli/tests/testdata/fmt/deno.jsonc deleted file mode 100644 index 9c330d34a..000000000 --- a/cli/tests/testdata/fmt/deno.jsonc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "fmt": { - "files": { - "include": ["fmt_with_config/"], - "exclude": ["fmt_with_config/b.ts"] - }, - "options": { - "useTabs": true, - "lineWidth": 40, - "indentWidth": 8, - "singleQuote": true, - "proseWrap": "always" - } - } -} diff --git a/cli/tests/testdata/fmt/fmt_with_config/a.ts b/cli/tests/testdata/fmt/fmt_with_config/a.ts deleted file mode 100644 index 50db0d2e1..000000000 --- a/cli/tests/testdata/fmt/fmt_with_config/a.ts +++ /dev/null @@ -1,46 +0,0 @@ -Deno.test( - { perms: { net: true } }, - async function responseClone() { - const response = - await fetch( - 'http://localhost:4545/fixture.json', - ); - const response1 = - response.clone(); - assert( - response !== - response1, - ); - assertEquals( - response.status, - response1 - .status, - ); - assertEquals( - response.statusText, - response1 - .statusText, - ); - const u8a = - new Uint8Array( - await response - .arrayBuffer(), - ); - const u8a1 = - new Uint8Array( - await response1 - .arrayBuffer(), - ); - for ( - let i = 0; - i < - u8a.byteLength; - i++ - ) { - assertEquals( - u8a[i], - u8a1[i], - ); - } - }, -); diff --git a/cli/tests/testdata/fmt/fmt_with_config/b.ts b/cli/tests/testdata/fmt/fmt_with_config/b.ts deleted file mode 100644 index 840198d89..000000000 --- a/cli/tests/testdata/fmt/fmt_with_config/b.ts +++ /dev/null @@ -1,15 +0,0 @@ -// This file should be excluded from formatting -Deno.test( - { perms: { net: true } }, - async function fetchBodyUsedCancelStream() { - const response = await fetch( - "http://localhost:4545/fixture.json", - ); - assert(response.body !== null); - - assertEquals(response.bodyUsed, false); - const promise = response.body.cancel(); - assertEquals(response.bodyUsed, true); - await promise; - }, -); \ No newline at end of file diff --git a/cli/tests/testdata/fmt/fmt_with_config/c.md b/cli/tests/testdata/fmt/fmt_with_config/c.md deleted file mode 100644 index 012f7e3d4..000000000 --- a/cli/tests/testdata/fmt/fmt_with_config/c.md +++ /dev/null @@ -1,17 +0,0 @@ -## Permissions - -Deno is secure by default. Therefore, -unless you specifically enable it, a -program run with Deno has no file, -network, or environment access. Access -to security sensitive functionality -requires that permisisons have been -granted to an executing script through -command line flags, or a runtime -permission prompt. - -For the following example `mod.ts` has -been granted read-only access to the -file system. It cannot write to the file -system, or perform any other security -sensitive functions. diff --git a/cli/tests/testdata/fmt/with_config/deno.jsonc b/cli/tests/testdata/fmt/with_config/deno.jsonc new file mode 100644 index 000000000..3b9474e64 --- /dev/null +++ b/cli/tests/testdata/fmt/with_config/deno.jsonc @@ -0,0 +1,19 @@ +{ + "fmt": { + "files": { + "include": [ + "./subdir/" + ], + "exclude": [ + "./subdir/b.ts" + ] + }, + "options": { + "useTabs": true, + "lineWidth": 40, + "indentWidth": 8, + "singleQuote": true, + "proseWrap": "always" + } + } +} diff --git a/cli/tests/testdata/fmt/with_config/subdir/a.ts b/cli/tests/testdata/fmt/with_config/subdir/a.ts new file mode 100644 index 000000000..50db0d2e1 --- /dev/null +++ b/cli/tests/testdata/fmt/with_config/subdir/a.ts @@ -0,0 +1,46 @@ +Deno.test( + { perms: { net: true } }, + async function responseClone() { + const response = + await fetch( + 'http://localhost:4545/fixture.json', + ); + const response1 = + response.clone(); + assert( + response !== + response1, + ); + assertEquals( + response.status, + response1 + .status, + ); + assertEquals( + response.statusText, + response1 + .statusText, + ); + const u8a = + new Uint8Array( + await response + .arrayBuffer(), + ); + const u8a1 = + new Uint8Array( + await response1 + .arrayBuffer(), + ); + for ( + let i = 0; + i < + u8a.byteLength; + i++ + ) { + assertEquals( + u8a[i], + u8a1[i], + ); + } + }, +); diff --git a/cli/tests/testdata/fmt/with_config/subdir/b.ts b/cli/tests/testdata/fmt/with_config/subdir/b.ts new file mode 100644 index 000000000..840198d89 --- /dev/null +++ b/cli/tests/testdata/fmt/with_config/subdir/b.ts @@ -0,0 +1,15 @@ +// This file should be excluded from formatting +Deno.test( + { perms: { net: true } }, + async function fetchBodyUsedCancelStream() { + const response = await fetch( + "http://localhost:4545/fixture.json", + ); + assert(response.body !== null); + + assertEquals(response.bodyUsed, false); + const promise = response.body.cancel(); + assertEquals(response.bodyUsed, true); + await promise; + }, +); \ No newline at end of file diff --git a/cli/tests/testdata/fmt/with_config/subdir/c.md b/cli/tests/testdata/fmt/with_config/subdir/c.md new file mode 100644 index 000000000..012f7e3d4 --- /dev/null +++ b/cli/tests/testdata/fmt/with_config/subdir/c.md @@ -0,0 +1,17 @@ +## Permissions + +Deno is secure by default. Therefore, +unless you specifically enable it, a +program run with Deno has no file, +network, or environment access. Access +to security sensitive functionality +requires that permisisons have been +granted to an executing script through +command line flags, or a runtime +permission prompt. + +For the following example `mod.ts` has +been granted read-only access to the +file system. It cannot write to the file +system, or perform any other security +sensitive functions. diff --git a/cli/tests/testdata/malformed_config/deno.json b/cli/tests/testdata/malformed_config/deno.json new file mode 100644 index 000000000..60df56527 --- /dev/null +++ b/cli/tests/testdata/malformed_config/deno.json @@ -0,0 +1 @@ +not a json file -- cgit v1.2.3