From 28c467e8fe0d6f28058757d464e47b03d4dd5128 Mon Sep 17 00:00:00 2001 From: Dan Harper Date: Mon, 16 Jan 2017 09:42:13 +0000 Subject: [PATCH] Fix ObjectTypeCallProperty static (#298) * add failing test for ObjectTypeCallProperty static (#297) * fix ObjectTypeCallProperty static --- src/plugins/flow.js | 2 +- .../flow/declare-statements/18/actual.js | 2 + .../flow/declare-statements/18/expected.json | 242 ++++++++++++++++++ 3 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/flow/declare-statements/18/actual.js create mode 100644 test/fixtures/flow/declare-statements/18/expected.json diff --git a/src/plugins/flow.js b/src/plugins/flow.js index f42543b58f..3609acb30b 100644 --- a/src/plugins/flow.js +++ b/src/plugins/flow.js @@ -375,7 +375,7 @@ pp.flowParseObjectType = function (allowStatic, allowExact) { if (variance) { this.unexpected(variancePos); } - nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, allowStatic)); + nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic)); } else { propertyKey = this.flowParseObjectPropertyKey(); if (this.isRelational("<") || this.match(tt.parenL)) { diff --git a/test/fixtures/flow/declare-statements/18/actual.js b/test/fixtures/flow/declare-statements/18/actual.js new file mode 100644 index 0000000000..5f074372da --- /dev/null +++ b/test/fixtures/flow/declare-statements/18/actual.js @@ -0,0 +1,2 @@ +declare class A { static () : number } +declare class B { () : number } diff --git a/test/fixtures/flow/declare-statements/18/expected.json b/test/fixtures/flow/declare-statements/18/expected.json new file mode 100644 index 0000000000..4c3d432e19 --- /dev/null +++ b/test/fixtures/flow/declare-statements/18/expected.json @@ -0,0 +1,242 @@ +{ + "type": "File", + "start": 0, + "end": 70, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 31 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 70, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 31 + } + }, + "sourceType": "module", + "body": [ + { + "type": "DeclareClass", + "start": 0, + "end": 38, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 38 + } + }, + "id": { + "type": "Identifier", + "start": 14, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + }, + "identifierName": "A" + }, + "name": "A" + }, + "typeParameters": null, + "extends": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 16, + "end": 38, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 38 + } + }, + "callProperties": [ + { + "type": "ObjectTypeCallProperty", + "start": 18, + "end": 36, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 36 + } + }, + "static": true, + "value": { + "type": "FunctionTypeAnnotation", + "start": 25, + "end": 36, + "loc": { + "start": { + "line": 1, + "column": 25 + }, + "end": { + "line": 1, + "column": 36 + } + }, + "params": [], + "rest": null, + "typeParameters": null, + "returnType": { + "type": "NumberTypeAnnotation", + "start": 30, + "end": 36, + "loc": { + "start": { + "line": 1, + "column": 30 + }, + "end": { + "line": 1, + "column": 36 + } + } + } + } + } + ], + "properties": [], + "indexers": [], + "exact": false + } + }, + { + "type": "DeclareClass", + "start": 39, + "end": 70, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 31 + } + }, + "id": { + "type": "Identifier", + "start": 53, + "end": 54, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + }, + "identifierName": "B" + }, + "name": "B" + }, + "typeParameters": null, + "extends": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 55, + "end": 70, + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 31 + } + }, + "callProperties": [ + { + "type": "ObjectTypeCallProperty", + "start": 57, + "end": 68, + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 29 + } + }, + "static": false, + "value": { + "type": "FunctionTypeAnnotation", + "start": 57, + "end": 68, + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 29 + } + }, + "params": [], + "rest": null, + "typeParameters": null, + "returnType": { + "type": "NumberTypeAnnotation", + "start": 62, + "end": 68, + "loc": { + "start": { + "line": 2, + "column": 23 + }, + "end": { + "line": 2, + "column": 29 + } + } + } + } + } + ], + "properties": [], + "indexers": [], + "exact": false + } + } + ], + "directives": [] + } +} \ No newline at end of file