UNPKG

nuclide-format-js

Version:

A collection of codemods to help auto format javascript

94 lines (74 loc) 8.32 kB
'use strict'; var _getDeclaredIdentifiers = require('../utils/getDeclaredIdentifiers'); var _getDeclaredIdentifiers2 = _interopRequireDefault(_getDeclaredIdentifiers); var _getDeclaredTypes = require('../utils/getDeclaredTypes'); var _getDeclaredTypes2 = _interopRequireDefault(_getDeclaredTypes); var _getNonDeclarationTypes = require('../utils/getNonDeclarationTypes'); var _getNonDeclarationTypes2 = _interopRequireDefault(_getNonDeclarationTypes); var _isGlobal = require('../utils/isGlobal'); var _isGlobal2 = _interopRequireDefault(_isGlobal); var _isTypeImport = require('../utils/isTypeImport'); var _isTypeImport2 = _interopRequireDefault(_isTypeImport); var _jscodeshift = require('jscodeshift'); var _jscodeshift2 = _interopRequireDefault(_jscodeshift); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. * * */ var match = _jscodeshift2.default.match; // These are the things we should try to remove. var CONFIG = [ // import type Foo from 'Foo'; { nodeType: _jscodeshift2.default.ImportDeclaration, filters: [_isGlobal2.default, _isTypeImport2.default], getNames: function getNames(node) { return node.specifiers.map(function (specifier) { return specifier.local.name; }); } }, { nodeType: _jscodeshift2.default.ImportSpecifier, filters: [function (path) { return (0, _isGlobal2.default)(path.parent) && (0, _isTypeImport2.default)(path.parent); }], getNames: function getNames(node) { return [node.local.name]; } }]; function removeUnusedTypes(root, options) { var declared = (0, _getDeclaredIdentifiers2.default)(root, options); var used = (0, _getNonDeclarationTypes2.default)(root); var nonTypeImport = (0, _getDeclaredTypes2.default)(root, options, [function (path) { return !isTypeImportDeclaration(path.node); }]); // Remove things based on the config. CONFIG.forEach(function (config) { root.find(config.nodeType).filter(function (path) { return config.filters.every(function (filter) { return filter(path); }); }).filter(function (path) { return config.getNames(path.node).every(function (name) { return !used.has(name) || declared.has(name) || nonTypeImport.has(name); }); }).map(function (x) { console.log(x); return x; }).remove(); }); } function isTypeImportDeclaration(node) { return match(node, { type: 'ImportDeclaration', importKind: 'type' }); } module.exports = removeUnusedTypes; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vcmVxdWlyZXMvcmVtb3ZlVW51c2VkVHlwZXMuanMiXSwibmFtZXMiOlsibWF0Y2giLCJDT05GSUciLCJub2RlVHlwZSIsIkltcG9ydERlY2xhcmF0aW9uIiwiZmlsdGVycyIsImdldE5hbWVzIiwibm9kZSIsInNwZWNpZmllcnMiLCJtYXAiLCJzcGVjaWZpZXIiLCJsb2NhbCIsIm5hbWUiLCJJbXBvcnRTcGVjaWZpZXIiLCJwYXRoIiwicGFyZW50IiwicmVtb3ZlVW51c2VkVHlwZXMiLCJyb290Iiwib3B0aW9ucyIsImRlY2xhcmVkIiwidXNlZCIsIm5vblR5cGVJbXBvcnQiLCJpc1R5cGVJbXBvcnREZWNsYXJhdGlvbiIsImZvckVhY2giLCJmaW5kIiwiY29uZmlnIiwiZmlsdGVyIiwiZXZlcnkiLCJoYXMiLCJjb25zb2xlIiwibG9nIiwieCIsInJlbW92ZSIsInR5cGUiLCJpbXBvcnRLaW5kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFhQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQWxCQTs7Ozs7Ozs7OztJQW9CT0EsSyx5QkFBQUEsSzs7O0FBUVA7QUFDQSxJQUFNQyxTQUE2QjtBQUNqQztBQUNBO0FBQ0VDLFlBQVUsc0JBQUtDLGlCQURqQjtBQUVFQyxXQUFTLDRDQUZYO0FBR0VDLFlBQVU7QUFBQSxXQUFRQyxLQUFLQyxVQUFMLENBQWdCQyxHQUFoQixDQUFvQjtBQUFBLGFBQWFDLFVBQVVDLEtBQVYsQ0FBZ0JDLElBQTdCO0FBQUEsS0FBcEIsQ0FBUjtBQUFBO0FBSFosQ0FGaUMsRUFPakM7QUFDRVQsWUFBVSxzQkFBS1UsZUFEakI7QUFFRVIsV0FBUyxDQUFDO0FBQUEsV0FBUSx3QkFBU1MsS0FBS0MsTUFBZCxLQUF5Qiw0QkFBYUQsS0FBS0MsTUFBbEIsQ0FBakM7QUFBQSxHQUFELENBRlg7QUFHRVQsWUFBVTtBQUFBLFdBQVEsQ0FBQ0MsS0FBS0ksS0FBTCxDQUFXQyxJQUFaLENBQVI7QUFBQTtBQUhaLENBUGlDLENBQW5DOztBQWNBLFNBQVNJLGlCQUFULENBQTJCQyxJQUEzQixFQUE2Q0MsT0FBN0MsRUFBMkU7QUFDekUsTUFBTUMsV0FBVyxzQ0FBdUJGLElBQXZCLEVBQTZCQyxPQUE3QixDQUFqQjtBQUNBLE1BQU1FLE9BQU8sc0NBQXVCSCxJQUF2QixDQUFiO0FBQ0EsTUFBTUksZ0JBQWdCLGdDQUNwQkosSUFEb0IsRUFFcEJDLE9BRm9CLEVBR3BCLENBQUM7QUFBQSxXQUFRLENBQUNJLHdCQUF3QlIsS0FBS1AsSUFBN0IsQ0FBVDtBQUFBLEdBQUQsQ0FIb0IsQ0FBdEI7QUFLQTtBQUNBTCxTQUFPcUIsT0FBUCxDQUFlLGtCQUFVO0FBQ3ZCTixTQUNHTyxJQURILENBQ1FDLE9BQU90QixRQURmLEVBRUd1QixNQUZILENBRVU7QUFBQSxhQUFRRCxPQUFPcEIsT0FBUCxDQUFlc0IsS0FBZixDQUFxQjtBQUFBLGVBQVVELE9BQU9aLElBQVAsQ0FBVjtBQUFBLE9BQXJCLENBQVI7QUFBQSxLQUZWLEVBR0dZLE1BSEgsQ0FHVTtBQUFBLGFBQVFELE9BQU9uQixRQUFQLENBQWdCUSxLQUFLUCxJQUFyQixFQUEyQm9CLEtBQTNCLENBQ2Q7QUFBQSxlQUFRLENBQUNQLEtBQUtRLEdBQUwsQ0FBU2hCLElBQVQsQ0FBRCxJQUFtQk8sU0FBU1MsR0FBVCxDQUFhaEIsSUFBYixDQUFuQixJQUF5Q1MsY0FBY08sR0FBZCxDQUFrQmhCLElBQWxCLENBQWpEO0FBQUEsT0FEYyxDQUFSO0FBQUEsS0FIVixFQU1HSCxHQU5ILENBTU8sYUFBSztBQUNSb0IsY0FBUUMsR0FBUixDQUFZQyxDQUFaO0FBQ0EsYUFBT0EsQ0FBUDtBQUNELEtBVEgsRUFVR0MsTUFWSDtBQVdELEdBWkQ7QUFhRDs7QUFFRCxTQUFTVix1QkFBVCxDQUFpQ2YsSUFBakMsRUFBMEQ7QUFDeEQsU0FBT04sTUFBTU0sSUFBTixFQUFZO0FBQ2pCMEIsVUFBTSxtQkFEVztBQUVqQkMsZ0JBQVk7QUFGSyxHQUFaLENBQVA7QUFJRDs7QUFFREMsT0FBT0MsT0FBUCxHQUFpQnBCLGlCQUFqQiIsImZpbGUiOiJyZW1vdmVVbnVzZWRUeXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgbGljZW5zZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluXG4gKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKiBAZmxvd1xuICovXG5cbmltcG9ydCB0eXBlIHtDb2xsZWN0aW9uLCBOb2RlLCBOb2RlUGF0aH0gZnJvbSAnLi4vdHlwZXMvYXN0JztcbmltcG9ydCB0eXBlIHtTb3VyY2VPcHRpb25zfSBmcm9tICcuLi9vcHRpb25zL1NvdXJjZU9wdGlvbnMnO1xuXG5pbXBvcnQgZ2V0RGVjbGFyZWRJZGVudGlmaWVycyBmcm9tICcuLi91dGlscy9nZXREZWNsYXJlZElkZW50aWZpZXJzJztcbmltcG9ydCBnZXREZWNsYXJlZFR5cGVzIGZyb20gJy4uL3V0aWxzL2dldERlY2xhcmVkVHlwZXMnO1xuaW1wb3J0IGdldE5vbkRlY2xhcmF0aW9uVHlwZXMgZnJvbSAnLi4vdXRpbHMvZ2V0Tm9uRGVjbGFyYXRpb25UeXBlcyc7XG5pbXBvcnQgaXNHbG9iYWwgZnJvbSAnLi4vdXRpbHMvaXNHbG9iYWwnO1xuaW1wb3J0IGlzVHlwZUltcG9ydCBmcm9tICcuLi91dGlscy9pc1R5cGVJbXBvcnQnO1xuaW1wb3J0IGpzY3MgZnJvbSAnanNjb2Rlc2hpZnQnO1xuXG5jb25zdCB7bWF0Y2h9ID0ganNjcztcblxudHlwZSBDb25maWdFbnRyeSA9IHtcbiAgbm9kZVR5cGU6IHN0cmluZyxcbiAgZmlsdGVyczogQXJyYXk8KHBhdGg6IE5vZGVQYXRoKSA9PiBib29sZWFuPixcbiAgZ2V0TmFtZXM6IChub2RlOiBOb2RlKSA9PiBBcnJheTxzdHJpbmc+LFxufTtcblxuLy8gVGhlc2UgYXJlIHRoZSB0aGluZ3Mgd2Ugc2hvdWxkIHRyeSB0byByZW1vdmUuXG5jb25zdCBDT05GSUc6IEFycmF5PENvbmZpZ0VudHJ5PiA9IFtcbiAgLy8gaW1wb3J0IHR5cGUgRm9vIGZyb20gJ0Zvbyc7XG4gIHtcbiAgICBub2RlVHlwZToganNjcy5JbXBvcnREZWNsYXJhdGlvbixcbiAgICBmaWx0ZXJzOiBbaXNHbG9iYWwsIGlzVHlwZUltcG9ydF0sXG4gICAgZ2V0TmFtZXM6IG5vZGUgPT4gbm9kZS5zcGVjaWZpZXJzLm1hcChzcGVjaWZpZXIgPT4gc3BlY2lmaWVyLmxvY2FsLm5hbWUpLFxuICB9LFxuICB7XG4gICAgbm9kZVR5cGU6IGpzY3MuSW1wb3J0U3BlY2lmaWVyLFxuICAgIGZpbHRlcnM6IFtwYXRoID0+IGlzR2xvYmFsKHBhdGgucGFyZW50KSAmJiBpc1R5cGVJbXBvcnQocGF0aC5wYXJlbnQpXSxcbiAgICBnZXROYW1lczogbm9kZSA9PiBbbm9kZS5sb2NhbC5uYW1lXSxcbiAgfSxcbl07XG5cbmZ1bmN0aW9uIHJlbW92ZVVudXNlZFR5cGVzKHJvb3Q6IENvbGxlY3Rpb24sIG9wdGlvbnM6IFNvdXJjZU9wdGlvbnMpOiB2b2lkIHtcbiAgY29uc3QgZGVjbGFyZWQgPSBnZXREZWNsYXJlZElkZW50aWZpZXJzKHJvb3QsIG9wdGlvbnMpO1xuICBjb25zdCB1c2VkID0gZ2V0Tm9uRGVjbGFyYXRpb25UeXBlcyhyb290KTtcbiAgY29uc3Qgbm9uVHlwZUltcG9ydCA9IGdldERlY2xhcmVkVHlwZXMoXG4gICAgcm9vdCxcbiAgICBvcHRpb25zLFxuICAgIFtwYXRoID0+ICFpc1R5cGVJbXBvcnREZWNsYXJhdGlvbihwYXRoLm5vZGUpXSxcbiAgKTtcbiAgLy8gUmVtb3ZlIHRoaW5ncyBiYXNlZCBvbiB0aGUgY29uZmlnLlxuICBDT05GSUcuZm9yRWFjaChjb25maWcgPT4ge1xuICAgIHJvb3RcbiAgICAgIC5maW5kKGNvbmZpZy5ub2RlVHlwZSlcbiAgICAgIC5maWx0ZXIocGF0aCA9PiBjb25maWcuZmlsdGVycy5ldmVyeShmaWx0ZXIgPT4gZmlsdGVyKHBhdGgpKSlcbiAgICAgIC5maWx0ZXIocGF0aCA9PiBjb25maWcuZ2V0TmFtZXMocGF0aC5ub2RlKS5ldmVyeShcbiAgICAgICAgbmFtZSA9PiAhdXNlZC5oYXMobmFtZSkgfHwgZGVjbGFyZWQuaGFzKG5hbWUpIHx8IG5vblR5cGVJbXBvcnQuaGFzKG5hbWUpLFxuICAgICAgKSlcbiAgICAgIC5tYXAoeCA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHgpO1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pXG4gICAgICAucmVtb3ZlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1R5cGVJbXBvcnREZWNsYXJhdGlvbihub2RlOiBOb2RlUGF0aCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbWF0Y2gobm9kZSwge1xuICAgIHR5cGU6ICdJbXBvcnREZWNsYXJhdGlvbicsXG4gICAgaW1wb3J0S2luZDogJ3R5cGUnLFxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW1vdmVVbnVzZWRUeXBlcztcbiJdfQ==