From 04aedf37b48c25e1c2712c8df1ac5003d6afd1b5 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Mon, 10 Aug 2015 19:03:13 -0400 Subject: [PATCH] fix unexpected token issue for regex after block case - Ex: `if (1) {} /foo/` Fixes babel/babel-eslint#161 Ref marijnh/acorn#289 --- packages/babylon/src/tokenizer/index.js | 2 +- .../categorized/regex-after-block/actual.js | 4 + .../regex-after-block/expected.json | 120 ++++++++++++++++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 packages/babylon/test/fixtures/core/categorized/regex-after-block/actual.js create mode 100644 packages/babylon/test/fixtures/core/categorized/regex-after-block/expected.json diff --git a/packages/babylon/src/tokenizer/index.js b/packages/babylon/src/tokenizer/index.js index 8b40220364..7bff031091 100644 --- a/packages/babylon/src/tokenizer/index.js +++ b/packages/babylon/src/tokenizer/index.js @@ -786,7 +786,7 @@ export default class Tokenizer { return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start)); } - if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof) { + if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR) { return true; } diff --git a/packages/babylon/test/fixtures/core/categorized/regex-after-block/actual.js b/packages/babylon/test/fixtures/core/categorized/regex-after-block/actual.js new file mode 100644 index 0000000000..eaf38a64b8 --- /dev/null +++ b/packages/babylon/test/fixtures/core/categorized/regex-after-block/actual.js @@ -0,0 +1,4 @@ +if (true) { +} + +/foo/ \ No newline at end of file diff --git a/packages/babylon/test/fixtures/core/categorized/regex-after-block/expected.json b/packages/babylon/test/fixtures/core/categorized/regex-after-block/expected.json new file mode 100644 index 0000000000..baf001440d --- /dev/null +++ b/packages/babylon/test/fixtures/core/categorized/regex-after-block/expected.json @@ -0,0 +1,120 @@ +{ + "type": "File", + "start": 0, + "end": 20, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 20, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "sourceType": "script", + "body": [ + { + "type": "IfStatement", + "start": 0, + "end": 13, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 1 + } + }, + "test": { + "type": "Literal", + "start": 4, + "end": 8, + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 8 + } + }, + "value": true, + "rawValue": true, + "raw": "true" + }, + "consequent": { + "type": "BlockStatement", + "start": 10, + "end": 13, + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 2, + "column": 1 + } + }, + "body": [] + }, + "alternate": null + }, + { + "type": "ExpressionStatement", + "start": 15, + "end": 20, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "expression": { + "type": "Literal", + "start": 15, + "end": 20, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 4, + "column": 5 + } + }, + "value": {}, + "rawValue": {}, + "raw": "/foo/", + "regex": { + "pattern": "foo", + "flags": "" + } + } + } + ] + } +} \ No newline at end of file