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
Prev Previous commit
Next Next commit
Add make targets: fmt/shfmt and lint/shellcheck
  • Loading branch information
mafredri committed May 23, 2022
commit 0a91dd6e6c9c12dbc50f0c91955ce24541db8cda
22 changes: 19 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,16 @@ fmt/terraform: $(wildcard *.tf)
terraform fmt -recursive
.PHONY: fmt/terraform

fmt: fmt/prettier fmt/terraform
fmt/shfmt: $(shell shfmt -f .)
@echo "--- shfmt"
# Only do diff check in CI, errors on diff.
ifdef CI
shfmt -d $(shell shfmt -f .)
else
shfmt -w $(shell shfmt -f .)
endif

fmt: fmt/prettier fmt/terraform fmt/shfmt
.PHONY: fmt

gen: coderd/database/querier.go peerbroker/proto/peerbroker.pb.go provisionersdk/proto/provisioner.pb.go provisionerd/proto/provisionerd.pb.go site/src/api/typesGenerated.ts
Expand All @@ -53,9 +62,16 @@ install: build
@echo "-- CLI available at $(shell ls $(INSTALL_DIR)/coder*)"
.PHONY: install

lint:
lint: lint/shellcheck lint/go

lint/go:
golangci-lint run
.PHONY: lint
.PHONY: lint/go

# Use shfmt to determine the shell files, takes editorconfig into consideration.
lint/shellcheck: $(shell shfmt -f .)
@echo "--- shellcheck"
shellcheck $(shell shfmt -f .)

peerbroker/proto/peerbroker.pb.go: peerbroker/proto/peerbroker.proto
protoc \
Expand Down
3 changes: 3 additions & 0 deletions site/.editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@ indent_size = 2
[*.go]
indent_style = tab
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!