UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

140 lines (116 loc) 4.08 kB
Object.defineProperty(exports, '__esModule', { value: true }); /* * 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. */ function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { var callNext = step.bind(null, 'next'); var callThrow = step.bind(null, 'throw'); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(callNext, callThrow); } } callNext(); }); }; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _getHackService2; function _getHackService() { return _getHackService2 = require('./getHackService'); } var _commonsNodeNuclideUri2; function _commonsNodeNuclideUri() { return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri')); } var _reactForAtom2; function _reactForAtom() { return _reactForAtom2 = require('react-for-atom'); } var ICONS = { 'interface': 'icon-puzzle', 'function': 'icon-zap', 'method': 'icon-zap', 'typedef': 'icon-tag', 'class': 'icon-code', 'abstract class': 'icon-code', 'constant': 'icon-quote', 'trait': 'icon-checklist', 'enum': 'icon-file-binary', 'default': 'no-icon', 'unknown': 'icon-squirrel' }; function bestIconForItem(item) { if (!item.additionalInfo) { return ICONS.default; } // Look for exact match. if (ICONS[item.additionalInfo]) { return ICONS[item.additionalInfo]; } // Look for presence match, e.g. in 'static method in FooBarClass'. for (var keyword in ICONS) { if (item.additionalInfo.indexOf(keyword) !== -1) { return ICONS[keyword]; } } return ICONS.unknown; } var HackSymbolProvider = { getName: function getName() { return 'HackSymbolProvider'; }, getProviderType: function getProviderType() { return 'DIRECTORY'; }, isRenderable: function isRenderable() { return true; }, getAction: function getAction() { return 'nuclide-hack-symbol-provider:toggle-provider'; }, getPromptText: function getPromptText() { return 'Search Hack symbols. Available prefixes: @function %constant #class'; }, getTabTitle: function getTabTitle() { return 'Hack Symbols'; }, isEligibleForDirectory: _asyncToGenerator(function* (directory) { var service = yield (0, (_getHackService2 || _getHackService()).getHackService)(directory); return service != null; }), executeQuery: _asyncToGenerator(function* (query, directory) { if (query.length === 0 || directory == null) { return []; } var service = yield (0, (_getHackService2 || _getHackService()).getHackService)(directory); if (service == null) { return []; } var directoryPath = directory.getPath(); var results = yield service.queryHack(directoryPath, query); return results; }), getComponentForItem: function getComponentForItem(uncastedItem) { var item = uncastedItem; var filePath = item.path; var filename = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.basename(filePath); var name = item.name || ''; var icon = bestIconForItem(item); var symbolClasses = 'file icon ' + icon; return (_reactForAtom2 || _reactForAtom()).React.createElement( 'div', { title: item.additionalInfo || '' }, (_reactForAtom2 || _reactForAtom()).React.createElement( 'span', { className: symbolClasses }, (_reactForAtom2 || _reactForAtom()).React.createElement( 'code', null, name ) ), (_reactForAtom2 || _reactForAtom()).React.createElement( 'span', { className: 'omnisearch-symbol-result-filename' }, filename ) ); } }; exports.HackSymbolProvider = HackSymbolProvider;