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.
187 lines (143 loc) • 6.43 kB
JavaScript
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.
*/
var getCompletions = _asyncToGenerator(function* (src, contents, line, column) {
var service = yield serverManager.getJediService(src);
return service.get_completions(src, contents, line, column);
});
exports.getCompletions = getCompletions;
var getDefinitions = _asyncToGenerator(function* (src, contents, line, column) {
var service = yield serverManager.getJediService(src);
return service.get_definitions(src, contents, line, column);
});
exports.getDefinitions = getDefinitions;
var getReferences = _asyncToGenerator(function* (src, contents, line, column) {
var service = yield serverManager.getJediService(src);
return service.get_references(src, contents, line, column);
});
exports.getReferences = getReferences;
var getOutline = _asyncToGenerator(function* (src, contents) {
var service = yield serverManager.getJediService(src);
return service.get_outline(src, contents);
}
// Set to false if flake8 isn't found, so we don't repeatedly fail.
);
exports.getOutline = getOutline;
var getDiagnostics = _asyncToGenerator(function* (src, contents) {
if (!shouldRunFlake8) {
return [];
}
var dirName = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.dirname(src);
var configDir = yield (_commonsNodeFsPromise2 || _commonsNodeFsPromise()).default.findNearestFile('.flake8', dirName);
var configPath = configDir ? (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.join(configDir, '.flake8') : null;
var result = undefined;
try {
// $FlowFB
result = yield require('./fb/run-flake8')(src, contents, configPath);
} catch (e) {
// Ignore.
}
if (!result) {
var command = global.atom && atom.config.get('nuclide.nuclide-python.pathToFlake8') || 'flake8';
var args = [];
if (configPath) {
args.push('--config');
args.push(configPath);
}
// Read contents from stdin.
args.push('-');
result = yield (0, (_commonsNodeProcess2 || _commonsNodeProcess()).asyncExecute)(command, args, { cwd: dirName, stdin: contents });
}
// 1 indicates unclean lint result (i.e. has errors/warnings).
// A non-successful exit code can result in some cases that we want to ignore,
// for example when an incorrect python version is specified for a source file.
if (result.exitCode && result.exitCode > 1) {
return [];
} else if (result.exitCode == null) {
// Don't throw if flake8 is not found on the user's system.
if (result.errorCode === 'ENOENT') {
// Don't retry again.
shouldRunFlake8 = false;
return [];
}
throw new Error('flake8 failed with error: ' + (0, (_commonsNodeString2 || _commonsNodeString()).maybeToString)(result.errorMessage) + ', ' + ('stderr: ' + result.stderr + ', stdout: ' + result.stdout));
}
return (0, (_flake82 || _flake8()).parseFlake8Output)(src, result.stdout);
});
exports.getDiagnostics = getDiagnostics;
var formatCode = _asyncToGenerator(function* (src, contents, start, end) {
var libCommand = getFormatterPath();
var dirName = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.dirname((_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.getPath(src));
var result = yield (0, (_commonsNodeProcess2 || _commonsNodeProcess()).asyncExecute)(libCommand, ['--line', start + '-' + end], { cwd: dirName, stdin: contents });
/*
* At the moment, yapf outputs 3 possible exit codes:
* 0 - success, no content change.
* 2 - success, contents changed.
* 1 - internal failure, most likely due to syntax errors.
*
* See: https://github.com/google/yapf/issues/228#issuecomment-198682079
*/
if (result.exitCode === 1) {
throw new Error('"' + libCommand + '" failed, likely due to syntax errors.');
} else if (result.exitCode == null) {
throw new Error('"' + libCommand + '" failed with error: ' + (0, (_commonsNodeString2 || _commonsNodeString()).maybeToString)(result.errorMessage) + ', ' + ('stderr: ' + result.stderr + ', stdout: ' + result.stdout + '.'));
} else if (contents !== '' && result.stdout === '') {
// Throw error if the yapf output is empty, which is almost never desirable.
throw new Error('Empty output received from yapf.');
}
return result.stdout;
});
exports.formatCode = formatCode;
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 _commonsNodeProcess2;
function _commonsNodeProcess() {
return _commonsNodeProcess2 = require('../../commons-node/process');
}
var _commonsNodeString2;
function _commonsNodeString() {
return _commonsNodeString2 = require('../../commons-node/string');
}
var _commonsNodeFsPromise2;
function _commonsNodeFsPromise() {
return _commonsNodeFsPromise2 = _interopRequireDefault(require('../../commons-node/fsPromise'));
}
var _commonsNodeNuclideUri2;
function _commonsNodeNuclideUri() {
return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri'));
}
var _JediServerManager2;
function _JediServerManager() {
return _JediServerManager2 = _interopRequireDefault(require('./JediServerManager'));
}
var _flake82;
function _flake8() {
return _flake82 = require('./flake8');
}
var formatterPath = undefined;
function getFormatterPath() {
if (formatterPath) {
return formatterPath;
}
formatterPath = 'yapf';
try {
// $FlowFB
var overridePath = require('./fb/find-formatter-path')();
if (overridePath) {
formatterPath = overridePath;
}
} catch (e) {
// Ignore.
}
return formatterPath;
}
var serverManager = new (_JediServerManager2 || _JediServerManager()).default();
var shouldRunFlake8 = true;
// Class params, i.e. superclasses.