Accept a TextMate scope selector in bufferRangeForScopeAtPosition

This commit is contained in:
Max Brunsfeld
2018-09-10 20:35:24 -07:00
parent d1292fd7e3
commit 0b6876c4c6
4 changed files with 72 additions and 65 deletions

View File

@@ -2,17 +2,17 @@ const parser = require('postcss-selector-parser')
module.exports =
class SyntaxScopeMap {
constructor (scopeNamesBySelector) {
constructor (resultsBySelector) {
this.namedScopeTable = {}
this.anonymousScopeTable = {}
for (let selector in scopeNamesBySelector) {
this.addSelector(selector, scopeNamesBySelector[selector])
for (let selector in resultsBySelector) {
this.addSelector(selector, resultsBySelector[selector])
}
setTableDefaults(this.namedScopeTable)
setTableDefaults(this.anonymousScopeTable)
}
addSelector (selector, scopeName) {
addSelector (selector, result) {
parser((parseResult) => {
for (let selectorNode of parseResult.nodes) {
let currentTable = null
@@ -91,7 +91,7 @@ class SyntaxScopeMap {
}
}
currentTable.scopeName = scopeName
currentTable.result = result
}
}).process(selector)
}
@@ -110,8 +110,8 @@ class SyntaxScopeMap {
currentTable = currentTable.indices[childIndices[i]]
}
if (currentTable.scopeName) {
result = currentTable.scopeName
if (currentTable.result != null) {
result = currentTable.result
}
if (i === 0) break
@@ -168,8 +168,8 @@ function mergeTable (table, defaultTable, mergeIndices = true) {
}
}
if (defaultTable.scopeName && !table.scopeName) {
table.scopeName = defaultTable.scopeName
if (defaultTable.result != null && table.result == null) {
table.result = defaultTable.result
}
}