Skip to content

tsdoc-check ​

@yuu1111/quality-check に同梱される TSDoc 検査の設定とrule

設定例 ​

json
{
  "tsdoc-check": {
    "enabled": true,
    "includes": ["src/**", "!src/generated/**"],
    "docScope": "exported",
    "styleScope": "documented",
    "rules": {
      "preset": "recommended",
      "syntax": {
        "blank-line-before-tags": "on",
        "single-line-doc": "on",
        "tsdoc-tag": "error"
      },
      "documentation": {
        "deprecated-without-guidance": "on",
        "missing-doc": "on",
        "missing-returns": "on"
      },
      "contract": {
        "param-order": "on",
        "param-untagged": "on",
        "type-param-untagged": "on"
      }
    }
  }
}

enabled、includes、rules と preset、group、rule の指定は quality-check の設定 にある このengineはin-processで起動し args を取らない

検査する範囲 ​

書き足りないdocを咎める範囲を docScope が、書いたTSDocの体裁を検査する範囲を styleScope が選ぶ どちらも省略すると exported になる どちらのscopeもopt-inのruleだけに効くため、preset の recommended では指定しても何も変わらない

docScope ​

docScopedocを要求する宣言書き足りない分を検査する宣言
exported公開surfaceの宣言docがある公開surfaceの宣言
documented公開surfaceの宣言docがある宣言すべて
all関数本体の外にある宣言すべてdocがある宣言すべて

styleScope ​

styleScope体裁を検査する宣言
exporteddocがある公開surfaceの宣言
documenteddocがある宣言すべて

公開surfaceはトップレベルの宣言のうち、export を付けたもの、export { name } が名前を挙げたもの、export default name と export = name が指すものにする export { name } from "..." と export * from "..." は指す先の宣言がこのfileに無いため対象外にする all も関数本体の中の宣言へ doc は要求しない

書かれたTSDocが正しいかだけを見るruleはどちらのscopeにも従わず、docがある宣言すべてを対象にする その宣言にはトップレベルの宣言だけでなく、class、interface、type literal、namespace、enum、object literal のメンバーと、doc を付けた関数本体の中の宣言も含む object literal のメンバーは変数の初期化式から辿り、引数、配列、as const のような式を包む構文の内側にあるものも対象にする どのruleがどのscopeに従うかは rule 一覧の 対象範囲 列にある orphan-doc は宣言に付かなかったTSDoc commentを報告するため、宣言を選ぶscopeに従わない

rule 一覧 ​

RuleGroup重大度Default対象範囲検出対象
tsdoc-syntaxsyntaxerrortrue全文書TSDoc parserが返す構文メッセージ
param-mismatchcontracterrortrue全文書signatureが宣言していないparameterを指す @param
type-param-mismatchcontracterrortrue全文書宣言に無いtype parameterを指す @typeParam
suppressionsuppressionerrortrue全文書理由の無い抑制、未知のrule、ruleを書いていない抑制
tsdoc-tagsyntaxwarningtrue全文書TSDoc設定が定義していないtag
suppression-unusedsuppressionwarningtrue全文書何も抑制しない抑制
missing-docdocumentationwarningfalsedocScopeTSDoc commentの無い宣言
single-line-docsyntaxwarningfalsestyleScope1行で書いたTSDoc comment
blank-line-before-tagssyntaxwarningfalsestyleScopesummaryの直下に書いたblock tag
orphan-docsyntaxwarningtrue全文書どの宣言にも付いていないTSDoc comment
param-untaggedcontractwarningfalsedocScope@param の無い宣言済みparameter
type-param-untaggedcontractwarningfalsedocScope@typeParam の無い宣言済みtype parameter
param-ordercontractwarningfalsedocScope宣言順と違う @param の並び
missing-returnsdocumentationwarningfalsedocScope@returns の無い値を返す関数
deprecated-without-guidancedocumentationwarningfalsedocScope代替先を示さない @deprecated

documentation groupのruleと、syntax の blank-line-before-tags・single-line-doc、contract の param-order・param-untagged・type-param-untagged はopt-inで、rules が on にするまで実行しない そのため preset の recommended は書かれたTSDocの構文と契約の整合だけを検査し、docの有無と体裁を要求しない

warn と error はruleの重大度を変更し、opt-inのruleは先に有効にする

tagと構文 ​

blank-line-before-tags はsummaryと最初のblock tagの間に空の * 行を要求し、tagの並びを説明の1行下から始めさせる 空行より下のtagは続けて並べ、summaryを持たずtagで始まるcommentは対象外にする

TSDocが定義していないtagは tsdoc-tag のwarningになる @description などの独自tagもそこで報告し、syntax groupの tsdoc-tag を error にするとすべてerrorへ上がる

判断の範囲 ​

missing-returns は明示した戻り値型だけを読み、注釈の無い関数は対象外にする Promise<void> は値を返さない扱いにする

deprecated-without-guidance は @see か @deprecated の文中の {@link} を代替先として受け入れる

orphan-doc はTSDocとして書いたblock commentのうち、どの宣言の文書にもならなかったものを報告する TSDocを積み上げたときの最後以外、宣言の無い場所へ書いたTSDoc、file末尾に残ったTSDocがここに入る

parseできないfileはTypeScript compilerとBiomeへ任せ、その宣言は検査しない

抑制 ​

例外は宣言の隣に理由を添えて示す

ts
// tsdoc-check-ignore missing-doc: the loader reads this value
export const value = 1

理由の無い抑制、未知のrule、ruleを書いていない抑制は suppression のerrorになる 何も抑制しない抑制は suppression-unused のwarningになる orphan-doc は付ける先の宣言が無いTSDocへの指摘なので、宣言の隣に抑制を書いても効かない