[インデックス 11547] ファイルの概要
このコミットは、Go言語のgo/printer
パッケージのテストデータファイルtestdata/parser.go
から、誤って存在していたパッケージコメントを削除するものです。これにより、godoc
ツールが生成するパッケージリストに不正確なサマリー行が表示される問題が修正されます。
コミット
commit 548206e86930b07795420ca62eafd60b2cf8f53d
Author: Andrew Gerrand <adg@golang.org>
Date: Thu Feb 2 09:28:11 2012 +1100
go/printer: remove package comment from testdata/parser.go
This prevents an incorrect summary line from appearing in the godoc
package list.
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/5607059
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/548206e86930b07795420ca62eafd60b2cf8f53d
元コミット内容
go/printer
パッケージ内のtestdata/parser.go
ファイルからパッケージコメントを削除します。この変更は、godoc
パッケージリストに不正確なサマリー行が表示されるのを防ぐためのものです。
変更の背景
Go言語のドキュメンテーションツールであるgodoc
は、Goのソースコードから自動的にドキュメントを生成します。この際、各パッケージの概要は、そのパッケージのGoファイル内で最初に現れるパッケージコメント(package
キーワードの直前にあるコメント)から抽出されます。
問題は、src/pkg/go/printer/testdata/parser.go
というファイルが、go/printer
パッケージのテストデータとして存在していたにもかかわらず、独自のパッケージコメントを持っていた点にありました。godoc
は、通常、テストデータディレクトリ内のファイルをメインのパッケージドキュメントとして扱うべきではありませんが、何らかの理由でこのテストデータファイルのパッケージコメントを拾ってしまい、go/printer
パッケージの公式なドキュメントサマリーに、テストデータファイルの内容に基づく不適切な情報が混入していました。
このコミットは、godoc
が生成するドキュメントの正確性を保つために、テストデータファイルから誤ったパッケージコメントを削除するという、クリーンアップとバグ修正の側面を持つ変更です。
前提知識の解説
Go言語のパッケージとドキュメンテーション
Go言語では、コードは「パッケージ」という単位で整理されます。各Goファイルは必ずpackage <パッケージ名>
という宣言で始まります。
パッケージコメント
Goの慣習として、パッケージの目的や概要を説明するために、package
宣言の直前にコメントを記述します。このコメントは「パッケージコメント」と呼ばれ、godoc
ツールによってそのパッケージのドキュメントの冒頭に表示されるサマリーとして利用されます。
例:
// Package foo provides functions for doing bar.
// It is designed to be simple and efficient.
package foo
godoc
ツール
godoc
は、Go言語の標準的なドキュメンテーションツールです。Goのソースコードを解析し、コメントや関数シグネチャなどからHTML形式のドキュメントを自動生成します。開発者はgodoc -http=:6060
のように実行することで、ローカルでGoの標準ライブラリや自分のプロジェクトのドキュメントをブラウザで閲覧できます。godoc
は、パッケージコメントを読み取り、パッケージの概要として表示する機能を持っています。
testdata
ディレクトリ
Goのプロジェクトでは、テストに関連する補助ファイル(入力データ、期待される出力など)をtestdata
という名前のディレクトリに配置することが一般的です。Goのツールチェーンは、通常、testdata
ディレクトリ内のGoファイルをコンパイル対象から除外したり、ドキュメント生成の対象から除外したりする特別な扱いをします。しかし、このケースではgodoc
がtestdata
内のパッケージコメントを誤って解釈してしまったようです。
技術的詳細
この問題は、godoc
がパッケージのドキュメントを生成する際に、src/pkg/go/printer/testdata/parser.go
というテストデータファイルに含まれるパッケージコメントを、メインのgo/printer
パッケージのコメントとして誤って認識してしまったことに起因します。
parser.go
ファイルは、go/printer
パッケージのテストのために用意されたものであり、それ自体が独立したパッケージとしてドキュメント化されることを意図していません。しかし、ファイル内にpackage parser
という宣言と、その直前にパッケージコメントが存在していたため、godoc
がこれを有効なパッケージコメントとして処理し、go/printer
パッケージのドキュメントサマリーに、このテストデータファイルの内容(parser
パッケージに関する説明)を混入させてしまいました。
コミットの目的は、この誤解を解消することです。テストデータファイルからパッケージコメントを削除することで、godoc
はもはやこのファイルをgo/printer
パッケージのドキュメントの一部として誤って解釈することはなくなり、結果として生成されるドキュメントのサマリーが正確になります。これは、godoc
の動作の厳密性を高め、ドキュメントの品質を向上させるための修正です。
コアとなるコードの変更箇所
変更はsrc/pkg/go/printer/testdata/parser.go
ファイルの一箇所のみです。
--- a/src/pkg/go/printer/testdata/parser.go
+++ b/src/pkg/go/printer/testdata/parser.go
@@ -6,7 +6,7 @@
// provided in a variety of forms (see the various Parse* functions); the
// output is an abstract syntax tree (AST) representing the Go source. The
// parser is invoked through one of the Parse* functions.\n-//
+\n package parser
具体的には、以下の行が削除されました。
//
この行は、本来のパッケージコメント(// provided in a variety of forms...
)とpackage parser
宣言の間にあった空行と、その直前のコメント行の一部(//
)を削除しています。これにより、package parser
の直前のコメントが、godoc
がパッケージコメントとして認識する形式ではなくなります。
コアとなるコードの解説
変更前は、src/pkg/go/printer/testdata/parser.go
ファイルは以下のようになっていました(関連部分のみ抜粋):
// provided in a variety of forms (see the various Parse* functions); the
// output is an abstract syntax tree (AST) representing the Go source. The
// parser is invoked through one of the Parse* functions.
//
package parser
ここで、godoc
はpackage parser
の直前にある//
で始まる行をパッケージコメントの一部と見なし、その内容をgo/printer
パッケージのサマリーに含めてしまっていました。
変更後は、//
行が削除され、以下のようになります。
// provided in a variety of forms (see the various Parse* functions); the
// output is an abstract syntax tree (AST) representing the Go source. The
// parser is invoked through one of the Parse* functions.
package parser
この変更により、package parser
の直前には、もはやgodoc
がパッケージコメントとして解釈するような形式のコメントは存在しなくなります。結果として、godoc
はgo/printer
パッケージのドキュメントを生成する際に、このテストデータファイルの内容を誤って取り込むことがなくなり、正しいサマリーが表示されるようになります。
これは、コードの機能自体には影響を与えず、ドキュメンテーション生成の正確性のみを改善する、非常に的を絞った修正です。
関連リンク
- Go Code Review CL: https://golang.org/cl/5607059
参考にした情報源リンク
- Go言語の公式ドキュメント (
godoc
の動作に関する一般的な知識) - Go言語のパッケージとドキュメンテーションに関する一般的な慣習
- Gitのdiff形式の解釈