UNPKG

@abaplint/core

Version:
66 lines 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InlayHints = void 0; const LServer = require("vscode-languageserver-types"); const _lsp_utils_1 = require("./_lsp_utils"); const syntax_1 = require("../abap/5_syntax/syntax"); const _abap_object_1 = require("../objects/_abap_object"); const _reference_1 = require("../abap/5_syntax/_reference"); const _typed_identifier_1 = require("../abap/types/_typed_identifier"); const types_1 = require("../abap/types"); class InlayHints { constructor(reg) { this.reg = reg; } list(textDocument, settings = { inferredTypes: true }) { const file = _lsp_utils_1.LSPUtils.getABAPFile(this.reg, textDocument.uri); if (file === undefined) { return []; } const obj = this.reg.findObjectForFile(file); if (obj === undefined || !(obj instanceof _abap_object_1.ABAPObject)) { return []; } const top = new syntax_1.SyntaxLogic(this.reg, obj).run().spaghetti.getTop(); const ret = []; if (settings.inferredTypes === true) { const implicit = this.findImplicitReferences(top); for (const i of implicit) { let label = undefined; if (i.resolved instanceof _typed_identifier_1.TypedIdentifier) { label = "TYPE " + i.resolved.getType().toABAP(); } else if (i.resolved instanceof types_1.ClassDefinition) { label = "TYPE REF TO " + i.resolved.getName(); } if (label === undefined) { continue; } ret.push({ label: label, tooltip: "Inferred type", kind: LServer.InlayHintKind.Type, paddingLeft: true, paddingRight: true, position: _lsp_utils_1.LSPUtils.positionToLS(i.position.getEnd()), }); } } return ret; } findImplicitReferences(node) { const ret = []; for (const r of node.getData().references) { if (r.referenceType === _reference_1.ReferenceType.InferredType || r.referenceType === _reference_1.ReferenceType.DataWriteReference) { ret.push(r); } } for (const c of node.getChildren()) { ret.push(...this.findImplicitReferences(c)); } return ret; } } exports.InlayHints = InlayHints; //# sourceMappingURL=inlay_hints.js.map