我正在尝试将rubocop linter与AWS Cloud9代码编辑器集成在一起,以用于Rails项目上的ruby。这是在控制台中运行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
)中的命令,然后使用正确的命令再次安装该软件包,使该插件在一个项目中正常工作。我想那不是要走的路。这就是为什么我认为解析代码是可以的。
我尝试将installer命令放在单独的.sh
文件中,并将其引用为预安装程序,但这没有帮助。
谢谢!