-
Notifications
You must be signed in to change notification settings - Fork 38.7k
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
devel/ tree minor edits #25099
Merged
k8s-github-robot
merged 1 commit into
kubernetes:master
from
mikebrow:devel-tree-80col-updates
May 10, 2016
Merged
devel/ tree minor edits #25099
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,65 +50,129 @@ Updated: 5/3/2016 | |
## Code conventions | ||
|
||
- Bash | ||
|
||
- https://google-styleguide.googlecode.com/svn/trunk/shell.xml | ||
- Ensure that build, release, test, and cluster-management scripts run on OS X | ||
|
||
- Ensure that build, release, test, and cluster-management scripts run on | ||
OS X | ||
|
||
- Go | ||
|
||
- Ensure your code passes the [presubmit checks](development.md#hooks) | ||
- [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) | ||
|
||
- [Go Code Review | ||
Comments](https://github.com/golang/go/wiki/CodeReviewComments) | ||
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. same here |
||
|
||
- [Effective Go](https://golang.org/doc/effective_go.html) | ||
|
||
- Comment your code. | ||
- [Go's commenting conventions](http://blog.golang.org/godoc-documenting-go-code) | ||
- If reviewers ask questions about why the code is the way it is, that's a sign that comments might be helpful. | ||
- [Go's commenting | ||
conventions](http://blog.golang.org/godoc-documenting-go-code) | ||
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. same, I won't call it out more. |
||
- If reviewers ask questions about why the code is the way it is, that's a | ||
sign that comments might be helpful. | ||
|
||
|
||
- Command-line flags should use dashes, not underscores | ||
|
||
|
||
- Naming | ||
- Please consider package name when selecting an interface name, and avoid redundancy. | ||
- e.g.: `storage.Interface` is better than `storage.StorageInterface`. | ||
- Do not use uppercase characters, underscores, or dashes in package names. | ||
- Please consider package name when selecting an interface name, and avoid | ||
redundancy. | ||
|
||
- e.g.: `storage.Interface` is better than `storage.StorageInterface`. | ||
|
||
- Do not use uppercase characters, underscores, or dashes in package | ||
names. | ||
- Please consider parent directory name when choosing a package name. | ||
- so pkg/controllers/autoscaler/foo.go should say `package autoscaler` not `package autoscalercontroller`. | ||
- Unless there's a good reason, the `package foo` line should match the name of the directory in which the .go file exists. | ||
- Importers can use a different name if they need to disambiguate. | ||
- Locks should be called `lock` and should never be embedded (always `lock sync.Mutex`). When multiple locks are present, give each lock a distinct name following Go conventions - `stateLock`, `mapLock` etc. | ||
- API conventions | ||
- [API changes](api_changes.md) | ||
- [API conventions](api-conventions.md) | ||
|
||
- so pkg/controllers/autoscaler/foo.go should say `package autoscaler` | ||
not `package autoscalercontroller`. | ||
- Unless there's a good reason, the `package foo` line should match | ||
the name of the directory in which the .go file exists. | ||
- Importers can use a different name if they need to disambiguate. | ||
|
||
- Locks should be called `lock` and should never be embedded (always `lock | ||
sync.Mutex`). When multiple locks are present, give each lock a distinct name | ||
following Go conventions - `stateLock`, `mapLock` etc. | ||
|
||
- [API changes](api_changes.md) | ||
|
||
- [API conventions](api-conventions.md) | ||
|
||
- [Kubectl conventions](kubectl-conventions.md) | ||
|
||
- [Logging conventions](logging.md) | ||
|
||
## Testing conventions | ||
|
||
- All new packages and most new significant functionality must come with unit tests | ||
- Table-driven tests are preferred for testing multiple scenarios/inputs; for example, see [TestNamespaceAuthorization](../../test/integration/auth_test.go) | ||
- Significant features should come with integration (test/integration) and/or [end-to-end (test/e2e) tests](e2e-tests.md) | ||
- All new packages and most new significant functionality must come with unit | ||
tests | ||
|
||
- Table-driven tests are preferred for testing multiple scenarios/inputs; for | ||
example, see [TestNamespaceAuthorization](../../test/integration/auth_test.go) | ||
|
||
- Significant features should come with integration (test/integration) and/or | ||
[end-to-end (test/e2e) tests](e2e-tests.md) | ||
- Including new kubectl commands and major features of existing commands | ||
- Unit tests must pass on OS X and Windows platforms - if you use Linux specific features, your test case must either be skipped on windows or compiled out (skipped is better when running Linux specific commands, compiled out is required when your code does not compile on Windows). | ||
|
||
- Unit tests must pass on OS X and Windows platforms - if you use Linux | ||
specific features, your test case must either be skipped on windows or compiled | ||
out (skipped is better when running Linux specific commands, compiled out is | ||
required when your code does not compile on Windows). | ||
|
||
- Avoid relying on Docker hub (e.g. pull from Docker hub). Use gcr.io instead. | ||
- Avoid waiting for a short amount of time (or without waiting) and expect an asynchronous thing to happen (e.g. wait for 1 seconds and expect a Pod to be running). Wait and retry instead. | ||
|
||
- Avoid waiting for a short amount of time (or without waiting) and expect an | ||
asynchronous thing to happen (e.g. wait for 1 seconds and expect a Pod to be | ||
running). Wait and retry instead. | ||
|
||
- See the [testing guide](testing.md) for additional testing advice. | ||
|
||
## Directory and file conventions | ||
|
||
- Avoid package sprawl. Find an appropriate subdirectory for new packages. (See [#4851](http://issues.k8s.io/4851) for discussion.) | ||
- Libraries with no more appropriate home belong in new package subdirectories of pkg/util | ||
- Avoid general utility packages. Packages called "util" are suspect. Instead, derive a name that describes your desired function. For example, the utility functions dealing with waiting for operations are in the "wait" package and include functionality like Poll. So the full name is wait.Poll | ||
- Avoid package sprawl. Find an appropriate subdirectory for new packages. | ||
(See [#4851](http://issues.k8s.io/4851) for discussion.) | ||
- Libraries with no more appropriate home belong in new package | ||
subdirectories of pkg/util | ||
|
||
- Avoid general utility packages. Packages called "util" are suspect. Instead, | ||
derive a name that describes your desired function. For example, the utility | ||
functions dealing with waiting for operations are in the "wait" package and | ||
include functionality like Poll. So the full name is wait.Poll | ||
|
||
- All filenames should be lowercase | ||
|
||
- Go source files and directories use underscores, not dashes | ||
- Package directories should generally avoid using separators as much as possible (when packages are multiple words, they usually should be in nested subdirectories). | ||
- Package directories should generally avoid using separators as much as | ||
possible (when packages are multiple words, they usually should be in nested | ||
subdirectories). | ||
|
||
- Document directories and filenames should use dashes rather than underscores | ||
- Contrived examples that illustrate system features belong in /docs/user-guide or /docs/admin, depending on whether it is a feature primarily intended for users that deploy applications or cluster administrators, respectively. Actual application examples belong in /examples. | ||
- Examples should also illustrate | ||
[best practices for configuration and using the system](../user-guide/config-best-practices.md) | ||
|
||
- Contrived examples that illustrate system features belong in | ||
/docs/user-guide or /docs/admin, depending on whether it is a feature primarily | ||
intended for users that deploy applications or cluster administrators, | ||
respectively. Actual application examples belong in /examples. | ||
- Examples should also illustrate [best practices for configuration and | ||
using the system](../user-guide/config-best-practices.md) | ||
|
||
- Third-party code | ||
- Go code for normal third-party dependencies is managed using [Godeps](https://github.com/tools/godep) | ||
|
||
- Go code for normal third-party dependencies is managed using | ||
[Godeps](https://github.com/tools/godep) | ||
|
||
- Other third-party code belongs in `/third_party` | ||
- forked third party Go code goes in `/third_party/forked` | ||
- forked _golang stdlib_ code goes in `/third_party/golang` | ||
|
||
- Third-party code must include licenses | ||
|
||
- This includes modified third-party code and excerpts, as well | ||
|
||
## Coding advice | ||
|
||
- Go | ||
|
||
- [Go landmines](https://gist.github.com/lavalamp/4bd23295a9f32706a48f) | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is a weird linewrap, but it renders correctly - can we equally indent it and still render?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Depends on the parsing tool. Some tools delete the extra whitespace in front of line two and after the new line, but not all tools. The key is the line is a section or paragraph if you will, with a particular tab over. However if you have spaces but no new section identifier like
-
or*
or1
then you are at the mercy of the implementation. This is why on many manuals when you look at it in a shell set to the number of cols it was drafted with (new lined at), all is good, but then when you shrink it a few lines you get the end of the shorter line (tail) as the beginning of the next but then you have an extra new line at the end of the tail then the next line with the spaces in front.Having no spaces at the front of the next line in the paragraph tells the parsing tools that this is a continuing section. Further, the number of spaces at the beginning does not always correspond to the tabbed section. Think tabs vs spaces. Getting the number of spaces just right is a hit or miss and won't work for all tools. Thus, better to not guess.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
puke. How many different renderings do we expect to work? Anything more
that GitHub (GFM) ?
On Tue, May 3, 2016 at 5:13 PM, Mike Brown notifications@github.com wrote:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I presume the two important ones are the linux man(ual) which are the cli text manual documents (MD.. compiled versions of .md files) and man pages which is being used by GitHub. I see there has been an effort to compile the kubectl-*.md docs into a linux manual.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@thockin To see the line wrap issue type
man docs/devel/coding-conventions.md
and make your window smaller.