[インデックス 10063] misc/vim: VimエディタのGo言語シンタックスハイライトにdelete組み込み関数を追加
コミット
- コミットハッシュ:
57d07e32d82e1ea0f8edd7fba95bd192cb5f539e - 作成者: Dave Cheney dave@cheney.net
- 日付: 2011年10月19日 18:30:06 -0200
- コミットメッセージ:
misc/vim: add highlighting for delete
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/57d07e32d82e1ea0f8edd7fba95bd192cb5f539e
元コミット内容
commit 57d07e32d82e1ea0f8edd7fba95bd192cb5f539e
Author: Dave Cheney <dave@cheney.net>
Date: Wed Oct 19 18:30:06 2011 -0200
misc/vim: add highlighting for delete
R=golang-dev, n13m3y3r
CC=golang-dev
https://golang.org/cl/5303050
---
misc/vim/syntax/go.vim | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/misc/vim/syntax/go.vim b/misc/vim/syntax/go.vim
index 26d7defe36..7ede9d59e1 100644
--- a/misc/vim/syntax/go.vim
+++ b/misc/vim/syntax/go.vim
@@ -85,7 +85,7 @@ syn match goType /\<func\>/
syn match goDeclaration /^func\>/
" Predefined functions and values
-syn keyword goBuiltins append cap close complex copy imag len
+syn keyword goBuiltins append cap close complex copy delete imag len
syn keyword goBuiltins make new panic print println real recover
syn keyword goConstants iota true false nil
変更の背景
2011年10月の時点で、Go言語のdelete組み込み関数がVimエディタのシンタックスハイライトから抜け落ちていました。この時期のGoは1.0リリース前の開発段階にあり、言語仕様や標準ライブラリが活発に開発されていました。
delete関数はマップから指定されたキーに対応する要素を削除するための組み込み関数として既に言語に存在していましたが、Vimのシンタックスハイライト定義ファイルが更新されていませんでした。このため、Vimでコーディングする際にdelete関数が適切にハイライトされず、開発者の利便性が損なわれていました。
前提知識の解説
Vimのシンタックスハイライト
Vimのシンタックスハイライトは、プログラミング言語の構文に応じてコードを色分けして表示する機能です。これにより、キーワード、関数名、変数名、コメントなどを視覚的に区別できます。
Vimのシンタックス定義ファイルには以下のような要素があります:
syn keyword: 特定のキーワードを定義syn match: 正規表現によるパターンマッチングsyn region: 開始と終了の区切り文字で囲まれた領域
Go言語の組み込み関数
Go言語には以下のような組み込み関数(built-in functions)が存在します:
- メモリ関連:
make,new - 配列・スライス関連:
append,cap,len,copy - マップ関連:
delete - チャネル関連:
close - 複素数関連:
complex,imag,real - エラー処理:
panic,recover - 出力:
print,println
これらの関数は言語レベルで提供されており、インポートする必要がありません。
2011年のGo言語の状況
2011年はGo言語の初期段階で、以下のような重要な出来事がありました:
- Go 1.0のリリース準備が進行中
- 言語仕様の安定化作業
- 標準ライブラリの整備
- コミュニティによるエディタサポートの充実
技術的詳細
delete関数の仕様
delete関数は以下のような仕様を持ちます:
func delete(m map[Type]Type1, key Type)
- マップ
mからkeyに対応する要素を削除 - キーが存在しない場合は何もしない(no-op)
mがnilの場合も何もしない- 戻り値なし
Vimシンタックス定義の仕組み
syn keyword goBuiltins append cap close complex copy delete imag len
この行は以下のように解釈されます:
syn keyword: キーワードを定義するコマンドgoBuiltins: ハイライトグループ名- その後に続く単語群: このグループに属するキーワード
コアとなるコードの変更箇所
変更箇所はファイルmisc/vim/syntax/go.vimの1行のみです:
-syn keyword goBuiltins append cap close complex copy imag len
+syn keyword goBuiltins append cap close complex copy delete imag len
この変更により、deleteキーワードがgoBuiltinsグループに追加されました。
コアとなるコードの解説
変更前の状態
syn keyword goBuiltins append cap close complex copy imag len
この行では、delete関数が抜け落ちていました。アルファベット順に並べるとcopyとimagの間にdeleteが入るべきでした。
変更後の状態
syn keyword goBuiltins append cap close complex copy delete imag len
deleteが適切な位置(copyとimagの間)に追加されました。これにより、Vimでdelete関数を使用する際に、他の組み込み関数と同様のハイライト色で表示されるようになりました。
シンタックスハイライトの効果
この変更により、以下のようなGoコードでのdelete関数が適切にハイライトされるようになりました:
package main
import "fmt"
func main() {
m := make(map[string]int)
m["apple"] = 5
m["banana"] = 3
delete(m, "apple") // この行の delete がハイライトされる
fmt.Println(m)
}