VS Codeのエージェントモードを拡張するには、を試してください!

言語設定ガイド

contributes.languages コントリビューションポイントでは、以下の宣言型言語機能を制御する言語設定を定義できます

  • コメント切り替え
  • ブラケット定義
  • 自動閉じ
  • 自動囲み
  • 折りたたみ
  • 単語パターン
  • インデントルール

JavaScriptファイルの編集エクスペリエンスを設定する言語設定のサンプルを次に示します。このガイドでは、language-configuration.jsonの内容を説明します

注: 言語設定ファイル名が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つのコマンド、行コメントの切り替えブロックコメントの切り替えを提供します。行/ブロックのコメントアウト方法をVS Codeに制御させるために、comments.blockCommentcomments.lineCommentを指定できます。

{
  "comments": {
    "lineComment": "//",
    "blockComment": ["/*", "*/"]
  }
}

ブラケット定義

ここで定義されたブラケットにカーソルを移動すると、VS Codeはそのブラケットとそれに対応するペアをハイライトします。

{
  "brackets": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"]
  ]
}

さらに、ブラケットへ移動またはブラケットまで選択を実行すると、VS Codeは上記の定義を使用して、最も近いブラケットとその対応するペアを見つけます。

自動閉じ

'と入力すると、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はそれを}で自動で閉じます。

自動囲み

VS Codeで範囲を選択し、開始ブラケットを入力すると、VS Codeは選択したコンテンツをブラケットのペアで囲みます。この機能は自動囲みと呼ばれ、ここでは特定の言語の自動囲みペアを定義できます

{
  "surroundingPairs": [
    ["{", "}"],
    ["[", "]"],
    ["(", ")"],
    ["'", "'"],
    ["\"", "\""],
    ["`", "`"]
  ]
}

ユーザーは、editor.autoSurround設定で自動囲み動作を調整できます。

折りたたみ

VS Codeでは、折りたたみはインデントベースで定義されるか、またはコントリビュートされた折りたたみ範囲プロバイダーによって定義されます

  • マーカー付きインデントベースの折りたたみ: 指定された言語に折りたたみ範囲プロバイダーがない場合、またはユーザーがeditor.foldingStrategyindentationに設定している場合、インデントベースの折りたたみが使用されます。折りたたみ領域は、行が1つ以上の後続の行よりも小さいインデントを持つときに始まり、同じかより小さいインデントを持つ行があるときに終わります。空行は無視されます。さらに、言語設定で開始マーカーと終了マーカーを定義できます。これらはfolding.markersstartおよびendの正規表現として定義されます。一致する行が見つかると、ペア内に折りたたみ範囲が作成されます。折りたたみマーカーは空であってはならず、通常は//#region//#endregionのようになります。

次のJSONは、//#region//#endregionの折りたたみマーカーを作成します。

{
  "folding": {
    "markers": {
      "start": "^\\s*//\\s*#?region\\b",
      "end": "^\\s*//\\s*#?endregion\\b"
    }
  }
}
  • 言語サーバーの折りたたみ: 言語サーバーはtextDocument/foldingRangeリクエストに対して折りたたみ範囲のリストで応答し、VS Codeはその範囲を折りたたみマーカーとしてレンダリングします。Language Server Protocolにおける折りたたみサポートについては、プログラム言語機能のトピックで詳しく学ぶことができます。

単語パターン

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によって制御され、自動インデントの影響を受けないことに注意してください。

On Enterルール

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つ挿入され、1つはインデントされ、もう1つはアウトデントされることを意味します。
  • appendText。新しい行の後、およびインデントの後に追記される文字列。
  • removeText。新しい行のインデントから削除する文字数。