Atom 作用域設(shè)置、作用域和作用域描述符

2018-08-12 21:50 更新

作用域設(shè)置、作用域和作用域描述符

Atom支持語言特定的設(shè)置。你可以在Markdown文件中軟換行,或者在Python中把tab的寬度設(shè)置為4。

語言特定的設(shè)置只是一些東西的子集,我們把它叫做“作用域設(shè)置”。作用域設(shè)置可以只作用于一類特定的語法符號(hào)。比如你可以僅僅對(duì)Ruby的注釋,Markdown中的代碼段,或者JavaScript函數(shù)名稱進(jìn)行設(shè)置。

語法符號(hào)中的作用域名稱

編輯器的每個(gè)符號(hào)都有一系列的作用域名稱。例如,前面提到的JavaScript函數(shù)可能擁有作用域functionname。一個(gè)左括號(hào)可能擁有punctuation、parametersbegin作用域。

作用域的名稱就像CSS中的class一樣工作。事實(shí)上,編輯器中的作用域名稱作為CSS的class附加到符號(hào)的DOM節(jié)點(diǎn)。

比如這段JavaScript代碼:

function functionName() {
  console.log('Log it out');
}

在開發(fā)工具中,第一行的標(biāo)記就像這樣:

span標(biāo)簽上的所有class名稱都是作用域名稱。任何作用域名稱都用于指向一個(gè)設(shè)置的值。

作用域選擇器

作用域選擇器允許你指向特性符號(hào),就像CSS選擇器指向DOM中特定的節(jié)點(diǎn)。這里是一些例子:

'.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接受一個(gè)scopeSelector。如果你想要對(duì)JavaScript 函數(shù)名稱進(jìn)行設(shè)置,你可以向它提供一個(gè)js函數(shù)名稱的scopeSelector

atom.config.set('.source.js .function.name', 'my-package.my-setting', 'special value')

作用域描述符

作用域描述符是一個(gè)對(duì)象,它封裝了一個(gè)字符串?dāng)?shù)組。數(shù)組描述了從語法樹根節(jié)點(diǎn)到符號(hào)的路徑,包含整個(gè)路徑的所有作用域名稱。

在上面的JavaScript例子中,函數(shù)名稱符號(hào)的作用域描述符應(yīng)該為:

['source.js', 'meta.function.js', 'entity.name.function.js']

Config::get接受一個(gè)scopeDescriptor,你可以從作用在JavaScript函數(shù)名稱的設(shè)置中獲取值,通過:

scopeDescriptor = ['source.js', 'meta.function.js', 'entity.name.function.js']
value = atom.config.get(scopeDescriptor, 'my-package.my-setting')

但是你并不需要手動(dòng)生成作用域描述符。有一些可用的方法來從編輯器獲取作用域描述符:

  • Editor::getRootScopeDescriptor獲取語言的描述符,例如[".source.js"]。
  • Editor::scopeDescriptorForBufferPosition獲取緩沖區(qū)中特定位置的描述符。
  • Cursor::getScopeDescriptor獲取光標(biāo)處的描述符。例如,如果光標(biāo)在例子中的方法名稱上面,會(huì)返回["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')
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)