Add number literal type annotations for flow

This commit is contained in:
Franky Chung 2015-07-19 12:01:40 +09:00
parent faa6ce1a08
commit 0876209847
6 changed files with 228 additions and 0 deletions

View File

@ -177,6 +177,12 @@ export function NullableTypeAnnotation(node, print) {
print.plain(node.typeAnnotation);
}
/**
* Prints NumberLiteralTypeAnnotation, prints value.
*/
export { Literal as NumberLiteralTypeAnnotation } from "./types";
/**
* Prints NumberTypeAnnotation.
*/

View File

@ -82,6 +82,10 @@ define("NullableTypeAnnotation", {
aliases: ["Flow"]
});
define("NumberLiteralTypeAnnotation", {
aliases: ["Flow"]
});
define("NumberTypeAnnotation", {
aliases: ["Flow", "FlowBaseAnnotation"]
});

View File

@ -0,0 +1,5 @@
var a: 123;
var a: 123.0;
var a: 0x7B;
var a: 0b1111011;
var a: 0o173;

View File

@ -0,0 +1,5 @@
var a: 123;
var a: 123.0;
var a: 0x7B;
var a: 123;
var a: 123;

View File

@ -505,6 +505,12 @@ pp.flowParsePrimaryType = function () {
this.next();
return this.finishNode(node, "StringLiteralTypeAnnotation");
case tt.num:
node.value = this.value;
node.raw = this.input.slice(this.start, this.end);
this.next();
return this.finishNode(node, "NumberLiteralTypeAnnotation");
default:
if (this.type.keyword === "typeof") {
return this.flowParseTypeofType();

View File

@ -10094,6 +10094,208 @@ var fbTestFixture = {
}
},
},
'Number Literal Types': {
'var a: 123': {
type: 'VariableDeclaration',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'Identifier',
name: 'a',
typeAnnotation: {
type: 'TypeAnnotation',
typeAnnotation: {
type: 'NumberLiteralTypeAnnotation',
value: 123,
raw: '123',
range: [7, 10],
loc: {
start: { line: 1, column: 7 },
end: { line: 1, column: 10 }
}
},
range: [5, 10],
loc: {
start: { line: 1, column: 5 },
end: { line: 1, column: 10 }
}
}
},
init: null,
range: [4, 10],
loc: {
start: { line: 1, column: 4 },
end: { line: 1, column: 10 }
}
}],
kind: 'var',
range: [0, 10],
loc: {
start: { line: 1, column: 0 },
end: { line: 1, column: 10 }
}
},
'var a: 123.0': {
type: 'VariableDeclaration',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'Identifier',
name: 'a',
typeAnnotation: {
type: 'TypeAnnotation',
typeAnnotation: {
type: 'NumberLiteralTypeAnnotation',
value: 123,
raw: '123.0',
range: [7, 12],
loc: {
start: { line: 1, column: 7 },
end: { line: 1, column: 12 }
}
},
range: [5, 12],
loc: {
start: { line: 1, column: 5 },
end: { line: 1, column: 12 }
}
}
},
init: null,
range: [4, 12],
loc: {
start: { line: 1, column: 4 },
end: { line: 1, column: 12 }
}
}],
kind: 'var',
range: [0, 12],
loc: {
start: { line: 1, column: 0 },
end: { line: 1, column: 12 }
}
},
'var a: 0x7B': {
type: 'VariableDeclaration',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'Identifier',
name: 'a',
typeAnnotation: {
type: 'TypeAnnotation',
typeAnnotation: {
type: 'NumberLiteralTypeAnnotation',
value: 123,
raw: '0x7B',
range: [7, 11],
loc: {
start: { line: 1, column: 7 },
end: { line: 1, column: 11 }
}
},
range: [5, 11],
loc: {
start: { line: 1, column: 5 },
end: { line: 1, column: 11 }
}
}
},
init: null,
range: [4, 11],
loc: {
start: { line: 1, column: 4 },
end: { line: 1, column: 11 }
}
}],
kind: 'var',
range: [0, 11],
loc: {
start: { line: 1, column: 0 },
end: { line: 1, column: 11 }
}
},
'var a: 0b1111011': {
type: 'VariableDeclaration',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'Identifier',
name: 'a',
typeAnnotation: {
type: 'TypeAnnotation',
typeAnnotation: {
type: 'NumberLiteralTypeAnnotation',
value: 123,
raw: '0b1111011',
range: [7, 16],
loc: {
start: { line: 1, column: 7 },
end: { line: 1, column: 16 }
}
},
range: [5, 16],
loc: {
start: { line: 1, column: 5 },
end: { line: 1, column: 16 }
}
}
},
init: null,
range: [4, 16],
loc: {
start: { line: 1, column: 4 },
end: { line: 1, column: 16 }
}
}],
kind: 'var',
range: [0, 16],
loc: {
start: { line: 1, column: 0 },
end: { line: 1, column: 16 }
}
},
'var a: 0o173': {
type: 'VariableDeclaration',
declarations: [{
type: 'VariableDeclarator',
id: {
type: 'Identifier',
name: 'a',
typeAnnotation: {
type: 'TypeAnnotation',
typeAnnotation: {
type: 'NumberLiteralTypeAnnotation',
value: 123,
raw: '0o173',
range: [7, 12],
loc: {
start: { line: 1, column: 7 },
end: { line: 1, column: 12 }
}
},
range: [5, 12],
loc: {
start: { line: 1, column: 5 },
end: { line: 1, column: 12 }
}
}
},
init: null,
range: [4, 12],
loc: {
start: { line: 1, column: 4 },
end: { line: 1, column: 12 }
}
}],
kind: 'var',
range: [0, 12],
loc: {
start: { line: 1, column: 0 },
end: { line: 1, column: 12 }
}
}
},
'Qualified Generic Type': {
'var a : A.B': {
type: 'VariableDeclaration',