From 66968910c24f4fedea7a9d9a9a50eb997eb530cd Mon Sep 17 00:00:00 2001 From: Tyson Mote Date: Tue, 24 Sep 2019 17:31:01 -0700 Subject: [PATCH] unlex: Escape identifiers after dots --- src/unlexer.test.ts | 5 ++--- src/unlexer.ts | 11 +++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/unlexer.test.ts b/src/unlexer.test.ts index 5181bf0..c4ecd0b 100644 --- a/src/unlexer.test.ts +++ b/src/unlexer.test.ts @@ -9,9 +9,8 @@ test('Unlexer can convert tokens into a string', () => { }) test('Unlexer escapes', () => { - const str = unlex([t.Ident('a \\ b $')]).code - - expect(str).toEqual('a\\ \\\\\\ b\\ \\$') + expect(unlex([t.Ident('a \\ b $')]).code).toEqual('a\\ \\\\\\ b\\ \\$') + expect(unlex([t.Ident('a'), t.Dot(), t.Ident('b c')]).code).toEqual('a.b\\ c') }) test('Unlexer and lexer play nicely together', () => { diff --git a/src/unlexer.ts b/src/unlexer.ts index ac4754e..bb2916e 100644 --- a/src/unlexer.ts +++ b/src/unlexer.ts @@ -37,16 +37,15 @@ export default function unlex(tokens: Token[]): UnLexResponse { continue } - // Don't add unnecessary spaces after dots - if (i !== 0 && tokens[i - 1].type === TokenType.Dot) { - str += token.value - continue + // Add a space, but not after dots + if (i > 0 && tokens[i - 1].type !== TokenType.Dot) { + str += ' ' } if (token.type === TokenType.Ident) { - str += ' ' + escape(token.value) + str += escape(token.value) } else { - str += ' ' + token.value + str += token.value } }