diff --git a/CHANGELOG.md b/CHANGELOG.md index 65c55b48..5ef6934a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ # 未リリース分 - `Date:year`系の関数に0を渡すと現在時刻になる問題を修正 +- シンタックスエラーなどの位置情報を修正 # 0.18.0 - `Core:abort`でプログラムを緊急停止できるように @@ -128,4 +129,4 @@ - 空の関数を定義できない問題を修正 - 空のスクリプトが許可されていない問題を修正 - ネームスペース付き変数のインクリメント、デクリメントを修正 -- ネームスペース付き変数への代入ができない問題を修正 +- ネームスペース付き変数への代入ができない問題を修正 diff --git a/src/parser/parser.peggy b/src/parser/parser.peggy index 4aacdbeb..7a95e63e 100644 --- a/src/parser/parser.peggy +++ b/src/parser/parser.peggy @@ -28,9 +28,8 @@ PreprocessPart / . Comment - = "//" (!EOL .)* { return ''; } - / "/*" (!"*/" .)* "*/" { return ''; } - + = "//" (!EOL .)* { return ' '.repeat(text().length); } + / "/*" (!"*/" .)* "*/" { return text().replace(/[^\n]/g, ' '); } // // main parser diff --git a/test/index.ts b/test/index.ts index 29873c4c..fed26c01 100644 --- a/test/index.ts +++ b/test/index.ts @@ -2399,6 +2399,20 @@ describe('Location', () => { if (!node.loc) assert.fail(); assert.deepEqual(node.loc, { start: 3, end: 13 }); }); + test.concurrent('comment', async () => { + let node: Ast.Node; + const parser = new Parser(); + const nodes = parser.parse(` + /* + */ + // hoge + @f(a) { a } + `); + assert.equal(nodes.length, 1); + node = nodes[0]; + if (!node.loc) assert.fail(); + assert.deepEqual(node.loc, { start: 23, end: 33 }); + }); }); describe('Variable declaration', () => {