mirror of
https://github.com/coder/coder.git
synced 2026-09-22 05:05:20 +08:00
Normalizes non-standard code-fence language tags across `docs/**` so a strict highlighter (Shiki, used by Fumadocs) won't fail the build on an unrecognized language, and unifies redundant synonym tags onto one canonical form per language. The current renderer (Speed-Highlight) detects the language from the code content, not the fence label, so this drift wasn't visible until now. ## Changes - `hcl` -> `tf` (199 fences, including indented ones nested in numbered/bulleted lists). Shiki ships `hcl` and `terraform` as two distinct grammars (not aliases); every `hcl`-tagged fence in `docs/**` is actually Terraform resource/data/provider syntax, so the more specific `terraform` grammar is correct for all of them. `tf` is Shiki's own alias for that grammar, and it's also what GitHub's own markdown renderer resolves to the same HCL/Terraform highlighting. - `pwsh`/`powershell` -> `ps1`. Both `ps` and `ps1` are registered PowerShell aliases in Shiki, but on GitHub's renderer only `.ps1` is a registered file extension (`.ps` isn't), so `ps1` renders identically to `powershell` there today while bare `ps` would silently lose highlighting. - `env` -> `dotenv` (a dedicated Shiki grammar for `KEY=VALUE` files) - `text`/`output`/`none`/`url` -> `txt`. Same built-in plain-text fallback either way, just shorter. - `Dockerfile` -> `dockerfile` (lowercase) - `bash`/`shell` -> `sh` (732 fences). Shiki and GitHub both alias all three to a single shell grammar; this was already the style guide's stated preference, just not enforced across the existing corpus until now. - `markdown` -> `md` (4 fences). Alias of the same grammar in both Shiki and GitHub. - `jsonc` -> `json` (1 fence). The block has no comments or trailing commas, so it doesn't need the comments-capable grammar. - `ts` -> `tsx` (2 fences, `docs/about/contributing/frontend.md`). Verified the actual content tokenizes identically under both grammars, and a sibling block in the same file already needs `tsx` for real JSX, so unifying to one tag is safe for this file. Documented a caveat: `tsx` mis-tokenizes the legacy angle-bracket type-assertion syntax (`<Type>value`), which is invalid in real `.tsx` files anyway, so use `value as Type` instead. - `yml` -> `yaml` (1 fence) - Updated `docs/.style/style-guide/formatting.md` to document all canonical tags `promql` (2 fences) and `caddyfile` (2 fences) are left as-is. Shiki doesn't bundle a grammar for either, so they need a custom grammar registration when the site adopts Shiki, rather than degrading to `txt`. Tracked as follow-up work under DOCS-118 and [DOCS-544](https://linear.app/codercom/issue/DOCS-544/vendor-a-local-promql-grammar-for-shiki-syntax-highlighting) (promql). Does not touch `offlinedocs/`. Linear: [DOCS-476](https://linear.app/codercom/issue/DOCS-476/normalize-docs-code-fence-languages-de-risk-shikifumadocs) <details> <summary>How the fence tags were verified</summary> Each tag was tested against a real `shiki@latest` highlighter instance (`codeToHtml`/`codeToTokens`) and cross-checked against GitHub's `@wooorm/starry-night` grammar sources (the renderer that actually displays these `.md` files today, in repo browsing and PR diffs), since that's what determines whether brevity is safe before Shiki adoption: ```text FAIL env -- Language `env` is not included in this bundle. FAIL Dockerfile -- Language `Dockerfile` is not included in this bundle. FAIL promql -- Language `promql` is not included in this bundle. FAIL caddyfile -- Language `caddyfile` is not included in this bundle. FAIL pwsh -- Language `pwsh` is not included in this bundle. FAIL output -- Language `output` is not included in this bundle. ``` `hcl` doesn't error in Shiki, since it's a real grammar, but that's exactly the trap: it was silently rendering every fence with the generic HCL grammar instead of the Terraform-specific one. Every `hcl`-tagged fence in `docs/**` was manually checked against `origin/main` and is genuinely Terraform content. For `ts`/`tsx`, tokenizing the actual doc content confirmed identical output under both grammars; a synthetic test with the legacy angle-bracket cast syntax confirmed `tsx` degrades on that specific construct, which the style guide now calls out. The first normalization pass only matched fence tags at column 0 (`^```tag$`), missing tags indented inside numbered/bulleted lists. A follow-up pass caught the remaining occurrences at any indentation level. </details> --- *This PR description and the underlying changes were prepared with Coder Agents assistance.*
174 lines
5.8 KiB
Markdown
174 lines
5.8 KiB
Markdown
# Documentation
|
|
|
|
This style guide is primarily for use with authoring documentation.
|
|
|
|
## General guidelines
|
|
|
|
- Use sentence case, even in titles (do not punctuate the title, though)
|
|
- Use the second person
|
|
- Use the active voice
|
|
- Use plural nouns and pronouns (_they_, _their_, or _them_), especially when
|
|
the specific number is uncertain (i.e., "Set up your environments" even though
|
|
you don't know if the user will have one or many environments)
|
|
- When writing documentation titles, use the noun form, not the gerund form
|
|
(e.g., "Environment Management" instead of "Managing Environments")
|
|
- Context matters when you decide whether to capitalize something or not. For
|
|
example,
|
|
["A Job creates one or more Pods..."](https://kubernetes.io/docs/concepts/workloads/controllers/job/)
|
|
is correct when writing about Kubernetes. However, in other contexts, neither
|
|
_job_ nor _pods_ would be capitalized. Please follow the conventions set forth
|
|
by the relevant companies and open source communities.
|
|
|
|
## Third-party references
|
|
|
|
If you have questions that aren't explicitly covered by this guide, consult the
|
|
following third-party references:
|
|
|
|
| **Type of guidance** | **Third-party reference** |
|
|
|----------------------|----------------------------------------------------------------------------------------|
|
|
| Spelling | [Merriam-Webster.com](https://www.merriam-webster.com/) |
|
|
| Style - nontechnical | [The Chicago Manual of Style](https://www.chicagomanualofstyle.org/home.html) |
|
|
| Style - technical | [Microsoft Writing Style Guide](https://docs.microsoft.com/en-us/style-guide/welcome/) |
|
|
|
|
## Tools
|
|
|
|
This repository runs [Vale](https://vale.sh/) on `docs/` as part of CI to enforce prose style.
|
|
The configuration is the repo-root `.vale.ini`, and the curated rule set is documented in [`docs/.style/style-guide/`](../../.style/style-guide/README.md).
|
|
Run the same checks locally with `make lint/prose`.
|
|
Vale runs in advisory mode in this iteration: warnings surface as inline PR annotations, but they don't block the build.
|
|
|
|
The following external tools can also help when drafting. Take their
|
|
suggestions with a grain of salt because they aren't tuned for Coder's
|
|
voice or product names:
|
|
|
|
- [alex.js](https://alexjs.com/)
|
|
- [Grammarly](https://app.grammarly.com/)
|
|
- [Hemingway Editor](https://hemingwayapp.com/)
|
|
|
|
## How to format text
|
|
|
|
Below summarizes the text-formatting conventions you should follow.
|
|
|
|
### Bold
|
|
|
|
Use **bold** formatting when referring to UI elements.
|
|
|
|
### Italics
|
|
|
|
Use _italics_ for:
|
|
|
|
- Parameter names
|
|
- Mathematical and version variables
|
|
|
|
### Code font
|
|
|
|
Use _code font_ for:
|
|
|
|
- User text input
|
|
- Command-line utility names
|
|
- DNS record types
|
|
- Environment variable names (e.g., `PATH`)
|
|
- Filenames, filename extensions, and paths
|
|
- Folders and directories
|
|
- HTTP verbs, status codes, and content-type values
|
|
- Placeholder variables (see [Placeholders in angle brackets](#placeholders-in-angle-brackets))
|
|
|
|
Use _code blocks_ for code samples and other blocks of code. Be sure to indicate
|
|
the language your using to apply the proper syntax highlighting.
|
|
|
|
```txt
|
|
This is a codeblock.
|
|
```
|
|
|
|
For code that you want users to enter via a command-line interface, use
|
|
`console`, not `bash`.
|
|
|
|
### Placeholders in angle brackets
|
|
|
|
Placeholder values written in angle brackets **must** be wrapped in backticks so
|
|
they render as inline code. The documentation site renders Markdown as HTML, so
|
|
an unwrapped placeholder such as `<organization-name>` is parsed as an unknown
|
|
HTML tag and stripped out of the page, so readers never see it.
|
|
|
|
This applies wherever the text becomes documentation, including the Go CLI help
|
|
strings and Swagger annotations that generate the CLI and API reference.
|
|
|
|
```text
|
|
# Correct: wrap the placeholder in backticks
|
|
Structured as: `<organization-name>/<team-slug>`.
|
|
|
|
# Incorrect: the placeholder renders as "Structured as: /."
|
|
Structured as: <organization-name>/<team-slug>.
|
|
```
|
|
|
|
### Punctuation
|
|
|
|
Do not use the ampersand (&) as a shorthand for _and_ unless you're referring to
|
|
a UI element or the name of something that uses _&_.
|
|
|
|
You can use the symbol `~` in place of the word _approximately_.
|
|
|
|
### UI elements
|
|
|
|
When referring to UI elements, including the names for buttons, menus, dialogs,
|
|
and anything that has a name visible to the user, use bold font.
|
|
|
|
**Example:** On the **Environment Overview** page, click **Configure SSH**.
|
|
|
|
Don't use code font for UI elements unless it is rendered based on previously
|
|
entered text. For example, if you tell the user to provide the environment name
|
|
as `myEnvironment`, then use both bold and cold font when referring to the name.
|
|
|
|
**Example**: Click **`myEnvironment`**.
|
|
|
|
When writing out instructions that involve UI elements, both of the following
|
|
options are acceptable:
|
|
|
|
- Go to **Manage** > **Users**.
|
|
- In the **Manage** menu, click **Users**.
|
|
|
|
## Product-specific references
|
|
|
|
Below summarizes the guidelines regarding how Coder terms should be used.
|
|
|
|
### Capitalized terms
|
|
|
|
The only Coder-specific terms that should be capitalized are the names of
|
|
products (e.g., Coder).
|
|
|
|
The exception is **code-server**, which is always lowercase. If it appears at
|
|
the beginning of the sentence, rewrite the sentence to avoid this usage.
|
|
|
|
### Uncapitalized terms
|
|
|
|
In general, we do not capitalize the names of features (unless the situation
|
|
calls for it, such as the word appearing at the beginning of a sentence):
|
|
|
|
- account dormancy
|
|
- audit logs
|
|
- autostart
|
|
- command-line interface
|
|
- dev URLs
|
|
- environment
|
|
- image
|
|
- metrics
|
|
- organizations
|
|
- progressive web app
|
|
- registries
|
|
- single sign-on
|
|
- telemetry
|
|
- workspace
|
|
- workspace providers
|
|
- workspaces as code
|
|
|
|
We also do not capitalize the names of user roles:
|
|
|
|
- auditor
|
|
- member
|
|
- site admin
|
|
- site manager
|
|
|
|
## Standardized spellings
|
|
|
|
- WiFi
|