[インデックス 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形式の解釈