blob: 1f7ffc8e0f964ccf0aae61596745e93c09c3250d [file] [log] [blame]
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var schema = [];
// const x = [];
var isEmptyArrayLiteral = function isEmptyArrayLiteral(node) {
return _lodash2.default.get(node, 'init.type') === 'ArrayExpression' && _lodash2.default.get(node, 'init.elements.length') === 0;
};
// const x = new Array(); const y = Array();
var isEmptyArrayInstance = function isEmptyArrayInstance(node) {
if (_lodash2.default.get(node, 'init.type') === 'NewExpression' || _lodash2.default.get(node, 'init.type') === 'CallExpression') {
return _lodash2.default.get(node, 'init.callee.name') === 'Array' && _lodash2.default.get(node, 'init.arguments.length') === 0;
} else {
return false;
}
};
var isAnnotationOfEmptyArrayInit = function isAnnotationOfEmptyArrayInit(node) {
if (_lodash2.default.has(node, 'parent.parent.parent')) {
var parent = _lodash2.default.get(node, 'parent.parent.parent');
var isVariableDeclaration = _lodash2.default.get(parent, 'type') === 'VariableDeclarator';
return isVariableDeclaration && (isEmptyArrayLiteral(parent) || isEmptyArrayInstance(parent));
} else {
return false;
}
};
var create = function create(context) {
return {
ArrayTypeAnnotation(node) {
if (!isAnnotationOfEmptyArrayInit(node)) {
context.report({
fix(fixer) {
var rawElementType = context.getSourceCode().getText(node.elementType);
return fixer.replaceText(node, '$ReadOnlyArray<' + rawElementType + '>');
},
message: 'Use "$ReadOnlyArray" instead of array shorthand notation',
node
});
}
},
GenericTypeAnnotation(node) {
if (node.id.name === 'Array' && !isAnnotationOfEmptyArrayInit(node)) {
context.report({
fix(fixer) {
return fixer.replaceText(node.id, '$ReadOnlyArray');
},
message: 'Use "$ReadOnlyArray" instead of "Array"',
node
});
}
}
};
};
exports.default = {
create,
schema
};
module.exports = exports.default;