UNPKG

@abaplint/core

Version:
107 lines 5.06 kB
"use strict"; 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