言語構成ガイド
contributes.languages コントリビューションポイントを使用すると、以下の宣言的言語機能を制御する言語構成を定義できます。
- コメントの切り替え
- 括弧の定義
- 自動終了 (Autoclosing)
- 自動囲み (Autosurrounding)
- 折りたたみ
- 単語パターン
- インデントルール
JavaScript ファイルの編集エクスペリエンスを構成する 言語構成サンプル を用意しました。このガイドでは、language-configuration.json の内容について解説します。
注意: 言語構成ファイルの名前が language-configuration.json であるか、その名前で終わる場合、VS Code で自動補完と検証が利用できるようになります。
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
],
"autoCloseBefore": ";:.,=}])>` \n\t",
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
],
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
"end": "^\\s*//\\s*#?endregion\\b"
}
},
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)",
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
コメントの切り替え
VS Code は、コメントの切り替え用に 行コメントの切り替え と ブロックコメントの切り替え という 2 つのコマンドを提供しています。comments.blockComment と comments.lineComment を指定することで、VS Code がどのように行やブロックをコメントアウトすべきかを制御できます。
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
}
}
括弧の定義
ここで定義された括弧にカーソルを移動すると、VS Code はその括弧と対になる括弧を強調表示します。
{
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
]
}
さらに、括弧へ移動 または 括弧まで選択 を実行すると、VS Code は上記の定義を使用して最も近い括弧とその対を見つけます。
自動終了 (Autoclosing)
' を入力すると、VS Code は一重引用符のペアを作成し、カーソルをその中間に配置します: '|'。このセクションでは、そのようなペアを定義します。
{
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
]
}
notIn キーを使用すると、特定のコード範囲でこの機能を無効にできます。例えば、以下のようなコードを書いている場合、
// ES6's Template String
`ES6's Template String`;
一重引用符は自動終了しません。
notIn プロパティを必要としないペアでは、よりシンプルな構文も使用できます。
{
"autoClosingPairs": [
["{", "}"],
["[", "]"]
]
}
ユーザーは editor.autoClosingQuotes および editor.autoClosingBrackets 設定を使用して、自動終了の動作を調整できます。
自動終了の前方条件
デフォルトでは、VS Code はカーソルの直後に空白がある場合にのみペアを自動終了します。そのため、以下の JSX コードで { を入力しても、自動終了は行われません。
const Component = () =>
<div className={>
^ Does not get autoclosed by default
</div>
しかし、この定義は以前の動作を上書きします。
{
"autoCloseBefore": ";:.,=}])>` \n\t"
}
これで、> の直前で { を入力すると、VS Code は } を補完して自動終了します。
自動囲み (Autosurrounding)
VS Code で範囲を選択して開始括弧を入力すると、VS Code は選択されたコンテンツを括弧のペアで囲みます。この機能は「自動囲み (Autosurrounding)」と呼ばれ、ここで特定の言語に対する自動囲みペアを定義できます。
{
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}
ユーザーは editor.autoSurround 設定を使用して、自動囲みの動作を調整できます。
折りたたみ
VS Code における折りたたみは、インデントに基づくか、またはコントリビュートされた折りたたみ範囲プロバイダーによって定義されます。
- マーカーを使用したインデントベースの折りたたみ: その言語の折りたたみ範囲プロバイダーが利用できない場合、あるいはユーザーが
editor.foldingStrategyをindentationに設定している場合、インデントベースの折りたたみが使用されます。折りたたみ領域は、ある行のインデントがその後の 1 行以上のインデントよりも小さい場合に開始され、同じかそれ以下のインデントの行が現れたときに終了します。空行は無視されます。さらに、言語構成で開始マーカーと終了マーカーを定義できます。これらはfolding.markers内のstartおよびend正規表現として定義されます。一致する行が見つかると、そのペア内の範囲が折りたたまれます。折りたたみマーカーは空であってはならず、通常は//#regionや//#endregionのようになります。
以下の JSON は //#region および //#endregion の折りたたみマーカーを作成します。
{
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
"end": "^\\s*//\\s*#?endregion\\b"
}
}
}
- 言語サーバーによる折りたたみ: 言語サーバーは
textDocument/foldingRangeリクエストに対して折りたたみ範囲のリストを返し、VS Code はその範囲を折りたたみマーカーとしてレンダリングします。言語サーバープロトコルにおける折りたたみサポートの詳細については、プログラムによる言語機能 のトピックを参照してください。
単語パターン
wordPattern は、そのプログラミング言語において何を「単語」とみなすかを定義します。コード補完機能は、wordPattern が設定されている場合、この設定を使用して単語の境界を決定します。この設定は、エディター設定の editor.wordSeparators によって制御される単語関連のエディターコマンドには影響しないことに注意してください。
{
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
}
インデントルール
indentationRules は、入力、貼り付け、または行移動を行った際に、エディターが現在行や次行のインデントをどのように調整すべきかを定義します。
{
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
例えば、if (true) { は increaseIndentPattern に一致します。その後、開き括弧 { の後ろで Enter キーを押すと、エディターは自動的に 1 段階インデントし、コードは以下のようになります。
if (true) {
console.log();
increaseIndentPattern と decreaseIndentPattern に加えて、他に 2 つのインデントルールがあります。
indentNextLinePattern- 行がこのパターンに一致する場合、その 直後の次の行のみ が 1 段階インデントされます。unIndentedLinePattern- 行がこのパターンに一致する場合、そのインデントは変更されず、他のルールに対しても評価されません。
プログラミング言語にインデントルールが設定されていない場合、エディターは行が開き括弧で終わるときにインデントし、閉じ括弧を入力したときにアウトデントします。ここでの括弧は brackets によって定義されます。
editor.formatOnPaste 設定は DocumentRangeFormattingEditProvider によって制御されており、自動インデントの影響を受けないことに注意してください。
Enter キー押下時のルール (On Enter Rules)
onEnterRules は、エディターで Enter が押されたときに評価されるルールの一覧を定義します。
{
"onEnterRules": [
{
"beforeText": "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\s*$",
"action": { "indent": "indent" }
}
]
}
Enter を押したとき、カーソルの前、後ろ、または 1 行上のテキストが、以下のプロパティに対してチェックされます。
beforeText(必須)。カーソルの前にあるテキストに一致する正規表現(現在の行に限定)。afterText。カーソルの後ろにあるテキストに一致する正規表現(現在の行に限定)。previousLineText。カーソルの 1 行上のテキストに一致する正規表現。
指定されたすべてのプロパティが一致した場合、そのルールは適合とみなされ、それ以降の onEnterRules は評価されません。onEnterRule には以下の動作を指定できます。
indent(必須)。none, indent, outdent, indentOutdentのいずれか。noneは、新しい行が現在の行のインデントを継承することを意味します。indentは、新しい行が現在の行に対してインデントされることを意味します。outdentは、新しい行が現在の行に対してアウトデント(インデント解除)されることを意味します。indentOutdentは、2 つの新しい行が挿入され、一方はインデントされ、もう一方はアウトデントされることを意味します。
appendText。新しい行およびインデントの後に追加される文字列。removeText。新しい行のインデントから削除する文字数。