Atomフライトマニュアル翻訳:4.3役割ドメイン設定、役割ドメインと役割ドメイン記述子

2706 ワード

役割ドメイン設定、役割ドメイン、および役割ドメイン記述子
Atomは言語固有の設定をサポートします.Markdownファイルでソフト改行したり、Pythonでtabの幅を4に設定したりすることができます.
言語固有の設定はいくつかのもののサブセットにすぎず、「役割ドメイン設定」と呼ばれています.役割ドメイン設定は、特定の構文記号のクラスにのみ適用できます.たとえば、Rubyのコメント、Markdownのコードセグメント、またはJavaScript関数名のみを設定できます.
構文シンボルの役割ドメイン名
エディタの各シンボルには、一連の役割ドメイン名があります.例えば、前述のJavaScript関数は、役割ドメインfunctionおよびnameを有することができる.1つの左かっこは、punctuationparameters、およびbeginの役割ドメインを有することができる.
役割ドメインの名前はCSSのclassのように動作します.実際、エディタの役割ドメイン名はCSSのclassとしてシンボルのDOMノードに添付されています.
たとえば、JavaScriptコードは次のようになります.
function functionName() {
  console.log('Log it out');
}

開発ツールでは、最初の行のタグは次のようになります.
spanラベルのすべてのclass名は、役割ドメイン名です.任意の役割ドメイン名は、設定された値を指すために使用されます.
アクティブドメインセレクタ
役割ドメインセレクタを使用すると、CSSセレクタがDOM内の特定のノードを指すように、プロパティシンボルを指すことができます.いくつかの例を示します.
'.source.js' # selects all javascript tokens
'.source.js .function.name' # selects all javascript function names
'.function.name' # selects all function names in any language
Config::setは、scopeSelectorを受け入れる.JavaScript関数名を設定する場合は、js関数名のscopeSelectorを指定できます.
atom.config.set('.source.js .function.name', 'my-package.my-setting', 'special value')

アクティブドメイン記述子
役割ドメイン記述子は、文字列配列をカプセル化したオブジェクトです.配列は、構文ツリーのルートノードからシンボルへのパスを記述し、パス全体のすべての役割ドメイン名を含む.
上記のJavaScriptの例では、関数名記号の役割ドメイン記述子は次のようになります.
['source.js', 'meta.function.js', 'entity.name.function.js']
Config::getは、JavaScript関数名の設定から値を取得できるscopeDescriptorを受け入れます.
scopeDescriptor = ['source.js', 'meta.function.js', 'entity.name.function.js']
value = atom.config.get(scopeDescriptor, 'my-package.my-setting')

しかし、役割ドメイン記述子を手動で生成する必要はありません.エディタから役割ドメイン記述子を取得するには、いくつかの方法があります.
  • Editor::getRootScopeDescriptor言語の記述子、例えば[".source.js"]を取得する.
  • Editor::scopeDescriptorForBufferPositionバッファ内の特定の位置の記述子を取得する.
  • Cursor::getScopeDescriptorカーソルの記述子を取得します.たとえば、カーソルが例のメソッド名の上にある場合、["source.js", "meta.function.js", "entity.name.function.js"]が返されます.

  • これらの方法を使用して、私たちの例を振り返ってみましょう.
    editor = atom.workspace.getActiveTextEditor()
    cursor = editor.getLastCursor()
    valueAtCursor = atom.config.get(cursor.getScopeDescriptor(), 'my-package.my-setting')
    valueForLanguage = atom.config.get(editor.getRootScopeDescriptor(), 'my-package.my-setting')