blob: 4016469ebbd77158031817c64b38ea88f580ccfe [file] [log] [blame]
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var schema = [{
enum: ['declaration', 'identifier'],
type: 'string'
}, {
additionalProperties: false,
properties: {
ignoreTypeDefault: {
type: 'boolean'
}
},
type: 'object'
}];
var create = function create(context) {
if (context.options[0] === 'declaration') {
return {
ImportDeclaration(node) {
if (node.importKind !== 'type') {
node.specifiers.forEach(function (specifier) {
if (specifier.importKind === 'type') {
context.report({
message: 'Unexpected type import',
node
});
}
});
}
}
};
} else {
// Default to 'identifier'
var ignoreTypeDefault = context.options[1] && context.options[1].ignoreTypeDefault;
var isInsideDeclareModule = false;
return {
DeclareModule() {
isInsideDeclareModule = true;
},
'DeclareModule:exit'() {
isInsideDeclareModule = false;
},
ImportDeclaration(node) {
if (node.importKind !== 'type') {
return;
}
// type specifiers are not allowed inside module declarations:
// https://github.com/facebook/flow/issues/7609
if (isInsideDeclareModule) {
return;
}
if (ignoreTypeDefault && node.specifiers[0] && node.specifiers[0].type === 'ImportDefaultSpecifier') {
return;
}
context.report({
fix(fixer) {
var imports = node.specifiers.map(function (specifier) {
if (specifier.type === 'ImportDefaultSpecifier') {
return 'type default as ' + specifier.local.name;
} else if (specifier.imported.name === specifier.local.name) {
return 'type ' + specifier.local.name;
} else {
return 'type ' + specifier.imported.name + ' as ' + specifier.local.name;
}
});
var source = node.source.value;
return fixer.replaceText(node, 'import {' + imports.join(', ') + '} from \'' + source + '\';');
},
message: 'Unexpected "import type"',
node
});
}
};
}
};
exports.default = {
create,
schema
};
module.exports = exports.default;