Создание плагина / пакета cloud9 - добавление зависимостей - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь написать интеграцию 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 и вместо этого сослаться на нее как на предустановщик,

Заранее спасибо!

...