CLI 工具說明相關規定

總覽

指令列說明 (通常透過 --help 提供),是與使用者溝通的重要方式。其中提供了更詳細的說明文件和功能探索。

指南

說明文件必須包含: * 用量 * 說明

說明文件可能包含下列部分 (如有需要):

範例

本文件的後續章節會詳細說明。(請注意,blast 並非實際工具)。

Usage: blast [-f] [-s <scribble>] <command> [<args>]

Destroy the contents of <file>.

Options:
  -f                force, ignore minor errors. This description
                    is so long that it wraps to the next line.
  -s <scribble>     write <scribble> repeatedly
  -v, --verbose     say more. Defaults to $BLAST_VERBOSE.

Commands:
  blow-up         explosively separate
  grind           make smaller by many small cuts
  help            get help on other commands e.g. `blast help grind`

Examples:
  Scribble 'abc' and then run |grind|.
  $ blast -s 'abc' grind old.txt taxes.cp

Notes:
  Use `blast help <command>` for details on [<args>] for a subcommand.

Error codes:
  2 The blade is too dull.
  3 Out of fuel.

一般版面配置和樣式

請參閱上方範例,瞭解如何遵守這些規定。

而數個部分的路段是以英文繁體稱呼。也就是說,使用英文文法 (而非英式英文或其他) 字時,請使用英文文法撰寫正確的句子。語句之間應使用一個空格,並遵循「牛津逗號」樣式。例如:「The Description、Sample 和 Notes 區段是以英文漸進撰寫」。

版面配置

  • 每個部分會以空白行分隔。
  • 區段內容已縮排兩個空格。
  • 系統將在與標籤相同的行中編寫單行內容,並以一個空格分隔冒號和指令名稱。例如「Usage: blast <file>」。
  • 多行區段將會立即寫在標籤後方 (無空白行)。標籤後方的每一行都會縮排兩個空格。
  • 所有輸出內容都是單一資料欄,但「選項」、「指令」和「錯誤代碼」這類欄位分為兩個資料欄資料表。
  • 使用空格來縮排或對齊。不要輸出定位字元。
  • 將文字環繞 80 欄。包裝選項或指令說明時,請將後續幾行對齊說明的開頭 (例如約 20 個半形字元)。

樣式

  • 區段標題以首字母大寫表示:首字和最後一個字詞大寫。兩者之間的所有字詞也都會大寫,但除了文章 (a、a、the)、組合詞 (例如與、但、或者) 和介係詞 (例如 on、in、in) 之外。
  • 簡短說明片段 (「選項」或「指令」中的第二欄) 以小寫英文字母開頭,因此不應是完整的句子。簡短說明之外的所有文字都必須是完整的句子,且片段後面必須加上句號。
  • 請盡量讓每個部分保持精簡。如果更多意見,請引導使用者在執行 --help 時使用 --verbose,或引導他們查看完整說明文件。
  • 說明文字可使用 Unicode (UTF-8) 字元。指令名稱和使用文字僅包含可攜的 ASCII 字元 (不含萬國碼)。

使用方法

必須使用且包含「Usage:」標頭。

Usage: blast [-f] [-s <scribble>] <command> [<args>]

用量通常為單行,但當選項彼此互斥時,可以使用多行來釐清情況。如果呈現所有互斥情況所需的行數過多,請將行數限制在一些常見情況,並在完整文件中提供詳細資料。如果您有多個互斥的選項,請考慮建立子指令或使用不同的工具,以降低複雜程度。

使用語法

系統會優先列出指令名稱。指令名稱並非採用硬式編碼,系統會從指令名稱動態提取,也就是 argv[0] 路徑中的最後一個元素。如此一來,單一二進位檔就能做為多項不同的工具運作。

名稱和使用文字只會包含可攜的 ASCII 字元。所有長格式指令都是完全小寫,即一律不全部大寫或混合使用大小寫。單一字母切換應偏好小寫,但允許使用大寫。

為選項和預留位置使用有意義的字詞。避免使用縮寫。最好使用單一字詞。使用多個字詞時,請以連字號 (-) 分隔字詞,即請勿使用底線、駝峰式大小寫或一起執行多個字詞。

除了指令名稱之外,還有幾種不同類型的引數 (如Fuchsia 工具相關規定所述)。

  • 完全相符的文字
  • 引數
  • 選項 (切換鈕和按鍵)
  • 索引鍵選項
  • 選項分隔符號
完全相符的文字語法

精確的文字會依原樣寫成使用行中。在「Usage: copy <from> to <destination>」範例中,to 字詞是確切的文字。如果文字為選用項目,則會以方括號 ([]) 括住,並出現在用法行中:「Usage: copy <from> [to] <destination>」。

引數語法

引數會以角括號 (<>) 包住,以便與煽情露骨內容有所區別。在 Usage: copy <from> <destination> 範例中,<from><destination> 都是引數。如果引數不是必要引數,則會以方括號 ([]) 括住,例如:Usage: copy <from> [<destination>]。另請參閱選項分隔符號

選項語法互斥

表示相互獨立的選項時,有幾個選項可以選擇。

如果提供多個用量行,每個行都會顯示一組互斥的指令。例如:

Usage:
  swizzle [-z] <file>
  swizzle --reset

表示 --reset 和搭配 <file> 的使用是互斥的選項。

另一個指定互斥選項的方法是在選項之間使用垂直線 (「|」)。請注意,使用垂直長條表示資料在不同程序之間的流動情形,就稱為「Pipe」。用來分隔選項時,會讀成「Or」。

例如:

Usage: froth [-y|-z] <file>

表示 -y -z 開關可以 (或兩者都不選) 使用 (兩者並非必要),但最好兩者並用 (兩者並用)。如要表示僅限使用任一值,但不得兩者並用,請用括號括住選項。例如,「Usage: froth (-a|-b) <file>」表示必須傳遞 -a「或」 -b

請注意,--version--help 常會導致其他引數遭到忽略,且不會顯示出來。建議您將這些程式碼列為獨立的用量行。

分組 (隱含) 選項

目前沒有特定的語法來表示啟用選項時也會影響其他選項。如果選項暗示其他選項已啟用或停用,請在「選項」中加以指定。例如,「passing -e implies -f」表示如果啟用 -e-f 就會像在指令列上傳遞一樣啟用 (無論 -f 是否已明確傳遞)。多餘傳遞隱含值不會造成傷害 (並非錯誤)。

記錄主要切換按鈕的影響。例如,如果 -x implies -c and -p-x 的說明中加入附註,而不是在 -c-p 中。這是為了讓 --help 輸出內容保持精簡 (可在完整說明文件中放寬這項規則)。

選用鍵

如要以選用鍵為索引鍵選項建立外觀,請建立選用的完全比對文字,後面加上引數。例如「Usage: copy [from] <from> [to] <destination>」。在這個例子中,這些都是有效的值:「copy a b」、「copy from a b」、「copy from a to b」、「copy a to b」。

重複選項

如果相同的位置引數可能會重複,請使用刪節號 (...) 表示。請勿使用連續的萬國碼 (Unicode) 刪節號。例如:「Usage: copy <from> [<from>...] <to>」表示最後一個引數一律會解讀為 <to>,而上述值則為多個 <from> 項目。請注意,「<from> [<from>...]」表示至少有一個 <from> 項目,「Usage: copy [<from>...] <to>」則代表可接受零或多個 <from> 項目。

針對可能會重複的鍵/值組合,請用括號 (如果組合為選用) 或括號 (如果組合為選用) 分組,然後在群組中分別加上刪節號,例如 [--input <file>]...(--input <file>)...

括號

角括號 (<>)、方括號 ([]) 和括號 (()) 不會立即包含空格。

[from] # correct
<to> # correct
(-a|-b) # correct

[ from ] # incorrect
< to > # incorrect
( -a|-b ) # incorrect

角括號 (<>) 包裝引數或鍵值。

括號 ([]) 會納入選用元素。使用巢狀角括號 (例如 [<file>]) 時,您可以將 <file> 解讀為選用引數。巢狀「[<」不是獨立的括號樣式,而是包含「<」的「[」。建立巢狀結構時,括號 ([) 位於最外 (請勿使用 <[file]>)。

括號 (()) 可用來將元素分組。請使用括號提高明確性,例如需要的互斥選項。

括號 ({}) 保留供日後使用。本指南刻意讓括號在日後的修訂版本中具有特殊意義。

說明

必須提供說明,且不含標題。換句話說,說明區域不是標示為「description」例如:

Destroy the contents of <file>.

說明以美式英文繁體撰寫 (使用美式英文文法、拼字和標點符號的完整句子)。

每項工具都應該提供相關資訊,您可以在這個部分說明這項功能。

「說明」部分應描述

  • 工具的用途 (必要)
  • 所用的平台設定
  • 使用的機制、資料格式或通訊協定
  • 黃金工作流程 (開發人員的重要流程)
  • 請提供說明文件,例如 fuchsia.com/docs 或類似網址,避免使用容易過時的深層連結

「說明」部分也可以包含「另請參閱」參照其他工具的名稱 (避免使用網址)。

「說明」部分不應加入的內容

  • 使用的環境變數,不是「選項」中列出的變數 (請在「選項」或「附註」中提供此值)
  • 危害安全風險 (請參閱「附註」一節的說明)
  • 錯誤代碼 (請在「錯誤代碼」部分列出)
  • 版權 (請勿在 --help 中加入這項內容)
  • 作者 (請勿加入 --help)
  • 如何取得子指令的說明 (請將這個指令放在 help 子指令的簡短說明)
  • 如何更新工具 (如適用) 工具套件的說明文件
  • 版本資訊 (請使用獨立的檔案)

選項

如果程式接受引數,就必須使用「Options」區段。例如:

Options:
  -f              force, ignore minor errors
  -s <scribble>   write <scribble> repeatedly. Defaults to $BLAST_SCRIBBLE.

列出的選項會套用至工具本身,而非子指令。當您要求該子指令的說明時 (例如使用 blast help grindblast grind --help),系統會列出各個子指令的選項。

盡量讓選項保持在一個完整的字詞。如果需要兩個字詞,請以連字號 (-) 分隔字詞。請避免不常見的縮寫。

依字母順序呈現選項清單。

選項會以不同行列出每個引數、切換鈕和索引鍵選項,但含有短和長格式的引數除外。如果引數皆有短和長格式,請在同一行列出,並優先採用簡短格式,並以 , (半形空格) 分隔,例如 -f, --force

正確的文字引數不會顯示在「選項」部分中。會顯示在「用量」區段中。

系統會將輸入時依原樣輸入的文字包在括號中,而變數項目會以角括號 (<>) 顯示,選用項目則會顯示在方括號 ([]) 中。列出選項時,Key 不得為選用。例如:

  -a                   a good example
  [-b]                 a bad example, to use -b it must be typed as-is

每個選項都會提供簡短說明。說明文字沒有長度限制,但簡潔扼要。嘗試在整體工具說明、範例或附註中加入更詳盡的資訊,而不要建立冗長的選項說明。

說明內容

  • 簡單提醒該選項隱含的意義,例如:ignore minor errors
  • 如果該選項會覆寫其他選項,例如 -x implies -c and -p
  • 預設值,例如 defaults to $BLAST_SCRIBBLE

說明句子片段開始所在的資料欄,可能會因工具的需求而不同。如果看起來沒問題,請使用左側邊緣 20 個字元,但如果讀數多或少,請進行調整。

如果選項數量很多,建議您顯示實用的子集,並說明如何進一步查看這些選項,例如搭配 --help 傳遞 --verbose

指令

如果程式有子指令,就必須設定指令區段。如果存在標籤,會加上「Commands:」標籤。例如:

Commands:
  blow-up         explosively separate
  grind           make smaller by many small cuts
  help            get help on other commands e.g. `blast help grind`

如果程式沒有子指令,就不會顯示指令區段。

如果工具有子指令,它也會具備 help 指令,可提供子指令 (例如 blast help grind) 的進一步說明。

盡量讓子指令只包含一個完整的字詞。如果需要兩個字詞,請以連字號 (-) 分隔字詞。請避免不常見的縮寫。按字母順序呈現指令清單。

每個指令名稱中會出現一行簡短說明。如需較長的指令說明,使用者會特別要求取得該指令的說明。這段說明只是簡短提醒該指令,並協助使用者探索指令。

如果指令數量眾多,請考慮顯示實用的子集,並說明如何進一步查看 (例如透過傳遞 --verbose--help)。

範例

範例區段為選用項目。如有的話,系統會加上「範例:」標籤。 例如:

Examples:
  Scribble 'abc' and then run |grind|.
  $ blast -s 'abc' grind old.txt taxes.cp

每個範例都會有包含美式英文繁體的功能 (即使用美式英文文法、拼字和標點符號的完整句子),並在後面說明指令列範例。您在指令列中輸入的每一行都會在前面加上「$」,模擬命令提示字元。

如要包裝過長的範例,請在前一行以「\」結尾,並以「」(空格) 開頭,表示線繼續。

  This example wraps onto multiple lines.
  $ blast -s 2332 some/long/path/cats.o \
    more/long/path/dogs.o more/long/path/bears.o \
    more/long/path/deer.o

如果顯示範例指令中的某些輸出內容會有幫助,請在範例後立即寫入輸出內容。

請使用一行空白行分隔範例。

如果「範例」部分的內容過長,請將範例移到說明文件中。互動式說明範例僅供快速參考及搜尋,不是完整說明文件。

附註

附註是選填項目,開頭則是「Notes:」標頭。例如:

Notes:
  Use `blast help <command>` for details on [<args>] for a subcommand.

附註以美式英文繁體撰寫 (也就是使用美式英文文法、拼字和標點符號的完整句子)。

記事內容

  • 使用,而非「選項」中所列的環境變數 (針對預設值)
  • 安全危害
  • 協助使用者的提醒

不應加入記事的內容

  • 錯誤代碼 (請在「錯誤代碼」部分列出)
  • 版權 (請勿在 --help 中加入這項內容)
  • 作者 (請勿加入 --help)
  • 如何取得子指令的說明 (請將這個指令放在 help 子指令的簡短說明)
  • 如何更新工具 (如適用) 工具套件的說明文件
  • 版本資訊 (請使用獨立的檔案)

錯誤代碼

如果產生 01 以外的代碼,就必須提供「錯誤代碼」部分。例如:

Error codes:
  2  The blade is too dull.
  3  Out of fuel.

如果只有 01 結果是由程式產生,這個部分就會省略。

錯誤代碼 0 一律視為「無錯誤」,錯誤代碼 1 一律為「一般錯誤」。兩者都不會記錄在 --help 輸出內容中。01 以外的所有錯誤代碼都必須記錄在工具產生的所有。

平台規格

某些平台 (例如 DOS) 使用不同的選項前置字元 (例如 /),或者可能會允許不區分大小寫的切換鈕。無論平台為何,工具都會使用破折號前置字元 (-) 和區分大小寫選項。這表示一般情況下,工具的說明文件不必考量所用平台。

不應納入 --help 輸出內容的內容

請勿顯示具有等號 (=) 的鍵/值組合,例如 --scribble=abc。系統會使用空白字元做為分隔符號 (--scribble abc) 剖析鍵和值。如果說明中的等於值,可能會讓使用者感到困惑。

請勿實作翻頁元素 (例如 more 程式,會在每個畫面中的文字時暫停輸出)。

不包含

  • 說明輸出結果中的版權 (在合法情況下須指明版權)。
  • 版本資訊 (請在版本資訊中附上)。
  • 完整說明文件 (請在 Markdown 文件中註明)。
  • 版本資訊 (從 --version 的輸出內容)。
  • 結果代碼 01 的說明文件 (放在 .md 文件中)。
  • 介面專屬說明 (例如如何將輸出內容或管道重新導向至 Pager)。