Distinguish between anonymous * token and wildcard selector

Co-authored-by: Max Brunsfeld <maxbrunsfeld@github.com>
This commit is contained in:
Linus Eriksson
2018-11-01 18:47:17 +01:00
parent bc061bb608
commit f51ea2564b
2 changed files with 16 additions and 6 deletions

View File

@@ -74,4 +74,14 @@ describe('SyntaxScopeMap', () => {
expect(map.get(['a', 'c', 'b'], [0, 1, 1])).toBe('z')
expect(map.get(['a', 'c', 'b'], [0, 2, 1])).toBe('w')
})
it('distinguishes between an anonymous * token and the wildcard selector', () => {
const map = new SyntaxScopeMap({
'"*"': 'x',
'a > "b"': 'y'
})
expect(map.get(['b'], [0], false)).toBe(undefined)
expect(map.get(['*'], [0], false)).toBe('x')
})
})

View File

@@ -8,8 +8,8 @@ class SyntaxScopeMap {
for (let selector in resultsBySelector) {
this.addSelector(selector, resultsBySelector[selector])
}
setTableDefaults(this.namedScopeTable)
setTableDefaults(this.anonymousScopeTable)
setTableDefaults(this.namedScopeTable, true)
setTableDefaults(this.anonymousScopeTable, false)
}
addSelector (selector, result) {
@@ -126,8 +126,8 @@ class SyntaxScopeMap {
}
}
function setTableDefaults (table) {
const defaultTypeTable = table['*']
function setTableDefaults (table, allowWildcardSelector) {
const defaultTypeTable = allowWildcardSelector ? table['*'] : null
for (let type in table) {
let typeTable = table[type]
@@ -138,14 +138,14 @@ function setTableDefaults (table) {
}
if (typeTable.parents) {
setTableDefaults(typeTable.parents)
setTableDefaults(typeTable.parents, true)
}
for (let key in typeTable.indices) {
const indexTable = typeTable.indices[key]
mergeTable(indexTable, typeTable, false)
if (indexTable.parents) {
setTableDefaults(indexTable.parents)
setTableDefaults(indexTable.parents, true)
}
}
}