diff --git a/src/parser/statement.js b/src/parser/statement.js index 5821248dfe..af8d45098e 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -899,7 +899,7 @@ export default class StatementParser extends ExpressionParser { if ( this.hasPlugin("decorators2") && - member.kind != "method" && + ["method", "get", "set"].indexOf(member.kind) === -1 && member.decorators && member.decorators.length > 0 ) { diff --git a/test/fixtures/experimental/decorators-2/get-decorator/actual.js b/test/fixtures/experimental/decorators-2/get-decorator/actual.js new file mode 100644 index 0000000000..d3870c5f11 --- /dev/null +++ b/test/fixtures/experimental/decorators-2/get-decorator/actual.js @@ -0,0 +1,3 @@ +class A { + @foo get getter(){} +} diff --git a/test/fixtures/experimental/decorators-2/get-decorator/expected.json b/test/fixtures/experimental/decorators-2/get-decorator/expected.json new file mode 100644 index 0000000000..8c47184dac --- /dev/null +++ b/test/fixtures/experimental/decorators-2/get-decorator/expected.json @@ -0,0 +1,175 @@ +{ + "type": "File", + "start": 0, + "end": 33, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 33, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "sourceType": "script", + "body": [ + { + "type": "ClassDeclaration", + "start": 0, + "end": 33, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "id": { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + }, + "identifierName": "A" + }, + "name": "A" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start": 8, + "end": 33, + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "body": [ + { + "type": "ClassMethod", + "start": 12, + "end": 31, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 21 + } + }, + "decorators": [ + { + "type": "Decorator", + "start": 12, + "end": 16, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "expression": { + "type": "Identifier", + "start": 13, + "end": 16, + "loc": { + "start": { + "line": 2, + "column": 3 + }, + "end": { + "line": 2, + "column": 6 + }, + "identifierName": "foo" + }, + "name": "foo" + } + } + ], + "static": false, + "key": { + "type": "Identifier", + "start": 21, + "end": 27, + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 17 + }, + "identifierName": "getter" + }, + "name": "getter" + }, + "computed": false, + "kind": "get", + "id": null, + "generator": false, + "expression": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start": 29, + "end": 31, + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 21 + } + }, + "body": [], + "directives": [] + } + } + ] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/test/fixtures/experimental/decorators-2/set-decorator/actual.js b/test/fixtures/experimental/decorators-2/set-decorator/actual.js new file mode 100644 index 0000000000..acd5b7d82d --- /dev/null +++ b/test/fixtures/experimental/decorators-2/set-decorator/actual.js @@ -0,0 +1,3 @@ +class A { + @foo set setter(_val){} +} diff --git a/test/fixtures/experimental/decorators-2/set-decorator/expected.json b/test/fixtures/experimental/decorators-2/set-decorator/expected.json new file mode 100644 index 0000000000..03fe0b732c --- /dev/null +++ b/test/fixtures/experimental/decorators-2/set-decorator/expected.json @@ -0,0 +1,193 @@ +{ + "type": "File", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "sourceType": "script", + "body": [ + { + "type": "ClassDeclaration", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "id": { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + }, + "identifierName": "A" + }, + "name": "A" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start": 8, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 3, + "column": 1 + } + }, + "body": [ + { + "type": "ClassMethod", + "start": 12, + "end": 35, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 25 + } + }, + "decorators": [ + { + "type": "Decorator", + "start": 12, + "end": 16, + "loc": { + "start": { + "line": 2, + "column": 2 + }, + "end": { + "line": 2, + "column": 6 + } + }, + "expression": { + "type": "Identifier", + "start": 13, + "end": 16, + "loc": { + "start": { + "line": 2, + "column": 3 + }, + "end": { + "line": 2, + "column": 6 + }, + "identifierName": "foo" + }, + "name": "foo" + } + } + ], + "static": false, + "key": { + "type": "Identifier", + "start": 21, + "end": 27, + "loc": { + "start": { + "line": 2, + "column": 11 + }, + "end": { + "line": 2, + "column": 17 + }, + "identifierName": "setter" + }, + "name": "setter" + }, + "computed": false, + "kind": "set", + "id": null, + "generator": false, + "expression": false, + "async": false, + "params": [ + { + "type": "Identifier", + "start": 28, + "end": 32, + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 22 + }, + "identifierName": "_val" + }, + "name": "_val" + } + ], + "body": { + "type": "BlockStatement", + "start": 33, + "end": 35, + "loc": { + "start": { + "line": 2, + "column": 23 + }, + "end": { + "line": 2, + "column": 25 + } + }, + "body": [], + "directives": [] + } + } + ] + } + } + ], + "directives": [] + } +} \ No newline at end of file