From d9ba2a9663003a2fb8569aa3efc2ce232876d0f3 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 11:54:36 +0200 Subject: [PATCH 01/12] update prettier and fix yarn script --- package.json | 6 +++--- yarn.lock | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2bd4825ff1e3..cfe7ff565205 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "yarn": "^1.22.4" }, "scripts": { - "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --write --list-different --config prettier.config.js", + "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", "format:changed": "prettier $(git diff --diff-filter=d --name-only origin/main... && git ls-files --other --modified --exclude-standard | grep -E '\\.(js|json|ts|tsx|graphql|md|scss)$' | xargs) --write --list-different --config prettier.config.js", - "format:check": "yarn run format --write=false --check --list-different=false --loglevel=warn", + "format:check": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write=false", "_lint:js": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" NODE_OPTIONS=\"--max_old_space_size=16192\" eslint", "lint:js:changed": "yarn _lint:js $(git diff --diff-filter=d --name-only origin/main... | grep -E '\\.[tj]sx?$' | xargs)", "lint:js:root": "yarn run _lint:js --quiet '*.[tj]s?(x)'", @@ -318,7 +318,7 @@ "postcss-focus-visible": "^5.0.0", "postcss-loader": "^6.1.1", "postcss-modules": "^4.2.2", - "prettier": "2.2.1", + "prettier": "2.7.1", "process": "^0.11.10", "protoc-gen-ts": "0.8.1", "puppeteer": "^13.5.1", diff --git a/yarn.lock b/yarn.lock index 404ab9ec879e..443b70185da1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28875,7 +28875,7 @@ pvutils@latest: postcss-inset: ^1.0.0 postcss-loader: ^6.1.1 postcss-modules: ^4.2.2 - prettier: 2.2.1 + prettier: 2.7.1 pretty-bytes: ^5.3.0 process: ^0.11.10 prop-types: ^15.7.2 From 52fa2d44d140e45ff4528ca0b9d4717990144074 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 12:01:27 +0200 Subject: [PATCH 02/12] fake change --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfe7ff565205..308e813d1d8d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "yarn": "^1.22.4" }, "scripts": { - "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", + "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", "format:changed": "prettier $(git diff --diff-filter=d --name-only origin/main... && git ls-files --other --modified --exclude-standard | grep -E '\\.(js|json|ts|tsx|graphql|md|scss)$' | xargs) --write --list-different --config prettier.config.js", "format:check": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write=false", "_lint:js": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" NODE_OPTIONS=\"--max_old_space_size=16192\" eslint", From e6e02754c022e1b7641dce502b071dde647c059a Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 13:11:32 +0200 Subject: [PATCH 03/12] ensure format lint always runs unless specified otherwise --- dev/sg/linters/linters.go | 3 ++- dev/sg/sg_lint.go | 26 +++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/dev/sg/linters/linters.go b/dev/sg/linters/linters.go index a9ed4270fc2c..7a5886ceac9e 100644 --- a/dev/sg/linters/linters.go +++ b/dev/sg/linters/linters.go @@ -89,9 +89,10 @@ var Targets = []Target{ bashSyntax, }, }, + Formatting, } -var FormattingTarget = Target{ +var Formatting = Target{ Name: "format", Description: "Check client code and docs for formatting errors", Checks: []*linter{ diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index 0dce2b045cc6..3dc239346506 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -82,6 +82,10 @@ sg lint --help // If no args provided, run all lintTargets = linters.Targets for _, t := range lintTargets { + if lintNoFormatCheck.Get(cmd) && t.Name == linters.Formatting.Name { + // don't add the format check if it is disabled + continue + } targets = append(targets, t.Name) } } else { @@ -90,6 +94,7 @@ sg lint --help for _, c := range linters.Targets { allLintTargetsMap[c.Name] = c } + // only add a target it we know about it for _, t := range targets { target, ok := allLintTargetsMap[t] if !ok { @@ -98,6 +103,12 @@ sg lint --help } lintTargets = append(lintTargets, target) } + + // Always add the format check, unless specified otherwise! + if !lintNoFormatCheck.Get(cmd) { + lintTargets = append(lintTargets, linters.Formatting) + targets = append(targets, linters.Formatting.Name) + } } repoState, err := repo.GetState(cmd.Context) @@ -105,11 +116,6 @@ sg lint --help return errors.Wrap(err, "repo.GetState") } - if !lintNoFormatCheck.Get(cmd) { - lintTargets = append(lintTargets, linters.FormattingTarget) - targets = append(targets, linters.FormattingTarget.Name) - } - runner := linters.NewRunner(std.Out, generateAnnotations.Get(cmd), lintTargets...) if cmd.Bool("fix") { std.Out.WriteNoticef("Fixing checks from targets: %s", strings.Join(targets, ", ")) @@ -119,7 +125,7 @@ sg lint --help std.Out.WriteNoticef("Running checks from targets: %s", strings.Join(targets, ", ")) return runner.Check(cmd.Context, repoState) }, - Subcommands: lintTargets(append(linters.Targets, linters.FormattingTarget)).Commands(), + Subcommands: lintTargets(linters.Targets).Commands(), } type lintTargets []linters.Target @@ -142,7 +148,13 @@ func (lt lintTargets) Commands() (cmds []*cli.Command) { return errors.Wrap(err, "repo.GetState") } - runner := linters.NewRunner(std.Out, generateAnnotations.Get(cmd), target) + lintTargets := []linters.Target{target} + // Always add the format check, unless specified otherwise! + if !lintNoFormatCheck.Get(cmd) { + lintTargets = append(lintTargets, linters.Formatting) + } + + runner := linters.NewRunner(std.Out, generateAnnotations.Get(cmd), lintTargets...) if lintFix.Get(cmd) { std.Out.WriteNoticef("Fixing checks from target: %s", target.Name) return runner.Fix(cmd.Context, repoState) From f564ae6b47c6a082716619888bcf19c2fbf8a9a9 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 13:36:58 +0200 Subject: [PATCH 04/12] remove formatting from default if specified --- dev/sg/sg_lint.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index 3dc239346506..edc688b70107 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -80,14 +80,15 @@ sg lint --help if len(targets) == 0 { // If no args provided, run all - lintTargets = linters.Targets - for _, t := range lintTargets { + for _, t := range linters.Targets { + // skip adding the formatting check if lintNoFormatCheck.Get(cmd) && t.Name == linters.Formatting.Name { - // don't add the format check if it is disabled continue } + lintTargets = append(lintTargets, t) targets = append(targets, t.Name) } + } else { // Otherwise run requested set allLintTargetsMap := make(map[string]linters.Target, len(linters.Targets)) From 812b0990d9b5f3578da4b6bdce98b1d81caee923 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 13:49:43 +0200 Subject: [PATCH 05/12] do not add format if the target is format --- dev/sg/sg_lint.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index edc688b70107..d4e925db8fff 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -151,7 +151,7 @@ func (lt lintTargets) Commands() (cmds []*cli.Command) { lintTargets := []linters.Target{target} // Always add the format check, unless specified otherwise! - if !lintNoFormatCheck.Get(cmd) { + if !lintNoFormatCheck.Get(cmd) && target.Name != linters.Formatting.Name { lintTargets = append(lintTargets, linters.Formatting) } From 7fe4fd0294d20ba69d86293cf464c70c2c30c24f Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 14:02:22 +0200 Subject: [PATCH 06/12] fix subcommand output --- dev/sg/linters/linters.go | 1 - dev/sg/sg_lint.go | 25 ++++++++++++------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/dev/sg/linters/linters.go b/dev/sg/linters/linters.go index 7a5886ceac9e..27f04df58f37 100644 --- a/dev/sg/linters/linters.go +++ b/dev/sg/linters/linters.go @@ -89,7 +89,6 @@ var Targets = []Target{ bashSyntax, }, }, - Formatting, } var Formatting = Target{ diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index d4e925db8fff..18387831ca4c 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -81,10 +81,6 @@ sg lint --help if len(targets) == 0 { // If no args provided, run all for _, t := range linters.Targets { - // skip adding the formatting check - if lintNoFormatCheck.Get(cmd) && t.Name == linters.Formatting.Name { - continue - } lintTargets = append(lintTargets, t) targets = append(targets, t.Name) } @@ -95,7 +91,7 @@ sg lint --help for _, c := range linters.Targets { allLintTargetsMap[c.Name] = c } - // only add a target it we know about it + for _, t := range targets { target, ok := allLintTargetsMap[t] if !ok { @@ -105,11 +101,11 @@ sg lint --help lintTargets = append(lintTargets, target) } - // Always add the format check, unless specified otherwise! - if !lintNoFormatCheck.Get(cmd) { - lintTargets = append(lintTargets, linters.Formatting) - targets = append(targets, linters.Formatting.Name) - } + } + // Always add the format check, unless specified otherwise! + if !lintNoFormatCheck.Get(cmd) { + lintTargets = append(lintTargets, linters.Formatting) + targets = append(targets, linters.Formatting.Name) } repoState, err := repo.GetState(cmd.Context) @@ -126,7 +122,7 @@ sg lint --help std.Out.WriteNoticef("Running checks from targets: %s", strings.Join(targets, ", ")) return runner.Check(cmd.Context, repoState) }, - Subcommands: lintTargets(linters.Targets).Commands(), + Subcommands: lintTargets(append(linters.Targets, linters.Formatting)).Commands(), } type lintTargets []linters.Target @@ -150,18 +146,21 @@ func (lt lintTargets) Commands() (cmds []*cli.Command) { } lintTargets := []linters.Target{target} + targets := []string{target.Name} // Always add the format check, unless specified otherwise! if !lintNoFormatCheck.Get(cmd) && target.Name != linters.Formatting.Name { lintTargets = append(lintTargets, linters.Formatting) + targets = append(targets, linters.Formatting.Name) + } runner := linters.NewRunner(std.Out, generateAnnotations.Get(cmd), lintTargets...) if lintFix.Get(cmd) { - std.Out.WriteNoticef("Fixing checks from target: %s", target.Name) + std.Out.WriteNoticef("Fixing checks from target: %s", strings.Join(targets, ", ")) return runner.Fix(cmd.Context, repoState) } runner.FailFast = lintFailFast.Get(cmd) - std.Out.WriteNoticef("Running checks from target: %s", target.Name) + std.Out.WriteNoticef("Running checks from target: %s", strings.Join(targets, ", ")) return runner.Check(cmd.Context, repoState) }, // Completions to chain multiple commands From 81af3faf76e7eee4feb46f1e8440fc42cea7cf17 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 14:04:27 +0200 Subject: [PATCH 07/12] restore original code --- dev/sg/sg_lint.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index 18387831ca4c..dd20f70f0996 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -80,8 +80,8 @@ sg lint --help if len(targets) == 0 { // If no args provided, run all - for _, t := range linters.Targets { - lintTargets = append(lintTargets, t) + lintTargets = linters.Targets + for _, t := range lintTargets { targets = append(targets, t.Name) } From c01563d6da77cd560371eee35bca4832f2057bf3 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 14:26:34 +0200 Subject: [PATCH 08/12] ensure formatting is run when specified and not specified --- dev/sg/linters/linters.go | 1 + dev/sg/sg_lint.go | 24 +++++++++++++++++------- package.json | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/dev/sg/linters/linters.go b/dev/sg/linters/linters.go index 27f04df58f37..7a5886ceac9e 100644 --- a/dev/sg/linters/linters.go +++ b/dev/sg/linters/linters.go @@ -89,6 +89,7 @@ var Targets = []Target{ bashSyntax, }, }, + Formatting, } var Formatting = Target{ diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index dd20f70f0996..01d8c116c920 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -80,8 +80,12 @@ sg lint --help if len(targets) == 0 { // If no args provided, run all - lintTargets = linters.Targets - for _, t := range lintTargets { + for _, t := range linters.Targets { + if lintNoFormatCheck.Get(cmd) { + continue + } + + lintTargets = append(lintTargets, t) targets = append(targets, t.Name) } @@ -92,20 +96,26 @@ sg lint --help allLintTargetsMap[c.Name] = c } + hasFormatTarget := false for _, t := range targets { target, ok := allLintTargetsMap[t] if !ok { std.Out.WriteFailuref("unrecognized target %q provided", t) return flag.ErrHelp } + if target.Name == linters.Formatting.Name { + hasFormatTarget = true + } + lintTargets = append(lintTargets, target) } - } - // Always add the format check, unless specified otherwise! - if !lintNoFormatCheck.Get(cmd) { - lintTargets = append(lintTargets, linters.Formatting) - targets = append(targets, linters.Formatting.Name) + // If we haven't added the format target already, add it! Unless specified otherwise + if !lintNoFormatCheck.Get(cmd) && !hasFormatTarget { + lintTargets = append(lintTargets, linters.Formatting) + targets = append(targets, linters.Formatting.Name) + + } } repoState, err := repo.GetState(cmd.Context) diff --git a/package.json b/package.json index 308e813d1d8d..6ab7b576291b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "scripts": { "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", "format:changed": "prettier $(git diff --diff-filter=d --name-only origin/main... && git ls-files --other --modified --exclude-standard | grep -E '\\.(js|json|ts|tsx|graphql|md|scss)$' | xargs) --write --list-different --config prettier.config.js", - "format:check": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write=false", + "format:check": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --config prettier.config.js --check --write=false", "_lint:js": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" NODE_OPTIONS=\"--max_old_space_size=16192\" eslint", "lint:js:changed": "yarn _lint:js $(git diff --diff-filter=d --name-only origin/main... | grep -E '\\.[tj]sx?$' | xargs)", "lint:js:root": "yarn run _lint:js --quiet '*.[tj]s?(x)'", From ac98b99ba1f78afca202cf5ae669413f85b262ca Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 14:31:44 +0200 Subject: [PATCH 09/12] fix page format lint said is wrong --- client/web/src/search/home/SearchPage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/web/src/search/home/SearchPage.tsx b/client/web/src/search/home/SearchPage.tsx index 77d06647eb17..20f7bf543b8e 100644 --- a/client/web/src/search/home/SearchPage.tsx +++ b/client/web/src/search/home/SearchPage.tsx @@ -67,9 +67,13 @@ export const SearchPage: React.FunctionComponent {props.isSourcegraphDotCom && (
-
Search millions of open source repositories
+
+ Search millions of open source repositories +
- eventLogger.log('ClickedOnCloudCTA')}>Search private code + eventLogger.log('ClickedOnCloudCTA')}> + Search private code +
)} From 8ac090e85aa56ba8f35158c9897763c18f603939 Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 14:37:38 +0200 Subject: [PATCH 10/12] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6ab7b576291b..0ca0597f28be 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "yarn": "^1.22.4" }, "scripts": { - "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", + "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --list-different --config prettier.config.js --write", "format:changed": "prettier $(git diff --diff-filter=d --name-only origin/main... && git ls-files --other --modified --exclude-standard | grep -E '\\.(js|json|ts|tsx|graphql|md|scss)$' | xargs) --write --list-different --config prettier.config.js", "format:check": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --config prettier.config.js --check --write=false", "_lint:js": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" NODE_OPTIONS=\"--max_old_space_size=16192\" eslint", From ff0ad0165de351f2455a5fe420eadb878357af2f Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 15:44:11 +0200 Subject: [PATCH 11/12] rename no-format-check flag --- dev/sg/sg_lint.go | 20 ++++++++++---------- enterprise/dev/ci/internal/ci/operations.go | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dev/sg/sg_lint.go b/dev/sg/sg_lint.go index 01d8c116c920..7cd6be4ced18 100644 --- a/dev/sg/sg_lint.go +++ b/dev/sg/sg_lint.go @@ -31,10 +31,10 @@ var lintFailFast = &cli.BoolFlag{ Value: true, } -var lintNoFormatCheck = &cli.BoolFlag{ - Name: "no-format-check", - Aliases: []string{"nfc"}, - Usage: "Don't check file formatting", +var lintSkipFormatCheck = &cli.BoolFlag{ + Name: "skip-format-check", + Aliases: []string{"sfc"}, + Usage: "Skip file formatting check", Value: false, } @@ -64,7 +64,7 @@ sg lint --help generateAnnotations, lintFix, lintFailFast, - lintNoFormatCheck, + lintSkipFormatCheck, }, Before: func(cmd *cli.Context) error { // If more than 1 target is requested, hijack subcommands by setting it to nil @@ -81,7 +81,7 @@ sg lint --help if len(targets) == 0 { // If no args provided, run all for _, t := range linters.Targets { - if lintNoFormatCheck.Get(cmd) { + if lintSkipFormatCheck.Get(cmd) { continue } @@ -110,8 +110,8 @@ sg lint --help lintTargets = append(lintTargets, target) } - // If we haven't added the format target already, add it! Unless specified otherwise - if !lintNoFormatCheck.Get(cmd) && !hasFormatTarget { + // If we haven't added the format target already, add it! Unless we must skip it + if !lintSkipFormatCheck.Get(cmd) && !hasFormatTarget { lintTargets = append(lintTargets, linters.Formatting) targets = append(targets, linters.Formatting.Name) @@ -157,8 +157,8 @@ func (lt lintTargets) Commands() (cmds []*cli.Command) { lintTargets := []linters.Target{target} targets := []string{target.Name} - // Always add the format check, unless specified otherwise! - if !lintNoFormatCheck.Get(cmd) && target.Name != linters.Formatting.Name { + // Always add the format check, unless we must skip it! + if !lintSkipFormatCheck.Get(cmd) && target.Name != linters.Formatting.Name { lintTargets = append(lintTargets, linters.Formatting) targets = append(targets, linters.Formatting.Name) diff --git a/enterprise/dev/ci/internal/ci/operations.go b/enterprise/dev/ci/internal/ci/operations.go index d3963430970d..b1781d7d92b1 100644 --- a/enterprise/dev/ci/internal/ci/operations.go +++ b/enterprise/dev/ci/internal/ci/operations.go @@ -122,7 +122,7 @@ func addSgLints(targets []string) func(pipeline *bk.Pipeline) { formatCheck := "" if runType.Is(runtype.MainBranch) || runType.Is(runtype.MainDryRun) { - formatCheck = "--no-format-check " + formatCheck = "--skip-format-check " } cmd = cmd + "lint -annotations -fail-fast=false " + formatCheck + strings.Join(targets, " ") From 8ce76425ffc8c2883bbde3d856f4efc4aa4a4cae Mon Sep 17 00:00:00 2001 From: William Bezuidenhout Date: Mon, 14 Nov 2022 15:47:38 +0200 Subject: [PATCH 12/12] update reference doc --- doc/dev/background-information/sg/reference.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/dev/background-information/sg/reference.md b/doc/dev/background-information/sg/reference.md index 3814d6aa038a..a6ecf0c944bf 100644 --- a/doc/dev/background-information/sg/reference.md +++ b/doc/dev/background-information/sg/reference.md @@ -387,7 +387,7 @@ Flags: * `--fail-fast, --ff`: Exit immediately if an issue is encountered (not available with '-fix') * `--feedback`: provide feedback about this command by opening up a GitHub discussion * `--fix, -f`: Try to fix any lint issues -* `--no-format-check, --nfc`: Don't check file formatting +* `--skip-format-check, --sfc`: Skip file formatting check ### sg lint urls @@ -457,6 +457,15 @@ Flags: Check client code and docs for formatting errors. +Flags: + +* `--feedback`: provide feedback about this command by opening up a GitHub discussion + +### sg lint format + +Check client code and docs for formatting errors. + + Flags: * `--feedback`: provide feedback about this command by opening up a GitHub discussion