Electron Documentation Style Guide
Dies sind die Richtlinien für das Schreiben von Dokumentation zu Elektron.
Überschriften
- Jede Seite hat ein einzelnen Titel mit
#
am Anfang. - Kapitel der selben Seite müssen
##
-Level Titel haben. - Unterkapitel müssen die Anzahl der
#
im Titel entsprechend ihrer Schachtelungstiefe erhöhen. - Der Titel der Seite muss APA-Titel folgen.
- Alle Kapitel müssen APA-Satz-Fall folgen.
Am Beispiel von Schnellstart
:
# Schnellstart
...
## Main-Prozess
...
## Renderer-Prozess
...
## Ihre App ausführen
...
### Als Distribution ausführen
...
### Electron-Binärdatei manuell herunterladen
...
Für API-Referenzen gibt es Ausnahmen von dieser Regel.
Markdown-Dateien
Dieses Repository verwendet das markdownlint
Paket, um konsistente Markdown-Stils zu erzwingen. Die genauen Regeln finden Sie in der .markdownlint.json
-Datei im Stammordner.
Es gibt einige Stilrichtlinien, die nicht von den Linter-Regeln abgedeckt werden:
- Verwenden Sie
sh
anstelle voncmd
in Codeblöcken (aufgrund des Syntax-Highlighters). - Halten Sie die Zeilenlängen möglichst zwischen 80 und 100 Zeichen, um die Lesbarkeit zu gewährleisten.
- Keine Verschachtelung listet mehr als 2 Ebenen auf (aufgrund des Markdown-Renderers).
- Alle
js
- undjavascript
-Codeblöcke sind mit Standard-Markdown-versehen. - Verwenden Sie bei ungeordneten Listen Sternchen anstelle von Bindestrichen.
Wörter auswählen
- "Wird" sollte statt "würde" verwendet werden, um Ergebnisse zu beschreiben.
- Debuggen des Hauptprozesses in VSCode".
API Referenzen
Die folgenden Regeln gelten nur für Dokumentationen der APIs.
Titel und Beschreibung
Jede Seite muss den tatsächlichen Objektnamen verwenden, den require('electron')
als Titel zurück gibt, wie BrowserWindow
, autoUpdater
, und session
.
Fügen Sie direkt unter dem Seitentitel eine einzeilige Beschreibung des Moduls als Markdown-Zitat hinzu (beginnend mit >
).
Am Beispiel des session
-Moduls:
# session
> Verwalte Browser-Sitzungen, Cookies, Cache, Proxy-Einstellungen, etc.
Methoden und Events von Modulen
Für Module, die keine Klassen sind, müssen deren Methoden und Events unter ## Methods
und ## Events
aufgelistet werden.
Verwende AutoUpdater
als Beispiel:
# autoUpdater
## Events
### Event: 'error'
## Methoden
### `autoUpdater.setFeedURL(url[, requestHeaders])`
Klassen
- API-Klassen oder Klassen, die Teil von Modulen sind, müssen unter dem Kapitel
## Klassen: Klassenname
aufgeführt werden. - Eine Seite kann mehrere Klassen haben.
- Konstruktoren müssen mit Überschriften der Ebene
###
aufgelistet werden. - Statische Methoden müssen unter dem Kapitel
### Static Methods
aufgelistet werden. - Instanz-Methoden müssen unter einem
### Instanz-Methoden
Kapitel aufgelistet werden. - Alle Methoden, die einen Rückgabewert haben, müssen ihre Beschreibung mit "Returns
[TYPE]
- [Return description]" beginnen- Wenn die Methode ein
Object
zurückgibt, kann dessen Struktur angegeben werden mit einem Doppelpunkt gefolgt von einem Zeilenumbruch, dann einer ungeordneten Liste der Eigenschaften im gleichen Stil wie die Funktionsparameter.
- Wenn die Methode ein
- Instanzereignisse müssen in einem
### Instance Events
-Kapitel aufgelistet werden. - Instanzereignisse müssen in einem
### Instance Properties
-Kapitel aufgelistet werden.- Instanz-Eigenschaften müssen mit "A [Property Type] ..." beginnen
Die Session
und Cookies
-Klassen als Beispiel verwenden:
# Sitzung
## Methoden
### session.fromPartition(Partition)
## Statische Eigenschaften
### Sitzung. efaultSession
## Klasse: Sitzung
### Instanz Ereignisse
#### Event: 'will-download'
### Instanz Methoden
#### `ses. etCacheSize()`
### Instanz Eigenschaften
#### `ses.cookies`
## Klasse: Cookies
### Instanz Methoden
#### `cookies.get(filter, callback)`
Methoden und ihre Argumente
Das Kapitel der Methoden muss in folgender Form sein:
### `objectName.methodName(required[, optional]))`
* `required` string - Eine Parameterbeschreibung.
* `optional` Integer (optional) - Eine weitere Parameterbeschreibung.
...
Überschrifthöhe
Die Überschrift kann ###
oder ####
sein, je nachdem, ob die Methode zu einem Modul oder einer Klasse gehört.
Funktionssignatur
Bei Modulen ist objectName
der Name des Moduls. Bei Klassen muss es der Name der Instanz der Klasse sein und nicht der Modulname.
Beispielsweise müssen die Methoden der Session
-Klasse unter dem session
-Modul ses
als objectName
verwenden.
Optionale Argumente werden von eckigen Klammern []
mit dem optionalen Argument sowie dem erforderlichen Komma angemerkt, wenn dieses optionale Argument einem anderen Argument folgt:
erforderlich[, optional]
Argumentbeschreibungen
Detailliertere Informationen zu jedem der Argumente werden in einer ungeordneten Liste unterhalb der Methode vermerkt. The type of argument is notated by either JavaScript primitives (e.g. string
, Promise
, or Object
), a custom API structure like Electron's Cookie, or the wildcard any
.
Wenn das Argument vom Typ Array
ist, verwende die Kurzform []
mit dem Typ des Wertes innerhalb des Arrays (zum Beispiel any[]
oder string[]
).
Wenn das Argument vom Typ Promise
ist, parametriere den Typ mit dem, was der Promise zurückgibt (zum Beispiel Promise<void>
oder Promise<string>
).
Wenn ein Argument mehrere Typen aufweisen kann, trenne diese durch |
.
Die Beschreibung der Typargumente von Function
sollte deutlich machen, wie sie aufgerufen werden kann und die Typen der Parameter auflisten, die an die Funktion übergeben werden.
Plattformspezifische Funktionalität
Wenn ein Argument oder eine Methode nur für bestimmte Plattformen gilt, werden diese Plattformen eine durch Leerzeichen getrennte, kursiv gedruckte Liste nach dem Datentyp angegeben. Werte können macOS
, Windows
oder Linux
sein.
* `animate` boolean (optional) _macOS_ _Windows_ - Animiere das Objekt.
Ereignisse
Das Ereignis-Kapitel muss in folgender Form sein:
### Event: 'wake-up'
Gibt zurück:
* `time` string
...
Die Überschrift kann ###
oder ####
groß sein, je nachdem, ob das Ereignis zu einem Modul oder einer Klasse gehört.
Die Argumente eines Ereignisses folgen den gleichen Regeln wie Methoden.
Eigenschaften
Das Eigenschaften-Kapitel muss in folgender Form sein:
### session.defaultSession
...
Die Überschrift kann ###
oder ####
groß sein, je nachdem, ob die Eigenschaft zu einem Modul oder einer Klasse gehört.
API History
An "API History" block is a YAML code block encapsulated by an HTML comment that should be placed directly after the Markdown header for a class or method, like so:
#### `win.setTrafficLightPosition(position)` _macOS_
<!--
```YAML history
added:
- pr-url: https://github.com/electron/electron/pull/22533
changes:
- pr-url: https://github.com/electron/electron/pull/26789
description: "Made `trafficLightPosition` option work for `customButtonOnHover` window."
deprecated:
- pr-url: https://github.com/electron/electron/pull/37094
breaking-changes-header: deprecated-browserwindowsettrafficlightpositionposition
```
-->
* `position` [Point](structures/point.md)
Set a custom position for the traffic light buttons. Can only be used with `titleBarStyle` set to `hidden`.
It should adhere to the API History JSON Schema (api-history.schema.json
) which you can find in the docs
folder. The API History Schema RFC includes example usage and detailed explanations for each aspect of the schema.
The purpose of the API History block is to describe when/where/how/why an API was:
- Added
- Changed (usually breaking changes)
- Deprecated
Each API change listed in the block should include a link to the PR where that change was made along with an optional short description of the change. If applicable, include the heading id for that change from the breaking changes documentation.
The API History linting script (
lint:api-history
) validates API History blocks in the Electron documentation against the schema and performs some other checks. You can look at its tests for more details. There are a few style guidelines that aren't covered by the linting script:
Format
Always adhere to this format:
API HEADER | #### `win.flashFrame(flag)`
BLANK LINE |
HTML COMMENT OPENING TAG | <!--
API HISTORY OPENING TAG | ```YAML history
API HISTORY | added:
| - pr-url: https://github.com/electron/electron/pull/22533
API HISTORY CLOSING TAG | ```
HTML COMMENT CLOSING TAG | -->
BLANK LINE |
YAML
- Use two spaces for indentation.
- Do not use comments.
Descriptions
- Always wrap descriptions with double quotation marks (i.e. "example").
- Describe the change in a way relevant to app developers and make it capitalized, punctuated, and past tense.
- Refer to Clerk for examples.
- Keep descriptions concise.
- Ideally, a description will match its corresponding header in the breaking changes document.
- Favor using the release notes from the associated PR whenever possible.
- Developers can always view the breaking changes document or linked pull request for more details.
Placement
Generally, you should place the API History block directly after the Markdown header for a class or method that was changed. However, there are some instances where this is ambiguous:
Chromium bump
Sometimes a breaking change doesn't relate to any of the existing APIs. In this case, it is ok not to add API History anywhere.
Change affecting multiple APIs
Sometimes a breaking change involves multiple APIs. In this case, place the API History block under the top-level Markdown header for each of the involved APIs.
# contextBridge
<!--
```YAML history
changes:
- pr-url: https://github.com/electron/electron/pull/40330
description: "`ipcRenderer` can no longer be sent over the `contextBridge`"
breaking-changes-header: behavior-changed-ipcrenderer-can-no-longer-be-sent-over-the-contextbridge
```
-->
> Create a safe, bi-directional, synchronous bridge across isolated contexts
# ipcRenderer
<!--
```YAML history
changes:
- pr-url: https://github.com/electron/electron/pull/40330
description: "`ipcRenderer` can no longer be sent over the `contextBridge`"
breaking-changes-header: behavior-changed-ipcrenderer-can-no-longer-be-sent-over-the-contextbridge
```
-->
Process: [Renderer](../glossary.md#renderer-process)
Notice how an API History block wasn't added under:
contextBridge.exposeInMainWorld(apiKey, api)
since that function wasn't changed, only how it may be used:
contextBridge.exposeInMainWorld('app', {
- ipcRenderer,
+ onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args))
})
Übersetzungen der Dokumentation
Siehe Elektron/i18n