From f51ea2564b75fd04bd3b2d48336019bd170b92af Mon Sep 17 00:00:00 2001 From: Linus Eriksson Date: Thu, 1 Nov 2018 18:47:17 +0100 Subject: [PATCH] Distinguish between anonymous * token and wildcard selector Co-authored-by: Max Brunsfeld --- spec/syntax-scope-map-spec.js | 10 ++++++++++ src/syntax-scope-map.js | 12 ++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/spec/syntax-scope-map-spec.js b/spec/syntax-scope-map-spec.js index 61b1bdc7d..15b44095c 100644 --- a/spec/syntax-scope-map-spec.js +++ b/spec/syntax-scope-map-spec.js @@ -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') + }) }) diff --git a/src/syntax-scope-map.js b/src/syntax-scope-map.js index fefee26d7..90e4cd141 100644 --- a/src/syntax-scope-map.js +++ b/src/syntax-scope-map.js @@ -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) } } }