-
-
Notifications
You must be signed in to change notification settings - Fork 10
test: resolve configs when --stdin-filepath is used
#58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 7 commits
6d71385
fffaada
585f1be
e66a9b5
c9533e7
086c44c
f1c2dc1
fd0e3b0
d5324f4
ce18801
12698fe
3581b43
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,7 +16,7 @@ import { fastRelativePath, isNull, isString, isUndefined, negate, pluralize, tri | |
| import type { FormatOptions, Options, PluginsOptions } from "./types.js"; | ||
|
|
||
| async function run(options: Options, pluginsDefaultOptions: PluginsOptions, pluginsCustomOptions: PluginsOptions): Promise<void> { | ||
| if (options.globs.length || !isString(await getStdin())) { | ||
| if (options.globs.length || (!isString(await getStdin()) && !("stdinFilepath" in options))) { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you explain this one? if there is stdin and there is a and if there's no stdin but there is a unless im reading wrong, thats what its doing now
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I based this branch on yours, you seem to have added this condition in 585f1be. Not really sure what the rationale was, but it seems to make sense, right? We
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if there's no so i probably got this condition wrong. i don't remember why i did it that way if there's no stdin or there's globs, we should |
||
| return runGlobs(options, pluginsDefaultOptions, pluginsCustomOptions); | ||
| } else { | ||
| return runStdin(options, pluginsDefaultOptions, pluginsCustomOptions); | ||
|
|
@@ -32,7 +32,11 @@ async function runStdin(options: Options, pluginsDefaultOptions: PluginsOptions, | |
| const fileContent = (await getStdin()) || ""; | ||
|
|
||
| try { | ||
| const formatted = await prettier.format(fileName, fileContent, options.formatOptions, options.contextOptions, pluginsDefaultOptions, pluginsCustomOptions); | ||
| const editorConfigNames = options.editorConfig ? [".editorconfig"] : []; | ||
| const editorConfig = options.editorConfig ? getEditorConfigFormatOptions(await getEditorConfigResolved(fileName, editorConfigNames)) : {}; | ||
| const formatOptions = { ...editorConfig, ...options.formatOptions }; | ||
|
|
||
| const formatted = await prettier.format(fileName, fileContent, formatOptions, options.contextOptions, pluginsDefaultOptions, pluginsCustomOptions); | ||
| if (options.check || options.list) { | ||
| if (formatted !== fileContent) { | ||
| stdout.warn("(stdin)"); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| root = true | ||
|
|
||
| [*.js] | ||
| indent_style = tab | ||
| tab_width = 8 | ||
| indent_size = 2 # overridden by tab_width since indent_style = tab | ||
| max_line_length = 100 | ||
|
|
||
| # Indentation override for all JS under lib directory | ||
| [lib/**.js] | ||
| indent_style = space | ||
| indent_size = 2 | ||
|
|
||
| [lib/indent_size=tab.js] | ||
| indent_size = tab | ||
|
|
||
| [tab_width=unset.js] | ||
| tab_width = unset |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| function f() { | ||
| console.log("should have tab width 8"); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| function f() { | ||
| console.log("should have space width 2"); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| function f() { | ||
| console.log("should have space width 8"); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| This isn't really a Mercurial repo, but we want to pretend it is for testing purposes. | ||
| See https://github.com/prettier/prettier/pull/3559#issuecomment-353857109 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| function f() { | ||
| console.log("should have space width 2 despite ../.editorconfig specifying 8, because ./.hg is present"); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ignore/ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,85 @@ | ||
| // Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (stderr) 1`] = `""`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (stderr) 2`] = `""`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (stdout) 1`] = ` | ||
| "function f() { | ||
| console.log("should be indented with a tab") | ||
| }" | ||
| `; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (stdout) 2`] = ` | ||
| "function f() { | ||
| console.log("should be indented with a tab") | ||
| }" | ||
| `; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (write) 1`] = `[]`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with a deep path (write) 2`] = `[]`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent directory (stderr) 1`] = `""`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent directory (stdout) 1`] = ` | ||
| "function f() { | ||
| console.log("should be indented with a tab") | ||
| }" | ||
| `; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent directory (write) 1`] = `[]`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent file (stderr) 1`] = `""`; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent file (stdout) 1`] = ` | ||
| "function f() { | ||
| console.log("should be indented with a tab") | ||
| }" | ||
| `; | ||
|
|
||
| exports[`apply editorconfig for stdin-filepath with nonexistent file (write) 1`] = `[]`; | ||
|
|
||
| exports[`don't apply editorconfig outside project for stdin-filepath with nonexistent directory (stderr) 1`] = `""`; | ||
|
|
||
| exports[`don't apply editorconfig outside project for stdin-filepath with nonexistent directory (stdout) 1`] = ` | ||
| "function f() { | ||
| console.log("should be indented with 2 spaces"); | ||
| }" | ||
| `; | ||
|
|
||
| exports[`don't apply editorconfig outside project for stdin-filepath with nonexistent directory (write) 1`] = `[]`; | ||
|
|
||
| exports[`format correctly if stdin content compatible with stdin-filepath (stderr) 1`] = `""`; | ||
|
|
||
| exports[`format correctly if stdin content compatible with stdin-filepath (stdout) 1`] = ` | ||
| ".name { | ||
| display: none; | ||
| }" | ||
| `; | ||
|
|
||
| exports[`format correctly if stdin content compatible with stdin-filepath (write) 1`] = `[]`; | ||
|
|
||
| exports[`gracefully handle stdin-filepath with nonexistent directory (stderr) 1`] = `""`; | ||
|
|
||
| exports[`gracefully handle stdin-filepath with nonexistent directory (stdout) 1`] = ` | ||
| ".name { | ||
| display: none; | ||
| }" | ||
| `; | ||
|
|
||
| exports[`gracefully handle stdin-filepath with nonexistent directory (write) 1`] = `[]`; | ||
|
|
||
| exports[`output file as-is if stdin-filepath matched patterns in ignore-path (stderr) 1`] = `""`; | ||
|
|
||
| exports[`output file as-is if stdin-filepath matched patterns in ignore-path (write) 1`] = `[]`; | ||
|
|
||
| exports[`throw error if stdin content incompatible with stdin-filepath (stderr) 1`] = ` | ||
| "[error] SyntaxError: Unexpected token (1:1) | ||
| [error] > 1 | .name { display: none; } | ||
| [error] | ^" | ||
| `; | ||
|
|
||
| exports[`throw error if stdin content incompatible with stdin-filepath (stdout) 1`] = `""`; | ||
|
|
||
| exports[`throw error if stdin content incompatible with stdin-filepath (write) 1`] = `[]`; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,151 @@ | ||
| import { runCli } from "../utils"; | ||
| import dedent from "dedent"; | ||
|
|
||
| describe("format correctly if stdin content compatible with stdin-filepath", () => { | ||
| runCli( | ||
| "", | ||
| ["--stdin-filepath", "abc.css"], | ||
| { input: ".name { display: none; }" }, // css | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| describe("throw error if stdin content incompatible with stdin-filepath", () => { | ||
| runCli( | ||
| "", | ||
| ["--stdin-filepath", "abc.js"], | ||
| { input: ".name { display: none; }" }, // css | ||
| ).test({ | ||
| status: "non-zero", | ||
| }); | ||
| }); | ||
|
|
||
| describe("gracefully handle stdin-filepath with nonexistent directory", () => { | ||
| runCli( | ||
| "", | ||
| ["--stdin-filepath", "definitely/nonexistent/path.css"], | ||
| { input: ".name { display: none; }" }, // css | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| describe("apply editorconfig for stdin-filepath with nonexistent file", () => { | ||
| runCli("editorconfig", ["--stdin-filepath", "nonexistent.js"], { | ||
| input: dedent` | ||
| function f() { | ||
| console.log("should be indented with a tab"); | ||
| } | ||
| `, // js | ||
| }).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| describe("apply editorconfig for stdin-filepath with nonexistent directory", () => { | ||
| runCli( | ||
| "editorconfig", | ||
| ["--stdin-filepath", "nonexistent/one/two/three.js"], | ||
| { | ||
| input: dedent` | ||
| function f() { | ||
| console.log("should be indented with a tab"); | ||
| } | ||
| `, // js | ||
| }, | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| describe("apply editorconfig for stdin-filepath with a deep path", () => { | ||
| runCli( | ||
| "editorconfig", | ||
| ["--stdin-filepath", "a/".repeat(30) + "three.js"], | ||
| { | ||
| input: dedent` | ||
| function f() { | ||
| console.log("should be indented with a tab"); | ||
| } | ||
| `, // js | ||
| }, | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| // TODO: This is currently a false positive as no config actually gets resolved, but Prettier | ||
| // somehow formats the input correctly anyway. | ||
| describe("apply editorconfig for stdin-filepath in root", () => { | ||
| const code = dedent` | ||
| function f() { | ||
| console.log("should be indented with a tab"); | ||
| } | ||
| `; | ||
| runCli("", ["--stdin-filepath", "/foo.js"], { | ||
| input: code, // js | ||
| }).test({ | ||
| status: 0, | ||
| stdout: code, | ||
| stderr: "", | ||
| write: [], | ||
| }); | ||
| }); | ||
|
Comment on lines
+78
to
+94
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure what we expect here. The test case's name implies that we should search for any |
||
|
|
||
| describe("apply editorconfig for stdin-filepath with a deep path", () => { | ||
| runCli( | ||
| "editorconfig", | ||
| ["--stdin-filepath", "a/".repeat(30) + "three.js"], | ||
| { | ||
| input: dedent` | ||
| function f() { | ||
| console.log("should be indented with a tab"); | ||
| } | ||
| `, // js | ||
| }, | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| // TODO: This is currently a false positive. Gotta investigate how it's handled in Prettier v3 to | ||
| // gauge the expected behavior. | ||
| describe("don't apply editorconfig outside project for stdin-filepath with nonexistent directory", () => { | ||
| runCli( | ||
| "", | ||
| [ | ||
| "--stdin-filepath", | ||
| "editorconfig/repo-root/nonexistent/one/two/three.js", | ||
| ], | ||
| { | ||
| input: dedent` | ||
| function f() { | ||
| console.log("should be indented with 2 spaces"); | ||
| } | ||
| `, // js | ||
| }, | ||
| ).test({ | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
Comment on lines
+112
to
+131
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's currently a false positive, but when we change the first argument in |
||
|
|
||
| describe("output file as-is if stdin-filepath matched patterns in ignore-path", () => { | ||
| runCli("stdin-ignore", ["--stdin-filepath", "ignore/example.js"], { | ||
| input: "hello_world( );", | ||
| }).test({ | ||
| stdout: "hello_world( );", | ||
| status: 0, | ||
| }); | ||
| }); | ||
|
|
||
| describe("Should format stdin even if it's empty", () => { | ||
| runCli("", ["--stdin-filepath", "example.js"], { | ||
| isTTY: true, | ||
| }).test({ | ||
| stdout: "", | ||
| status: 0, | ||
| stderr: "", | ||
| write: [], | ||
| }); | ||
| }); | ||
Uh oh!
There was an error while loading. Please reload this page.