Skip to content

Commit d2b93ae

Browse files
arvtmcw
authored andcommitted
Add support for null and void types (#519)
This adds support for `void` and `null` in type annotations: ```js function f(): void {} function g(): null { return null; } ``` Towards #512
1 parent 6b981e0 commit d2b93ae

File tree

2 files changed

+47
-41
lines changed

2 files changed

+47
-41
lines changed

lib/flow_doctrine.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ var namedTypes = {
66
};
77

88
var oneToOne = {
9-
'AnyTypeAnnotation': {
10-
type: 'AllLiteral'
11-
}
9+
'AnyTypeAnnotation': 'AllLiteral',
10+
'NullLiteralTypeAnnotation': 'NullLiteral',
11+
'VoidTypeAnnotation': 'VoidLiteral'
1212
};
1313

1414
var literalTypes = {
15-
'StringLiteralTypeAnnotation': 'StringLiteral',
15+
'BooleanLiteralTypeAnnotation': 'BooleanLiteral',
1616
'NumericLiteralTypeAnnotation': 'NumberLiteral',
17-
'BooleanLiteralTypeAnnotation': 'BooleanLiteral'
17+
'StringLiteralTypeAnnotation': 'StringLiteral'
1818
};
1919

2020
/**
@@ -37,7 +37,7 @@ function flowDoctrine(type) {
3737
}
3838

3939
if (type.type in oneToOne) {
40-
return oneToOne[type.type];
40+
return {type: oneToOne[type.type]};
4141
}
4242

4343
switch (type.type) {

test/lib/flow_doctrine.js

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ function toDoctrineType(flowType) {
1717
).context.ast.node.params[0].typeAnnotation.typeAnnotation);
1818
}
1919

20-
/* eslint-disable */
2120
test('flowDoctrine', function (t) {
2221

2322
t.deepEqual(toDoctrineType('number'),
@@ -99,38 +98,37 @@ test('flowDoctrine', function (t) {
9998
}]
10099
}, 'number[]');
101100

102-
t.deepEqual(toDoctrineType('[]'),
103-
{
104-
type: 'ArrayType',
105-
elements: []
106-
}, '[]');
107-
108-
t.deepEqual(toDoctrineType('[number]'),
109-
{
110-
type: 'ArrayType',
111-
elements: [
112-
{
113-
type: 'NameExpression',
114-
name: 'number'
115-
}
116-
]
117-
}, '[number]');
118-
119-
t.deepEqual(toDoctrineType('[string, boolean]'),
120-
{
121-
type: 'ArrayType',
122-
elements: [
123-
{
124-
type: 'NameExpression',
125-
name: 'string'
126-
},
127-
{
128-
type: 'NameExpression',
129-
name: 'boolean'
130-
}
131-
]
132-
}, '[string, boolean]');
101+
t.deepEqual(toDoctrineType('[]'),
102+
{
103+
type: 'ArrayType',
104+
elements: []
105+
}, '[]');
106+
107+
t.deepEqual(toDoctrineType('[number]'),
108+
{
109+
type: 'ArrayType',
110+
elements: [
111+
{
112+
type: 'NameExpression',
113+
name: 'number'
114+
}
115+
]
116+
}, '[number]');
133117

118+
t.deepEqual(toDoctrineType('[string, boolean]'),
119+
{
120+
type: 'ArrayType',
121+
elements: [
122+
{
123+
type: 'NameExpression',
124+
name: 'string'
125+
},
126+
{
127+
type: 'NameExpression',
128+
name: 'boolean'
129+
}
130+
]
131+
}, '[string, boolean]');
134132

135133
t.deepEqual(toDoctrineType('boolean'),
136134
{
@@ -162,13 +160,21 @@ test('flowDoctrine', function (t) {
162160
name: true
163161
}, 'BooleanLiteral');
164162

165-
t.deepEqual(toDoctrineType('true'),
163+
t.deepEqual(toDoctrineType('false'),
166164
{
167165
type: 'BooleanLiteral',
168-
name: true
166+
name: false
169167
}, 'BooleanLiteral');
170168

169+
t.deepEqual(toDoctrineType('null'),
170+
{
171+
type: 'NullLiteral',
172+
}, 'NullLiteral');
173+
174+
t.deepEqual(toDoctrineType('void'),
175+
{
176+
type: 'VoidLiteral',
177+
}, 'VoidLiteral');
171178

172179
t.end();
173180
});
174-
/* eslint-enable */

0 commit comments

Comments
 (0)