github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/doc/comment/parse.go (about)

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package comment
     6  
     7  // Docは解析されたGoドキュメントコメントです。
     8  type Doc struct {
     9  	// Contentはコメント内のコンテンツブロックのシーケンスです。
    10  	Content []Block
    11  
    12  	// Linksはコメント内のリンクの定義です。
    13  	Links []*LinkDef
    14  }
    15  
    16  // LinkDefは単一のリンク定義です。
    17  type LinkDef struct {
    18  	Text string
    19  	URL  string
    20  	Used bool
    21  }
    22  
    23  // ブロックは、ドキュメントコメント内のブロックレベルのコンテンツであり、[*Code]、[*Heading]、[*List]、または[*Paragraph]のいずれかです。
    24  type Block interface {
    25  	block()
    26  }
    27  
    28  // ヘッディングはドキュメントコメントの見出しです。
    29  type Heading struct {
    30  	Text []Text
    31  }
    32  
    33  // リストは番号付きまたは箇条書きリストです。
    34  // リストは常に空でないことが保証されます:len(Items) > 0。
    35  // 番号付きのリストでは、Items[i].Numberは空ではない文字列です。
    36  // 箇条書きリストでは、Items[i].Numberは空の文字列です。
    37  type List struct {
    38  	// Itemsはアイテムのリストです。
    39  	Items []*ListItem
    40  
    41  	// ForceBlankBeforeは、コメントの再フォーマット時に、
    42  	// 通常の条件を無視してリストの前に空行が必要であることを示します。
    43  	// BlankBeforeメソッドを参照してください。
    44  	//
    45  	// コメントパーサーは、リストの前に空行がある場合に
    46  	// ForceBlankBeforeを設定し、空行が出力時に保持されるようにします。
    47  	ForceBlankBefore bool
    48  
    49  	// ForceBlankBetweenは、コメントを再フォーマットする際、リストの項目は必ず空白行で区切られる必要があることを示しています。通常の条件を上書きします。BlankBetweenメソッドを参照してください。
    50  	//
    51  	// コメントパーサーは、リスト内の任意の二つの項目の間に空白行がある場合、それをプリントする際に空白行が保持されることを確認するために、ForceBlankBetweenを設定します。
    52  	ForceBlankBetween bool
    53  }
    54  
    55  // BlankBeforeはコメントのリフォーマットにおいて、リストの前に空行を含めるべきかを報告します。
    56  // デフォルトのルールは[BlankBetween]と同じです:
    57  // もしリストの項目の内容に空行が含まれている場合
    58  // (つまり、少なくとも1つの項目に複数の段落がある場合)
    59  // リスト自体は前に空行を置く必要があります。
    60  // 先行する空行を強制するためには、[List].ForceBlankBeforeを設定することができます。
    61  func (l *List) BlankBefore() bool
    62  
    63  // BlankBetweenはコメントのリフォーマット時に、
    64  // リストの項目間に空行を追加する必要があるかどうかを報告します。
    65  // デフォルトのルールは、リストの項目の内容に空行が含まれている場合
    66  // (つまり、少なくとも1つの項目が複数の段落を持っている場合)、
    67  // リストの項目自体も空行で分ける必要があるということです。
    68  // 空行の区切りは、[List].ForceBlankBetweenを設定することで強制することができます。
    69  func (l *List) BlankBetween() bool
    70  
    71  // ListItemは、番号付きまたは点付きリスト内の単一の項目です。
    72  type ListItem struct {
    73  
    74  	// Numberは、番号付きリストの10進数の文字列または箇条書きリストの空の文字列です。
    75  	Number string
    76  
    77  	// Contentはリストの内容です。
    78  	// 現在、パーサーとプリンターの制限により、Contentの各要素は*Paragraphである必要があります。
    79  	Content []Block
    80  }
    81  
    82  // パラグラフはテキストの段落です。
    83  type Paragraph struct {
    84  	Text []Text
    85  }
    86  
    87  // Code は、整形済みのコードブロックです。
    88  type Code struct {
    89  
    90  	// Textは事前に書式設定されたテキストで、改行文字で終わります。
    91  	// 複数行になることがあり、それぞれの行は改行文字で終わります。
    92  	// 空でなく、空白行で始まることも終わることもありません。
    93  	Text string
    94  }
    95  
    96  // テキストはドキュメントコメント内のテキストレベルの内容であり、
    97  // [プレーン]、[イタリック]、[*リンク]、または[*ドキュリンク]のいずれかです。
    98  type Text interface {
    99  	text()
   100  }
   101  
   102  // Plainはプレーンテキストとしてレンダリングされる文字列です(イタリック化されません)。
   103  type Plain string
   104  
   105  // イタリック体は、斜体のテキストとしてレンダリングされる文字列です。
   106  type Italic string
   107  
   108  // Linkは特定のURLへのリンクです。
   109  type Link struct {
   110  	Auto bool
   111  	Text []Text
   112  	URL  string
   113  }
   114  
   115  // DocLinkはGoのパッケージまたはシンボルのドキュメントへのリンクです。
   116  type DocLink struct {
   117  	Text []Text
   118  
   119  	// ImportPath、Recv、Nameは、Goのパッケージまたはシンボルを識別します。
   120  	// 非空のフィールドの組み合わせは以下の通りです:
   121  	//  - ImportPath:別のパッケージへのリンク
   122  	//  - ImportPath、Name:別のパッケージ内のconst、func、type、varへのリンク
   123  	//  - ImportPath、Recv、Name:別のパッケージ内のメソッドへのリンク
   124  	//  - Name:このパッケージ内のconst、func、type、varへのリンク
   125  	//  - Recv、Name:このパッケージ内のメソッドへのリンク
   126  	ImportPath string
   127  	Recv       string
   128  	Name       string
   129  }
   130  
   131  // Parserはドキュメントコメントのパーサーです。
   132  // 構造体のフィールドは、[Parser.Parse] を呼び出す前に埋めることで、
   133  // パースプロセスの詳細をカスタマイズすることができます。
   134  type Parser struct {
   135  
   136  	// WordsはGo言語の識別子に対応する単語のマップであり、斜体にする必要があり、
   137  	// かつ可能であればリンクも作成します。
   138  	// もしWords[w]が空の文字列であれば、単語wは斜体にのみなります。
   139  	// そうでなければ、Words[w]をリンクターゲットとしてリンクが作成されます。
   140  	// Wordsは[go/doc.ToHTML]のwordsパラメータに対応します。
   141  	Words map[string]string
   142  
   143  	// LookupPackageはパッケージ名をインポートパスに変換する。
   144  	//
   145  	// LookupPackage(name)がok == trueを返す場合、[name]
   146  	//(または[name.Sym]または[name.Sym.Method])
   147  	//はimportPathのパッケージドキュメントへのリンクと見なされる。
   148  	// 空文字列とtrueを返すことも有効であり、その場合はnameが現在のパッケージを参照していると見なされる。
   149  	//
   150  	// LookupPackage(name)がok == falseを返す場合、
   151  	//[name](または[name.Sym]または[name.Sym.Method])
   152  	//はドキュメントへのリンクと見なされないが、
   153  	// nameが標準ライブラリ内のパッケージの完全な(ただし要素が1つだけの)インポートパスである場合、
   154  	//[math]や[io.Reader]のように
   155  	//例外として扱われる。 LookupPackageはそれらの名前に対しても呼び出されるため、
   156  	//同じパッケージ名の他のパッケージのインポートを参照することができる。
   157  	//
   158  	// LookupPackageをnilに設定するのは、常に""とfalseを返す関数に設定するのと同じです。
   159  	LookupPackage func(name string) (importPath string, ok bool)
   160  
   161  	// LookupSymは、現在のパッケージにシンボル名またはメソッド名が存在するかどうかを報告します。
   162  	//
   163  	// LookupSym("", "Name")がtrueを返す場合、[Name]はconst、func、type、またはvarのドキュメントリンクと見なされます。
   164  	//
   165  	// 同様に、LookupSym("Recv", "Name")がtrueを返す場合、[Recv.Name]はtype RecvのメソッドNameのドキュメントリンクと見なされます。
   166  	//
   167  	// LookupSymをnilに設定することは、常にfalseを返す関数に設定することと同じです。
   168  	LookupSym func(recv, name string) (ok bool)
   169  }
   170  
   171  // DefaultLookupPackageは、[Parser.LookupPackage] がnilの場合に使用されるデフォルトのパッケージルックアップ関数です。
   172  // これは、単一要素のインポートパスを持つ標準ライブラリのパッケージ名を認識します。
   173  // それ以外の場合は、名前を付けることができません。
   174  //
   175  // ただし、現在のパッケージで使用されているインポートに基づいたより洗練されたルックアップを提供するgo/docパッケージがあることに注意してください。
   176  func DefaultLookupPackage(name string) (importPath string, ok bool)
   177  
   178  // Parse parses the doc comment text and returns the *[Doc] form.
   179  // Comment markers (/* // and */) in the text must have already been removed.
   180  func (p *Parser) Parse(text string) *Doc
   181  
   182  const (
   183  	_ spanKind = iota
   184  )