[インデックス 16627] ファイルの概要
このコミットは、Go言語の組み込み関数である delete
が、BBEdit、IntelliJ IDEA、およびKateといった主要なコードエディタ/IDEのGo言語設定ファイルにおいて、事前定義された識別子(predeclared identifier)として認識されていなかった問題を修正するものです。これにより、これらのエディタでGoコードを記述する際に delete
関数が正しくハイライトされず、コード補完の対象にもならないといった不便が生じていました。このコミットは、これらの設定ファイルに delete
を追加することで、この問題を解決しています。
コミット
- コミットハッシュ:
6db28ee8e0e9d9a880f27cfcba409a1ac566a5c7
- Author: ChaiShushan chaishushan@gmail.com
- Date: Mon Jun 24 13:17:56 2013 -0700
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/6db28ee8e0e9d9a880f27cfcba409a1ac566a5c7
元コミット内容
misc/{bbedit|IntelliJIDEA|kate}: add missing delete predeclared identifier
In general the description should describe what is added or fixed,
not how it was done (the code does this), but in this case the cause
was delete was missing, so the fix is to add it.
Fixes issue 5765.
R=golang-dev, iant, r
CC=golang-dev
https://golang.org/cl/10496043
変更の背景
Go言語には、マップから要素を削除するための組み込み関数 delete
が存在します。しかし、一部の広く利用されているコードエディタやIDE(具体的にはBBEdit、IntelliJ IDEA、Kate)のGo言語サポート設定において、この delete
関数が事前定義されたキーワードや識別子として登録されていませんでした。
この認識不足は、開発者がこれらのエディタでGoコードを記述する際に、以下のような問題を引き起こしていました。
- シンタックスハイライトの不備:
delete
関数が通常の変数名や関数名と同じ色で表示され、Go言語の組み込み関数であることが視覚的に区別できない。 - コード補完の欠如:
delete
と入力し始めた際に、エディタが自動的に補完候補として提示しないため、手動で完全に入力する必要がある。 - 静的解析の誤認識: エディタによっては、
delete
を未定義の関数として誤ってフラグを立てる可能性があり、開発者の混乱を招く。
この問題は issue 5765
として報告されており、このコミットはその報告に対する直接的な修正として行われました。コミットメッセージにもあるように、問題の原因が delete
の欠落であったため、その解決策は単純に delete
を追加することでした。
前提知識の解説
Go言語の組み込み関数と事前定義された識別子
Go言語には、言語仕様の一部として最初から提供されている「組み込み関数(built-in functions)」がいくつか存在します。これらは make
, len
, cap
, new
, append
, copy
, panic
, recover
, print
, println
, complex
, real
, imag
, close
, delete
などです。これらの関数は、特別なインポートなしにGoプログラム内で直接使用できます。
「事前定義された識別子(predeclared identifiers)」とは、Go言語の予約語ではないものの、言語によって特別な意味が与えられ、グローバルスコープで利用可能な識別子のことです。組み込み関数もこのカテゴリに含まれます。コードエディタやIDEは、これらの事前定義された識別子を認識し、適切にシンタックスハイライトしたり、コード補完を提供したりすることで、開発者の生産性を向上させます。
コードエディタ/IDEとGo言語サポート
- BBEdit: macOS向けのプロフェッショナルなテキストエディタで、特にプログラミングやウェブ開発に広く利用されています。言語ごとのシンタックスハイライトやコード補完は、設定ファイル(通常は
.plist
形式)によって定義されます。 - IntelliJ IDEA: JetBrains社が開発する統合開発環境(IDE)で、Java開発で有名ですが、Go言語を含む様々な言語のプラグインを提供しています。Go言語のサポートはGoLandという専用IDEとしても提供されていますが、IntelliJ IDEAのGoプラグインでも利用できます。シンタックスハイライトやコード補完は、XML形式の設定ファイルによって定義されることが多いです。
- Kate: KDEプロジェクトの一部として開発されている、強力なテキストエディタです。プログラミング機能が豊富で、多くのプログラミング言語のシンタックスハイライトをサポートしています。Go言語のシンタックス定義もXML形式のファイルで管理されています。
これらのエディタ/IDEは、それぞれ独自のメカニズムで言語のキーワードや組み込み関数を認識し、それに基づいてシンタックスハイライトやコード補完などの機能を提供します。通常、これらの情報はXMLやプロパティリスト(plist)のような構造化された設定ファイルに記述されています。
技術的詳細
このコミットの技術的詳細は、各エディタ/IDEがGo言語のキーワードや組み込み関数をどのように定義しているか、そして delete
がどのように追加されたかに集約されます。
-
IntelliJ IDEA (
misc/IntelliJIDEA/Go.xml
): IntelliJ IDEAのGo言語サポートは、XML形式のファイルでキーワードを定義しています。このファイルには、Go言語の予約語や組み込み関数が<keyword name="xxx"/>
の形式でリストされています。delete
がこのリストから漏れていたため、コミットでは<keyword name="delete"/>
の行が<keyword name="copy"/>
の後に追加されました。これにより、IntelliJ IDEAはdelete
をGo言語の組み込み関数として認識し、適切なシンタックスハイライトとコード補完を提供するようになります。 -
BBEdit (
misc/bbedit/Go.plist
): BBEditは、プロパティリスト(.plist
)形式のファイルを使用して言語の定義を行います。このファイルはXML形式で記述されており、Go言語のキーワードや組み込み関数が文字列の配列として定義されています。コミットでは、この配列内にdelete,
というエントリが追加されました。具体的には、copy,
の後にdelete,
が挿入されています。これにより、BBEditはdelete
をGo言語の組み込み関数として認識し、シンタックスハイライトやその他の言語サポート機能に反映させます。 -
Kate (
misc/kate/go.xml
): KateエディタもXML形式のファイルでシンタックス定義を行っています。このファイルには、Go言語の組み込み関数が<item> xxx </item>
の形式でリストされています。コミットでは、<item> delete </item>
の行が<item> copy </item>
の後に追加されました。これにより、Kateはdelete
をGo言語の組み込み関数として認識し、シンタックスハイライトを正しく適用するようになります。
これらの変更は、Go言語のソースコード自体を変更するものではなく、Go言語をサポートする外部ツールの設定ファイルを更新するものです。しかし、開発者の日々のコーディング体験に直接影響を与えるため、非常に重要な修正と言えます。
コアとなるコードの変更箇所
このコミットでは、以下の3つのファイルが変更されています。
misc/IntelliJIDEA/Go.xml
misc/bbedit/Go.plist
misc/kate/go.xml
それぞれのファイルで delete
というキーワードが追加されています。
misc/IntelliJIDEA/Go.xml
の変更
--- a/misc/IntelliJIDEA/Go.xml
+++ b/misc/IntelliJIDEA/Go.xml
@@ -75,6 +75,7 @@ Copy this custom language definition & configuration file to
<keyword name="close"/>
<keyword name="complex"/>
<keyword name="copy"/>
+ <keyword name="delete"/>
<keyword name="imag"/>
<keyword name="len"/>
<keyword name="make"/>
misc/bbedit/Go.plist
の変更
--- a/misc/bbedit/Go.plist
+++ b/misc/bbedit/Go.plist
@@ -11,7 +11,7 @@
break,
byte,
cap,
- case,
+ case,
chan,
close,
complex,
@@ -20,8 +20,9 @@
const,
continue,
copy,
- default,
+ default,
defer,
+ delete,
else,
error,
fallthrough,
misc/kate/go.xml
の変更
--- a/misc/kate/go.xml
+++ b/misc/kate/go.xml
@@ -70,6 +70,7 @@
<item> close </item>
<item> complex </item>
<item> copy </item>
+ <item> delete </item>
<item> imag </item>
<item> len </item>
<item> make </item>
コアとなるコードの解説
各ファイルの変更は、それぞれのエディタ/IDEがGo言語の組み込み関数を認識するための設定に delete
を追加するものです。
-
misc/IntelliJIDEA/Go.xml
: このファイルはIntelliJ IDEAのGo言語プラグインが使用するシンタックス定義の一部です。<keyword name="delete"/>
を追加することで、IntelliJ IDEAはdelete
をGo言語のキーワードとして認識し、適切なシンタックスハイライトやコード補完の対象とします。 -
misc/bbedit/Go.plist
: このファイルはBBEditがGo言語のシンタックスハイライトに使用するプロパティリストです。delete,
を既存のキーワードリストに追加することで、BBEditはdelete
をGo言語の組み込み関数として認識し、シンタックスハイライトを正しく適用します。 -
misc/kate/go.xml
: このファイルはKateエディタがGo言語のシンタックスハイライトに使用するXML定義ファイルです。<item> delete </item>
を追加することで、Kateはdelete
をGo言語の組み込み関数として認識し、シンタックスハイライトを正しく適用します。
これらの変更は、Go言語の組み込み関数 delete
が、これらのエディタ/IDEで他の組み込み関数と同様に扱われるようにするための、シンプルかつ効果的な修正です。
関連リンク
- GitHubコミットページ: https://github.com/golang/go/commit/6db28ee8e0e9d9a880f27cfcba409a1ac566a5c7
- Gerrit Change-Id (Goのコードレビューシステム):
https://golang.org/cl/10496043
参考にした情報源リンク
- Go言語の公式ドキュメント(組み込み関数に関する情報)
- 各エディタ/IDEの公式ドキュメント(シンタックスハイライト定義に関する情報)
- Web検索(Go issue 5765に関する情報、ただし直接的な一致は見つからず、コミットメッセージからの推測に留まる)