Skip to content

Inconsistent formatting of arguments #330

Closed

Description

@nightroman

Please find attached the project for reproducing the issue and follow the below steps.
TryGraphQLParser.zip

Steps

x1-type.graphql is the input file to be formatted

type DesPcb {
  designItems("An optional array of designators to search." designators: [String!] "Returns the first _n_ elements from the list." first: Int "Returns the elements in the list that come after the specified cursor." after: String "Returns the last _n_ elements from the list." last: Int "Returns the elements in the list that come before the specified cursor." before: String where: DesDesignItemFilterInput): DesDesignItemConnection
}

Run

dotnet run -- x1-type.graphql

This produces the new x1-type.graphql.output.graphql.
The field arguments are formatted mostly as expected:

type DesPcb {
  designItems(
    "An optional array of designators to search."
    designators: [String!],
    "Returns the first _n_ elements from the list."
    first: Int,
    "Returns the elements in the list that come after the specified cursor."
    after: String,
    "Returns the last _n_ elements from the list."
    last: Int,
    "Returns the elements in the list that come before the specified cursor."
    before: String, where: DesDesignItemFilterInput): DesDesignItemConnection
}

But the last argument where: DesDesignItemFilterInput formatting is inconsistent, it is expected to be on its own line:

type DesPcb {
  designItems(
    "An optional array of designators to search."
    designators: [String!],
    "Returns the first _n_ elements from the list."
    first: Int,
    "Returns the elements in the list that come after the specified cursor."
    after: String,
    "Returns the last _n_ elements from the list."
    last: Int,
    "Returns the elements in the list that come before the specified cursor."
    before: String,
    where: DesDesignItemFilterInput): DesDesignItemConnection
}

Activity

  1. Shane32 commented on Jun 28, 2023

    @Shane32
    Member

    @sungam3r can you look at this?

  2. sungam3r commented on Oct 11, 2023

    @sungam3r
    Member

    Oh, one more formatting issue 🤦‍♂️ . OK, but no exact timeline.

  3. sungam3r commented on Oct 13, 2023

    @sungam3r
    Member

    @nightroman I think this is not a bug but a decision by design. Argument has its own line only if it has comment or description.

    Options:

    1. There should be an option like existing EachDirectiveLocationOnNewLine - maybe EachArgumentDefinitionOnNewLine. This option will force all argument of all fields of all types to be printed on its own lines.
    2. Print all arguments of particular field on new line if at least one argument should be printed on its own line (comment or description exists).
    3. Other suggestions?
  4. sungam3r commented on Oct 13, 2023

    @sungam3r
    Member

    @nightroman Also try to remove description from some other field, for example, after.

  5. nightroman commented on Oct 13, 2023

    @nightroman
    Author

    The design might be questionable... but it is what it is, you might know all the reasons better.
    Formatting standards are often opinionated and the known source of holy wars :)
    Options looks like a reasonable way to make clients happy.

  6. nightroman commented on Oct 13, 2023

    @nightroman
    Author

    @nightroman Also try to remove description from some other field, for example, after.

    Just to see what happens or to "fix/adjust" formatting?

    I do not really want to use descriptions (add/remove) in order to adjust formatting. Besides, we do not always author descriptions, some of them are generated. E.g. in the provided example only designators description is "ours". Others, including missing are generated or not generated by HotChocolate that we use for building our GQL.

  7. sungam3r commented on Oct 13, 2023

    @sungam3r
    Member

    Just to see what happens or to "fix/adjust" formatting?

    Just to see what happens.

    I provided some options above. Do you have suggestions?

  8. Shane32 commented on Oct 13, 2023

    @Shane32
    Member

    I’d suggest option 2 for default behavior. Options would be good also of course.

  9. nightroman commented on Oct 13, 2023

    @nightroman
    Author

    I’d suggest option 2 for default behavior. Options would be good also of course.

    This looks reasonable to me as well.

  10. Shane32 commented on Oct 13, 2023

    @Shane32
    Member

    In general I’d agree with @nightroman that often descriptions are applied selectively in my schemas on an as needed basis. But it would be logical for arguments to either be on one line or separate lines, not a mix. And since adding a description usually requires a line for that, I’d add new lines to all if any did. That’s how I format source code when the [Description] attribute is in play, and is of course my opinion.

  11. sungam3r commented on Oct 13, 2023

    @sungam3r
    Member

    OK, I'll go on with option 2.

  12. sungam3r commented on Oct 14, 2023

    @sungam3r
    Member

    #358 combines all options

  13. nightroman commented on Oct 16, 2023

    @nightroman
    Author

    Awesome! When is the new nuget update expected, approximately? Look forward trying this.

  14. sungam3r commented on Oct 16, 2023

    @sungam3r
    Member

    After #359 and maybe soon after some changes around #360

  15. nightroman commented on Oct 16, 2023

    @nightroman
    Author

    @Shane32 @sungam3r Thank you, I have tried 9.3.0, it works exactly as expected!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions