Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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)
  • mnilの場合も何もしない
  • 戻り値なし

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関数が抜け落ちていました。アルファベット順に並べるとcopyimagの間にdeleteが入るべきでした。

変更後の状態

syn keyword     goBuiltins          append cap close complex copy delete imag len

deleteが適切な位置(copyimagの間)に追加されました。これにより、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)
}

関連リンク

参考にした情報源リンク