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 )