GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Semantic-Font-Lock.html ・ emacs-doc.conao3.com

16.13.3 セマンティック・フォントロック

セマンティック・ハイライティングとは、エディタが何らかの意味解析を用いてプログラムのソースコードを理解し、各トークンのプログラム内での具体的な役割に応じてハイライト表示を行うことで、その意味に関する有用な情報をユーザーに伝える機能のことです。

セマンティック・ハイライティングは、従来の「シンタックス・ハイライティング」よりも高度な手法です。シンタックス・ハイライティングがトークンの構文上の役割(すなわち、コードの構文解析にどのような影響を与えるか)のみを考慮するのに対し、セマンティック・ハイライティングは、トークンがプログラムの実行に及ぼす影響まで考慮するセマンティック解析とは異なります。例えば、セマンティック・ハイライティングの実装では、言語の構文上ではそのような区別がなされていなくても、ローカル変数とグローバル変数を判別し、それぞれのカテゴリに異なるハイライトを施すことができます。セマンティック・ハイライティングは、LispやPrologのように、構文構造が出現する文脈によって全く異なる意味を持ち得る言語において特に有用です。こうした言語では、構文解析だけでは、コーダーがプログラムについて推論する際に必要となる重要な情報の多くを見落としてしまいます。

一部の言語サーバーはセマンティックなハイライト情報を提供しており、EmacsはLSPクライアントのEglotを通じてこれを活用できます。Eglot: The Emacs LSP ClientのEglot Featuresを参照してください。

さらに、Emacs では emacs-lisp-mode のオプション機能として、Emacs Lisp 用のセマンティック・ハイライトを実装しています(Lisp 式の実行 を参照)。これを有効にするには、オプション elisp-fontify-semantically を nil 以外の値にカスタマイズしてください。本サブセクションの残りの部分では、この Emacs Lisp 固有のセマンティック・ハイライト機能の使用方法について説明します。

elisp-fontify-semantically が有効になると、emacs-lisp-mode はコードを解析し、モード標準の Font Lock ハイライト(Font Lock モード を参照)の一環として、意味的な役割に応じてシンボルをハイライトします。文字列やコメント、括弧などのその他の構文要素のハイライトには影響せず、elisp-fontify-semantically はシンボルのハイライトにのみ影響します。

意味解析では、各シンボルに「関数」、「ローカル変数」、「フェイス名」などのシンボルロールを割り当てます。各シンボルロールには対応するフェイスプロパティがあり、意味ハイライト時にそのロールを持つシンボルに適用されます。デフォルトでは、これらのフェイスの多くは、適切なfont-lock-*フェイスを継承します。例えば、ローカルに束縛された変数はelisp-bound-variableフェイスを取得し、これはfont-lock-variable-use-faceから継承されています。

意味解析では、こうしたシンボルロールを50種類以上区別できますが、セマンティック・ハイライトを活用するために、これほど多くの顔の形状を暗記する必要はありません。ハイライトされたシンボルにマウスカーソルを合わせると、そのシンボルに対してEmacsが推論した正確なロールが記載されたツールチップが表示されます(ツールチップを参照)。この追加情報を無効にしたい場合は、elisp-add-help-echoをnilの値にカスタマイズしてください。

elisp-fontify-semantically を使用する際に留意しておくべき点が他にもいくつかあります: