Skip to content

Add guidelines about writing documentation #35

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 2 commits into from
May 31, 2022

Conversation

GuillaumeGomez
Copy link
Member

There are no guidelines on how to write documentation for std/core or how to review documentation updates. This PR is about adding the basics for this.

@GuillaumeGomez
Copy link
Member Author

I'm not sure who to ping here so ping @m-ou-se since it's about libs API docs. :)

@GuillaumeGomez GuillaumeGomez force-pushed the writing-docs branch 2 times, most recently from e1b7623 to 8557846 Compare May 30, 2022 21:49
@GuillaumeGomez
Copy link
Member Author

I applied all your suggestions @yaahc, thanks a lot!

@GuillaumeGomez
Copy link
Member Author

Updated!

@yaahc yaahc merged commit f513a22 into rust-lang:master May 31, 2022
github-actions bot pushed a commit that referenced this pull request May 31, 2022
@GuillaumeGomez GuillaumeGomez deleted the writing-docs branch May 31, 2022 14:10
@yaahc yaahc mentioned this pull request May 31, 2022
Comment on lines +9 to +18
It is common in English to have contractions such as "don't" or "can't". Do not
use these in documentation. Always write their "full form":

* "do not" instead of "don't"
* "cannot" instead of "can't"
* "it would" instead of "it'd"
* "it will" instead of "it'll"
* "it is"/"it has" instead of "it's"
* "you are" instead of "you're"
* "they are" instead of "they're"
Copy link
Member

Choose a reason for hiding this comment

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

Why? We currently have over 600 of such contractions in doc comments in library/*.

I think it's definitely good to have guidelines, but we should probably start with writing down the existing practices rather than making new rules that we currently don't follow.

Copy link
Member Author

Choose a reason for hiding this comment

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

I think the explanations I provided below provide explanations for it. Making documentation easier to read by reducing congestion like trying to figure out if 'd is "had" or "should/would" doesn't seem like a bad idea. Until now we didn't have a guideline so it was to be expected. I don't see why it'd be an issue when writing new documentation though. Nothing prevents us to slowly update the existing documentation.

But maybe you had some other reasons?

Copy link
Member

@Manishearth Manishearth Jun 1, 2022

Choose a reason for hiding this comment

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

I'll point out: while there is no such thing as "standardized" english, only some of these contractions are found in formal usage (don't, can't, it'll, it's, you're, they're are found, whereas 'd for should/would/had is not as much), and I cannot think of a single English contraction that is ambiguous in formal usage (e.g. your example about 'd doesn't apply at all). Folks are more loose in chats/etc, but most modern English style guides allow contractions, and if anything it reads weirdly if you omit them. Discouraging contractions seems rather weird.

Copy link
Member Author

Choose a reason for hiding this comment

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

I think I followed what the rustc errors do (which disallow contractions). Maybe I'm once again imagining things...

### Examples

As for the examples, they have to show the usage of the function/method. Just
like the `panic` section, they need to be prepended by a `Examples` title.
Copy link
Member

Choose a reason for hiding this comment

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

In many cases we just have # Example (singular) instead of # Examples when there's only one example.

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't remember the debate behind this (I think @Manishearth was involved in this debate? Please correct me if I'm wrong!) but it's what we already recommend in the rustdoc book. I'm fine with updating both though if needed.

Copy link
Member

Choose a reason for hiding this comment

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

I don't remember being involved in this debate at all. I think both are fine.

I recall making sure the clippy lint for this can detect both (or at least talking about that).

Copy link
Member Author

Choose a reason for hiding this comment

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

Then it was maybe at the time when the documentation team still existed I guess... Like said above, I'm fine with both.

Comment on lines +42 to +44
Little note: when you are documenting an item, no need to link to it. So if you
write documentation for `String::push_str` method, no need to link to the method
`push_str` or to the `String` type.
Copy link
Member

Choose a reason for hiding this comment

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

This paragraph seems to be missing a few words.

Suggested change
Little note: when you are documenting an item, no need to link to it. So if you
write documentation for `String::push_str` method, no need to link to the method
`push_str` or to the `String` type.
Little note: when you are documenting an item, there is no need to link to it.
So, if you write documentation for the `String::push_str` method, there is
no need to link to the `push_str` method or the `String` type.

Comment on lines +46 to +51
If you have cases like `Vec<String>`, you need to use intra-doc links on both
`Vec` and `String` as well. It would look like this:

```text
This is a [`Vec`]`<`[`String`]`>`.
```
Copy link
Member

Choose a reason for hiding this comment

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

This is something we currently rarely do, and I'm not sure we should do that everywhere, as it's quite tedious with not a lot of benefit.

Copy link
Member Author

Choose a reason for hiding this comment

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

It makes the reading better. As such, I think it's a good enough reason.

(It's also something we enforced when the documentation team still existed too)

Copy link
Member

Choose a reason for hiding this comment

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

It makes the reading better.

It don't think it does. It just adds more noise with the changes in color/formatting.

If both A and B are very relevant, then it might make sense to link them separately in A<B>. But quite often B isn't very relevant, and it's fine and less noisy to just link all of A<B> to A.

Regardless, this is guideline is not uncontroversial. It's fine to document and merge guidelines in to std-dev-guide that we already follow, by documenting existing practice. But new rules that we don't currently follow should first have some discussion and a decision.

Right now, we have exactly one doc comment that uses the syntax [..]`<`[..]`>`.

Copy link
Member Author

Choose a reason for hiding this comment

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

You're absolutely right. I remembered that we had a lot more around. I guess my memory about it is completely outdated...

I still appreciate to be able to click on each type separately but maybe it's only me...

This is a [`Vec`]`<`[`String`]`>`.
```

Extra explanations: since both `Vec` and `String` are in codeblocks, `<` and `>`
Copy link
Member

Choose a reason for hiding this comment

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

"explanation" is usually used a an uncountable noun, with no separate plural form:

Suggested change
Extra explanations: since both `Vec` and `String` are in codeblocks, `<` and `>`
Extra explanation: since both `Vec` and `String` are in codeblocks, `<` and `>`

Copy link
Member Author

Choose a reason for hiding this comment

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

TIL, thanks!

Copy link
Member Author

Choose a reason for hiding this comment

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

Wikipedia seems to say it's countable: https://simple.wiktionary.org/wiki/explanation whereas oxford dictionary says it's both: https://www.oxfordlearnersdictionaries.com/definition/english/explanation 😆

Copy link
Member

Choose a reason for hiding this comment

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

It can be countable, however that usually applies to when, e.g. you're doing multiple explanations to different people or at different times. If it's being explained in one place, that's a single explanation even if it has multiple parts.

(this is similar to how "fish" is uncountable except when talking about different kinds of fish)

Copy link
Member Author

Choose a reason for hiding this comment

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

Tricky language. Thanks for the explanation!

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.

7 participants