Я пытаюсь написать интеграцию rubocop linter с редактором кода AWS Cloud9 для ruby на проектах rails.Вот код, выполняющий rubocop в консоли и анализирующий выходные данные:
define(function(require, exports, module) {
var baseHandler = require("plugins/c9.ide.language/base_handler");
var handler = module.exports = Object.create(baseHandler);
var workerUtil = require("plugins/c9.ide.language/worker_util");
handler.handlesLanguage = function(language) {
return language === "ruby";
};
handler.analyze = function(docValue, ast, callback) {
var markers = [];
var rubocopArgs = ['--stdin', '$FILE', '--cache', 'true', '--format', 'json'];
workerUtil.execAnalysis(
"rubocop",
{
mode: "stdin",
args: rubocopArgs
},
function(err, stdout, stderr) {
debugger;
// err.code 1 can be ignored, rubocop returns it if it finds any offenses
if (err && err.code !== 1) return callback(err);
if (!stdout) return callback(null, []);
stdout.files[0].offenses.forEach(function(offence) {
var result = parseOffence(offence);
if (result)
markers.push(result);
});
callback(null, markers);
}
);
};
function parseOffence(offence) {
if (offence.corrected)
return;
var message = offence.message;
var location = offence.location;
var position = {
sl: location.start_line - 1,
el: location.last_line - 1,
sc: location.start_column - 1,
ec: location.last_column
};
return {
pos: position,
message: message,
type: offenceType(offence.severity)
};
}
function offenceType(severity) {
var type = severity == 'convention' ? 'info' : 'warning';
return type;
}});
Я также добавил установщик, который должен был устанавливать rubocop на определенную машину при необходимости:
define(function(require, exports, module) {
module.exports = function(session, options) {
session.install({
"bash": 'gem install rubocop'
});
session.start();
};
// version of the installer. Increase this when installer changes and must run again
module.exports.version = 1;
});
Я также ссылался на установочный файл в package.json.Проблема в том, что я не могу заставить работать установщик.Каждый раз, когда я пытаюсь запустить установку пакета в новом проекте cloud9, я получаю сообщение об ошибке Unsupported type installer
.Как мне написать свой установщик?Есть ли лучший способ установить зависимость?
Я работаю только в редакторе кода Cloud9, проект rails 5.
Мне удалось заставить плагин работать в одном проекте, изменив командуон должен был запустить rubocop к тому, который должен установить его в bash (gem install rubocop
), а затем снова установить пакет с правильной командой, но я думаю, что это не тот путь.Вот почему я считаю, что с кодом разбора все в порядке.
Я попытался поместить команду установщика в отдельный файл .sh
и вместо этого сослаться на нее как на предустановщик,
Заранее спасибо!