@abaplint/core
Version:
abaplint - Core API
107 lines • 5.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Rename = exports.RenameType = void 0;
const LServer = require("vscode-languageserver-types");
const _lsp_utils_1 = require("./_lsp_utils");
const _abap_object_1 = require("../objects/_abap_object");
const _lookup_1 = require("./_lookup");
const _typed_identifier_1 = require("../abap/types/_typed_identifier");
const types_1 = require("../abap/types");
const references_1 = require("./references");
const renamer_1 = require("../objects/rename/renamer");
const definition_1 = require("./definition");
var RenameType;
(function (RenameType) {
RenameType[RenameType["GlobalClass"] = 1] = "GlobalClass";
RenameType[RenameType["Variable"] = 2] = "Variable";
RenameType[RenameType["GlobalInterface"] = 3] = "GlobalInterface";
RenameType[RenameType["Method"] = 4] = "Method";
})(RenameType || (exports.RenameType = RenameType = {}));
class Rename {
constructor(reg) {
this.reg = reg;
}
prepareRename(params) {
const file = _lsp_utils_1.LSPUtils.getABAPFile(this.reg, params.textDocument.uri);
if (file === undefined) {
return undefined;
}
const obj = this.reg.getObject(file.getObjectType(), file.getObjectName());
if (!(obj instanceof _abap_object_1.ABAPObject)) {
return undefined;
}
const cursor = _lsp_utils_1.LSPUtils.findCursor(this.reg, params);
if (cursor === undefined) {
return undefined;
}
const range = _lsp_utils_1.LSPUtils.tokenToRange(cursor.token);
let placeholder = cursor.token.getStr();
if (placeholder.startsWith("!")) {
placeholder = placeholder.substring(1);
range.start.character += 1;
}
const lookup = _lookup_1.LSPLookup.lookup(cursor, this.reg, obj);
if ((lookup === null || lookup === void 0 ? void 0 : lookup.definitionId) instanceof _typed_identifier_1.TypedIdentifier) {
return { range, placeholder, type: RenameType.Variable, file };
}
else if ((lookup === null || lookup === void 0 ? void 0 : lookup.definitionId) instanceof types_1.ClassDefinition) {
return { range, placeholder, type: RenameType.GlobalClass, file };
}
else if ((lookup === null || lookup === void 0 ? void 0 : lookup.definitionId) instanceof types_1.InterfaceDefinition) {
return { range, placeholder, type: RenameType.GlobalInterface, file };
}
else if ((lookup === null || lookup === void 0 ? void 0 : lookup.definitionId) instanceof types_1.MethodDefinition) {
return { range, placeholder, type: RenameType.Method, file };
}
return undefined;
}
rename(params) {
const prepare = this.prepareRename(params);
if (prepare === undefined) {
return undefined;
}
switch (prepare.type) {
case RenameType.GlobalClass:
return new renamer_1.Renamer(this.reg).buildEdits("CLAS", prepare.placeholder, params.newName);
case RenameType.GlobalInterface:
return new renamer_1.Renamer(this.reg).buildEdits("INTF", prepare.placeholder, params.newName);
case RenameType.Variable:
return this.renameVariable(params);
case RenameType.Method:
return this.renameMethod(params);
default:
return undefined;
}
}
////
renameVariable(params) {
var _a;
const workspace = { documentChanges: [] };
const refs = new references_1.References(this.reg).references(params);
for (const r of refs) {
const doc = { uri: r.uri, version: 1 };
const edit = LServer.TextDocumentEdit.create(doc, [LServer.TextEdit.replace(r.range, params.newName)]);
(_a = workspace.documentChanges) === null || _a === void 0 ? void 0 : _a.push(edit);
}
return workspace;
}
renameMethod(params) {
var _a, _b;
const workspace = { documentChanges: [] };
const refs = new references_1.References(this.reg).references(params);
for (const r of refs) {
const doc = { uri: r.uri, version: 1 };
const edit = LServer.TextDocumentEdit.create(doc, [LServer.TextEdit.replace(r.range, params.newName)]);
(_a = workspace.documentChanges) === null || _a === void 0 ? void 0 : _a.push(edit);
}
const def = new definition_1.Definition(this.reg).find(params.textDocument, params.position);
if (def) {
const doc = { uri: params.textDocument.uri, version: 1 };
const edit = LServer.TextDocumentEdit.create(doc, [LServer.TextEdit.replace(def === null || def === void 0 ? void 0 : def.range, params.newName)]);
(_b = workspace.documentChanges) === null || _b === void 0 ? void 0 : _b.push(edit);
}
return workspace;
}
}
exports.Rename = Rename;
//# sourceMappingURL=rename.js.map