Skip to content

Commit

Permalink
feat: add no-primitive-constructor-types rule
Browse files Browse the repository at this point in the history
  • Loading branch information
Aaron Harvey committed Nov 18, 2016
1 parent 8f355c2 commit 0d37f03
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/index.js
Expand Up @@ -15,6 +15,7 @@ import validSyntax from './rules/validSyntax';
import booleanStyle from './rules/booleanStyle';
import delimiterDangle from './rules/delimiterDangle';
import noDupeKeys from './rules/noDupeKeys';
import noPrimitiveConstructorTypes from './rules/noPrimitiveConstructorTypes';
import sortKeys from './rules/sortKeys';
import objectTypeDelimiter from './rules/objectTypeDelimiter';
import recommended from './configs/recommended.json';
Expand All @@ -29,6 +30,7 @@ export default {
'delimiter-dangle': delimiterDangle,
'generic-spacing': genericSpacing,
'no-dupe-keys': noDupeKeys,
'no-primitive-constructor-types': noPrimitiveConstructorTypes,
'no-weak-types': noWeakTypes,
'object-type-delimiter': objectTypeDelimiter,
'require-parameter-type': requireParameterType,
Expand Down
24 changes: 24 additions & 0 deletions src/rules/noPrimitiveConstructorTypes.js
@@ -0,0 +1,24 @@
import _ from 'lodash';

export default {
create: (context) => {
return {
GenericTypeAnnotation: (node) => {
const name = _.get(node, 'id.name');

if (RegExp(/(Boolean|Number|String)/).test(name)) {
context.report({
data: {
name
},
loc: node.loc,
message: 'Unexpected use of {{name}} constructor type.',
node
});
}
}
};
},
meta: {},
schema: {}
};
69 changes: 69 additions & 0 deletions tests/rules/assertions/noPrimitiveConstructorTypes.js
@@ -0,0 +1,69 @@
export default {
invalid: [
{
code: 'type x = Number',
errors: [{message: 'Unexpected use of Number constructor type.'}]
},
{
code: 'type x = String',
errors: [{message: 'Unexpected use of String constructor type.'}]
},
{
code: 'type x = Boolean',
errors: [{message: 'Unexpected use of Boolean constructor type.'}]
},
{
code: 'type x = { a: Number }',
errors: [{message: 'Unexpected use of Number constructor type.'}]
},
{
code: 'type x = { a: String }',
errors: [{message: 'Unexpected use of String constructor type.'}]
},
{
code: 'type x = { a: Boolean }',
errors: [{message: 'Unexpected use of Boolean constructor type.'}]
},
{
code: '(x: Number) => {}',
errors: [{message: 'Unexpected use of Number constructor type.'}]
},
{
code: '(x: String) => {}',
errors: [{message: 'Unexpected use of String constructor type.'}]
},
{
code: '(x: Boolean) => {}',
errors: [{message: 'Unexpected use of Boolean constructor type.'}]
}
],
valid: [
{
code: 'type x = number'
},
{
code: 'type x = string'
},
{
code: 'type x = boolean'
},
{
code: 'type x = { a: number }'
},
{
code: 'type x = { a: string }'
},
{
code: 'type x = { a: boolean }'
},
{
code: '(x: number) => {}'
},
{
code: '(x: string) => {}'
},
{
code: '(x: boolean) => {}'
}
]
};
1 change: 1 addition & 0 deletions tests/rules/index.js
Expand Up @@ -13,6 +13,7 @@ const reportingRules = [
'generic-spacing',
'no-dupe-keys',
'no-weak-types',
'no-primitive-constructor-types',
'object-type-delimiter',
'require-parameter-type',
'require-return-type',
Expand Down

0 comments on commit 0d37f03

Please sign in to comment.