mirror of
https://github.com/linuxserver/core.git
synced 2026-02-20 05:07:19 +08:00
64 lines
2.2 KiB
JavaScript
64 lines
2.2 KiB
JavaScript
define(function(require, exports, module) {
|
|
|
|
var index = require("./semantic_index");
|
|
var fileIndexer = require("./file_indexer");
|
|
var workerUtil = require("plugins/c9.ide.language/worker_util");
|
|
var handler;
|
|
var lastSummary;
|
|
|
|
module.exports.init = function(_handler) {
|
|
handler = _handler;
|
|
};
|
|
|
|
module.exports.getRefactorings = function(doc, fullAst, pos, options, callback) {
|
|
findEntries(doc, fullAst, pos, function(pos, identifier, hasEntries) {
|
|
callback({ refactorings: hasEntries ? ["renameVariable"] : []});
|
|
});
|
|
};
|
|
|
|
module.exports.getRenamePositions = function(doc, fullAst, pos, options, callback) {
|
|
findEntries(doc, fullAst, pos, function(pos, identifier, hasEntries) {
|
|
if (!hasEntries)
|
|
return callback();
|
|
workerUtil.getTokens(doc, [identifier, identifier + "()"], function(err, results) {
|
|
if (err)
|
|
callback();
|
|
callback({
|
|
length: identifier.length,
|
|
pos: pos,
|
|
others: results,
|
|
isGeneric: true
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
module.exports.commitRename = function(doc, oldId, newName, isGeneric, callback) {
|
|
if (!isGeneric)
|
|
return callback();
|
|
if (!lastSummary)
|
|
return callback();
|
|
var matchingDef = !!Object.keys(index.findEntries(lastSummary, newName)).length;
|
|
callback(matchingDef && "Name '" + newName + "' is already used.");
|
|
};
|
|
|
|
function findEntries(doc, fullAst, pos, callback) {
|
|
if (handler.language === "javascript") // optimization
|
|
return callback();
|
|
|
|
var docValue = doc.getValue();
|
|
var line = doc.getLine(pos.row);
|
|
var identifier = workerUtil.getIdentifier(line, pos.column);
|
|
var prefix = workerUtil.getPrecedingIdentifier(line, pos.column);
|
|
var realPos = { row: pos.row, column: pos.column - prefix.length };
|
|
|
|
fileIndexer.analyzeCurrent(handler.path, docValue, fullAst, { service: "refactor" }, function(err, result) {
|
|
if (err)
|
|
console.log("[jsonalyzer] Warning: could not analyze " + handler.path + ": " + err);
|
|
lastSummary = result;
|
|
callback(realPos, identifier, index.hasEntries(result, identifier));
|
|
});
|
|
|
|
}
|
|
|
|
}); |