Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: Add .editorconfig, subshell dir changes in scripts #1649

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

Merged
merged 10 commits into from
May 27, 2022

Conversation

mafredri
Copy link
Member

This PR adds a .editorconfig file to the project root to help contributors ensure they have the correct editor settings when contributing to the project.

It also updates all .sh scripts to perform dir changes inside subshells since calling the script directly could change the callers pwd.

I opted to not specify specific .sh settings in .editorconfig, this means tabs will be the preferred indentation as with our .go files.

  • fix: Ensure ~/go/bin dir exists during make install
  • chore: Add .editorconfig to project root
  • chore: Perform dir changes in subshell and run shfmt

PS. I recommend ignoring whitespace when reviewing.

PPS. Should we also move the generate.sh scripts to scripts/ folder?

@mafredri mafredri self-assigned this May 23, 2022
@mafredri mafredri requested a review from a team May 23, 2022 09:20
@mafredri mafredri requested a review from a team as a code owner May 23, 2022 09:34
.editorconfig Outdated
Comment on lines 1 to 12
root = true

[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = tab

[*.{md,json,yaml}]
indent_style = space
indent_size = 2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remark: I think we may need to iterate on this a bit:

Copy link
Member Author

@mafredri mafredri May 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added a .editorconfig to the site/ package that defaults to spaces, should make prettier happy and I think that's the most common indentation for site/, so we can add exceptions after they're discovered.

Re: Go, which changes do you think we should make? Except for default space, I think our settings read fairly similar. I'm OK with copying those straight off if that's the preference but I matched style of e.g. .md for what's previously used in this project.

One change I would make though is to not define indent_size for indent_style = tab because that's just evil and taking peoples preference of visual tab size away from them. 😄

Copy link
Member

@johnstcn johnstcn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TIL about editorconfig, nice find @mafredri !
Approved pending feedback from FE.

@mafredri
Copy link
Member Author

Question: Should we add shfmt as a formatter for .sh files?

@johnstcn
Copy link
Member

Question: Should we add shfmt as a formatter for .sh files?

I'd be in favour of that, as well as shellcheck.

@mafredri
Copy link
Member Author

Both shellcheck and shfmt have been added. Although, I'm not happy with 945ddc9, if there's a nicer way I'd love to hear it.

indent_size = unset

[node_modules/**]
ignore = true
Copy link
Contributor

@greyscaled greyscaled May 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question (non-blocking): I've considered this in the past, but ultimately didn't add one because we have prettier:

https://github.com/coder/coder/blob/main/site/.prettierrc

My question is what advantages do we have from having both an editorconfig and a prettier config?

One advantage I believe is that you might not need to run prettier before submitting a PR, to say convert tabs into spaces.

(currently you'd run yarn format:write):

"format:write": "prettier --write '**/*.{css,html,js,json,jsx,md,ts,tsx,yaml,yml}'",

However, a disadvantage, is that we have to duplicate logic between .editorconfig and .prettierrc.

What are your thoughts?

I'd rather leave things solely to prettier, but when I say that, I'm unaware of the pain points a prettier-only flow leaves to folx developing the FE. I'm not pushing back, but rather trying to understand the need first.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@code-asher and @jsjoeio - I believe code-server uses an .editorconfig:

https://github.com/coder/code-server/blob/main/.editorconfig

I'm wondering if you have any insight into this question from me as well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's before my time so I don't have the full context but @code-asher may be able to share some helpful context.

Copy link
Member

@code-asher code-asher May 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For me it was because my editor reads .editorconfig but has no concept of Prettier. That said, I could probably add a plugin that adds support for reading the Prettier config. Selfishly I would prefer an .editorconfig versus having to add a new plugin but that is something I can get over. 😆 Although to be 100% honest I would probably just keep setting it manually every time I open the project like I have been for v1.

The editor support looks good for Prettier so I doubt .editorconfig has an advantage there. So in sum, it is for selfish reasons that code-server has an .editorconfig. 😝

Copy link
Member Author

@mafredri mafredri May 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vapurrmaid great questions, I'll try my best to answer them (in bulletpoints).

My question is what advantages do we have from having both an editorconfig and a prettier config?

  • prettier checks the editorconfig configuration, so no duplication
  • We're implicitly relying on prettier defaults right now (2-space), this change would make it explicit
  • Other tools also follow editorconfig, e.g. shfmt which was added in this PR
  • (Absurd example) it would allow us to define tab indentation for .sh files in the backend, and 2-space indentation on the frontend
  • Can define indentation rules for files not handled by prettier (probably not relevant on the frontend atm)
  • Before this PR, .sh files used a mix of 2-space and 4-space indentation

Finally, one less defined benefit is reduced developer churn, I'm thinking even if this only saves us from commenting on one or two PRs about indentation, that's a win. Similarly, if it helps even one person contributing to the codebase, that's a win.

But all that aside, I do acknowledge it's one more place to hide settings away, and I'm happy to remove it if that's what you prefer. We can probably even keep it only for one part of the project, if that's preferable. Recently for example the .sql formatter was removed, so having rules that say they should be tab-indented would be helpful on the backend.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it's selfish, though, we need to have an awesome development experience for all of our developers <3 and everyone counts on that front!

I'm happy to move forward @mafredri , TIL about some of those points, thanks for taking the time to hash it out 💪🏻

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, if it helps even one person contributing to the codebase, that's a win.

This is really well said!

@greyscaled
Copy link
Contributor

ps @mafredri the Chromatic checks are fixed by 57c6d88

@mafredri mafredri merged commit 608eb32 into main May 27, 2022
@mafredri mafredri deleted the mafredri/make-and-script-improvements branch May 27, 2022 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants